<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Friends of OpenJDK Today on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/</link><description>Recent content in Friends of OpenJDK Today on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 03 Aug 2026 15:46:30 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/index.xml" rel="self" type="application/rss+xml"/><item><title>The Codename One JavaScript Port Is Now Free and Open Source</title><link>https://foojayio.github.io/website/today/the-codename-one-javascript-port-is-now-free-and-open-source/</link><pubDate>Mon, 03 Aug 2026 15:46:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-codename-one-javascript-port-is-now-free-and-open-source/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/javascript-free-open-source.jpg" alt="The Codename One JavaScript Port Is Now Free and Open Source" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The Codename One JavaScript port is now open source and available on every plan, including Free. You can also build the JavaScript target locally without a Codename One account.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>JavaFX Links of July 2026</title><link>https://foojayio.github.io/website/today/javafx-links-of-july-2026/</link><pubDate>Fri, 31 Jul 2026 16:18:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-july-2026/</guid><description>&lt;p&gt;Here are the JavaFX LinksOfTheMonth of July 2026. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;From the OpenJFX mailing list: &lt;a href="https://mail-archive.com/openjfx-dev@openjdk.org/msg27455.html" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Marius Hanl&lt;/strong&gt; was appointed as a new OpenJFX Reviewer&lt;/a&gt;
, as announced by &lt;strong&gt;Michael Strauß&lt;/strong&gt; on July 4, 2026. Marius has been an active contributor to the OpenJFX project, most recently submitting the &lt;a href="https://github.com/openjdk/jfx/pull/2191" target="_blank" rel="noopener noreferrer"&gt;Stylesheet/StyleClass lazy initialization PR&lt;/a&gt;
 and leading tests improvements.&lt;/li&gt;
&lt;li&gt;From the OpenJFX mailing list: &lt;strong&gt;Kevin Rushforth&lt;/strong&gt; &lt;a href="https://mail-archive.com/openjfx-dev@openjdk.org/msg27475.html" target="_blank" rel="noopener noreferrer"&gt;opened the review for the JavaFX 26.0.2 release notes&lt;/a&gt;
 for the upcoming update release (planned July 21, 2026).&lt;/li&gt;
&lt;li&gt;From the OpenJFX mailing list: &lt;a href="https://mail.openjdk.org/archives/list/openjfx-dev@openjdk.org/thread/AOVTJA6A2RICNI26PIN4SL65IB3EYOYR/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Kevin Rushforth&lt;/strong&gt; announced that JavaFX 27 is now in Rampdown Phase One (RDP1)&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;We have forked a new jfx27 branch for stabilizing the JavaFX 27 release. The master branch of the jfx repo is now open for jfx28, and the jfx27 branch is open for integrating fixes that meet the RDP1 criteria.&lt;/em&gt; &amp;quot; New stabilization branch: &lt;a href="https://github.com/openjdk/jfx/tree/jfx27" target="_blank" rel="noopener noreferrer"&gt;github.com/openjdk/jfx/tree/jfx27&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Early-Access Builds of JavaFX 27 (to be released in September) are available on &lt;a href="https://jdk.java.net/javafx27/" target="_blank" rel="noopener noreferrer"&gt;jdk.java.net/javafx27&lt;/a&gt;
 and from the &lt;a href="https://gluonhq.com/products/javafx/#downloads" target="_blank" rel="noopener noreferrer"&gt;Gluon website&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Both JavaFX 26 and 27 need at least JDK 24 to run.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/116959466935866723" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; announced&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Gluon&amp;rsquo;s JavaFX CPU builds for JavaFX 17/21/25/26 are available now.&lt;/em&gt; &amp;quot; All details and download links are available in the post &lt;a href="https://gluonhq.com/news/2026-07-21-july-2026-critical-patch-update/" target="_blank" rel="noopener noreferrer"&gt;July 2026 Critical Patch Update: Essential Security and Stability Fixes for OpenJFX&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;With a &lt;a href="https://mastodon.social/@johanvos/116963618524653211" target="_blank" rel="noopener noreferrer"&gt;follow-up message&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Important: we (Gluon) provide all those builds (with CPU patches) for free. We love JavaFX and the community, but it&amp;rsquo;s a fair amount of work to do this. If you benefit from these builds, you may consider supporting us by bying LTS subscriptions (even if you can download them for free), contacting us for T&amp;amp;M work, and/or spreading this news. Thanks for keeping JavaFX a community effort.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;New builds of JavaFX are also available from &lt;a href="https://jdk.java.net/javafx26/" target="_blank" rel="noopener noreferrer"&gt;jdk.java.net/javafx26&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Fixes and more info are also available in the &lt;a href="https://docs.azul.com/core/release-notes#openjfx-fixes-enhancements" target="_blank" rel="noopener noreferrer"&gt;Azul Core quarterly update release notes&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mastodon.online/@cryptomator/116834045668158756" target="_blank" rel="noopener noreferrer"&gt;Cryptomator Desktop 1.19.3 is available&lt;/a&gt;
 and includes JavaFX 25.0.3 for improved graphics handling and simplifies Windows file signing. &amp;ldquo;&lt;em&gt;&lt;a href="https://cryptomator.org/" target="_blank" rel="noopener noreferrer"&gt;Cryptomator&lt;/a&gt;
 secures and encrypts your sensitive data in your favorite cloud service. So you can rest assured that only you can access your data.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/rgiskard7.bsky.social/post/3mpeoz2ahns2u" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Eduardo Díaz Sánchez&lt;/strong&gt; announced Jylos 2.2.0&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The biggest addition is a full Obsidian-compatible Canvas editor. &lt;a href="https://github.com/RGiskard7/jylos/releases/tag/v2.2.0" target="_blank" rel="noopener noreferrer"&gt;This release&lt;/a&gt;
 also adds note transclusion, rich links, CSS snippets and a redesigned private notes system.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/did:plc:jx7h5s74cqipmtc7zrb5224m/post/3mq6xaeph7c2p" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; announced a new release of MelodyMatrix&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Looking at MIDI music is now possible in multiple languages with release 1.1.0 of MelodyMatrix. And the &lt;a href="https://melodymatrix.rocks/" target="_blank" rel="noopener noreferrer"&gt;website got totally reworked&lt;/a&gt;
, is more flashy now, and also available in multiple languages. More updates coming soon&amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/a-new-website-for-melodymatrix-and-whats-new-in-release-1.1.0/" target="_blank" rel="noopener noreferrer"&gt;Blog post by &lt;strong&gt;Frank Delporte&lt;/strong&gt; related to the release of MelodyMatrix 1.1.0&lt;/a&gt;
 last week: &amp;ldquo;&lt;em&gt;Last week was busy for MelodyMatrix . The website got rebuilt from the ground up, and the app itself got a solid release with a handful of new features.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/rgiskard7.bsky.social/post/3mqrooiiask2k" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;RGiskard7&lt;/strong&gt; announced Jylos 2.4.6&lt;/a&gt;
, the local-first knowledge management app with Markdown notes: &amp;ldquo;&lt;em&gt;The app is much more polished: better Canvas support, cleaner themes, improved PDFs, vault switching without restart, GitHub update checks and smoother Markdown workflows.&lt;/em&gt; &amp;quot; Check the &lt;a href="https://github.com/RGiskard7/jylos/releases/tag/v2.4.6" target="_blank" rel="noopener noreferrer"&gt;release notes on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/java/comments/1va4vsm/jextractgui_a_javafx_gui_wrapper_for_the_jextract/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;nlisker&lt;/strong&gt; shared on Reddit&lt;/a&gt;
: jextractGUI - A JavaFX GUI wrapper for the jextract tool. &amp;ldquo;&lt;em&gt;It&amp;rsquo;s written in JavaFX and embeds jextract (and its libclang) within it. Since jextract is in early-access, newer versions broke it and I needed to do some rewrites since I first conjured it a couple of years ago. It&amp;rsquo;s now aligned with the current latest build - 25-jextract+2-4 (2025/11/25).&lt;/em&gt; &amp;quot; Project is &lt;a href="https://github.com/nlisker/jextractGUI" target="_blank" rel="noopener noreferrer"&gt;available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/nice_application1_812753/daybreak-protocol-june-solstice-game-jam-submission-11fl" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Nice Application 1 (Udit)&lt;/strong&gt; submitted Daybreak Protocol to the DEV June Solstice Game Jam&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A short, replayable JavaFX code-breaking game where daylight is both the player&amp;rsquo;s timer and reward. Repair six symbolic Bombe relays by solving puzzles based on Caesar shifts, XOR logic, run-length encoding, parity bits, contradiction elimination, and binary search. Every wrong answer visibly pushes the sun toward the horizon. The game celebrates Alan Turing&amp;rsquo;s legacy by presenting algorithms as creative tools.&lt;/em&gt; &amp;quot; Source code on &lt;a href="https://github.com/Nice-AU/Daybreak-Protocol" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/closing-the-visual-gap-between-the-official-lottie-webplayer-and-lottie4j/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; blogged about a big rendering upgrade for Lottie4J&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;My goal was to make the JavaFX output match the official LottieFiles web player as closely as possible, pixel for pixel. &amp;hellip; After the improvements, most of the animations used in the test now hit 99.5%+ similarity with the reference!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@lottie4j/116890414437899888" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; released Lottie4J v1.2.5&lt;/a&gt;
 with many rendering accuracy fixes: &amp;ldquo;&lt;em&gt;The JavaFX animations are now more closely aligned with the official LottieFiles web player. Most test files reach the 99,5% similarity goal.&lt;/em&gt; &amp;quot; All info &lt;a href="https://lottie4j.com/status/2026/20260709-release-1.2.5/" target="_blank" rel="noopener noreferrer"&gt;on the website&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mqofheob222s" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is reworking/improving his libraries&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I fixed a major bug in HiddenSidesPane that prevented proper layout passes for children nodes. To get the fix start using the implementation found in GemsFX, do not use the one in ControlsFX. (btw: I moved several of my ControlsFX contributions to GemsFX in order to speed up development.)&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1upfocl/groovefx_dynamic_fxml_for_javafx_declarative/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;rrangelox&lt;/strong&gt; published GrooveFX&lt;/a&gt;
: Dynamic FXML for JavaFX, declarative iteration, conditionals and branching. &amp;ldquo;&lt;em&gt;I&amp;rsquo;m releasing GrooveFX, a small library that extends JavaFX FXML with declarative control structures: iteration, conditional rendering, and multi‑case branching directly inside FXML. The idea is simple: FXML is powerful but static &amp;mdash; GrooveFX adds flow without replacing it and without introducing a DSL.&lt;/em&gt; &amp;quot; Check the &lt;a href="https://codeberg.org/rrangelo/groovefx" target="_blank" rel="noopener noreferrer"&gt;Codeberg repository&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; announced a new JavaFX library: Sheetmusic4J, an open-source Java library that parses MusicXML into Java objects and renders them as native JavaFX music sheet views. No WebView, no browser engine, no JavaScript bridge.
&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://sheetmusic4j.com" target="_blank" rel="noopener noreferrer"&gt;sheetmusic4j.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source code: &lt;a href="https://github.com/sheetmusic4j/sheetmusic4j" target="_blank" rel="noopener noreferrer"&gt;github.com/sheetmusic4j/sheetmusic4j&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Blog post and video with more info about the project &lt;a href="https://webtechie.be/post/introducing-sheetmusic4j-a-javafx-library-to-render-and-interact-with-sheet-music/" target="_blank" rel="noopener noreferrer"&gt;on webtechie.be&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/sheetmusic4j-0.0.3-when-linkedin-comments-becomes-features/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; blogged about Sheetmusic4J 0.0.3&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I released 0.0.1 as an open question: does anyone want a native Java(FX) sheet music library? Multiple LinkedIn comments, and some are answered now with support for ABC notation and Guitar Pro. Plus a big round of engraving improvements.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eliezer Assunção De Paulo&lt;/strong&gt; &lt;a href="https://www.reddit.com/r/JavaFX/comments/1v8j29r/megalodonte_a_small_reactive_ui_framework_on_top/" target="_blank" rel="noopener noreferrer"&gt;announced Megalodonte&lt;/a&gt;
, a small reactive UI framework on top of JavaFX. &amp;ldquo;&lt;em&gt;I&amp;rsquo;ve been building JavaFX desktop apps for a while and got tired of the usual boilerplate (manual listeners, imperative styling, no real component model), so I built Megalodonte: a thin reactive layer on top of JavaFX &amp;mdash; React-ish component composition, State /ComputedState for reactivity, and a Props/Theme system so styling isn&amp;rsquo;t scattered setStyle() calls everywhere.&lt;/em&gt; &amp;quot; The project is &lt;a href="https://github.com/eliezer-dev-software-enginner/megalodonte-libs" target="_blank" rel="noopener noreferrer"&gt;available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mrmm435rt22t" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;GemsFX 4.3.2 is out now with fixes for the PopOver control, with i18n resource bundles, and accessibility support. I was always too lazy for the last two things but with AI that has become a no-brainer &amp;hellip; literally &amp;hellip;. &amp;ldquo;no brain required&amp;rdquo;.&lt;/em&gt; &amp;quot; Check the project &lt;a href="https://github.com/dlsc-software-consulting-gmbh/GemsFX" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Helal Anwar&lt;/strong&gt; published a new &lt;a href="https://www.youtube.com/watch?v=XiHcp-WseBE" target="_blank" rel="noopener noreferrer"&gt;video with the progress he made in his student management app&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/cupofcode.bsky.social/post/3mqadlpurrc2y" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Austin Lehman&lt;/strong&gt; announced&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Aussom CLI 1.2.0 is now available for download along the first free &lt;a href="https://aussom-lang.com/books" target="_blank" rel="noopener noreferrer"&gt;PDF book &amp;lsquo;Building Desktop Applications in Aussom with JavaFX&amp;rsquo;&lt;/a&gt;
!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/rabauer.dev/post/3mqyzcln42w24" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johannes Rabauer&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;If you are interested in playing around with midi devices and files, check out melodymatrix.rocks. It&amp;rsquo;s free and quite fun 🙂 &lt;strong&gt;Frank Delporte&lt;/strong&gt; built this with his son, which is such a great idea on it&amp;rsquo;s own! #JavaFX #MIDI #Piano&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/scala/comments/1usp835/kyojfx_hello_world_template/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;markehammons&lt;/strong&gt; shared &amp;ldquo;Kyo-JFX Hello World template&amp;rdquo; on Reddit&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I was asked in another thread if I could provide an example of this, so &lt;a href="https://codeberg.org/markhammons/kyo-jfx-hello-world" target="_blank" rel="noopener noreferrer"&gt;here it is&lt;/a&gt;
. This template is a hello world app using JavaFx + Kyo + Scala 3. It uses Gluon substrate as well as a Gluon fork of GraalVM to create native image builds that can run on Linux and Android.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Keep an eye on the messages by &lt;a href="https://bsky.app/profile/cupofcode.bsky.social" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Austin Lehman&lt;/strong&gt; on Bluesky&lt;/a&gt;
 as he is sharing more info about the Aussom Programming Language, new releases, his book about Aussom, and scripts he is using to create documentation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/sheetmusic4j" target="_blank" rel="noopener noreferrer"&gt;Sheetmusic4J&lt;/a&gt;
, a Java library to parse MusicXML and render sheet music natively in JavaFX.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The JavaFX Links Of The Week of June got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-june-2026/"&gt;bundled and published on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Keeping Java Hot This Summer</title><link>https://foojayio.github.io/website/today/keeping-java-hot-this-summer-august-2026/</link><pubDate>Fri, 31 Jul 2026 09:50:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/keeping-java-hot-this-summer-august-2026/</guid><description>&lt;p&gt;Summer conference season goes quiet. Most major Java events wrap by June, CFPs go dark while we&amp;rsquo;re waiting for the results and a lot of us - if we decide to carry on with the work - use August to either catch up on backlog, or training ( and I mean mental exercise here, although I&amp;rsquo;m sure some of you hit the gym more often too 😉 ).&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re in the northeastern US or eastern Canada and are around next month with some extra time to spare, this may be a good excuse to join your local community to watch and learn from a technical session on a problem most of us have hit in production, delivered by &lt;a href="https://gsjug.org/profiles/simon-ritter.html" target="_blank" rel="noopener noreferrer"&gt;Simon Ritter,&lt;/a&gt;
 a Java Champion who&amp;rsquo;s spent years in the JVM internals.&lt;/p&gt;</description></item><item><title>How to Create a Spring Boot Fraud Scoring Service</title><link>https://foojayio.github.io/website/today/how-to-create-a-spring-boot-fraud-scoring-service/</link><pubDate>Fri, 31 Jul 2026 08:45:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-create-a-spring-boot-fraud-scoring-service/</guid><description>&lt;p&gt;Most Java teams who want a machine learning model in production end up standing up a Python service and calling it over HTTP. That works, but it buys you, as a Java developer, a second runtime, a second deployment pipeline, a network hop on every prediction, and a team boundary that turns retraining into someone else&amp;rsquo;s ticket.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.deepnetts.com/" target="_blank" rel="noopener noreferrer"&gt;Deep Netts&lt;/a&gt;
 removes that split: it&amp;rsquo;s a pure-Java deep learning library, so the model trains in Java, serializes to a file, and loads back into your Spring Boot application as an ordinary bean. Predictions become in-process method calls measured in microseconds, with nothing extra to deploy, secure, or monitor.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>HTTP QUERY Method Explained: RFC 10008, Ecosystem Adoption, and a Quarkus Implementation</title><link>https://foojayio.github.io/website/today/http-query-method-explained-rfc-10008-ecosystem-adoption-and-a-quarkus-implementation/</link><pubDate>Fri, 31 Jul 2026 08:00:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/http-query-method-explained-rfc-10008-ecosystem-adoption-and-a-quarkus-implementation/</guid><description>&lt;p&gt;When you build a search API, you usually start with HTTP GET, the natural choice for a read operation: it is safe, idempotent, and cacheable. Then the search form grows, filters multiply, and nested criteria appear. Since using GET means placing the query inside the URI, a length limit problem emerges. Worse, placing sensitive query values in the URI increases the chance of exposure through access logs, browser history, proxies, and monitoring systems. Because the HTTP protocol does not forbid it, sending a body with GET may look like a way out, but building your design on behavior the standards leave undefined is not a recommended practice. Elasticsearch&amp;rsquo;s GET-with-body search API is a well-known example, and &lt;a href="https://www.elastic.co/guide/en/elasticsearch/guide/current/_empty_search.html" target="_blank" rel="noopener noreferrer"&gt;Elastic&amp;rsquo;s own documentation&lt;/a&gt;
 openly acknowledges the problem:&lt;/p&gt;</description></item><item><title>Introducing Sheetmusic4J, a Java(FX) Library to Render and Interact with Sheet Music</title><link>https://foojayio.github.io/website/today/introducing-sheetmusic4j-a-javafx-library-to-render-and-interact-with-sheet-music/</link><pubDate>Thu, 30 Jul 2026 07:28:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-sheetmusic4j-a-javafx-library-to-render-and-interact-with-sheet-music/</guid><description>&lt;p&gt;I&amp;rsquo;m building &lt;a href="https://melodymatrix.rocks/" target="_blank" rel="noopener noreferrer"&gt;MelodyMatrix&lt;/a&gt;
 with my son, an application to look at and play along with music. The app already shows a song in different views: falling blocks, chords, guitar views, and many more. Now we want a Learn section, a view that helps someone practice piano by following the actual sheet music while it plays.
&lt;img src="https://foojayio.github.io/website/today/introducing-sheetmusic4j-a-javafx-library-to-render-and-interact-with-sheet-music/screenshot-melodymatrix-1024x641.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;A static PDF of the sheet doesn&amp;rsquo;t work for that. Great PDF viewer components exist for JavaFX, but a PDF has no connection to what&amp;rsquo;s playing. Nothing highlights the current note, nothing marks the current position in the song. I looked for a JavaFX library that renders sheet music and lets code interact with it: jump to a position, highlight a note, follow playback. I couldn&amp;rsquo;t find one, so I built it.&lt;/p&gt;</description></item><item><title>Featured Foojay Authors for July and August 2026</title><link>https://foojayio.github.io/website/today/featured-authors-july-and-august-2026/</link><pubDate>Tue, 28 Jul 2026 09:05:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/featured-authors-july-and-august-2026/</guid><description>&lt;p&gt;Foojay wouldn&amp;rsquo;t exist without the many contributions from its community, whether it&amp;rsquo;s a single post or an ongoing stream of knowledge sharing. That&amp;rsquo;s why we&amp;rsquo;ve started highlighting two of them each month as &lt;strong&gt;&lt;a href="https://foojayio.github.io/website/today/author/"&gt;Featured Authors&lt;/a&gt;
&lt;/strong&gt;. We kicked this off in July with Igor and Steve, and this post covers both our July and August (Cristobal and Shai) featured authors. Want to read more from any of them? Just click their name to visit their Foojay author page, where you&amp;rsquo;ll find their full list of posts. We&amp;rsquo;ll be back with the next update at the beginning of September.&lt;/p&gt;</description></item><item><title>New Between-Quarters Security Updates for Java: What CSPUs Mean for Your Release Pipeline</title><link>https://foojayio.github.io/website/today/new-between-quarters-security-updates-for-java-what-cspus-mean-for-your-release-pipeline/</link><pubDate>Mon, 27 Jul 2026 07:31:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-between-quarters-security-updates-for-java-what-cspus-mean-for-your-release-pipeline/</guid><description>&lt;p&gt;In an announcement on the &lt;a href="https://mail.openjdk.org/archives/list/jdk-updates-dev@openjdk.org/thread/SVHDNJDY62MX6YBEA4FSMW4U72H77F6S/" target="_blank" rel="noopener noreferrer"&gt;OpenJDK Updates Mailinglist&lt;/a&gt;
 on July 20, 2026, Rob McKenna explained a change in the Oracle security release cycle for JDK builds. They plan to deliver security updates for the Oracle JDK as part of &lt;strong&gt;(some) monthly Critical Security Patch Updates (CSPUs)&lt;/strong&gt; .&lt;/p&gt;
&lt;p&gt;This brings more exact info, after an earlier message on April 26, 2026, in which &lt;a href="https://blogs.oracle.com/security/accelerating-vulnerability-detection-and-response-at-oracle" target="_blank" rel="noopener noreferrer"&gt;Oracle announced the acceleration of Vulnerability Detection and Response&lt;/a&gt;
. In that article they introduced the idea of monthly Critical Security Patch Updates (CSPU) across all their products. At that moment, it was not clear if this also applied to the Java releases, and how this would impact the normal quarterly cycle of Critical Patch Updates (CPUs).&lt;/p&gt;</description></item><item><title>Own Your Pixels: Native Fidelity on Your Schedule</title><link>https://foojayio.github.io/website/today/own-your-pixels-native-fidelity-on-your-schedule/</link><pubDate>Fri, 24 Jul 2026 15:45:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/own-your-pixels-native-fidelity-on-your-schedule/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/pixel-perfect-is-a-test.jpg" alt="Own Your Pixels: Native Fidelity on Your Schedule" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;An iOS or Android update can change a screen you shipped without you changing a line of code. If your app builds its UI from UIKit, SwiftUI, Compose, or Material widgets, Apple or Google owns those widget implementations. Codename One does something different. It statically links our lightweight component implementation into your native app. The UI you test is the UI your users keep after the next OS update. An update can still break a platform API or permission contract, but it cannot swap our button implementation for a new one.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>AI Found the Bugs. Who's Patching Your EOL Java Code?</title><link>https://foojayio.github.io/website/today/ai-found-the-bugs-whos-patching-your-eol-java-code/</link><pubDate>Thu, 23 Jul 2026 15:26:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/ai-found-the-bugs-whos-patching-your-eol-java-code/</guid><description>&lt;p&gt;Earlier this year an AI model found a flaw in OpenBSD&amp;rsquo;s TCP stack that had been sitting there for 27 years. The same scanning run turned up a 16-year-old bug in FFmpeg&amp;rsquo;s H.264 code.&lt;/p&gt;
&lt;h4 id="how-do-you-feel-about-ai-being-used-to-discover-bugs-in-open-source-across-the-board-and-at-scale"&gt;How do you feel about AI being used to discover bugs in open source, across the board and at scale?&lt;/h4&gt;
&lt;p&gt;Because that&amp;rsquo;s what&amp;rsquo;s happening. It&amp;rsquo;s tough enough dealing with machine-speed vulnerability discovery in code that has active maintainers. What about all the code with no friendly pair of safe hands?&lt;/p&gt;</description></item><item><title>Azul Zulu July 2026 Quarterly Update Released</title><link>https://foojayio.github.io/website/today/azul-zulu-july-2026-quarterly-update-released/</link><pubDate>Thu, 23 Jul 2026 12:35:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/azul-zulu-july-2026-quarterly-update-released/</guid><description>&lt;p&gt;Every three months your production JDKs fall further behind on security patches. Azul closes that gap today with the July 2026 quarterly update for Azul Zulu Builds of OpenJDK, covering Java 26, 25, 21, 17, 11, 8, 7, and 6.&lt;/p&gt;
&lt;h2 id="h2-0-the-quarterly-update-cycle"&gt;The Quarterly Update Cycle&lt;/h2&gt;
&lt;p&gt;Every three months, in January, April, July, and October, the OpenJDK project ships security patches, bug fixes, and improvements for all supported Java versions. This predictable schedule lets teams plan Java updates and keep production environments secure.&lt;/p&gt;</description></item><item><title>What's New In The July 2026 Azul Payara Release?</title><link>https://foojayio.github.io/website/today/whats-new-in-the-july-2026-azul-payara-release/</link><pubDate>Thu, 23 Jul 2026 10:28:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/whats-new-in-the-july-2026-azul-payara-release/</guid><description>&lt;p&gt;The July 2026 release brings Azul Payara 7.2.0, Azul Payara Community 7.2026.7, Azul Payara 6.40.0, Azul Payara 5.89.0, and Azul Payara 4.1.2.191.57. A single security fix runs through every release, backported from the 7 line down to Payara 4: brute force attack prevention for authentication. Enterprise 6.40.0 additionally closes two Jackson CVEs that apply to the 6 line.&lt;/p&gt;
&lt;h2 id="h2-0-downloads-release-notes"&gt;Downloads &amp;amp; Release Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://payara.fish/downloads/payara-platform-community-edition/" target="_blank" rel="noopener noreferrer"&gt;Azul Payara Community (free version) - download&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.azul.com/payara/release-notes/release-notes-7.2.0.html" target="_blank" rel="noopener noreferrer"&gt;Azul Payara Community 7.2026.7 - release notes&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.azul.com/azul-payara-trial/" target="_blank" rel="noopener noreferrer"&gt;Azul Payara (supported) - free trial&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.azul.com/payara-community/release-notes/release-notes-7.2026.7.html" target="_blank" rel="noopener noreferrer"&gt;Azul Payara 7.2.0 - release notes&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-a-security-fix-patched-across-every-branch"&gt;A Security Fix, Patched Across Every Branch&lt;/h2&gt;
&lt;p&gt;Brute force attack prevention has been added across Azul Payara Server and Micro 7.2.0, 6.40.0, 5.89.0, and 4.1.2.191.57, and Azul Payara Community 7.2026.7. The fix protects authentication against repeated credential guessing.&lt;/p&gt;</description></item><item><title>BoxLang AWS, Azure, and Google Secrets Manager Module Released</title><link>https://foojayio.github.io/website/today/boxlang-aws-azure-and-google-secrets-manager-module-released/</link><pubDate>Tue, 21 Jul 2026 11:38:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-aws-azure-and-google-secrets-manager-module-released/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-aws-azure-and-google-secrets-manager-module-released/boxlang-secrets-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Every production application carries secrets: database passwords, API tokens, encryption keys. The question is never whether to manage them &amp;ndash; it&amp;rsquo;s how badly the current approach is going to hurt you.&lt;/p&gt;
&lt;p&gt;Hardcoded credentials in config files get committed to repos. Environment variables sprawl across deployment pipelines with no audit trail. Custom integration code for each cloud provider means three different patterns to maintain, test, and rotate. And when a key needs to rotate at 2am? Someone is waking up.&lt;/p&gt;</description></item><item><title>First Test of Java on Banana Pi (ARM and RISC-V), Plus a Blinking LED with Pi4J</title><link>https://foojayio.github.io/website/today/first-test-of-java-on-banana-pi-arm-and-risc-v-plus-a-blinking-led-with-pi4j/</link><pubDate>Mon, 20 Jul 2026 06:03:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/first-test-of-java-on-banana-pi-arm-and-risc-v-plus-a-blinking-led-with-pi4j/</guid><description>&lt;hr&gt;
&lt;p&gt;As part of my 2026 learning goals around Java on RISC-V (see &lt;a href="https://webtechie.be/post/2026-01-07-x86-arm-riscv/" target="_blank" rel="noopener noreferrer"&gt;this post about x86 versus ARM versus RISC-V&lt;/a&gt;
), I&amp;rsquo;ve asked various suppliers to send me evaluation boards. I already published these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/first-experiments-with-java-on-the-lattepanda-iota-an-alternative-to-raspberry-pi/" target="_blank" rel="noopener noreferrer"&gt;LattePanda IOTA (x86)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/first-test-of-java-on-the-orange-pi-arm-and-risc-v/" target="_blank" rel="noopener noreferrer"&gt;OrangePi 5 Ultra (ARM) and OrangePi RV2 (RISC-V)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/first-test-of-java-on-the-starfive-visionfive-2-lite-risc-v/" target="_blank" rel="noopener noreferrer"&gt;VisionFive 2 Lite (RISC-V)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/first-test-of-java-on-beagleboards-arm-and-risc-v/" target="_blank" rel="noopener noreferrer"&gt;BeagleBoards (ARM and RISC-V)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/i-got-java-25-running-on-the-risc-v-beagleboard-beaglev-fire/" target="_blank" rel="noopener noreferrer"&gt;Java 25 on BeagleV-First&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;In this post: Banana Pi&amp;rsquo;s&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I got all these boards for free, but what I write here and show in the video is not controlled by the suppliers.&lt;/p&gt;</description></item><item><title>Toward a Durable Spring PetClinic</title><link>https://foojayio.github.io/website/today/toward-a-durable-spring-petclinic/</link><pubDate>Sun, 19 Jul 2026 18:06:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/toward-a-durable-spring-petclinic/</guid><description>&lt;h2 id="h2-0-overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Durable Execution&lt;/strong&gt; is a way of running code so that its progress survives failure. A normal program keeps its state in memory: if the process crashes, the machine reboots, or a network call times out halfway through a multi-step operation, that state is gone and the work is left half-done.&lt;/p&gt;
&lt;p&gt;Temporal, the Durable Execution platform, persists every step of a process to its &lt;strong&gt;Event History&lt;/strong&gt; &amp;mdash; a durable, append-only log of Events &amp;mdash; so that after any failure the work resumes exactly where it left off, as if the crash never happened.&lt;/p&gt;</description></item><item><title>How We Beat HotSpot Performance (By Cheating, But Not Like That)</title><link>https://foojayio.github.io/website/today/how-we-beat-hotspot-performance-by-cheating-but-not-like-that/</link><pubDate>Fri, 17 Jul 2026 17:24:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-we-beat-hotspot-performance-by-cheating-but-not-like-that/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/beating-hotspot-performance.jpg" alt="How We Beat HotSpot Performance (By Cheating, But Not Like That)" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;No, we didn&amp;rsquo;t cheat in the benchmark. At least I hope we didn&amp;rsquo;t. Every optimization in this story was gated on bit identical output checksums against HotSpot, and the harness refuses to print a ratio when a checksum differs. If anything, this post is about how good HotSpot actually is. We tilted the table in our favor in every way we could, we hand tuned C code, and we still only beat it on some benchmarks. Getting there was a genuine struggle. If you want to understand the nuts and bolts of what your Java code costs, and the tradeoffs each runtime picks, I hope this is a good read.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Warm Up Fast, Run Lean: Vertical Scaling for Java on Kubernetes with Azul Prime and Kedify</title><link>https://foojayio.github.io/website/today/warm-up-fast-run-lean-vertical-scaling-for-java-on-kubernetes-with-azul-prime-and-kedify/</link><pubDate>Fri, 17 Jul 2026 08:02:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/warm-up-fast-run-lean-vertical-scaling-for-java-on-kubernetes-with-azul-prime-and-kedify/</guid><description>&lt;p&gt;Autoscaling on Kubernetes has evolved significantly, but many production systems still rely on reactive scaling based on CPU and memory utilization. The issue is that resource metrics often lag behind real demand. By the time the CPU rises, users may already be experiencing unacceptable latency.&lt;/p&gt;
&lt;p&gt;For most real services, horizontal scaling should be driven by proactive workload signals such as request rate, concurrency, or queue depth, rather than raw CPU alone. To learn more about this, see &lt;a href="https://kedify.io/resources/blog/autoscaling-delay-resource-based-hpa-vs-proactive-metrics" target="_blank" rel="noopener noreferrer"&gt;this post&lt;/a&gt;
 on autoscaling delay and proactive metrics.&lt;/p&gt;</description></item><item><title>Your Loom App Quietly Became a Thread Pool Again: A Field Guide to Virtual Thread Pinning</title><link>https://foojayio.github.io/website/today/virtual-thread-pinning-field-guide/</link><pubDate>Thu, 16 Jul 2026 07:43:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/virtual-thread-pinning-field-guide/</guid><description>&lt;p&gt;The incident that taught me to respect pinning looked like nothing. A service freshly migrated to virtual threads, a load test that plateaued at about 420 requests per second no matter how much traffic we threw at it, CPU sitting at 9%, zero errors, zero warnings, nothing in the logs. The machine had 8 cores, and the one downstream HTTP call in the hot path took about 19 ms. Do the arithmetic: 8 × (1000 / 19) ≈ 421.&lt;/p&gt;</description></item><item><title>BoxLang 1.15.0 Released: Blazing Fast Strings, Runtime Portability, and much more</title><link>https://foojayio.github.io/website/today/boxlang-1-15-0-released-blazing-fast-strings-runtime-portability-and-much-more/</link><pubDate>Tue, 14 Jul 2026 17:57:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-15-0-released-blazing-fast-strings-runtime-portability-and-much-more/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-1-15-0-released-blazing-fast-strings-runtime-portability-and-much-more/boxlang-v1.15.0-700x467.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BoxLang 1.15.0&lt;/strong&gt; is a high-impact release with two big headlines and a long tail of hardening. The first headline is a &lt;strong&gt;massive performance upgrade to string handling&lt;/strong&gt; : a new first-class &lt;code&gt;BoxStringBuilder&lt;/code&gt; type, compile-time literal folding, smarter &lt;code&gt;&amp;amp;=&lt;/code&gt; semantics, and a runtime concat strategy that automatically switches to builder-backed accumulation once your expression gets big enough. Your existing string-heavy code just got faster. No rewrites required.&lt;/p&gt;
&lt;p&gt;The second headline is architectural. Every class loader in the BoxLang runtime and module system has been fully abstracted behind a pluggable &lt;code&gt;IClassLoaderFactory&lt;/code&gt; interface. That single seam is what unlocks the &lt;strong&gt;Android runtime&lt;/strong&gt; and &lt;strong&gt;Ahead-of-Time (AOT) compiled runtimes&lt;/strong&gt; such as GraalVM Native Image that we have on the roadmap. The default behavior is unchanged, but the ceiling just got a lot higher.&lt;/p&gt;</description></item><item><title>I Asked GitHub Copilot to Profile a Java App. It Found a Bug in My Heap Sizing, and Offered to Fix It</title><link>https://foojayio.github.io/website/today/i-asked-github-copilot-to-profile-a-java-app-it-found-a-bug-in-my-heap-sizing-and-offered-to-fix-it/</link><pubDate>Tue, 14 Jul 2026 14:42:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/i-asked-github-copilot-to-profile-a-java-app-it-found-a-bug-in-my-heap-sizing-and-offered-to-fix-it/</guid><description>&lt;p&gt;I built an extension to collapse the entire loop of running and measuring the performance of Java workloads, so it can be used within a place some developers are starting to consider their new &amp;ldquo;development environment&amp;rdquo; in the agentic AI era: the &lt;a href="https://github.com/features/ai/github-app" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub Copilot app&lt;/strong&gt;&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-the-idea-copilot-driven-profiling"&gt;The idea: Copilot-driven profiling&lt;/h2&gt;
&lt;p&gt;This extension is called JVM Pulse, and this is a walkthrough of one real run. JVM Pulse is a canvas extension for the GitHub Copilot app. It doesn&amp;rsquo;t hard-code how to build or run Java projects and it doesn&amp;rsquo;t need the user to be specific either. You click Run analysis, and Copilot does the project-specific work: it detects your build tool and JDK, writes or compiles a representative workload, and launches it with the right flags: unified GC logging and a JFR recording with settings=profile.&lt;/p&gt;</description></item><item><title>Foojay Podcast #100: Java Podcasters on Why They Started, What Broke, and What They Learned</title><link>https://foojayio.github.io/website/today/foojay-podcast-100/</link><pubDate>Mon, 13 Jul 2026 07:05:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-100/</guid><description>&lt;p&gt;Foojay Podcast hits episode 100. No plan, no roadmap. It just happened. To mark the occasion, Frank turned the microphone around and invited other podcasters: Adam Bien (airhacks.fm), Jennifer Reif (Breaktime Tech Talks), Kadi McKean and Steve Pool (10xInsights), and Oumaima Zerouali (JCast). Same three questions for each: why did you start, what broke, and what did you learn?&lt;/p&gt;
&lt;h2 id="h2-0-youtube"&gt;YouTube&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/PID--srP0_U?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Temporal Is to Your Code What a Database Is to Your Data</title><link>https://foojayio.github.io/website/today/temporal-is-to-your-code-what-a-database-is-to-your-data/</link><pubDate>Sat, 11 Jul 2026 10:31:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/temporal-is-to-your-code-what-a-database-is-to-your-data/</guid><description>&lt;p&gt;&lt;strong&gt;Once upon a time, applications managed their own data files. Every program hand-rolled its own locking, its own crash recovery, its own consistency guarantees. Every program did it badly, in its own unique way.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Then the relational database arrived and made a deal with application developers: &lt;em&gt;&lt;strong&gt;you declare what you want, and I guarantee it survives&lt;/strong&gt;.&lt;/em&gt; Atomicity, durability, crash recovery: all of it moved out of application code and into a dedicated platform. Nobody writes their own file-based transaction log anymore.&lt;/p&gt;</description></item><item><title>🛑⚡ When NOT TO USE Event-Driven Architecture (EDA)</title><link>https://foojayio.github.io/website/today/when-not-to-use-event-driven-architecture-eda/</link><pubDate>Sat, 11 Jul 2026 00:34:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/when-not-to-use-event-driven-architecture-eda/</guid><description>&lt;h2 id="h2-0-when-event-driven-architecture-is-not-the-right-choice"&gt;When Event-Driven Architecture Is Not the Right Choice&lt;/h2&gt;
&lt;p&gt;Event-Driven Architecture (EDA) can help teams build scalable, loosely coupled and highly responsive distributed systems. Technologies such as Apache Kafka, RabbitMQ, Pulsar and cloud messaging platforms have made this architectural style increasingly popular.&lt;/p&gt;
&lt;p&gt;However, EDA also introduces significant complexity. Asynchronous communication requires teams to manage retries, duplicate events, eventual consistency, schema evolution, observability and failure recovery. When these challenges are introduced without a clear business or technical need, an event-driven system can become harder to develop, operate and debug than a simpler synchronous architecture.&lt;/p&gt;</description></item><item><title>More Surfaces, Same Deal: Cars, Sensors, Commerce, Video And Builds</title><link>https://foojayio.github.io/website/today/more-surfaces-same-deal-cars-sensors-commerce-video-and-builds/</link><pubDate>Fri, 10 Jul 2026 18:17:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/more-surfaces-same-deal-cars-sensors-commerce-video-and-builds/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/one-codebase-more-surfaces.jpg" alt="More Surfaces, Same Deal: Cars, Sensors, Commerce, Video And Builds" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Last week&amp;rsquo;s release post was about funding open source without the bait and switch. This week&amp;rsquo;s release tests that idea again, because two of the new features touch paid infrastructure directly: Commerce and versioned builds.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>"This Can't Possibly Work": What I Learned at a Temporal.io Workshop</title><link>https://foojayio.github.io/website/today/this-cant-possibly-work-what-i-learned-at-a-temporal-io-workshop-on-durable-execution/</link><pubDate>Fri, 10 Jul 2026 08:41:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/this-cant-possibly-work-what-i-learned-at-a-temporal-io-workshop-on-durable-execution/</guid><description>&lt;p&gt;&lt;strong&gt;When developers first hear about &lt;a href="https://temporal.io/" target="_blank" rel="noopener noreferrer"&gt;Temporal&lt;/a&gt;
, they tend to move through a predictable sequence of emotions. First comes disbelief &amp;mdash; the claim that your application can crash mid-execution and simply pick up where it left off, variables intact, sounds like nonsense. Then comes irritation that anyone would even say such a thing is possible. Then they try it, discover it actually works, and get very excited. And finally they ask the only question that matters: &lt;em&gt;how?&lt;/em&gt;&lt;/strong&gt;
&lt;img src="https://foojayio.github.io/website/today/this-cant-possibly-work-what-i-learned-at-a-temporal-io-workshop-on-durable-execution/IMG_2977-1024x768.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0 : Sets, Ranges, Inner Classes, and a Runtime That Talks Back</title><link>https://foojayio.github.io/website/today/boxlang-1-14-0-sets-ranges-inner-classes-and-a-runtime-that-talks-back/</link><pubDate>Thu, 09 Jul 2026 18:02:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-14-0-sets-ranges-inner-classes-and-a-runtime-that-talks-back/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-1-14-0-sets-ranges-inner-classes-and-a-runtime-that-talks-back/BoxLang-release-1.14.0-4-700x394.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;BoxLang has never stood still, but 1.14.0 is something different. This is the release where the language stops filling gaps and starts defining what a modern dynamic JVM language looks like on its own terms. Sixty-five issues closed. Four innovative language features. A formatter that has grown up. And a companion module - &lt;code&gt;bx-mcp&lt;/code&gt; - that fundamentally changes how you operate a running BoxLang application with AI.&lt;/p&gt;
&lt;p&gt;This could have easily been a major release for the team. This has been a really amazing effort by everybody at Ortus and all of the amazing feedback from our clients migrating to BoxLang and coming up with such amazing and innovative ideas for this platform. We have only just begun!&lt;/p&gt;</description></item><item><title>Nulling Out References Won't Help Your Garbage Collector</title><link>https://foojayio.github.io/website/today/nulling-out-references-wont-help-your-garbage-collector/</link><pubDate>Thu, 09 Jul 2026 13:49:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/nulling-out-references-wont-help-your-garbage-collector/</guid><description>&lt;p&gt;One of the misconceptions that I continuously run into is that nulling out references in Java helps garbage collection.&lt;/p&gt;
&lt;p&gt;This attitude is particularly prevalent from those developers used to C/C++ where &lt;code&gt;delete ptr&lt;/code&gt; becomes &lt;code&gt;ref = null&lt;/code&gt;. To be fair, it&amp;rsquo;s a reasonable thing to believe.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also wrong, and the way it&amp;rsquo;s wrong tells you most of what&amp;rsquo;s worth knowing about how a tracing collector actually works.&lt;/p&gt;
&lt;p&gt;That is, the vast majority of data allocated in a tracing garbage collected runtime becomes collectable as soon as a variable falls out of scope.&lt;/p&gt;</description></item><item><title>Free Java &amp; OpenJDK Info for Daily Java Usage</title><link>https://foojayio.github.io/website/today/works-with-openjdk/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/works-with-openjdk/</guid><description/></item><item><title>The Java Story: A Film About All of Us</title><link>https://foojayio.github.io/website/today/the-java-story-a-film-about-all-of-us/</link><pubDate>Thu, 09 Jul 2026 08:43:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-java-story-a-film-about-all-of-us/</guid><description>&lt;p&gt;Every so often a story comes along that belongs to an entire community rather than any one company or person. The Java Story documentary by CultRepo is one of those. On July 17th at 7pm UTC, the official Java documentary premieres live on YouTube - if you&amp;rsquo;ve spent any significant part of your career working with Java (and I assume most Foojay readers have!), I really think you&amp;rsquo;d want to watch it!&lt;/p&gt;</description></item><item><title>What's New in actions/setup-java 5.4 and 5.5: Signature Verification, Kona JDK, and a Better Maven Experience</title><link>https://foojayio.github.io/website/today/whats-new-in-actions-setup-java-5-4-and-5-5-signature-verification-kona-jdk-and-a-better-maven-experience/</link><pubDate>Wed, 08 Jul 2026 18:56:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/whats-new-in-actions-setup-java-5-4-and-5-5-signature-verification-kona-jdk-and-a-better-maven-experience/</guid><description>&lt;p&gt;If you build Java on GitHub Actions, &lt;code&gt;actions/setup-java&lt;/code&gt; is almost certainly the first step in your workflow. It installs a JDK, wires up &lt;code&gt;JAVA_HOME&lt;/code&gt; and the &lt;code&gt;PATH&lt;/code&gt;, configures Maven &lt;code&gt;settings.xml&lt;/code&gt;, sets up dependency caching, and registers Maven toolchains &amp;mdash; all before your build even starts.&lt;/p&gt;
&lt;p&gt;The last two releases, &lt;strong&gt;v5.4.0&lt;/strong&gt; and &lt;strong&gt;v5.5.0&lt;/strong&gt; , are quietly some of the most interesting in a while. v5.5.0 in particular brings something Java developers have been asking about for years on CI: &lt;strong&gt;cryptographic verification of the JDK you just downloaded&lt;/strong&gt;. There&amp;rsquo;s also a brand-new distribution, smarter version-file handling, and a batch of Maven quality-of-life fixes that make your logs cleaner and your toolchains file saner.&lt;/p&gt;</description></item><item><title>Why We Moved Our Timefold Java Worker Pods from AMD to ARM64</title><link>https://foojayio.github.io/website/today/why-we-moved-our-timefold-java-worker-pods-from-amd-to-arm64/</link><pubDate>Wed, 08 Jul 2026 15:25:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-we-moved-our-timefold-java-worker-pods-from-amd-to-arm64/</guid><description>&lt;p&gt;When we investigated unexpected performance variance in our Timefold Solver worker pods on our platform, we traced it to hyperthreading on AMD (x86-64) cloud instances. Switching to ARM (ARM64), where each vCPU maps to a physical core, eliminated the problem and roughly doubled effective throughput per dollar for concurrent solver workloads.&lt;/p&gt;
&lt;p&gt;Originally written by Timefold engineers Lars Beckmann, Jenne De Bleser and Lukáš Petrovický&lt;/p&gt;
&lt;p&gt;Adapted for foojay by Tom Cools&lt;/p&gt;</description></item><item><title>Closing the Visual Gap Between the Official Lottie Webplayer and Lottie4J</title><link>https://foojayio.github.io/website/today/closing-the-visual-gap-between-the-official-lottie-webplayer-and-lottie4j/</link><pubDate>Tue, 07 Jul 2026 08:25:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/closing-the-visual-gap-between-the-official-lottie-webplayer-and-lottie4j/</guid><description>&lt;p&gt;A Lottie library is only as good as its output looks. If an animation renders differently in &lt;a href="https://lottie4j.com/" target="_blank" rel="noopener noreferrer"&gt;Lottie4J&lt;/a&gt;
 than it does in the official web player, that&amp;rsquo;s a bug, even when no exception is thrown and the code looks correct.&lt;/p&gt;
&lt;p&gt;Within the &lt;code&gt;fxfileviewer&lt;/code&gt;, there is an app to visually compare the result of the JavaFX player and a webview using the official JavaScript player. Problem is that I was using the JavaFX Web component for this and this doesn&amp;rsquo;t fully support the latest/best version of this player. Based on this app for manual checks, I also created a unit test which is able to loop over a set of files and compare the differences to make sure changes in the code don&amp;rsquo;t break the existing renderer. But I kept struggling with the same test file &lt;a href="https://github.com/lottie4j/lottie4j/tree/main/fxfileviewer/src/test/resources/json/interactive_mood_selector_ui.json" target="_blank" rel="noopener noreferrer"&gt;interactive_mood_selector_ui.json&lt;/a&gt;
 which didn&amp;rsquo;t render correctly, both in the JavaFX view and my web-based view to compare it with.&lt;/p&gt;</description></item><item><title>A Week of Housekeeping: What Changed on Foojay.io</title><link>https://foojayio.github.io/website/today/a-week-of-housekeeping-what-changed-on-foojay-io/</link><pubDate>Mon, 06 Jul 2026 10:04:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-week-of-housekeeping-what-changed-on-foojay-io/</guid><description>&lt;p&gt;Running a community website is a bit like maintaining a codebase: the content that matters most is never completely done. And if you don&amp;rsquo;t schedule regular housekeeping, things can get outdated&amp;hellip; Last week, we did some cleanup, restructuring, and updating. Here&amp;rsquo;s an overview of what changed.&lt;/p&gt;
&lt;h2 id="h2-0-navigation-reorganised"&gt;Navigation Reorganised&lt;/h2&gt;
&lt;p&gt;The top menu needed some restructuring&amp;hellip;&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;News&lt;/strong&gt; menu now focuses purely on what it says: &lt;a href="https://foojayio.github.io/website/today/"&gt;Daily News&lt;/a&gt;
, the &lt;a href="https://foojayio.github.io/website/today/category/podcast/"&gt;Foojay Podcast&lt;/a&gt;
, the &lt;a href="https://foojayio.github.io/website/today/category/jc-ai-newsletter/"&gt;JC-AI Newsletter&lt;/a&gt;
 by &lt;a href="https://foojayio.github.io/website/today/author/miro-wengner/"&gt;Miro Wengner&lt;/a&gt;
, the new &lt;a href="https://foojayio.github.io/website/ai/"&gt;Foojay.io AI Portal&lt;/a&gt;
, and the &lt;a href="https://foojayio.github.io/website/calendar"&gt;Event Calendar&lt;/a&gt;
. The AI Portal is a recent addition we hadn&amp;rsquo;t properly surfaced before. It collects AI-related resources and tooling for Java developers, so it deserves its own slot in the navigation.&lt;/p&gt;</description></item><item><title>Getting Started with Exposed: Kotlin ORM Made Simple</title><link>https://foojayio.github.io/website/today/exposed-kotlin-orm-complete-guide/</link><pubDate>Mon, 06 Jul 2026 03:39:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/exposed-kotlin-orm-complete-guide/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;For quite some time, I have been a huge fan of and fascinated by JetBrains products, tools, and libraries because of their masterful craftsmanship in product creation and their pristine focus on building high-quality developer tools.&lt;/p&gt;
&lt;p&gt;Even more excitingly, JetBrains Java Annotated Monthly newsletters have featured most of the technical articles I wrote for Foojay on topics such as Java, Spring, Spring Boot 4, and OpenRewrite.&lt;/p&gt;
&lt;p&gt;Recently, one Kotlin Domain-Specific Language (DSL) library caught my attention. I immediately tried converting my existing Spring Boot 4 application from Java to Kotlin using Exposed, an ORM framework for Kotlin.
&lt;img src="https://foojayio.github.io/website/today/exposed-kotlin-orm-complete-guide/Exposed-1024x683.png" alt="Exposed" loading="lazy"&gt;
 Kotlin SQL Libary&lt;/p&gt;</description></item><item><title>Funding Open Source Without The Bait And Switch: Analytics, Native Maps, TV And More</title><link>https://foojayio.github.io/website/today/funding-open-source-without-the-bait-and-switch-analytics-native-maps-tv-and-more/</link><pubDate>Sun, 05 Jul 2026 13:41:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/funding-open-source-without-the-bait-and-switch-analytics-native-maps-tv-and-more/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/funding-open-source-without-the-bait-and-switch.jpg" alt="Funding Open Source Without The Bait And Switch" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Years ago I wrote a piece called &lt;a href="https://debugagent.com/open-source-bait-and-switch" target="_blank" rel="noopener noreferrer"&gt;Open Source Bait and Switch&lt;/a&gt;
. The short version: a project is released as open source while it has no business model, a community forms around it, and then the bill comes due. The project either rots into abandonware because nobody can afford to maintain it, or it sprouts a home-grown &amp;ldquo;source available&amp;rdquo; license that quietly takes back the freedoms it was given on. You have watched this happen. So have I.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>This Dependency Update Looked Exactly Like an Account Takeover</title><link>https://foojayio.github.io/website/today/this-dependency-update-looked-exactly-like-an-account-takeover/</link><pubDate>Fri, 03 Jul 2026 08:31:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/this-dependency-update-looked-exactly-like-an-account-takeover/</guid><description>&lt;p&gt;I pointed a scanner I have been building at an old Spring project, and it flagged javax.activation. The bump was 1.1-rev-1 to 1.1.1. Prior releases carried a GPG signature. This one did not.
&lt;img src="https://foojayio.github.io/website/today/this-dependency-update-looked-exactly-like-an-account-takeover/pr-comment-682x510.png" alt="git hub diff comment on PR" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;If you have read the post-mortems of real supply-chain attacks, that pattern should make you sit up. A package that has signed its releases for years suddenly ships one unsigned. The boring explanation is a build pipeline change. The other explanation is that a different person is publishing now, and the signing key stayed behind with the old one. When ua-parser-js was hijacked in 2021, the malicious versions came from a compromised account. When event-stream went bad in 2018, it was a new maintainer nobody had vetted. The artifact looks fine. The metadata around it is what changed.&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0 : Navigate Anything: JSONPath Comes to BoxLang's DataNavigator</title><link>https://foojayio.github.io/website/today/boxlang-1-14-0-navigate-anything-jsonpath-comes-to-boxlangs-datanavigator/</link><pubDate>Thu, 02 Jul 2026 18:17:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-14-0-navigate-anything-jsonpath-comes-to-boxlangs-datanavigator/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-1-14-0-navigate-anything-jsonpath-comes-to-boxlangs-datanavigator/BoxLang-release-1.14.0-3-700x394.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Every application eventually has to deal with deeply nested data. JSON API responses with payloads six levels deep. Configuration files where the key you need is buried inside an array of objects, one of which has a &lt;code&gt;null&lt;/code&gt; for the field you thought was required. Module metadata structures that nobody wrote a schema for. Runtime introspection data shaped like a tree that grew without a plan.&lt;/p&gt;
&lt;p&gt;BoxLang introduced DataNavigators in version 1 so you can use &lt;code&gt;dataNavigate()&lt;/code&gt;, call &lt;code&gt;.from()&lt;/code&gt; to scope down, chain your &lt;code&gt;.get()&lt;/code&gt; calls, provide defaults everywhere. Clean and safe. But even with the fluent API, extracting a specific slice of a complex payload still required multiple navigator hops, or a loop, or defensive key-exists checks stacked three levels deep.&lt;/p&gt;</description></item><item><title>Building AI Systems with MongoDB: Implementing the Planning Pattern</title><link>https://foojayio.github.io/website/today/building-ai-systems-with-mongodb-implementing-the-planning-pattern/</link><pubDate>Thu, 02 Jul 2026 10:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-ai-systems-with-mongodb-implementing-the-planning-pattern/</guid><description>&lt;p&gt;Artificial Intelligence has swiftly evolved from a niche research topic to a technology that impacts nearly every aspect of the software industry. Developers now use AI to generate code, review pull requests, create documentation, and accelerate workflows through methods like vibe coding and specification-driven development. While these applications position AI as an engineering tool, a new trend is emerging: integrating AI directly into business workflows within applications.&lt;/p&gt;
&lt;p&gt;This shift offers new challenges for software architects and engineers. Traditional applications rely on deterministic flows, where execution paths are explicitly defined by methods, conditions, loops, and business rules. In contrast, machine learning systems can make decisions during execution, select actions, and adjust dynamically based on context and available information. Architects must therefore design systems that balance the predictability of conventional software with the flexibility of AI-powered reasoning. The Planning Pattern is an effective approach for uniting these domains. Instead of having an LLM address a complex objective in a single step, this pattern breaks the goal into smaller, feasible tasks that interact with deterministic code, external services, and data sources. This creates a more reliable and observable path toward autonomous AI applications.&lt;/p&gt;</description></item><item><title>Using the Raspberry Pi Sense HAT with Pi4J Drivers</title><link>https://foojayio.github.io/website/today/using-the-raspberry-pi-sense-hat-with-pi4j-drivers/</link><pubDate>Wed, 01 Jul 2026 08:38:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-the-raspberry-pi-sense-hat-with-pi4j-drivers/</guid><description>&lt;figure class="alignleft is-resized"&gt;
 &lt;img decoding="async" src="duke_sensehat-819x1024.png" alt="" style="width:250px"&gt;
&lt;/figure&gt;
&lt;p&gt;One of the biggest advantages of the Pi4J Drivers project is the ability to interact with complex hardware through simple and intuitive Java APIs. A great example of this is the Raspberry Pi Sense HAT, one of the most popular Raspberry Pi add-on boards and the hardware platform used in the Astro Pi program aboard the International Space Station.&lt;/p&gt;
&lt;p&gt;Instead of manually implementing communication with multiple sensors and devices, Pi4J Drivers provides a ready-to-use driver that makes accessing the Sense HAT straightforward and enjoyable.&lt;/p&gt;</description></item><item><title>JavaFX Links of June 2026</title><link>https://foojayio.github.io/website/today/javafx-links-of-june-2026/</link><pubDate>Tue, 30 Jun 2026 07:23:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-june-2026/</guid><description>&lt;p&gt;Here are the JavaFX LinksOfTheMonth of June 2026. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3mnans5s67c2u" target="_blank" rel="noopener noreferrer"&gt;Message by &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;ve spent most of today (and the past few days) on JavaFX 17/21/25 LTS. It&amp;rsquo;s a lot of work, but almost a pleasure because the tools/procedures are so clear. Skara is extremely helpful with backports. And it&amp;rsquo;s deterministic. JavaFX is very well maintained.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;From the dev mailinglist: &lt;a href="https://github.com/openjdk/jfx/commit/738be0f10f8dbbbe182aa3d06ee86313fa181bb1" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Michael Strauß&lt;/strong&gt; integrated JDK-8385459&lt;/a&gt;
 in &lt;a href="https://github.com/openjdk/jfx/pull/2177" target="_blank" rel="noopener noreferrer"&gt;PR #2177&lt;/a&gt;
: Animations should respect reducedMotion preference: &amp;ldquo;&lt;em&gt;Several JavaFX controls use animations to convey state changes, but none respected the reducedMotion accessibility preference. This change makes TableRowSkinBase, TitledPaneSkin, TabPaneSkin, PaginationSkin, and Charts honor Scene.Preferences.reducedMotion.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Apparently, the JFX Adopters Meeting 2026 led to a pull request by &lt;strong&gt;Marius Hanl&lt;/strong&gt; in the OpenJFX repository: &lt;a href="https://github.com/openjdk/jfx/pull/2191" target="_blank" rel="noopener noreferrer"&gt;8386663: Stylesheet/StyleClass list should be lazily initialized&lt;/a&gt;
. Thanks, &lt;a href="https://mastodon.acm.org/@koppor/116810873255149882" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Oliver Kopp&lt;/strong&gt; for sharing this info&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Video by &lt;a href="https://bsky.app/profile/ingstudios.dev/post/3mncdhcnbds2f" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Ethan Lee&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I Built My Own Agentic AI Browser &lt;a href="https://turtlebrowse.ingstudios.dev/" target="_blank" rel="noopener noreferrer"&gt;Turtlebrowse&lt;/a&gt;
 now with Java CEF, Swing, and embedded JavaFX components. &lt;a href="https://www.youtube.com/watch?v=WzU8Cnl3kE0" target="_blank" rel="noopener noreferrer"&gt;Go watch it on YouTube&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/ingstudios.dev/post/3mondjccunc2o" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Ethan Lee&lt;/strong&gt; released Turtlebrowse v1.1.1&lt;/a&gt;
, the open-source browser built to be agentic: &amp;ldquo;&lt;em&gt;This brings features like a multi-process architecture and custom profiles. It also brings patches for internal API errors. It uses Gemma4 under the hood, perfect for everyday tasks. Get it at &lt;a href="https://turtlebrowse.ingstudios.dev/" target="_blank" rel="noopener noreferrer"&gt;turtlebrowse.ingstudios.dev&lt;/a&gt;
!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/java/comments/1u10ble/created_a_simple_minimal_canvas_application_in/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gufran Thakur&lt;/strong&gt; created a simple, minimal Canvas Application in JavaFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;After like a year finally getting back to JavaFX, decided to make an excalidraw inspired app for fun. It&amp;rsquo;s a very minimal canvas app with basic features. &lt;a href="https://github.com/gufranthakur/ExplainFX" target="_blank" rel="noopener noreferrer"&gt;Source code is on ExplainFX&lt;/a&gt;
. Features: Drawing, Create Squares and Circles, Text, Vary stroke size/font size,&amp;hellip; Please let me know if you have any questions!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Max Xiong&lt;/strong&gt; continuous his &amp;ldquo;Building In Public&amp;rdquo; journey for his DataCollie application. &lt;a href="https://bsky.app/profile/maxiong.bsky.social/post/3mnulx7aomc2u" target="_blank" rel="noopener noreferrer"&gt;Follow him on Bluesky for regular updates and screenshots&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Tonight I implemented the custom UI styling for Project context menu items.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1u9hfn1/dropping_a_small_pdf_viewer_for_you_guys_javafx/" target="_blank" rel="noopener noreferrer"&gt;Found on Reddit, by &lt;strong&gt;xdsswar&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Dropping a small PDF viewer for you guys (JavaFX + native PDFium). It&amp;rsquo;s done on native PDFium via Java&amp;rsquo;s FFM API (no PDFBox, no AWT). Has zoom, text selection, search, thumbnails, the usual, would love some feedback. &lt;a href="https://github.com/xdsswar/ultimate-pdf-viewer" target="_blank" rel="noopener noreferrer"&gt;Repo link&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1u5zjpo/i_built_jylos_a_localfirst_opensource_knowledge/" target="_blank" rel="noopener noreferrer"&gt;By &lt;strong&gt;RGiskard7&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I built Jylos, a local-first open-source knowledge management app using Java and JavaFX. It started as a personal project to explore desktop application architecture, JavaFX, Markdown processing and software design. Over time it evolved into a complete application with: Markdown notes with live preview, Wiki-links and backlinks, Interactive knowledge graph,&amp;hellip; Everything is stored locally. No accounts, no cloud backend and no telemetry. The &lt;a href="https://github.com/RGiskard7/jylos" target="_blank" rel="noopener noreferrer"&gt;project is open source&lt;/a&gt;
 under the MIT license and binaries are available for Windows, Linux and macOS. I&amp;rsquo;d really appreciate any feedback, especially from JavaFX developers.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1ua30k4/my_first_javafx_application/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mechanical-pasta&lt;/strong&gt; shared his &amp;ldquo;First JavaFx Application&amp;rdquo; on Reddit&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I tried JavaFx, and, as a support project to learn the language, I&amp;rsquo;ve decided to build my own MineSweeper but with some differences. You can find it &lt;a href="https://github.com/TargolLagadec/MineSweeperTribute" target="_blank" rel="noopener noreferrer"&gt;here if you&amp;rsquo;re interested&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;In the &lt;a href="https://www.jfx-central.com/links/2026-05-29" target="_blank" rel="noopener noreferrer"&gt;Links Of The Week of 2026-05-29&lt;/a&gt;
, we shared &amp;ldquo;DiskSpace&amp;rdquo;, a cross-platform disk space visualizer by &lt;strong&gt;Marcus Hirt&lt;/strong&gt; . In the blog post &lt;a href="https://hirt.se/blog/?p=1606" target="_blank" rel="noopener noreferrer"&gt;Using GraalVM, JavaFX and a Clanker to Build a Cross Platform Desktop App&lt;/a&gt;
, he shares a lot of background information about the project, the architecture, and the build process.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1tul6x8/live_property_editing_for_javafx_nodes_in_devtools/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Striking_Creme864&lt;/strong&gt; shared a video on Reddit&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Live property editing for JavaFX nodes in DevTools. When building JavaFX applications, we often need not only to inspect a node&amp;rsquo;s properties, but also tweak them to see how they behave. Restarting the app every time to test small changes quickly becomes a major time sink. So we added live property editing directly to the DevTools in our platform (TabShell). The property editor supports three simple forms: basic values, enums, and Insets, but this made UI debugging and iteration much faster.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mncofbca722s" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared screenshots&lt;/a&gt;
 of the new &lt;code&gt;StageStyle.EXTENDED&lt;/code&gt;: &amp;ldquo;&lt;em&gt;I recently updated the FlexGanttFX showcase application to use the new HeaderBar component and StageStyle.EXTENDED type. This results in a very clean and professional looking UI.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;You can also try it online at &lt;a href="https://demos.jpro.one/flexganttfx-showcase.html" target="_blank" rel="noopener noreferrer"&gt;demos.jpro.one/flexganttfx-showcase.html&lt;/a&gt;
 or install locally &lt;a href="https://www.jdeploy.com/~flexganttfxshowcase" target="_blank" rel="noopener noreferrer"&gt;via jdeploy&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; released &lt;a href="https://lottie4j.com/releases/index.html" target="_blank" rel="noopener noreferrer"&gt;Lottie4J 1.2.4&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Fixed Lottie arc rendering: constrained the easing solver to prevent bezier curve divergence. Added bisection fallback for flat-point curves. Fixed full-circle trim path flickering caused by floating-point precision loss in offset wrapping. Fixed border rendering error. Added Pi4J test file.&lt;/em&gt; &amp;quot; Available on &lt;a href="https://central.sonatype.com/search?q=g:com.lottie4j" target="_blank" rel="noopener noreferrer"&gt;Maven Central&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://plugins.jetbrains.com/plugin/32337-fxml-2-for-javafx" target="_blank" rel="noopener noreferrer"&gt;FXML/2 for JavaFX&lt;/a&gt;
: IntelliJ IDE plugin for the &lt;a href="https://jfxcore.github.io/fxml-compiler/" target="_blank" rel="noopener noreferrer"&gt;FXML/2 markup format&lt;/a&gt;
, supporting syntax highlighting, folding, formatting, EditorConfig-aware indentation, tag and attribute resolution, code completion, and navigation to JavaFX classes. Presented as &amp;ldquo;FXML 2.0: Write Markup, Ship Bytecode&amp;rdquo; by &lt;strong&gt;Michael Strauß&lt;/strong&gt; at the &lt;a href="https://www.zeiss.com/meditec/en/news-events/events/jfx-adopters-meeting-2026.html" target="_blank" rel="noopener noreferrer"&gt;JFX Adopters Meeting&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jonathan S. Fisher&lt;/strong&gt; is working on &lt;a href="https://github.com/exabrial/difx" target="_blank" rel="noopener noreferrer"&gt;DiFX, a CDI / Dependency Injection For JavaFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The goal is to have CDI backed beans and events inside JavaFx Desktop Applications. I could use a few eyes/ideas before I cut an initial release and stabilize the API.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/techsenger/shellfx" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;techsenger&lt;/strong&gt; published ShellFX on GitHub&lt;/a&gt;
: a platform for building JavaFX applications using an extended MVP pattern. Part of the growing Techsenger JavaFX library ecosystem (alongside CEFFX, TabPanePro, PatternFX, StagePro, etc.).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/int4-org/FX/releases/tag/0.6.1" target="_blank" rel="noopener noreferrer"&gt;FX Flow 0.6.1&lt;/a&gt;
 got released: declarative, fluent UI library for JavaFX. Adds validation support for atomic multi-value updates. More info by &lt;strong&gt;john16384&lt;/strong&gt; on &lt;a href="https://www.reddit.com/r/JavaFX/comments/1uf8l0h/fx_flow_061_released_declarative_ui_building_for/" target="_blank" rel="noopener noreferrer"&gt;Reddit/r/JavaFX&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2026-06-04-interview-with-naail-from-lottiefiles/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; published a blog and video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Lottie4J started as a single question: can JavaFX render Lottie animations without a WebView? That question turned into a library. The library attracted pull requests. And now I had a 50-minute conversation with &lt;strong&gt;Naail Abdul Rahman&lt;/strong&gt;, R&amp;amp;D engineer at LottieFiles, to talk about where the format is heading and what that means for a Java implementation.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/pedro-duque-vieira-2644038_healthcare-healthtech-healthcareit-ugcPost-7467911189063245824-igkN/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; shared a video on LinkedIn&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;New capability added to the IKE Knowledge Layout Editor: display semantics can now be viewed in a table format. This provides a more structured way to inspect semantic information, which can be especially useful when working with large numbers of semantics.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A live session of 2,5 hours with &lt;strong&gt;Johannes Rabauer&lt;/strong&gt; and &lt;strong&gt;Anton Arhipov&lt;/strong&gt; : &lt;a href="https://www.youtube.com/live/LekXCf-FJ00" target="_blank" rel="noopener noreferrer"&gt;Building a MIDI Visualizer with Junie, IntelliJ and JavaFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;AI assisted development is becoming a core part of modern software engineering. But what does that actually look like in a real Java project? In this live coding session, we explore AI powered development inside IntelliJ IDEA while building a JavaFX application that visualizes MIDI music through animated waveform based visualizations. Rather than treating AI as a code generator, we will use Junie and other IntelliJ AI capabilities as development partners throughout the process. Together, we&amp;rsquo;ll explore how AI can help with architecture, implementation, refactoring, testing, and day to day development decisions.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; interviewed &lt;strong&gt;David Gutierrez&lt;/strong&gt; in a new video: &lt;a href="https://webtechie.be/post/javafx-in-action-%2327-with-david-gutierrez-about-jmathanim-to-create-mathematical-animations/" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action #27 with David Gutierrez about JMathAnim to Create Mathematical Animations&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JMathAnim is a Java library and UI built on JavaFX that lets you create animated mathematical visualizations. The goal is simple: make it easy to build videos that explain mathematical concepts through animation. It&amp;rsquo;s inspired by the kind of content you see on YouTube channels like 3Blue1Brown.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-conferences-presentations"&gt;Conferences, Presentations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ZEISS Meditec hosted the &lt;a href="https://www.zeiss.com/meditec/en/news-events/events/jfx-adopters-meeting-2026.html" target="_blank" rel="noopener noreferrer"&gt;JFX Adopters Meeting 2026&lt;/a&gt;
 on June 16 in Munich. The full-day agenda included: &amp;ldquo;Low-Latency JavaFX: Robotics and Native Bindings&amp;rdquo; (&lt;strong&gt;Florian Enner&lt;/strong&gt; ), &amp;ldquo;JavaFX &amp;ndash; Status and Beyond&amp;rdquo; (&lt;strong&gt;Wolfgang Weigend&lt;/strong&gt; ), &amp;ldquo;JPRO &amp;ndash; the Future of Unified JavaFX Application Development across Desktop and Web&amp;rdquo; (&lt;strong&gt;Florian Kirmaier&lt;/strong&gt; ), &amp;ldquo;FXML 2.0: Write Markup, Ship Bytecode&amp;rdquo; (&lt;strong&gt;Michael Strauß&lt;/strong&gt; ), &amp;ldquo;Beyond MVC: A Practical Guide to MVVM in JavaFX&amp;rdquo; (&lt;strong&gt;Tibor Malanik&lt;/strong&gt; ), &amp;ldquo;Diagnosis in the Context of eBike Systems with JavaFX&amp;rdquo; (&lt;strong&gt;Frido Fechner&lt;/strong&gt; ), &amp;ldquo;JavaFX for Electronics Control&amp;rdquo; (&lt;strong&gt;Thorsten Stüker&lt;/strong&gt; ), &amp;ldquo;Lets Contribute Together&amp;rdquo; (&lt;strong&gt;Marius Hanl&lt;/strong&gt; ), and &amp;ldquo;Spreadsheet Calculation and Document Processing in JavaFX: Lessons from SCell and bk.text&amp;rdquo; (&lt;strong&gt;Vasily Smeltsov&lt;/strong&gt; ). Pictures shared by &lt;strong&gt;Wolfgang Weigend&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;The &lt;a href="https://bsky.app/profile/wolfgangweigend.bsky.social/post/3mofuegyfvc2n" target="_blank" rel="noopener noreferrer"&gt;official opening of the JFX Adopters Meeting 2026&lt;/a&gt;
 by &lt;strong&gt;Christian Heilmann&lt;/strong&gt; and &lt;strong&gt;Lisa&lt;/strong&gt;, both work with JavaFX at Zeiss Meditec AG.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;The &lt;a href="https://bsky.app/profile/wolfgangweigend.bsky.social/post/3mofusejv5k2l" target="_blank" rel="noopener noreferrer"&gt;robotics session&lt;/a&gt;
 &amp;lsquo;Low-Latency JavaFX: Robotics and Native Bindings&amp;rsquo; by Florian Enner.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;&lt;a href="https://bsky.app/profile/wolfgangweigend.bsky.social/post/3mofuzfnzes2l" target="_blank" rel="noopener noreferrer"&gt;Great welcome in the morning&lt;/a&gt;
 with &lt;strong&gt;Tom Schindl&lt;/strong&gt; , &lt;strong&gt;Stefano Negri&lt;/strong&gt; and &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; &amp;mdash; all about JavaFX applications&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/wolfgangweigend.bsky.social/post/3mocwnoogjc2n" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Wolfgang Weigend&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Please find the session &amp;lsquo;&lt;a href="https://jugf.github.io/posts/javafx-ui-technologie-als-zentraler-baustein-im-java-okosystem-24-06-2026/" target="_blank" rel="noopener noreferrer"&gt;JavaFX UI technology as a central component of the Java ecosystem&lt;/a&gt;
&amp;rsquo; on Wednesday 24th of June 2026 at the Java User Group Frankfurt am Main in the National Library.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/svgnode" target="_blank" rel="noopener noreferrer"&gt;SvgNode&lt;/a&gt;
, a lightweight JavaFX node for rendering SVG paths at any size. Fully supports FXML, property binding, and CSS styling.&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/pb54youm6AM" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with David Gutierrez about JMathAnim&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The JavaFX Links Of The Week of May got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-may-2026/"&gt;bundled and published on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>You’re invited to IntelliJ IDEA Conf 2026!</title><link>https://foojayio.github.io/website/today/youre-invited-to-intellij-idea-conf-2026/</link><pubDate>Mon, 29 Jun 2026 18:35:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/youre-invited-to-intellij-idea-conf-2026/</guid><description>&lt;p&gt;&lt;strong&gt;We are excited to invite you to IntelliJ IDEA Conf 2026, a free virtual event on September 8-9, 2026.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;IntelliJ IDEA Conf is a celebration of the developer community, bringing together professionals who strive for excellence in software development. Join us for this free, live online conference and learn from industry leaders and experts on September 8-9, 2026.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll be able to learn about a broad range of topics relevant to modern Java and Kotlin development, including language evolution, enterprise Java, Spring-based applications, build tooling, containerized workflows, JVM performance, and data access technologies. For more details, see the agenda below.&lt;/p&gt;</description></item><item><title>7 Jackson CVEs in One Day: AI-Assisted Security Research</title><link>https://foojayio.github.io/website/today/7-new-vulnerabilities-in-jackson-in-one-day-this-is-what-ai-assisted-security-research-looks-like/</link><pubDate>Mon, 29 Jun 2026 11:47:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/7-new-vulnerabilities-in-jackson-in-one-day-this-is-what-ai-assisted-security-research-looks-like/</guid><description>&lt;p&gt;&lt;strong&gt;Quick version check:&lt;/strong&gt; the affected range for all seven is broadly &lt;code&gt;&amp;gt;=2.10.0 =2.19.0 =3.0.0 &amp;lt;3.1.4&lt;/code&gt; &amp;mdash; with some CVEs affecting narrower ranges. If you&amp;rsquo;re on a supported release, upgrade to 2.18.8, 2.21.4, or 3.1.4. If you&amp;rsquo;re on an EOL line &amp;mdash; 2.13.x, 2.14.x, 2.15.x &amp;mdash; jump to the bottom of the page for more specifics or visit &lt;a href="https://docs.herodevs.com/jackson?utm_source=devrel&amp;amp;amp;utm_medium=referral&amp;amp;amp;utm_campaign=2026q2_spring-boot-3-5-eol_global" target="_blank" rel="noopener noreferrer"&gt;HeroDevs Jackson Support&lt;/a&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="h3-0-not-a-sales-pitch"&gt;Not a sales pitch&lt;/h3&gt;
&lt;p&gt;Anyone who knows me knows I dont do that. In this case I&amp;rsquo;m pointing you at &lt;a href="https://docs.herodevs.com/jackson?utm_source=devrel&amp;amp;amp;utm_medium=referral&amp;amp;amp;utm_campaign=2026q2_spring-boot-3-5-eol_global" target="_blank" rel="noopener noreferrer"&gt;HeroDevs&lt;/a&gt;
 because the Jackson issues are serious, &lt;a href="https://docs.herodevs.com/jackson?utm_source=devrel&amp;amp;amp;utm_medium=referral&amp;amp;amp;utm_campaign=2026q2_spring-boot-3-5-eol_global" target="_blank" rel="noopener noreferrer"&gt;HeroDevs&lt;/a&gt;
 have a solution thats stupidly easy to use and I know the folks behind the fixes. It takes a particular type of engineer to create security fixes and I know they have that skillset. Do your own research.&lt;/p&gt;</description></item><item><title>Building an AI-Powered Operations Assistant with Spring AI and MongoDB Atlas — Part 3: Stateful Workflows and Human-in-the-Loop</title><link>https://foojayio.github.io/website/today/building-an-ai-powered-operations-assistant-with-spring-ai-and-mongodb-atlas-part-3-stateful-workflows-and-human-in-the-loop/</link><pubDate>Mon, 29 Jun 2026 09:40:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-an-ai-powered-operations-assistant-with-spring-ai-and-mongodb-atlas-part-3-stateful-workflows-and-human-in-the-loop/</guid><description>&lt;p&gt;This is the third and final article in the series. &lt;a href="https://foojayio.github.io/website/today/building-an-ai-powered-operations-assistant-with-spring-ai-and-mongodb-atlas-part-1-rag-foundation/"&gt;Part 1&lt;/a&gt;
 covered the RAG foundation &amp;mdash; loading runbooks into a vector store and grounding model answers in real documentation. &lt;a href="https://foojayio.github.io/website/today/building-an-ai-powered-operations-assistant-with-spring-ai-and-mongodb-atlas-part-2-conversational-memory/"&gt;Part 2&lt;/a&gt;
 added short-term and long-term conversational memory. This article introduces stateful workflow checkpointing, tool calls, and a pause/resume mechanism that lets multi-step investigations survive session boundaries.&lt;/p&gt;
&lt;h2 id="h2-0-the-remaining-gap"&gt;The Remaining Gap&lt;/h2&gt;
&lt;p&gt;Where were we? At the end of &lt;a href="https://foojayio.github.io/website/today/building-an-ai-powered-operations-assistant-with-spring-ai-and-mongodb-atlas-part-2-conversational-memory/"&gt;Part 2&lt;/a&gt;
 of our tutorial, we have an assistant capable of sustaining a conversation consisting of multiple exchanges and remembering the information exchanged across multiple sessions. For example, an operator can ask multiple questions regarding a CPU spike alert and will receive responses from the assistant that build upon one another, taking into account their preferences or past choices. In fact, across all sessions, the assistant will remember when the operator expressed a preference for using Helm charts for rollback operations and the fact that the payments service runs on a Kubernetes infrastructure consisting of 16 pods.&lt;/p&gt;</description></item><item><title>Endive 1.0 Is Here: Wasm on the JVM Ships Under the Bytecode Alliance</title><link>https://foojayio.github.io/website/today/endive-1-0-wasm/</link><pubDate>Mon, 29 Jun 2026 00:11:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/endive-1-0-wasm/</guid><description>&lt;p&gt;A few weeks ago, we wrote about &lt;a href="https://foojayio.github.io/website/today/a-new-generation-of-java-libraries-is-born-wasm-becomes-the-implementation-detail/"&gt;a new generation of Java libraries&lt;/a&gt;
 powered by WebAssembly. SQLite, QuickJS, Protocol Buffers, the Ruby Prism parser, all compiled to Wasm and shipped as regular JARs. No JNI, no platform-specific binaries. Wasm as an implementation detail.&lt;/p&gt;
&lt;p&gt;Today, the runtime that makes it all work has its first official release under the &lt;a href="https://bytecodealliance.org/" target="_blank" rel="noopener noreferrer"&gt;Bytecode Alliance&lt;/a&gt;
. &lt;strong&gt;&lt;a href="https://endive.run/blog/endive-1.0" target="_blank" rel="noopener noreferrer"&gt;Endive 1.0&lt;/a&gt;
&lt;/strong&gt; is available on Maven Central.&lt;/p&gt;
&lt;h2 id="h2-0-what-shipped"&gt;What Shipped&lt;/h2&gt;
&lt;p&gt;Endive continues the work started as &lt;a href="https://github.com/dylibso/chicory" target="_blank" rel="noopener noreferrer"&gt;Chicory&lt;/a&gt;
, the pure-Java WebAssembly runtime that has been powering this ecosystem since 2023. Same API, same community, same codebase. The move to the Bytecode Alliance is organizational, not technical. For details on the fork and governance, see the &lt;a href="https://bytecodealliance.org/articles/endive-and-the-next-chapter-of-webassembly-on-the-jvm" target="_blank" rel="noopener noreferrer"&gt;announcement article&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>AI-Assisted Unused &amp; Dead Code Removal</title><link>https://foojayio.github.io/website/today/ai-assisted-unused-dead-code-removal/</link><pubDate>Sun, 28 Jun 2026 07:19:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/ai-assisted-unused-dead-code-removal/</guid><description>&lt;h2 id="h-why-your-codebase-is-forcing-ai-to-underperform-and-what-to-do-about-it"&gt;Why Your Codebase Is Forcing AI to Underperform, and What to Do About It&lt;/h2&gt;
&lt;figure class="alignleft size-large is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="1024" height="576" src="ai-assisted-dead-code-removal-1024x576.avif" alt="" class="wp-image-124402" style="width:250px"&gt;
&lt;/figure&gt;
&lt;p&gt;Your AI coding assistant is only as good as the codebase it works on. If your Java application carries years of dead &amp;amp; unused code, and most do, the AI spends its reasoning budget on code that nobody runs. The result is more hallucinations, worse suggestions, and higher token costs. Here&amp;rsquo;s what to do about it.&lt;/p&gt;</description></item><item><title>Native Linux, Apple Watch, A Game Builder And Crash Protection</title><link>https://foojayio.github.io/website/today/native-linux-apple-watch-a-game-builder-and-crash-protection/</link><pubDate>Fri, 26 Jun 2026 18:43:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/native-linux-apple-watch-a-game-builder-and-crash-protection/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/native-linux-apple-watch-game-builder-crash-protection.jpg" alt="Native Linux, Apple Watch, A Game Builder And Crash Protection" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;This week brings a native Linux desktop port, an Apple Watch and Wear OS port, a visual Game Builder with a high-level gaming API, and a new crash-protection system, with a tutorial following each one over the coming days. There is also a large piece of work that you mostly should not have noticed: we rebuilt the build cloud, and that rebuild caused a few failed builds along the way. More on that below.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Jurassic JDK: Migrate or Extinct</title><link>https://foojayio.github.io/website/today/jurassic-jdk-migrate-or-extinct/</link><pubDate>Fri, 26 Jun 2026 07:28:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/jurassic-jdk-migrate-or-extinct/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/jurassic-jdk-migrate-or-extinct/1_wul-KqE6vXk4ynnh_IljSQ-1-1024x562.webp" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;65 million years ago, dinosaurs didn&amp;rsquo;t adapt. They&amp;rsquo;re gone. Your JDK 7 app is giving the same energy. 🫠&lt;/p&gt;
&lt;p&gt;I spent a year and a half migrating more than 15 projects in production. Full time. Real teams, real deadlines, real 2am breakage. This is everything I wish someone had written before I started.&lt;/p&gt;
&lt;h2 id="h2-0-why-are-we-still-here"&gt;Why Are We Still Here? 👀&lt;/h2&gt;
&lt;p&gt;Walk into any company with a codebase older than 5 years and you&amp;rsquo;ll hear the same thing:&lt;/p&gt;</description></item><item><title>Aggregation Optimization in MongoDB: Unnecessary Unwinds (Part 2)</title><link>https://foojayio.github.io/website/today/aggregation-optimization-in-mongodb-unnecessary-unwinds-part-2/</link><pubDate>Thu, 25 Jun 2026 10:01:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/aggregation-optimization-in-mongodb-unnecessary-unwinds-part-2/</guid><description>&lt;h2 id="h2-0-and-why-mongodb-might-be-a-better-relational-database-than-you-ever-realized"&gt;And why MongoDB might be a better relational database than you ever realized.&lt;/h2&gt;
&lt;figure class="wp-block-image size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="700" height="307" src="tue11.png" alt="" class="wp-image-124328" style="aspect-ratio:2.2802192518511397;width:840px;height:auto"&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a href="https://www.mongodb.com/events/mongodb-schema-design-reviews/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=agg-part2-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;Design reviews&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;are one-on-one meetings where MongoDB experts deliver advice on data modeling best practices and application design challenges. In this series, we are going to explore common real-life scenarios where design reviews helped developers achieve meaningful success with MongoDB.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This article was written by Graeme Robinson. Find him on&lt;/em&gt; &lt;a href="https://www.linkedin.com/in/graemecrobinson" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;LinkedIn&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://foojayio.github.io/website/today/aggregation-optimization-in-mongodb-a-case-study-from-the-field-part-1/"&gt;In Part 1 of this series&lt;/a&gt;
, we described a use case based on a recent design review I conducted with a team at a MongoDB customer. The team in question was new to MongoDB, and the approach they had taken to both modeling their data and then subsequently querying it was very &amp;ldquo;RDBMS-like.&amp;rdquo; As a result, query performance was significantly slower than their SLA called for.&lt;/p&gt;</description></item><item><title>Pi4J Drivers: Simplifying Sensor and Hardware Integration in Java</title><link>https://foojayio.github.io/website/today/pi4j-drivers-simplifying-sensor-and-hardware-integration-in-java/</link><pubDate>Thu, 25 Jun 2026 07:07:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/pi4j-drivers-simplifying-sensor-and-hardware-integration-in-java/</guid><description>&lt;figure class="alignleft is-resized"&gt;
 &lt;img decoding="async" src="duke_driver01-819x1024.png" alt="" style="width:300px"&gt;
&lt;/figure&gt;
&lt;p&gt;When developing Java applications for Raspberry Pi, &lt;a href="https://www.pi4j.com/" target="_blank" rel="noopener noreferrer"&gt;Pi4J&lt;/a&gt;
 is one of the most popular libraries for accessing GPIO, I2C, SPI, PWM, and other hardware interfaces. However, interacting directly with these protocols often requires a significant amount of code and a deep understanding of the underlying hardware.&lt;/p&gt;
&lt;p&gt;This is where the &lt;strong&gt;Pi4J Drivers library&lt;/strong&gt; become extremely valuable.&lt;/p&gt;
&lt;h3 id="h3-0-what-is-pi4j-drivers"&gt;What is Pi4J Drivers?&lt;/h3&gt;
&lt;p&gt;Pi4J Drivers is a companion project to Pi4J that provides ready-to-use drivers for a wide range of electronic components, including sensors, displays, I/O expanders, and actuators. Instead of implementing low-level communication from scratch, developers can leverage tested and reusable APIs to interact with hardware devices.&lt;/p&gt;</description></item><item><title>What's New In The June 2026 Azul Payara Release?</title><link>https://foojayio.github.io/website/today/whats-new-in-the-june-2026-azul-payara-release/</link><pubDate>Wed, 24 Jun 2026 11:28:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/whats-new-in-the-june-2026-azul-payara-release/</guid><description>&lt;p&gt;The June 2026 cycle ships the first regular monthly release of the Payara 7 line, plus a critical security fix that lands across every supported branch. Azul Payara 7.1.0 continues the Jakarta EE 11 line that went generally available in May, and is joined by Azul Payara Community 7.2026.6, Azul Payara 6.39.0, Azul Payara 5.88.0, and Azul Payara 4.1.2.191.56.&lt;/p&gt;
&lt;p&gt;A single security fix, backported from Payara 7 down to Payara 4, runs through every release in this cycle. Two supported lines, 5.88.0 and 6.39.0, also carry a behaviour change to the server &amp;ldquo;ready&amp;rdquo; signal that a minority of deployments will want to read before upgrading.&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0 : Query Transformers - Take Full Control of Your Query Results</title><link>https://foojayio.github.io/website/today/boxlang-1-14-0-query-transformers-take-full-control-of-your-query-results/</link><pubDate>Wed, 24 Jun 2026 10:46:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-14-0-query-transformers-take-full-control-of-your-query-results/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-1-14-0-query-transformers-take-full-control-of-your-query-results/BoxLang-release-1.14.0-2-700x394.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;BoxLang 1.14.0 ships a lot of exciting features &amp;ndash; Dynamic Sets, Ranges, Inner Classes, JSONPath navigation &amp;ndash; but one quietly powerful addition will change the way you think about every database call in your application: &lt;strong&gt;Query Transformers&lt;/strong&gt;, and this is just the start, we have plans for a whole lot more cool query features.&lt;/p&gt;
&lt;p&gt;If you have ever executed a query and then immediately written a loop to reshape the result into what you actually needed, this feature is for you.&lt;/p&gt;</description></item><item><title>double, BigDecimal, or Fixed-Point? Precision, Performance, and Sane Choices for Numbers in Java</title><link>https://foojayio.github.io/website/today/double-bigdecimal-or-fixed-point-precision-performance-and-sane-choices-for-numbers-in-java/</link><pubDate>Wed, 24 Jun 2026 07:38:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/double-bigdecimal-or-fixed-point-precision-performance-and-sane-choices-for-numbers-in-java/</guid><description>&lt;p&gt;There is an evergreen debate in the Java world: &lt;em&gt;Should you always use&lt;/em&gt; &lt;code&gt;MARKDOWN_HASHeb731dbabfc7392f8ad8c1cdb326a26aMARKDOWN&lt;/code&gt;&lt;em&gt;HASH&lt;/em&gt; for money?&lt;/p&gt;
&lt;p&gt;The short answer is &lt;strong&gt;no&lt;/strong&gt; . The real answer is: &lt;em&gt;it depends on your computational context: the precision you need, the rounding rules you must follow, and the performance budget you have.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The problem is that this conversation is often driven by dogma rather than engineering. You hear statements like &amp;ldquo;&lt;code&gt;double&lt;/code&gt; is broken,&amp;rdquo; &amp;ldquo;&lt;code&gt;BigDecimal&lt;/code&gt; is slow,&amp;rdquo; &amp;ldquo;always use fixed-point,&amp;rdquo; or &amp;ldquo;always use IEEE 754,&amp;rdquo; each treated as an absolute truth. Reality is more nuanced and more interesting.&lt;/p&gt;</description></item><item><title>Systematic AI Coding: My Takeaways from the Eclipse Foundation Workshop in Brussels</title><link>https://foojayio.github.io/website/today/systematic-ai-coding-my-takeaways-from-the-eclipse-foundation-workshop-in-brussels/</link><pubDate>Tue, 23 Jun 2026 19:48:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/systematic-ai-coding-my-takeaways-from-the-eclipse-foundation-workshop-in-brussels/</guid><description>&lt;p&gt;Most developers using AI tools are still guessing. The Eclipse Foundation&amp;rsquo;s first &lt;a href="https://aieclipse.org/ai-workshop/" target="_blank" rel="noopener noreferrer"&gt;AI Coding Workshop&lt;/a&gt;
 in Brussels was built to change that. It&amp;rsquo;s a brand new format they launched in Brussels, which makes sense: most of the Eclipse event team is based there. They plan to bring it to more cities from here, so keep an eye out if you want to attend such a workshop in the future. They offered 10 free tickets to share with the BeJUG and Foojay community. And in all honesty, I used one for myself. &lt;a href="https://www.linkedin.com/in/jonas-helming-76303b28/" target="_blank" rel="noopener noreferrer"&gt;Jonas Helming&lt;/a&gt;
 from &lt;a href="https://eclipsesource.com/" target="_blank" rel="noopener noreferrer"&gt;EclipseSource&lt;/a&gt;
 led the workshop, with a fun quiz hosted by &lt;a href="https://www.linkedin.com/in/tfroment/" target="_blank" rel="noopener noreferrer"&gt;Thomas Froment&lt;/a&gt;
 in the afternoon. Here&amp;rsquo;s what I took away.&lt;/p&gt;</description></item><item><title>Aggregation Optimization in MongoDB: A Case Study From the Field (Part 1)</title><link>https://foojayio.github.io/website/today/aggregation-optimization-in-mongodb-a-case-study-from-the-field-part-1/</link><pubDate>Tue, 23 Jun 2026 13:17:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/aggregation-optimization-in-mongodb-a-case-study-from-the-field-part-1/</guid><description>&lt;h2 id="h2-0-and-why-mongodb-might-be-a-better-relational-database-than-you-ever-realized"&gt;And why MongoDB might be a better relational database than you ever realized.&lt;/h2&gt;
&lt;figure class="wp-block-image size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="700" height="307" src="tue11.png" alt="" class="wp-image-124328" style="width:840px;height:auto"&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;This article was written by Graeme Robinson. Find him on&lt;/em&gt; &lt;a href="https://www.linkedin.com/in/graemecrobinson" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;LinkedIn&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.mongodb.com/events/mongodb-schema-design-reviews/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=foojay.io&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;Design reviews&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;are one-on-one meetings where MongoDB experts deliver advice on data modeling best practices and application design challenges. In this series, we are going to explore common real-life scenarios where design reviews helped developers achieve meaningful success with MongoDB.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;br /&gt;
&lt;p&gt;MongoDB is often described as a non-relational database, but whenever we store data in a database, there are relationships within that data. Depending on the type of database we use, though, how we model those relationships may change. As my colleague Rick Houlihan &lt;a href="https://www.youtube.com/watch?v=ThmU8a2eVnw" target="_blank" rel="noopener noreferrer"&gt;has often pointed out&lt;/a&gt;
, there really is no such thing as non-relational data.&lt;/p&gt;</description></item><item><title>Quarkus Unpacked: Insights from the Foojay Podcast</title><link>https://foojayio.github.io/website/today/quarkus-unpacked-insights-from-the-foojay-podcast/</link><pubDate>Tue, 23 Jun 2026 12:36:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/quarkus-unpacked-insights-from-the-foojay-podcast/</guid><description>&lt;figure class="alignleft is-resized"&gt;
 &lt;img decoding="async" src="3-Quarkus-Unpacked-2-2.jpeg" alt="Quarkus: A Runtime and Framework for Cloud-Native Java" style="width:300px"&gt;
&lt;/figure&gt;
&lt;p&gt;I recently had the pleasure of joining the &lt;a href="https://www.youtube.com/watch?v=_nJCTTrnZkE" target="_blank" rel="noopener noreferrer"&gt;Foojay podcast&lt;/a&gt;
 to talk about Quarkus in depth. The conversation covered a lot of ground, from what makes Quarkus different to the practical trade-offs between JVM and native mode. This post captures the key questions and answers from that discussion, lightly edited for readability.{#_quarkus_unpacked_insights_from_the_foojay_podcast}&lt;/p&gt;
&lt;p&gt;If you have been following this blog series, note that the third installment on building your own stack with Quarkus is coming next. Consider this a bonus entry that distills the podcast conversation into a format you can read, reference, and share.&lt;/p&gt;</description></item><item><title>Bringing Raspberry Pi Development to Quarkus with the Quarkus Pi4J Extension</title><link>https://foojayio.github.io/website/today/bringing-raspberry-pi-development-to-quarkus-with-the-quarkus-pi4j-extension/</link><pubDate>Tue, 23 Jun 2026 07:30:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/bringing-raspberry-pi-development-to-quarkus-with-the-quarkus-pi4j-extension/</guid><description>&lt;br /&gt;
&lt;p&gt;Java developers building applications for Raspberry Pi often face a common challenge: combining hardware access with modern application frameworks.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pi4j.com/" target="_blank" rel="noopener noreferrer"&gt;Pi4J&lt;/a&gt;
 has become the standard way to access GPIO, I2C, SPI, UART, and other Raspberry Pi interfaces from Java applications. On the other hand, Quarkus has established itself as one of the most innovative Java frameworks, offering fast startup times, low memory consumption, and a developer-friendly experience.&lt;/p&gt;
&lt;p&gt;The Quarkus Pi4J Extension brings these two worlds together, making it easier than ever to build hardware-enabled applications using the Quarkus ecosystem.
&lt;img src="https://foojayio.github.io/website/today/bringing-raspberry-pi-development-to-quarkus-with-the-quarkus-pi4j-extension/quarkus_pi4j01-1024x819.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Foojay Podcast #99: Testing the Untestable: LLM Security for Java Developers with Tiberius</title><link>https://foojayio.github.io/website/today/foojay-podcast-99/</link><pubDate>Mon, 22 Jun 2026 06:54:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-99/</guid><description>&lt;p&gt;Your AI-powered Java application is live in production. But have you actually tested whether it can be jailbroken or manipulated into leaking data it should never reveal? In this episode, Iryna Dohndorf walks us through Tiberius, an open-source security testing library for LLM applications in Java, and explains why everything you know about unit testing needs a rethink when non-determinism is part of the design.&lt;/p&gt;
&lt;h2 id="h2-0-youtube"&gt;YouTube&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/7bBcTzeevEo?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>We Will Not Sabotage Your Code</title><link>https://foojayio.github.io/website/today/we-will-not-sabotage-your-code/</link><pubDate>Sat, 20 Jun 2026 15:37:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/we-will-not-sabotage-your-code/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/we-will-not-sabotage-your-code.jpg" alt="We Will Not Sabotage Your Code" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;This is a very low bar. I am genuinely saddened that I need to write it down at all, because until last week it seemed too obvious to say out loud.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Last week the &lt;a href="https://arstechnica.com/security/2026/05/fed-up-with-vibe-coders-dev-sneaks-data-nuking-prompt-injection-into-their-code/" target="_blank" rel="noopener noreferrer"&gt;news broke&lt;/a&gt;
 of an open source developer doing something I find reprehensible. The short version: fed up with &amp;ldquo;vibe coders,&amp;rdquo; he embedded a hidden prompt aimed at AI agents inside his framework, with instructions designed to destroy data on the machines of people who used it.&lt;/p&gt;</description></item><item><title>Native Java Win32, 3D Gaming, Printing and Wallet</title><link>https://foojayio.github.io/website/today/native-java-win32-3d-gaming-printing-and-wallet/</link><pubDate>Fri, 19 Jun 2026 15:45:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/native-java-win32-3d-gaming-printing-and-wallet/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/weekly.jpg" alt="Native Java Win32, 3D Gaming, Printing and Wallet" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;This week we&amp;rsquo;re introducing native Windows support (no JVM!), a 3D graphics API, a gaming API, support for Apple Wallet, printing and more in what is probably our biggest update ever&amp;hellip; But that&amp;rsquo;s not the thing that excites me the most.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Where production policy belongs: building Eliya in public</title><link>https://foojayio.github.io/website/today/where-production-policy-belongs-building-eliya-in-public/</link><pubDate>Fri, 19 Jun 2026 08:15:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/where-production-policy-belongs-building-eliya-in-public/</guid><description>&lt;p&gt;This is an argument about where production intent belongs in a managed runtime, and the OpenJDK distribution we built to act on it - Eliya, an opinionated, compliance-conscious OpenJDK distribution. This is the first article in a series. The later parts are engineering: reproducible builds, the glibc floor, release signing, the one source patch we shipped. This part is the thesis they all serve.
&lt;img src="https://root.asymm.systems/images/jvm-behaviour-space.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Every configurable system has two spaces. The configuration space: every behaviour you can reach by setting the knobs the system already exposes. And there&amp;rsquo;s the implementation space: behaviour that only exists if someone goes in and changes the internals.&lt;/p&gt;</description></item><item><title>Building Java Containers Without a Dockerfile: Azul Zulu and Paketo Buildpacks</title><link>https://foojayio.github.io/website/today/building-java-containers-without-a-dockerfile-azul-zulu-and-paketo-buildpacks/</link><pubDate>Thu, 18 Jun 2026 08:15:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-java-containers-without-a-dockerfile-azul-zulu-and-paketo-buildpacks/</guid><description>&lt;p&gt;&lt;em&gt;This is the 5th post in the Azul Zulu Docker Official Images series:&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.azul.com/blog/trusted-java-containers-azul-zulu-openjdk-joins-dockers-official-images/" target="_blank" rel="noopener noreferrer"&gt;Trusted Java Containers: Azul Zulu OpenJDK Joins Docker&amp;rsquo;s Official Images&lt;/a&gt;
&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.azul.com/blog/the-road-to-docker-official-images-for-java-the-azul-zulu-story/" target="_blank" rel="noopener noreferrer"&gt;The Road to Docker Official Images for Java: The Azul Zulu Story&lt;/a&gt;
&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.azul.com/blog/using-the-azul-zulu-docker-official-images-from-simple-pull-to-lean-container/" target="_blank" rel="noopener noreferrer"&gt;Using the Azul Zulu Docker Official Images: From Simple Pull to Lean Container&lt;/a&gt;
&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.azul.com/blog/all-azul-zulu-container-images-explained-ca-sa-and-chainguard/" target="_blank" rel="noopener noreferrer"&gt;All Azul Zulu Container Images Explained: CA, SA, and Chainguard&lt;/a&gt;
&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Every post in this series so far has shown you a Dockerfile. You pick a base image, copy a JAR, set an entrypoint, and ship. That works well. But Spring Boot developers often skip the Dockerfile entirely and still get a production-ready container with Azul Zulu as the JVM thanks to Paketo Buildpacks. Here is how that works, and how to configure it.&lt;/p&gt;</description></item><item><title>OpenAPI, ORM, SVG and Lottie</title><link>https://foojayio.github.io/website/today/openapi-orm-svg-and-lottie/</link><pubDate>Thu, 18 Jun 2026 00:52:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/openapi-orm-svg-and-lottie/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/build-time-codegen.jpg" alt="OpenAPI, ORM, SVG and Lottie" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;This is the third follow-up to &lt;a href="https://www.codenameone.com/blog/metal-default-new-build-cloud-and-a-new-format/" target="_blank" rel="noopener noreferrer"&gt;Friday&amp;rsquo;s release post&lt;/a&gt;
. Saturday&amp;rsquo;s was about how you iterate; yesterday&amp;rsquo;s was about new platform APIs in the core; today&amp;rsquo;s is about a run of pieces that change how you write the structural parts of an app.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Mac Native Builds, Live Protocols, And Open Issues Under 350</title><link>https://foojayio.github.io/website/today/mac-native-builds-live-protocols-and-open-issues-under-350/</link><pubDate>Wed, 17 Jun 2026 15:03:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/mac-native-builds-live-protocols-and-open-issues-under-350/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/weekly.jpg" alt="Mac Native Builds, Live Protocols, And Open Issues Under 350" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;Our focus was all over the place this week with work that targeted many different directions: desktop, monetization, communication, media, and more. This fits with our roadmap of one platform that delivers the promise Java never delivered: WORA for Everything Everywhere.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0 : BoxSet is Here, BoxLang's New First-Class Set Type</title><link>https://foojayio.github.io/website/today/boxlang-1-14-0-boxset-is-here-boxlangs-new-first-class-set-type/</link><pubDate>Wed, 17 Jun 2026 10:36:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-14-0-boxset-is-here-boxlangs-new-first-class-set-type/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-1-14-0-boxset-is-here-boxlangs-new-first-class-set-type/BoxLang-release-1.14.0-1-700x394.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;BoxLang 1.14.0 ships with a new &lt;strong&gt;dynamic first-class Set type&lt;/strong&gt; baked directly into the language. Not a wrapper you reach for manually, not a &lt;code&gt;createObject( &amp;quot;java&amp;quot;, &amp;quot;java.util.HashSet&amp;quot; )&lt;/code&gt; incantation you paste from a Stack Overflow answer years ago. A real &lt;code&gt;BoxSet&lt;/code&gt; with literal syntax, operator overloads, a full functional pipeline, change listeners, JSON serialization, and deep Java interop.&lt;/p&gt;
&lt;p&gt;If you have ever deduplicated an array with a loop, compared two collections element by element, or modeled a permission system on top of a struct &amp;ndash; Sets are the tool you were missing. Let&amp;rsquo;s dig in.&lt;/p&gt;</description></item><item><title>Did AI Just Break Software Security For Ever?</title><link>https://foojayio.github.io/website/today/did-ai-just-break-software-security-for-ever/</link><pubDate>Tue, 16 Jun 2026 14:51:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/did-ai-just-break-software-security-for-ever/</guid><description>&lt;p&gt;Whether the answer is yes or no (read on for my opinion) , something fundamental has changed this year. Not one thing. Four things, converging at once.&lt;/p&gt;
&lt;h3 id="h3-0-first-the-rate-of-cve-arrivals"&gt;First: The rate of CVE arrivals&lt;/h3&gt;
&lt;p&gt;More than 40,000 CVEs were published in 2024, rising to just under 50,000 in 2025. FIRST &amp;mdash; the Forum of Incident Response and Security Teams, &lt;a href="https://www.first.org/blog/20260522-vulnerability-forecast-update" title="projects" target="_blank" rel="noopener noreferrer"&gt;projects&lt;/a&gt;
 a median of 68,000 for 2026, with realistic scenarios reaching 70,000 to 100,000.&lt;/p&gt;</description></item><item><title>Ask a Lille Dev</title><link>https://foojayio.github.io/website/today/ask-a-lille-dev-what-java-developers-really-think-about-quality-frameworks-communities-and-careers/</link><pubDate>Tue, 16 Jun 2026 00:35:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/ask-a-lille-dev-what-java-developers-really-think-about-quality-frameworks-communities-and-careers/</guid><description>&lt;p&gt;During the DevLille 2026 conference in Lille, I interviewed several Java developers and tech professionals with one simple goal: collecting authentic and spontaneous insights from the Java ecosystem. ☕🎤&lt;/p&gt;
&lt;p&gt;The result became &lt;strong&gt;&amp;ldquo;Ask a Lille Dev&amp;rdquo;&lt;/strong&gt;, a mini podcast made of short interviews recorded directly during the conference. Instead of long talks or polished marketing speeches, the idea was simple: ask practical questions to people working in tech every day.&lt;/p&gt;</description></item><item><title>Spring, Quarkus,Jooby, or Vert.x: Java Framework Comparison</title><link>https://foojayio.github.io/website/today/spring-quarkus-jooby-vertx-java-framework-comparison/</link><pubDate>Mon, 15 Jun 2026 15:06:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-quarkus-jooby-vertx-java-framework-comparison/</guid><description>&lt;p&gt;&lt;strong&gt;TLDR&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Building the same app four times revealed that the fastest framework also needed the most code, and the safest choice isn&amp;rsquo;t always the cheapest one to run.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Just use Spring&amp;rdquo; is rarely wrong. It&amp;rsquo;s also rarely the most interesting question a team can ask about its architecture.&lt;/li&gt;
&lt;li&gt;The real final boss may show up in two years, when developers who inherit the codebase have to figure out a framework nobody else on the team knows.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every Java project I&amp;rsquo;ve seen starts the same way. The question &amp;ldquo;What framework?&amp;rdquo; is answered in a matter of seconds with &amp;ldquo;Spring Boot.&amp;rdquo;&lt;/p&gt;</description></item><item><title>AI, OAuth, And Other Platform APIs In The Core</title><link>https://foojayio.github.io/website/today/codename-one-ai-oauth-and-other-platform-apis-in-the-core/</link><pubDate>Mon, 15 Jun 2026 09:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/codename-one-ai-oauth-and-other-platform-apis-in-the-core/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/platform-apis-in-the-core.jpg" alt="AI, OAuth, And Other Platform APIs In The Core" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;This is the second follow-up to &lt;a href="https://www.codenameone.com/blog/metal-default-new-build-cloud-and-a-new-format/" target="_blank" rel="noopener noreferrer"&gt;Friday&amp;rsquo;s release post&lt;/a&gt;
. It covers the platform APIs that moved into the framework core this release. There are two headline pieces (AI / LLM and the modern OAuth / OIDC stack), and two smaller pieces (WiFi / connectivity and share-sheet result callbacks). This continues the direction the previous release set when we moved NFC, biometrics, and cryptography into the framework core. The full background on that earlier set is in &lt;a href="https://www.codenameone.com/blog/nfc-crypto-biometrics-and-build-cloud/" target="_blank" rel="noopener noreferrer"&gt;NFC, Crypto, Biometrics, And A New Build Cloud&lt;/a&gt;
.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Foojay Podcast #98: The End of JNI Pain: How WebAssembly Is Quietly Replacing Native Libraries in Java</title><link>https://foojayio.github.io/website/today/foojay-podcast-98/</link><pubDate>Mon, 15 Jun 2026 08:13:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-98/</guid><description>&lt;p&gt;WebAssembly is already running inside Java applications, most developers just don&amp;rsquo;t know it yet. In this episode, Andrea Peruffo walks us through how WebAssembly is becoming the modern, safe alternative to JNI: letting you run Rust, C, and other native libraries directly on the JVM, without the crash risks, the per-platform distribution headaches, or the observability blackhole that JNI creates. From JRuby&amp;rsquo;s Prism parser to SQLite and Postgres running as pure Java bytecode, the use cases are real and the project Endive, under the Bytecode Alliance, is ready to explore.&lt;/p&gt;</description></item><item><title>Observing Apache NetBeans with OpenTelemetry and Dash0</title><link>https://foojayio.github.io/website/today/observing-apache-netbeans-with-opentelemetry-and-dash0/</link><pubDate>Sun, 14 Jun 2026 22:03:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/observing-apache-netbeans-with-opentelemetry-and-dash0/</guid><description>&lt;p&gt;&lt;em&gt;What happens when you point an observability agent at your IDE rather than your application?&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="h2-0-the-question-nobody-thinks-to-ask"&gt;The question nobody thinks to ask&lt;/h2&gt;
&lt;p&gt;Observability is something we do to our applications. We instrument services, add trace context to HTTP requests, collect JVM heap metrics, ship logs to a backend. The IDE we use to write that instrumentation is &amp;mdash; by convention &amp;mdash; invisible. It just runs. When it is slow, we assume it is busy. When it crashes, we restart it. We have no data.&lt;/p&gt;</description></item><item><title>On-Device Debugging And JUnit 5</title><link>https://foojayio.github.io/website/today/on-device-debugging-and-junit-5/</link><pubDate>Fri, 12 Jun 2026 08:49:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/on-device-debugging-and-junit-5/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/developer-workflow-debug-and-junit.jpg" alt="On-Device Debugging And JUnit 5" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;This is the first follow-up to &lt;a href="https://www.codenameone.com/blog/metal-default-new-build-cloud-and-a-new-format/" target="_blank" rel="noopener noreferrer"&gt;Friday&amp;rsquo;s release post&lt;/a&gt;
 and it covers the two changes from this release that affect how you iterate on a Codename One app rather than what the app itself does. On-device debugging that treats Java as Java on a real iPhone or a real Android device, and standard JUnit 5 against the JavaSE simulator. The first is the one we have been wanting for a long time, and is the one that takes the most explaining, so most of the post is about it.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0 : Introducing Inner Classes</title><link>https://foojayio.github.io/website/today/boxlang-1-14-0-introducing-inner-classes/</link><pubDate>Thu, 11 Jun 2026 10:29:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-14-0-introducing-inner-classes/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-1-14-0-introducing-inner-classes/BoxLang-release-1.14.0-700x394.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;BoxLang has always embraced a simple truth: the way you organize code shapes the way you think about problems. For a long time, if you needed a helper class, you needed a file. One class, one &lt;code&gt;.bx&lt;/code&gt; file, no exceptions. This also stemmed from the CFML days. That&amp;rsquo;s clean and predictable, but it creates real friction when a class is tightly coupled to exactly one caller and has no business existing anywhere else.&lt;/p&gt;</description></item><item><title>Building an AI-Powered Operations Assistant with Spring AI and MongoDB Atlas — Part 2: Conversational Memory</title><link>https://foojayio.github.io/website/today/building-an-ai-powered-operations-assistant-with-spring-ai-and-mongodb-atlas-part-2-conversational-memory/</link><pubDate>Wed, 10 Jun 2026 19:23:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-an-ai-powered-operations-assistant-with-spring-ai-and-mongodb-atlas-part-2-conversational-memory/</guid><description>&lt;p&gt;This is the second article in a three-part series. Part 1 covered the RAG foundation &amp;mdash; loading runbooks into a vector store and wiring them to a language model. Part 3 will introduce stateful workflow checkpointing with pause and resume.&lt;/p&gt;
&lt;h2 id="h2-0-the-problem-with-stateless-chat"&gt;The Problem with Stateless Chat&lt;/h2&gt;
&lt;p&gt;In the first part of the series, we successfully created a chat interface where an operator can ask questions and receive answers based on the actual content of the runbooks they have uploaded and embedded in the system. For example, they can ask in the chat, &amp;ldquo;&lt;em&gt;What should I check when my server&amp;rsquo;s CPU usage exceeds 80%?&lt;/em&gt;&amp;rdquo; and the assistant retrieves the relevant sections from the various runbooks and assembles a coherent and concrete response.&lt;/p&gt;</description></item><item><title>Why Spring Teams Don't Need a Second Runtime for AI Agents</title><link>https://foojayio.github.io/website/today/spring-ai-agents-no-second-runtime/</link><pubDate>Wed, 10 Jun 2026 19:02:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-ai-agents-no-second-runtime/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/spring-ai-agents-no-second-runtime/hero-700x350.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;&lt;em&gt;A JVM-native runtime for building, governing and operating AI agents on existing Spring infrastructure.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Every time a Spring team decides to add AI agents to a production system, the story tends to follow the same arc. A few prototypes are built, several frameworks are evaluated, and then a new reality emerges: the project is no longer just about adding agents. It is about operating a new platform.&lt;/p&gt;
&lt;p&gt;With that new runtime come new deployment pipelines, new monitoring mechanisms, additional security reviews, and new operational responsibilities.&lt;/p&gt;</description></item><item><title>Your TLS Stack Is Lying to You About Zero-Copy</title><link>https://foojayio.github.io/website/today/your-tls-stack-is-lying-about-zero-copy/</link><pubDate>Wed, 10 Jun 2026 12:00:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/your-tls-stack-is-lying-about-zero-copy/</guid><description>&lt;h2 id="h2-0-the-no-waste-compute-constraint"&gt;The &amp;ldquo;No Waste Compute&amp;rdquo; Constraint&lt;/h2&gt;
&lt;p&gt;When I started designing the Exeris Kernel, I set one non-negotiable rule very early: no waste compute. That rule sounds like a performance slogan until it starts killing otherwise normal design decisions.&lt;/p&gt;
&lt;p&gt;I had already banned &lt;code&gt;ThreadLocal&lt;/code&gt;, moved context propagation to Scoped Values, and pushed more of the runtime into explicit off-heap ownership. The idea was simple: if the hot path is supposed to stay outside GC pressure, then memory shape and lifetime cannot be treated as incidental details.&lt;/p&gt;</description></item><item><title>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>Introduction to CQRS using MongoDB</title><link>https://foojayio.github.io/website/today/introduction-to-cqrs-using-mongodb/</link><pubDate>Tue, 09 Jun 2026 10:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-to-cqrs-using-mongodb/</guid><description>&lt;p&gt;In enterprise environments, projects often begin with a simple structure: one model, one service, and one document, using a single class and data transfer object for both read and write operations. While this unified approach works at first, it becomes problematic as requirements grow. Operations become more complex, requiring additional validations, rules, and constraints. Over time, read operations may demand different formats, such as aggregations, summaries, or custom views. Relying on a single model for both reading and writing leads to maintenance challenges and inefficient queries. This approach can result in returning unnecessary data or omitting required information, violating the single responsibility principle and making the design less effective.&lt;/p&gt;</description></item><item><title>Lottie4J Meets LottieFiles: A Conversation with Naail Abdul Rahman</title><link>https://foojayio.github.io/website/today/lottie4j-meets-lottiefiles/</link><pubDate>Tue, 09 Jun 2026 07:31:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/lottie4j-meets-lottiefiles/</guid><description>&lt;p&gt;Lottie animations run on Android, iOS, and the web. Getting them working on the JVM is a different story. &lt;a href="https://lottie4j.com" target="_blank" rel="noopener noreferrer"&gt;Lottie4J&lt;/a&gt;
 started as a question: can JavaFX render them without a WebView? That question turned into a library with a first release in March 2026! Since then, I received the first pull requests, recently added headless unit testing with JavaFX 26, and now this: a video conversation with Naail from the LottieFiles team.&lt;/p&gt;</description></item><item><title>Metal Default, A New Build Cloud, And A New Format</title><link>https://foojayio.github.io/website/today/metal-default-a-new-build-cloud-and-a-new-format/</link><pubDate>Mon, 08 Jun 2026 09:47:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/metal-default-a-new-build-cloud-and-a-new-format/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/metal-default-new-build-cloud-and-a-new-format.jpg" alt="Metal Default, A New Build Cloud, And A New Format" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;This week&amp;rsquo;s release post looks different on purpose. The Friday omnibus has been getting longer and longer, and that has been working against us in two ways. SEO ignores 5,000 word pages that cover twelve unrelated topics, so the actual material gets buried instead of indexed against the queries that should find it. And when a single release post covers ten things, it becomes hard to point a colleague at &amp;ldquo;that one Codename One change from a few weeks ago&amp;rdquo; without scrolling for ten minutes.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>"Agentic" Was Everywhere at Money20/20 Amsterdam</title><link>https://foojayio.github.io/website/today/agentic-was-everywhere-at-money20-20-amsterdam-once-i-started-looking/</link><pubDate>Fri, 05 Jun 2026 08:55:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/agentic-was-everywhere-at-money20-20-amsterdam-once-i-started-looking/</guid><description>&lt;p&gt;&lt;strong&gt;I walked the floor at &lt;a href="https://www.money2020.com/" target="_blank" rel="noopener noreferrer"&gt;Money20/20&lt;/a&gt;
 in Amsterdam with a simple little mission: count the first ten vendor booths using &amp;ldquo;AI,&amp;rdquo; &amp;ldquo;agent,&amp;rdquo; or &amp;ldquo;agentic&amp;rdquo; in their pitch.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;My first impression was that this would be hard. Hundreds of organizations, and the buzzwords felt oddly absent &amp;mdash; payments, core banking, compliance, the usual fintech furniture, but not the wall-to-wall &amp;ldquo;agentic everything&amp;rdquo; I&amp;rsquo;d braced for. I jotted down my first ten and thought: &lt;em&gt;&lt;strong&gt;huh, AI is barely here&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Spring Boot 3.5 Migration and the CRA: When Good Enough Isn't"</title><link>https://foojayio.github.io/website/today/spring-boot-migration-and-the-cra-when-good-enough-isnt/</link><pubDate>Fri, 05 Jun 2026 08:52:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-migration-and-the-cra-when-good-enough-isnt/</guid><description>&lt;p&gt;Back in April I &lt;a href="https://foojayio.github.io/website/today/crossing-the-river-styx-spring-boot-3-5-and-the-zombie-dependency-problem/" title="wrote"&gt;wrote&lt;/a&gt;
 about what happens to your security posture when Spring Boot 3.5 crosses the EOL line.&lt;/p&gt;
&lt;p&gt;The short version: the CVE pipeline dries up, your scanner goes quiet, and the bad actors keep watching upstream for anything they can exploit downstream against the dead code nobody&amp;rsquo;s patching.&lt;/p&gt;
&lt;p&gt;I called them zombie dependencies.&lt;/p&gt;
&lt;p&gt;June 30th is coming. In a few weeks, Spring Boot 3.5 reaches end of open-source support. You&amp;rsquo;ve either got a plan or you haven&amp;rsquo;t.&lt;/p&gt;</description></item><item><title>Context Is Code: A Tour of APM and AgentRC</title><link>https://foojayio.github.io/website/today/context-is-code-a-tour-of-apm-and-agentrc/</link><pubDate>Fri, 05 Jun 2026 08:35:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/context-is-code-a-tour-of-apm-and-agentrc/</guid><description>&lt;p&gt;If you&amp;rsquo;ve shipped an AI agent into a real codebase in the last twelve months, you&amp;rsquo;ve felt this: every agent, every developer, every machine &amp;mdash; different setup. A README that says &amp;ldquo;install these extensions.&amp;rdquo; A &lt;code&gt;copilot-instructions.md&lt;/code&gt; somebody copy-pasted from another repo. MCP server configs in three different files. The same skills duplicated for Copilot, Claude, Cursor, and Codex.&lt;/p&gt;
&lt;p&gt;No version pinning.&lt;/p&gt;
&lt;p&gt;No integrity.&lt;/p&gt;
&lt;p&gt;No reproducibility.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the problem &lt;a href="https://github.com/microsoft/apm" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;APM&lt;/strong&gt;&lt;/a&gt;
, the Agent Package Manager fixes. And it pairs with &lt;a href="https://github.com/microsoft/agentrc" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;AgentRC&lt;/strong&gt;&lt;/a&gt;
 to close the loop on &lt;em&gt;generating&lt;/em&gt; and &lt;em&gt;evaluating&lt;/em&gt; that context in the first place.&lt;/p&gt;</description></item><item><title>Tiberius: A Security Testing Framework for LLM Applications in Java</title><link>https://foojayio.github.io/website/today/tiberius-a-security-testing-framework-for-llm-applications-in-java/</link><pubDate>Thu, 04 Jun 2026 20:09:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/tiberius-a-security-testing-framework-for-llm-applications-in-java/</guid><description>&lt;p&gt;&lt;em&gt;How do you write a regression test for a system that is non-deterministic by design?&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;The Problem {#h2-0-1-the-problem}&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;Large Language Models have moved from research artifacts to production infrastructure. Java applications are embedding them into customer-facing services via Spring Boot, and e.g. LangChain4J &amp;mdash; for document summarization, customer support, healthcare assistance, and financial guidance, to name just a few. The deployment surface is growing faster than the security tooling.&lt;/p&gt;
&lt;p&gt;The vulnerability landscape is empirically well-established. Horlacher, Vifian, and Zagidullina (2026) &lt;strong&gt;[4]&lt;/strong&gt; red-teamed &lt;code&gt;gpt-oss-20b&lt;/code&gt; and found that adversarial techniques achieved alarmingly high Attack Success Rates, while non-adversarial probing exposed pervasive stereotypical defaults &amp;mdash; both consistent across English and Swiss German. Their conclusion: &lt;em&gt;&amp;ldquo;current alignment mechanisms have not fully resolved jailbreaks and inherent bias, posing critical challenges for automated decision-making.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>MongoDB as a Vector Database for AI Agents-MongoDB</title><link>https://foojayio.github.io/website/today/mongodb-as-a-vector-database-for-ai-agents-mongodb/</link><pubDate>Thu, 04 Jun 2026 10:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-as-a-vector-database-for-ai-agents-mongodb/</guid><description>&lt;p&gt;Modern artificial intelligence systems are continually evolving. Large Language Models, or LLMs, have become the backbone of modern applications and help build conversational interfaces, like GPS, to more integrated content. However, LLMs lack memory and the capacity to retain content across interactions because they are stateless. And these limitations led to the building of AI agents. These AI agents build beyond simple prompt-response interactions into more autonomous, task-oriented workflows.&lt;/p&gt;
&lt;p&gt;These agents are not just model invocations; rather, they are an orchestration layer that combines reasoning with capabilities like retrieval, memory, and tool execution. While developing these agents, a database with the ability to store and retrieve semantically meaningful data is needed, which is where vector databases come into the picture.&lt;/p&gt;</description></item><item><title>NFC, Crypto, Biometrics, And A New Build Cloud</title><link>https://foojayio.github.io/website/today/nfc-crypto-biometrics-and-a-new-build-cloud/</link><pubDate>Wed, 03 Jun 2026 08:37:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/nfc-crypto-biometrics-and-a-new-build-cloud/</guid><description>&lt;p&gt;Last week was about defaults. This week is about device APIs moving into the framework core, a small simulator change that revolutionizes Bluetooth development, and a preview of the new Build Cloud UI we would love your feedback on. There is a handful of other things in here too &amp;mdash; and the Metal default flip I trailed &lt;a href="https://www.codenameone.com/blog/skills-java17-and-theme-accents/" target="_blank" rel="noopener noreferrer"&gt;last week&lt;/a&gt;
 is in a different state than I expected, which is worth a word at the end.&lt;/p&gt;</description></item><item><title>What is Sharding in MongoDB and When Should You Use It?</title><link>https://foojayio.github.io/website/today/what-is-sharding-in-mongodb-and-when-should-you-use-it/</link><pubDate>Tue, 02 Jun 2026 22:15:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-is-sharding-in-mongodb-and-when-should-you-use-it/</guid><description>&lt;h3 id="h3-0-a-practical-introduction-to-horizontal-scaling"&gt;&lt;strong&gt;A Practical Introduction to Horizontal Scaling&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;When building applications, most developers start with a &lt;strong&gt;single database server&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;At the beginning, everything works perfectly.&lt;/p&gt;
&lt;p&gt;Your application might have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A few thousand users&lt;/li&gt;
&lt;li&gt;Manageable traffic&lt;/li&gt;
&lt;li&gt;Datasets that easily fit on one machine&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But as your application grows, something interesting starts to happen.&lt;/p&gt;
&lt;p&gt;Queries take longer.&lt;/p&gt;
&lt;p&gt;Write operations slow down.&lt;/p&gt;
&lt;p&gt;The database server starts hitting &lt;strong&gt;CPU, RAM, or storage limits&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;At this stage, many engineers ask an important question:&lt;/p&gt;</description></item><item><title>BoxLang AI 3.2.0 — Image Generation, Web Search, Fluent Audio, Agent Registry &amp; MCP Observability</title><link>https://foojayio.github.io/website/today/boxlang-ai-3-2-0-image-generation-web-search-fluent-audio-agent-registry-mcp-observability/</link><pubDate>Tue, 02 Jun 2026 12:27:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-3-2-0-image-generation-web-search-fluent-audio-agent-registry-mcp-observability/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-3-2-0-image-generation-web-search-fluent-audio-agent-registry-mcp-observability/BoxLangAI-3.2-700x394.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;BoxLang AI 3.2.0 is here, and it&amp;rsquo;s a landmark release. We&amp;rsquo;re shipping five major features: image generation, web search, a fluent audio builder API, a centralized agent registry, and deep MCP observability along with a suite of analytics improvements and a critical bug fix. Let&amp;rsquo;s dig in. 🎉&lt;/p&gt;
&lt;p&gt;🖼️ Image Generation &amp;mdash; aiImage()&lt;/p&gt;
&lt;p&gt;You can now generate images directly from BoxLang using any provider that supports text-to-image generation. The aiImage() BIF follows the same fluent, chainable philosophy as the rest of bx-ai then act on the result with expressive method calls.&lt;/p&gt;</description></item><item><title>Jakarta EE is Ready for AI – Five Talks from OCX26 That Prove It</title><link>https://foojayio.github.io/website/today/jakarta-ee-is-ready-for-ai-but-dont-just-take-my-word-for-it/</link><pubDate>Tue, 02 Jun 2026 11:41:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/jakarta-ee-is-ready-for-ai-but-dont-just-take-my-word-for-it/</guid><description>&lt;p&gt;Back in April I had the pleasure of attending Open Community Experience 2026 in Brussels - the Eclipse Foundation&amp;rsquo;s flagship open source conference. It&amp;rsquo;s always good to be in a room (or a few rooms 😉 ) with people who really care about the technology they work with. Several of my colleagues and friends were speaking - watching them present work they&amp;rsquo;ve spent serious time on is one of the better parts of this community.&lt;/p&gt;</description></item><item><title>Foojay Podcast #97: From Scripting Language to AI Powerhouse: How BoxLang Is Redefining JVM Development</title><link>https://foojayio.github.io/website/today/foojay-podcast-97/</link><pubDate>Mon, 01 Jun 2026 06:57:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-97/</guid><description>&lt;p&gt;BoxLang is a modern dynamic JVM language built for rapid application development. It&amp;rsquo;s 100% Java-interoperable, compiles to JVM bytecode, and deployable anywhere from OS to AWS Lambda to Spring Boot. In this episode, we sit down with Luis Majano (CEO of Ortus Solutions and creator of BoxLang) and Cristobal Escobar (BoxLang community manager) to dig into the wave of innovation that has hit the platform over the past few months.&lt;/p&gt;</description></item><item><title>JavaFX Links of May 2026</title><link>https://foojayio.github.io/website/today/javafx-links-of-may-2026/</link><pubDate>Sun, 31 May 2026 08:19:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-may-2026/</guid><description>&lt;p&gt;Here are the JavaFX LinksOfTheMonth of May 2026. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/hansolo.eu/post/3mkeusogqbs2h" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;After a nice 14km morning walk, I&amp;rsquo;ve modified the prediction mode in my little &lt;a href="https://github.com/hansolo/glucostatusfx/releases" target="_blank" rel="noopener noreferrer"&gt;JavaFX diabetes app and created a new release&lt;/a&gt;
&amp;hellip; and all of that before 8am&amp;hellip; great start into the Sunday.&lt;/em&gt; 😁&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@jabref/116501474018435951" target="_blank" rel="noopener noreferrer"&gt;Message from JabRef&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;We are excited that we are participating in GSOC2026 with 3 projects:&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;Improved handling of older documents with OCR and AI-powered tools.&lt;/li&gt;
&lt;li&gt;Improved LibreOffice-JabRef integration with one particular aspect of compatibility with other reference managers.&lt;/li&gt;
&lt;li&gt;Improving startup times for JabKit by leveraging the power of GraalVM&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/davidcalculin.bsky.social/post/3mlbvm4rlg22d" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;David Gutiérrez&lt;/strong&gt; released version 1.8.0 of JMathAnim&lt;/a&gt;
, a Java editor to make mathematical animations: &amp;ldquo;&lt;em&gt;featuring JavaFX effects for each individual object, improvements to autocomplete and the editor, code polishing, and numerous bug fixes.&lt;/em&gt; &amp;quot; Sources are &lt;a href="https://codeberg.org/davidgutierrezrubio/jmathanim" target="_blank" rel="noopener noreferrer"&gt;available here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/p-duke.bsky.social/post/3mlb7htf6xs2c" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duke&lt;/strong&gt; shared a video&lt;/a&gt;
 of &lt;a href="https://www.ikehub.org/home" target="_blank" rel="noopener noreferrer"&gt;IKE&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Demo: users create custom Knowledge Layout windows,then use them to view/edit/create Components tailored to their workflow. Built for healthcare, involving standards and terminologies like HL7, SNOMED CT, LOINC, RxNorm.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1tghhjn/built_a_100_offline_pdf_utility_app_using_java_25/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Ilmetallaro&lt;/strong&gt; built a 100% offline PDF utility app&lt;/a&gt;
 using Java 25, JavaFX and AtlantaFX (GPLv3): &amp;ldquo;&lt;em&gt;LibrePDF is focused on 100% privacy. It makes zero HTTP calls, everything stays locally on your machine, and it doesn&amp;rsquo;t even support logging. I was sick and tired of uploading my personal data to cloud giants (like iLovePDF, Smallpdf, etc.) or relying on sketchy closed-source freeware.&lt;/em&gt; &amp;quot; &lt;a href="https://github.com/MontesanoDev/LibrePDF" target="_blank" rel="noopener noreferrer"&gt;You can find the code, binaries, and more info here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/leoxiong.bsky.social/post/3mm7rteyxes2v" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Leo Xiong&lt;/strong&gt; shared a screenshot of work-in-progress&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Hello! I&amp;rsquo;m Lucy, your AI assistant. How can I help you with your database queries today? The AI-native database management tool journey has finally begun.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/brunoborges.bsky.social/post/3mlpen4gq6c2x" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Bruno Borges&lt;/strong&gt; on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;And to think that I did port a 2048 game #JavaScript implementation to a Java + JavaFX desktop version, all by hand a long time ago! Copilot just helped enhance further&amp;hellip; &lt;a href="https://brunoborges.github.io/fx2048/" target="_blank" rel="noopener noreferrer"&gt;Available on brunoborges.github.io/fx2048&lt;/a&gt;
&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/rladstaetter.bsky.social/post/3mlmbc73w3c25" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt; shared a behind the scenes&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;LogoRRR&amp;rsquo;s latest tutorial video was made with JavaFX too. The app, overlays, effects, voice, and recording pipeline all come together in one generated video.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Marcus Hirt&lt;/strong&gt; is looking for people wanting to try out, and maybe even participate in, a little hobby project: &lt;a href="https://github.com/thegreystone/diskspace" target="_blank" rel="noopener noreferrer"&gt;DiskSpace&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A cross-platform disk space visualizer that shows where your space went, with two complementary views: a sunburst (hierarchical radial layout, good for spotting depth-imbalanced subtrees and proportional weight at a glance) and a squarified-treemap heatmap (good for finding the largest individual cells across the whole tree). Press V to toggle.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1suhrov/early_contributors_wanted_tailwindfx_utilityfirst/" target="_blank" rel="noopener noreferrer"&gt;A (removed) message by &lt;strong&gt;Street_Humor_7861&lt;/strong&gt; on Reddit&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Early contributors wanted for TailwindFX. An utility-first UI framework for JavaFX (MIT, 1.0-SNAPSHOT, actively developed). I&amp;rsquo;m building TailwindFX, an open-source framework that brings Tailwind CSS&amp;rsquo;s utility-first paradigm to JavaFX. Instead of writing verbose CSS/FXML or inline -fx-* styles, you compose UIs with familiar utility classes and type-safe Java APIs.&lt;/em&gt; &amp;quot; Check &lt;a href="https://github.com/yasmramos/tailwindfx" target="_blank" rel="noopener noreferrer"&gt;the repository here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1sz7od8/ceffx_prebuilt_natives_added_no_need_to_compile/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Striking_Creme864&lt;/strong&gt; on Reddit&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;We recently introduced our &lt;a href="https://github.com/techsenger/ceffx" target="_blank" rel="noopener noreferrer"&gt;CEFFX project&lt;/a&gt;
 (a library for integrating the Chromium Embedded Framework into JavaFX) and it was well received. Based on that feedback, we decided to simplify its usage by providing prebuilt native libraries. This allows you to use the library without having to compile anything yourself. All native binaries are packaged into the ceffx-natives module using classifier names similar to those in OpenJFX.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mkpdkbcan22d" target="_blank" rel="noopener noreferrer"&gt;Message by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;GemsFX 4.0.1 is out and has been &amp;lsquo;downgraded&amp;rsquo; back to using Java 11 and JavaFX 17 due to popular demand. I also added a new sampler demo auto-update installer (jdeploy) that &lt;a href="https://www.jdeploy.com/~gemsfxdemo" target="_blank" rel="noopener noreferrer"&gt;you can download here&lt;/a&gt;
. The demo uses Java 24 and JavaFX 25.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3ml4e55poms24" target="_blank" rel="noopener noreferrer"&gt;Screenshot shared by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;GemsFX 4.0.4 is out on Maven Central with fixes to the styling of the InfoCenterView. Try it out via the &lt;a href="https://www.jdeploy.com/~gemsfxdemo" target="_blank" rel="noopener noreferrer"&gt;installer&lt;/a&gt;
. Browse the available controls at &lt;a href="https://gemsfx.dlsc.com/" target="_blank" rel="noopener noreferrer"&gt;gemsfx.dlsc.com&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/cupofcode.bsky.social/post/3mkz6awptu22i" target="_blank" rel="noopener noreferrer"&gt;Message shared by &lt;strong&gt;Austin Lehman&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;&lt;a href="https://aussom-lang.com/" target="_blank" rel="noopener noreferrer"&gt;Aussom-Lang&lt;/a&gt;
 now has support for JavaFX, GTK4, a Java native interface with dynamic Jar loading, and native library interface via Panama. Quite a bit that can be done with it now. Aussom is a safe, sandboxed scripting language for the JVM. Embed it in your Java app, run it on the server with Aussom Server, or use it in the browser with Aussom-Script.&lt;/em&gt; &amp;quot; A JavaFX example is &lt;a href="https://aussom-lang.com/docPage?product=aussom&amp;amp;page=written/javafx-example-simple.md&amp;amp;title=JavaFX%20Example" target="_blank" rel="noopener noreferrer"&gt;available in the documentation&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; announced &amp;ldquo;&lt;em&gt;V1.2.3 of Lottie4J, the library for parsing Lottie animations as Java objects and playing them as JavaFX animations. In this release: improved unit tests, data model and player improvements, and more! All info &lt;a href="https://lottie4j.com/releases/index.html" target="_blank" rel="noopener noreferrer"&gt;in the release notes&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1t9s3a0/javafx_dynamic_jar_based_plugin_system/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Kareem&lt;/strong&gt; shared a video on Reddit of DockTask&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX dynamic JAR based plugin system. The idea is pretty straightforward: users can upload their own JARs, and the app will load them at runtime thanks to Java&amp;rsquo;s serviceloader. It also connects to a remote repo to browse and display plugin information. It&amp;rsquo;s still a work in progress, but I&amp;rsquo;m really curious about what people think of this system. Any feedback would be appreciated! Check it &lt;a href="https://github.com/KSaifStack/DockTask" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mmerndjbqk25" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared a screenshot with a lot of AtlantaFX themes&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Release 1.3.0 of the new collection of AtlantaFX themes is out now and published on Maven Central. A total of 25 themes (14 dark, 11 light). Use the plain CSS files or the Java API.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/testing-lottie4j-javafx-animations-in-github-actions-with-javafx-26-headless/"&gt;Republished on Foojay&lt;/a&gt;
 &amp;ldquo;&lt;em&gt;JavaFX 26&amp;rsquo;s new headless mode solves a real problem: testing animations in CI/CD pipelines without a display server. &lt;strong&gt;Frank Delporte&lt;/strong&gt; shows how to use it with Lottie4J in GitHub Actions.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=EW6JzB3jZs0" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Lee Wyatt&lt;/strong&gt; shared a video about JavaFX Tools&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX Tools now includes four ways to generate or complete JavaFX property code&lt;/em&gt; &amp;ldquo;:
&lt;ul&gt;
&lt;li&gt;Alt+Enter accessor intention&lt;/li&gt;
&lt;li&gt;fxp* completions&lt;/li&gt;
&lt;li&gt;Generate menu: JavaFX Property Accessors&lt;/li&gt;
&lt;li&gt;Generate menu: JavaFX Property&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1thyw7d/weaverbird_a_real_example_of_plugin_management/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Striking_Creme864&lt;/strong&gt; on Reddit&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Recently, we introduced &lt;a href="https://github.com/techsenger/weaverbird" target="_blank" rel="noopener noreferrer"&gt;Weaverbird&lt;/a&gt;
 - a framework for working with dynamic plugins. In this post, we want to show a real example of how it can be used. The GUI is build on top of TabShell. The main idea is that a plugin configuration is represented as an XML file. When the application is distributed, it already contains predefined plugin configurations (at the same time, users can add their own plugins). A configuration contains module definitions, repositories used to download them, plugin metadata, and other related information.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Last week, we included a link to the message by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; about AtlantaFX Themes. Now, there is also a &lt;a href="https://dlsc-software-consulting-gmbh.github.io/atlantafx-themes/" target="_blank" rel="noopener noreferrer"&gt;website at&lt;/a&gt;
 with screenshots of all themes. &amp;ldquo;&lt;em&gt;Each theme overrides the color scale, semantic tokens, and dark / light mode flag without touching the upstream stylesheet.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1tp4jjv/gemsfx_new_controlsfx_atlantafx_companion/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; announced version 4.1.0 of GemsFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;now includes an AtlantaFX companion stylesheet for ControlsFX. You can use the method ControlsFXAtlantaFX.apply() to add this new stylesheet to your scene or any parent node. By doing so you will be able to get rid of all those pesky warning / error messages regarding CSS rules using unknown colors. For more on GemsFX see &lt;a href="https://gemsfx.dlsc.com" target="_blank" rel="noopener noreferrer"&gt;gemsfx.dlsc.com&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Q8YPQzyeh58" target="_blank" rel="noopener noreferrer"&gt;Video by &lt;strong&gt;BabyDevCode&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;How to Run JavaFX Projects in Visual Studio Code.&amp;rdquo; The original is in Spanish, but also available in auto-dubbed English.&lt;/li&gt;
&lt;li&gt;Recording of the JavaOne &amp;lsquo;26 talk by &lt;strong&gt;Phil Race&lt;/strong&gt; : &lt;a href="https://inside.java/2026/05/03/jdk-client-desktop/" target="_blank" rel="noopener noreferrer"&gt;The JDK Client Desktop : 2026 and Still Swinging&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;In this session, we explore how Swing fits into today&amp;rsquo;s Java ecosystem, how it works seamlessly alongside JavaFX, and why it can still outperform web-based approaches for certain desktop applications.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/debugging-bentofx-in-melodymatrix-with-matt-coley-scenic-view-and-an-honest-look-at-ai-generated-code/"&gt;Republished on Foojay&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; walks through debugging BentoFX in MelodyMatrix using Scenic View with &lt;strong&gt;Matt Coley&lt;/strong&gt;, plus a realistic look at AI-generated code and its challenges.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=N0KiHP6UPKY" target="_blank" rel="noopener noreferrer"&gt;Video by &lt;strong&gt;Florian Enner&lt;/strong&gt;&lt;/a&gt;
 showing his JavaFX charts and 3D visualizations in JavaFX from within MATLAB.&lt;/li&gt;
&lt;li&gt;New impressive &lt;a href="https://www.youtube.com/watch?v=TlaJmlVQf98" target="_blank" rel="noopener noreferrer"&gt;video by &lt;strong&gt;Florian Enner&lt;/strong&gt; of the JavaFX HEBI Charts&lt;/a&gt;
 showing 50 KHz update, 100 subplots, chart with 1000 lines, and more. You can find the &lt;a href="https://github.com/HebiRobotics/hebi-charts-examples" target="_blank" rel="noopener noreferrer"&gt;example repo on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.java/learn/javafx/a11y/" target="_blank" rel="noopener noreferrer"&gt;New tutorial by &lt;strong&gt;Ana-Maria Mihalceanu&lt;/strong&gt;: &amp;ldquo;Accessibility in JavaFX&amp;rdquo;&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;JavaFX provides accessibility APIs and properties that help you build inclusive user interfaces. A good starting point is to rely on standard controls and ensure that your user interface employs proper semantics. From there, you can customize accessible metadata and fine-tune how components behave for assistive technologies.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-conferences-presentations"&gt;Conferences, Presentations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On June 16th, the &lt;a href="https://www.zeiss.com/meditec/en/news-events/events/jfx-adopters-meeting-2026.html" target="_blank" rel="noopener noreferrer"&gt;JFX Adopters Meeting&lt;/a&gt;
 will take place in Munich, Germany. &amp;ldquo;&lt;em&gt;We will be hosting a JFX Adopters Meeting to exchange information on current projects and future plans. Representatives of the JavaFX &amp;rsquo;ecosystem&amp;rsquo; will also be there to help develop a viable picture of JavaFX. The success of future developments depends on the contribution of adopter companies making our community stronger.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/rest-story-april-edition-jvm-weekly-vol-173-artur-skowro%C5%84ski-ibyyf/" target="_blank" rel="noopener noreferrer"&gt;In the JVM Weekly vol. 173, by &lt;strong&gt;Artur Skowroński&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;&lt;a href="https://melodymatrix.rocks/" target="_blank" rel="noopener noreferrer"&gt;MelodyMatrix&lt;/a&gt;
 by &lt;strong&gt;Frank Delporte&lt;/strong&gt; isn&amp;rsquo;t important for what it does (it&amp;rsquo;s a music-related tool) - it&amp;rsquo;s important as a case study for how to ship a JavaFX desktop app in 2026. The &lt;a href="https://foojayio.github.io/website/today/melodymatrix-v1-0-0-released-shipping-a-javafx-app-with-jdeploy-github-actions-and-auto-update/"&gt;release walkthrough on Foojay covers the full pipeline&lt;/a&gt;
: jdeploy for cross-platform native installers, GitHub Actions for the build, auto-update integration, the works.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3ml6mkelzhk2g" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is asking&lt;/a&gt;
 to get JetBrains to &lt;a href="https://youtrack.jetbrains.com/issue/IDEA-353241/Allow-final-JavaFX-properties-to-generate-the-setter-method." target="_blank" rel="noopener noreferrer"&gt;fix a JavaFX-related issue&lt;/a&gt;
 in IntelliJ IDEA.&amp;quot;&lt;em&gt;It is so disruptive to my &amp;lsquo;flow&amp;rsquo;.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The JavaFX Links Of The Week of April got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-april-2026/"&gt;bundled and published on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Free Webinar: Making AI useful for Java developers in Real Applications with BoxLang!</title><link>https://foojayio.github.io/website/today/free-webinar-making-ai-useful-for-java-developers-in-real-applications-with-boxlang/</link><pubDate>Fri, 29 May 2026 15:43:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/free-webinar-making-ai-useful-for-java-developers-in-real-applications-with-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/free-webinar-making-ai-useful-for-java-developers-in-real-applications-with-boxlang/Webinar-SM1-700x394.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;AI is everywhere right now, but for many development teams, the biggest question is no longer &amp;ldquo;What is AI?&amp;rdquo; it&amp;rsquo;s &lt;em&gt;&amp;ldquo;How do we actually use it in real applications in a secure, practical, and maintainable way?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s exactly what we&amp;rsquo;ll explore in our upcoming free June webinar:&lt;/p&gt;
&lt;h2 id="h2-0-making-ai-useful-in-real-applications"&gt;Making AI Useful in Real Applications&lt;/h2&gt;
&lt;h4 id="a-practical-guide-to-secure-and-effective-ai-development"&gt;A Practical Guide to Secure and Effective AI Development&lt;/h4&gt;
&lt;p&gt;Join &lt;strong&gt;Bill Reese, Senior Developer&lt;/strong&gt; &lt;strong&gt;at Ortus Solutions&lt;/strong&gt; , for a practical session focused on bringing AI into real-world applications using &lt;strong&gt;BoxLang&lt;/strong&gt; and modern JVM development patterns.&lt;/p&gt;</description></item><item><title>Enterprise Java quality gates in the age of AI</title><link>https://foojayio.github.io/website/today/enterprise-java-quality-gates-ai/</link><pubDate>Fri, 29 May 2026 07:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/enterprise-java-quality-gates-ai/</guid><description>&lt;img decoding="async" class="size-medium wp-image-123963" src="ChatGPT-Image-May-26-2026-04_44_09-PM-700x394.png" alt="Illustration of human developers and an AI assistant writing code together, with the code passing through an enterprise quality gate before reaching a trusted repository." width="100%"&gt;
&lt;p&gt;People and AI can write code together, but enterprise repositories still need deterministic quality gates to protect code quality.&lt;/p&gt;
&lt;br /&gt;
&lt;h2 id="h2-0-enterprise-quality-is-a-scaling-problem"&gt;Enterprise quality is a scaling problem&lt;/h2&gt;
&lt;p&gt;Enterprise Java development is not only about writing correct code. It is about keeping a large, long-lived codebase understandable, reviewable and safe to change while many people and many tools touch it over time.&lt;/p&gt;</description></item><item><title>Exploring MongoT</title><link>https://foojayio.github.io/website/today/exploring-mongot-atlas-search/</link><pubDate>Thu, 28 May 2026 21:02:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-mongot-atlas-search/</guid><description>&lt;p&gt;Let&amp;rsquo;s explore this fascinating and awesome Java project from MongoDB - MongoT!&lt;/p&gt;
&lt;p&gt;You can check out the source code here:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;git clone https://github.com/mongodb/mongot&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/exploring-mongot-atlas-search/Screenshot-2026-05-08-at-3.17.36-PM-1024x548.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;MongoT is a wrapper around the amazing Java search engine: &lt;a href="https://lucene.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Lucene&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Lucene is a powerful search toolkit built around an inverted token index structure that enables advanced text search capabilities, including ranked results, autocomplete, synonyms, fuzzy matching, highlighting, and faceting &amp;mdash; all with high performance regardless of dataset size. Unlike MongoDB&amp;rsquo;s native query engine, it can efficiently search across multiple indexes simultaneously by intersecting lists of ordinal document IDs in parallel, using optimization techniques like skip-lists, ordinal compression, and document frequency ordering. It also supports indexing of various field types (integers, dates, keywords, etc.) and has expanded into vector search, enabling semantic similarity search by meaning rather than exact text matching.&lt;/p&gt;</description></item><item><title>Intro to the BoxLang Formatter</title><link>https://foojayio.github.io/website/today/intro-to-the-boxlang-formatter/</link><pubDate>Thu, 28 May 2026 17:45:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/intro-to-the-boxlang-formatter/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/intro-to-the-boxlang-formatter/boxlang-formatter-700x394.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;You know the drill. Someone opens a PR and half the review comments are about tabs vs spaces, where braces go, or why that one function has its arguments formatted differently from everything else. It&amp;rsquo;s noise. And it&amp;rsquo;s over.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The BoxLang Formatter is here, and it handles all of that for you.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can find the docs here: &lt;a href="https://boxlang.ortusbooks.com/getting-started/ide-tooling/boxlang-formatter" target="_blank" rel="noopener noreferrer"&gt;https://boxlang.ortusbooks.com/getting-started/ide-tooling/boxlang-formatter&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;The BoxLang Formatter is a built-in code formatting tool that ships with BoxLang. It enforces consistent style across &lt;code&gt;.bx&lt;/code&gt;, &lt;code&gt;.bxs&lt;/code&gt;, &lt;code&gt;.bxm&lt;/code&gt;, &lt;code&gt;.cfm&lt;/code&gt;, &lt;code&gt;.cfc&lt;/code&gt;, and &lt;code&gt;.cfs&lt;/code&gt; files &amp;mdash; automatically.&lt;/p&gt;</description></item><item><title>Scoped Values: Why I Banned ThreadLocal in Exeris</title><link>https://foojayio.github.io/website/today/banned-threadlocal-java-scoped-values/</link><pubDate>Thu, 28 May 2026 09:36:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/banned-threadlocal-java-scoped-values/</guid><description>&lt;h4 id="in-a-zero-copy-runtime-designed-for-1-vt-per-stream-density-threadlocal-is-a-performance-serial-killer-here-is-the-forensic-analysis-and-how-jep-506-scoped-values-changed-everything"&gt;In a zero-copy runtime designed for 1-VT-per-Stream density, ThreadLocal is a performance serial killer. Here is the forensic analysis and how JEP 506 Scoped Values changed everything.&lt;/h4&gt;
&lt;hr&gt;
&lt;p&gt;When I started designing the &lt;strong&gt;Exeris Kernel&lt;/strong&gt; &amp;mdash; a next-generation, zero-copy runtime built for Java 26+ &amp;mdash; I established one non-negotiable architectural law: &lt;strong&gt;&amp;ldquo;No Waste Compute.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In a system designed to handle extreme density by mapping exactly one Virtual Thread to every network stream (1-VT-per-Stream), every byte of memory and every CPU cycle must be intentional.&lt;/p&gt;</description></item><item><title>Skills, Java 17, And Theme Accents with Codename One</title><link>https://foojayio.github.io/website/today/skills-java-17-and-theme-accents-with-codename-one/</link><pubDate>Wed, 27 May 2026 09:32:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/skills-java-17-and-theme-accents-with-codename-one/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/skills-java17-and-theme-accents.jpg" alt="Skills, Java 17, And Theme Accents" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;Last week was about Metal and the Skin Designer. This week the headline items are about what a brand new project looks like when you generate it: the default JDK is Java 17, and every generated project ships with an &lt;code&gt;AGENTS.md&lt;/code&gt; authoring skill that lets any modern AI agent work on the project intelligently. There are also some other things worth covering: a runtime accent palette on the new native themes, three Metal follow-ups (one of which introduces a new matrix-correct translate API), the JDK 11+ String API gap closed, and iOS push permission that no longer fires at app launch.&lt;/p&gt;</description></item><item><title>A New Generation of Java Libraries Is Born: Wasm Becomes the Implementation Detail</title><link>https://foojayio.github.io/website/today/a-new-generation-of-java-libraries-is-born-wasm-becomes-the-implementation-detail/</link><pubDate>Tue, 26 May 2026 13:00:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-new-generation-of-java-libraries-is-born-wasm-becomes-the-implementation-detail/</guid><description>&lt;p&gt;If you&amp;rsquo;re running JRuby in production, you&amp;rsquo;re running WebAssembly. If TrinoDB is evaluating your Python UDFs, that&amp;rsquo;s WebAssembly too. If Microcks is running JavaScript dispatchers to route your mock API responses, WebAssembly is doing the work.&lt;/p&gt;
&lt;p&gt;You didn&amp;rsquo;t install a native binary. You didn&amp;rsquo;t configure JNI. You didn&amp;rsquo;t cross-compile anything for your target platform. It just works, because the Wasm module is hiding inside a regular JAR on your classpath.&lt;/p&gt;</description></item><item><title>Introducing bx-jwt: Enterprise-Grade JSON Web Tokens for BoxLang</title><link>https://foojayio.github.io/website/today/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/</link><pubDate>Tue, 26 May 2026 10:14:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/bx-jwt-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;JWT authentication is everywhere. But rolling it correctly &amp;mdash; with proper algorithm enforcement, key management, clock skew handling, JWE encryption, and zero security footguns &amp;mdash; is anything but trivial. Today, we&amp;rsquo;re shipping &lt;strong&gt;bx-jwt&lt;/strong&gt;, a production-ready JWT/JWE module for BoxLang that handles all of it out of the box, so you can focus on building, not fighting cryptography.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;bx-jwt&lt;/strong&gt; is part of the &lt;a href="https://www.boxlang.io/plans" title="BoxLang&amp;#43; and BoxLang&amp;#43;&amp;#43; subscription tiers" target="_blank" rel="noopener noreferrer"&gt;BoxLang+ and BoxLang++ subscription tiers&lt;/a&gt;
 &amp;mdash; our enterprise-grade module collection built for teams that take security seriously.&lt;/p&gt;</description></item><item><title>Foojay Podcast #96: Local AWS Development Without LocalStack: Meet Floci, the GraalVM-Powered Alternative</title><link>https://foojayio.github.io/website/today/foojay-podcast-96/</link><pubDate>Mon, 25 May 2026 06:36:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-96/</guid><description>&lt;p&gt;What if you could run 35 AWS services locally in under 25 milliseconds, using just 13 megabytes of memory, with a single Docker command and no cloud bill? That&amp;rsquo;s exactly what Floci does.&lt;/p&gt;
&lt;p&gt;In this episode, Frank Delporte talks with Hector Ventura, the creator of Floci, a free and open-source cloud emulator built with Quarkus and GraalVM native compilation. Hector walks us through why he built it when LocalStack dropped its open-source community edition, how AI tooling helped him accelerate development of new service integrations, the challenges of keeping GraalVM happy with third-party libraries, and the road ahead for Azure and GCP support.&lt;/p&gt;</description></item><item><title>Context Is a Budget — Reducing Token Usage in AI-Assisted Development</title><link>https://foojayio.github.io/website/today/context-is-a-budget-eight-levers-and-three-workflow-patterns/</link><pubDate>Fri, 22 May 2026 12:52:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/context-is-a-budget-eight-levers-and-three-workflow-patterns/</guid><description>&lt;p&gt;&lt;em&gt;Eight levers and three workflow patterns that pay for themselves in a week.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A team of fifty developers can quietly burn $30,000 a month on AI coding assistants without anyone noticing. Premium-request quotas vanish by the third week. The bill arrives. Nobody has a story for where it went.&lt;/p&gt;
&lt;p&gt;The cost is the obvious pain. The other two are sneakier:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Latency.&lt;/strong&gt; Bigger contexts take longer. The model thinks more, but you also wait more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context rot.&lt;/strong&gt; This is the surprising one. Anthropic and Chroma have both shown that as the context window fills up, model recall and reasoning &lt;em&gt;degrade&lt;/em&gt; &amp;mdash; even well inside the advertised window. The 200K-token model is genuinely worse at the 150K mark than at the 20K mark. &lt;strong&gt;More context is not free; past a point, it&amp;rsquo;s actively harmful.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The mental model that fixes all three: stop treating context as a free buffet. Treat it as a budget you spend on every turn.&lt;/p&gt;</description></item><item><title>Introducing skills.boxlang.io — The Open Agent Skills Ecosystem for BoxLang &amp; the Ortus World</title><link>https://foojayio.github.io/website/today/introducing-skills-boxlang-io-the-open-agent-skills-ecosystem-for-boxlang-the-ortus-world/</link><pubDate>Thu, 21 May 2026 11:42:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-skills-boxlang-io-the-open-agent-skills-ecosystem-for-boxlang-the-ortus-world/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/introducing-skills-boxlang-io-the-open-agent-skills-ecosystem-for-boxlang-the-ortus-world/skills-boxlang-io-700x394.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Today we&amp;rsquo;re launching something we&amp;rsquo;ve been quietly building for months: &lt;a href="https://skills.boxlang.io/" title="**skills.boxlang.io**" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;skills.boxlang.io&lt;/strong&gt;&lt;/a&gt;
 &amp;mdash; a public, agent-agnostic directory for AI skills covering BoxLang, ColdBox, TestBox, CommandBox, and the entire Ortus ecosystem.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve ever pasted a 400-line system prompt into yet another AI agent, watched two of your bots drift onto subtly different versions of the same coding standard, or spent half a Friday afternoon trying to convince an LLM that BoxLang is &lt;strong&gt;not&lt;/strong&gt; Java and is &lt;strong&gt;not&lt;/strong&gt; CFML, or how to code for Modern CFML; this launch is for you. 🎯&lt;/p&gt;</description></item><item><title>Implementing Soft Deletes in Java</title><link>https://foojayio.github.io/website/today/implementing-soft-deletes-in-java/</link><pubDate>Thu, 21 May 2026 10:09:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/implementing-soft-deletes-in-java/</guid><description>&lt;h2 id="soft-deletes"&gt;What are soft deletes?&lt;/h2&gt;
&lt;p&gt;Usually, when deleting documents from a database, the entry is permanently gone and can not be recovered or accessed again.&lt;/p&gt;
&lt;p&gt;Sometimes data needs to be made unavailable for regular access without actually being removed from a database. A common example is a user deleting their account on a platform, but retention policies require you to keep all data related to that user for a certain period of time. At the same time, no data regarding that user is accessible on the platform. A soft delete is a treatment for a piece of data that ensures it is ignored by your application while actually still being stored in the database.&lt;/p&gt;</description></item><item><title>Metal and Skins</title><link>https://foojayio.github.io/website/today/metal-and-skins/</link><pubDate>Thu, 21 May 2026 08:59:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/metal-and-skins/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/metal-and-skins.jpg" alt="Metal and Skins" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;This post has a lot to cover. Before we get to any of it I want to take on the uncomfortable subject first: quality. Two incidents from the past two weeks deserve a public explanation, one was a bug that fits into our normal iteration loop and one was a serious mistake on my part. Both deserve the kind of explanation I would want if I were on the other side of the import.
| &lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>All Azul Zulu Container Images Explained: CA, SA, and Chainguard</title><link>https://foojayio.github.io/website/today/all-azul-zulu-container-images-explained-ca-sa-and-chainguard/</link><pubDate>Wed, 20 May 2026 09:56:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/all-azul-zulu-container-images-explained-ca-sa-and-chainguard/</guid><description>&lt;p&gt;&lt;em&gt;Previously in this series:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.azul.com/blog/trusted-java-containers-azul-zulu-openjdk-joins-dockers-official-images/" target="_blank" rel="noopener noreferrer"&gt;Trusted Java Containers: Azul Zulu OpenJDK Joins Docker&amp;rsquo;s Official Images&lt;/a&gt;
&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.azul.com/blog/the-road-to-docker-official-images-for-java-the-azul-zulu-story/" target="_blank" rel="noopener noreferrer"&gt;The Road to Docker Official Images for Java: The Azul Zulu Story&lt;/a&gt;
&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.azul.com/blog/using-the-azul-zulu-docker-official-images-from-simple-pull-to-lean-container/" target="_blank" rel="noopener noreferrer"&gt;Using the Azul Zulu Docker Official Images: From Simple Pull to Lean Container&lt;/a&gt;
&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The launch of &lt;a href="https://hub.docker.com/_/azul-zulu" target="_blank" rel="noopener noreferrer"&gt;Azul Zulu as Docker Official Images&lt;/a&gt;
 was a milestone, but it&amp;rsquo;s just one of several ways to get Azul Zulu Builds of OpenJDK in a container. Depending on whether you&amp;rsquo;re evaluating Azul Zulu, running it in production under a support contract, or operating in a high-security environment, the right image source will vary. In this post, I&amp;rsquo;ll show you all the possibilities.
&lt;img src="https://foojayio.github.io/website/today/all-azul-zulu-container-images-explained-ca-sa-and-chainguard/azul-zulu-ca-sa-chainguard-1024x576.avif" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>From Zero (Really Zero) to OpenTelemetry</title><link>https://foojayio.github.io/website/today/from-zero-really-zero-to-opentelemetry/</link><pubDate>Tue, 19 May 2026 13:36:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/from-zero-really-zero-to-opentelemetry/</guid><description>&lt;p&gt;Here&amp;rsquo;s a super awesome prompt (e.g., for Claude Code) that you can use with &lt;a href="https://github.com/dash0hq/agent-skills" target="_blank" rel="noopener noreferrer"&gt;https://github.com/dash0hq/agent-skills&lt;/a&gt;
, the free collection of skills for AI coding agents to make applications observable with OpenTelemetry, such as with &lt;a href="https://www.dash0.com/" target="_blank" rel="noopener noreferrer"&gt;Dash0&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;And the end result is this, a view into the traces of your application (without anything at all at the start of the process).
&lt;img src="https://foojayio.github.io/website/today/from-zero-really-zero-to-opentelemetry/dash0-foojay-2-1024x545.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-the-super-awesome-prompt"&gt;&lt;strong&gt;The Super Awesome Prompt&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Take a careful look below: before doing this prompt, not only do we not have an application that is instrumented with OpenTelemetry yet. Not only do we not have the agent we need to do the instrumentation yet.&lt;/p&gt;</description></item><item><title>GlassFish 8.0.2 Released: With important security fixes, other improvements, and commercial support</title><link>https://foojayio.github.io/website/today/glassfish-8-0-2-released/</link><pubDate>Tue, 19 May 2026 13:32:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/glassfish-8-0-2-released/</guid><description>&lt;p&gt;The latest version of Eclipse GlassFish 8.0.2 was released on May 5, 2026, with fixes for several critical vulnerabilities. It builds on top of a lot of subtle work and improvements in GlassFish components like the Eclipse Grizzly HTTP framework, or in related components like Eclipse OpenMQ message broker and Eclipse ORB (CORBA) for remote EJB calls. The release of GlassFish 8.0.2 serves as further evidence that GlassFish remains an actively evolving platform, backed by the dedicated maintenance and commercial support of the OmniFish team. As I was deeply involved in this release, I&amp;rsquo;d like to share a deeper look into the technical advancements within this new version.&lt;/p&gt;</description></item><item><title>BoxLang v1.13.0: Compatibility, Concurrency, and Formatter Maturity</title><link>https://foojayio.github.io/website/today/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/</link><pubDate>Tue, 19 May 2026 12:11:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/boxlang-v1.13.0-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BoxLang 1.13.0&lt;/strong&gt; is a stability-first release with deep compatibility work and runtime hardening. This build closes 48 issues, with the majority focused on CFML compatibility edge cases, concurrency correctness, formatting parity, and miniserver/runtime reliability under real production loads.&lt;/p&gt;
&lt;p&gt;While this release is bug-fix heavy, it still introduces several meaningful features and quality-of-life improvements: character-aware trimming, class metadata lookup by absolute path, process environment control in SystemExecute(), SOAP headers, new query column rename capabilities, and safer miniserver routing/security defaults.&lt;/p&gt;</description></item><item><title>A New Chapter for the Payara Community</title><link>https://foojayio.github.io/website/today/a-new-chapter-for-the-payara-community/</link><pubDate>Mon, 18 May 2026 06:51:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-new-chapter-for-the-payara-community/</guid><description>&lt;p&gt;Something has been in the works since &lt;a href="https://www.azul.com/company/payara-acquisition/" title="Azul completed its acquisition of Payara in December 2025" target="_blank" rel="noopener noreferrer"&gt;Azul completed its acquisition of Payara in December 2025&lt;/a&gt;
, and today we&amp;rsquo;re ready to share it: the community edition of Payara has a new name and logo &amp;ndash; but not so very different from the one you already know!&lt;/p&gt;
&lt;p&gt;Payara Platform Community is now &lt;strong&gt;Azul Payara Community&lt;/strong&gt; , made up of two distributions you already know and love - &lt;strong&gt;Azul Payara Server Community&lt;/strong&gt; and &lt;strong&gt;Azul Payara Micro Community&lt;/strong&gt; - plus the tooling and connectors that go with them.&lt;/p&gt;</description></item><item><title>Don't Panic: The Thymeleaf Template Injection That Only Hurts If You Let It (CVE-2026-40478)</title><link>https://foojayio.github.io/website/today/dont-panic-the-thymeleaf-template-injection-that-only-hurts-if-you-let-it-cve-2026-40478/</link><pubDate>Fri, 15 May 2026 15:31:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/dont-panic-the-thymeleaf-template-injection-that-only-hurts-if-you-let-it-cve-2026-40478/</guid><description>&lt;p&gt;The Thymeleaf vulnerability with a CVSS score of 9.1 grabs your attention, as it should. But before you call the cavalry and claim this as the new Log4shell, read this first.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://security.snyk.io/vuln/SNYK-JAVA-ORGTHYMELEAF-16078379?_gl=1*1at854d*_gcl_aw*R0NMLjE3NzgwMDAzNjIuQ2p3S0NBandxdWJQQmhCT0Vpd0F6Z1pYMnFGMkJrY1V2VEIwbHRsSmMyVVFDeWxCaFJGYng0Yy02SjVIdzdITHJITGFueExTdllmN0tCb0NnNDhRQXZEX0J3RQ..*_gcl_au*MTUyNzYyMTQ0Ny4xNzc1NjU3MzI2*_ga*MTY1NTk4NjI5Ni4xNzc1NjU3MzI3*_ga_X9SH3KP7B4*czE3NzgyNTkzMzMkbzcxJGcxJHQxNzc4MjU5NjMxJGo2MCRsMCRoMA.." target="_blank" rel="noopener noreferrer"&gt;CVE-2026-40478&lt;/a&gt;
 is a server-side template injection vulnerability in Thymeleaf &lt;a href="https://vipentest.com/blog/cve-2026-40478-thymeleaf-ssti-sandbox-escape-rce/" target="_blank" rel="noopener noreferrer"&gt;discovered by pentester Dawid Bakaj&lt;/a&gt;
. Thymeleaf is a templating engine in Java that is used for server-side webpage rendering. The sandbox that normally prevents arbitrary code execution got bypassed using a tab character. And yes, this can lead to a remote code execution if exploited.&lt;/p&gt;</description></item><item><title>Debugging BentoFX in MelodyMatrix with Matt Coley, Scenic View, and an Honest Look at AI-Generated Code</title><link>https://foojayio.github.io/website/today/debugging-bentofx-in-melodymatrix-with-matt-coley-scenic-view-and-an-honest-look-at-ai-generated-code/</link><pubDate>Fri, 15 May 2026 10:02:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-bentofx-in-melodymatrix-with-matt-coley-scenic-view-and-an-honest-look-at-ai-generated-code/</guid><description>&lt;p&gt;There are bugs you can solve by yourself, and bugs where you just need to sit down with someone who knows the internals. This video is in the second category. &lt;a href="https://melodymatrix.rocks/" target="_blank" rel="noopener noreferrer"&gt;MelodyMatrix&lt;/a&gt;
 uses &lt;a href="https://github.com/Col-E/BentoFX" target="_blank" rel="noopener noreferrer"&gt;BentoFX&lt;/a&gt;
 for its dockable panel layout. Branches, leaves, tabs on the side, content panels that open and close. It works well until something fights the layout. But I had some visual problems I could not explain, some code that felt more complicated than it should be, and no good explanation for why.&lt;/p&gt;</description></item><item><title>AI-Powered Code Review Assistant: Automated Code Analysis with Spring AI and MongoDB</title><link>https://foojayio.github.io/website/today/ai-powered-code-review-assistant-automated-code-analysis-with-spring-ai-and-mongodb/</link><pubDate>Thu, 14 May 2026 17:09:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/ai-powered-code-review-assistant-automated-code-analysis-with-spring-ai-and-mongodb/</guid><description>&lt;p&gt;Code reviews catch bugs before they ship, but they take time. Most teams rely on manual review or basic linters that flag syntax issues but miss deeper problems like subtle resource leaks, poor exception handling, or security anti-patterns. Static analysis tools help, but they work with rigid rules that cannot generalize across code variations. A rule that catches &lt;code&gt;catch (Exception e) {}&lt;/code&gt; will miss &lt;code&gt;catch (Throwable t) { return null; }&lt;/code&gt;, even though both are the same underlying problem.&lt;/p&gt;</description></item><item><title>What's New in the May 2026 Payara Platform Release | Azul</title><link>https://foojayio.github.io/website/today/whats-new-in-the-may-2026-azul-payara-release/</link><pubDate>Thu, 14 May 2026 11:40:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/whats-new-in-the-may-2026-azul-payara-release/</guid><description>&lt;p&gt;The May 2026 release is the largest Payara milestone since the project&amp;rsquo;s inception. Azul Payara Server 7 and Azul Payara Micro 7 ship as generally available, both certified against Jakarta EE 11. This is the first major Payara product release under the Azul brand, arriving six months after Azul completed its acquisition of Payara in December 2025.&lt;/p&gt;
&lt;p&gt;Azul Payara Community 7 (&lt;a href="https://payara.fish/downloads/payara-platform-community-edition/" title="download here" target="_blank" rel="noopener noreferrer"&gt;download here&lt;/a&gt;
), the open-source distribution, was the first implementation of any kind &lt;a href="https://foojayio.github.io/website/today/leading-the-way-payara-platform-community-7-beta-now-fully-jakarta-ee-11-certified/" title="to certify across all three Jakarta EE 11 profiles"&gt;to certify across all three Jakarta EE 11 profiles&lt;/a&gt;
 (Full, Web Profile, Core Profile). Azul Payara Server 7 brings that certification to a commercially supported product with enterprise SLAs, making it the first commercially supported Jakarta EE 11 runtime from a major enterprise application server vendor. Both products ship with MicroProfile 6.1 (Config, Metrics, Health, Fault Tolerance, JWT, OpenAPI, REST Client, Telemetry Tracing). Azul Payara Server 7 holds Final TCK certification across all three profiles:&lt;/p&gt;</description></item><item><title>BoxLang AI Series: Complete Guide to Building AI Agents</title><link>https://foojayio.github.io/website/today/boxlang-ai-series-complete-guide-to-building-ai-agents/</link><pubDate>Thu, 14 May 2026 09:26:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-series-complete-guide-to-building-ai-agents/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-series-complete-guide-to-building-ai-agents/Guide-to-Building-AI-Agents-2-700x365.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The world of AI development is moving fast, but building real, production-ready AI agents doesn&amp;rsquo;t have to be complex.&lt;/p&gt;
&lt;p&gt;This series walks you step by step through how to design, build, and deploy AI agents using BoxLang AI. Whether you&amp;rsquo;re exploring AI for the first time or looking to modernize your current applications, these guides will help you move from concept to implementation with clarity.&lt;/p&gt;
&lt;h2 id="h2-0-start-here-a-practical-overview"&gt;Start Here: A Practical Overview&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re new to BoxLang AI or want to understand what&amp;rsquo;s possible before diving into the technical details, start here:&lt;/p&gt;</description></item><item><title>Testing Lottie4J JavaFX Animations in GitHub Actions Without a Display: JavaFX 26 Headless to the Rescue</title><link>https://foojayio.github.io/website/today/testing-lottie4j-javafx-animations-in-github-actions-with-javafx-26-headless/</link><pubDate>Wed, 13 May 2026 07:35:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/testing-lottie4j-javafx-animations-in-github-actions-with-javafx-26-headless/</guid><description>&lt;p&gt;When I released &lt;a href="https://lottie4j.com/releases/#2026-03-10-110" target="_blank" rel="noopener noreferrer"&gt;Lottie4J 1.1.0&lt;/a&gt;
, I mentioned something a bit embarrassing in the release notes and &lt;a href="https://webtechie.be/post/2026-03-10-new-release-of-lottie4j/" target="_blank" rel="noopener noreferrer"&gt;this blog post&lt;/a&gt;
: there was a new unit test to compare the JavaFX player output against a JavaScript reference player, but it &amp;ldquo;&lt;em&gt;can not run on CI, because it requires a display output&lt;/em&gt;.&amp;rdquo; A TODO. A known limitation. One of those notes you write hoping future-you will figure it out.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gluonhq.com/javafx-26-is-now-available/" target="_blank" rel="noopener noreferrer"&gt;JavaFX 26 was released on March 17, 2026&lt;/a&gt;
 and includes a new headless platform, allowing me to get the test running on GitHub Actions without a display.&lt;/p&gt;</description></item><item><title>How to Develop AI Agents Using BoxLang AI: A Practical Guide</title><link>https://foojayio.github.io/website/today/how-to-develop-ai-agents-using-boxlang-ai-a-practical-guide/</link><pubDate>Tue, 12 May 2026 12:52:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-develop-ai-agents-using-boxlang-ai-a-practical-guide/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/how-to-develop-ai-agents-using-boxlang-ai-a-practical-guide/boxlang-ai-v3-1-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;AI agents are transforming how we build software. Unlike traditional chatbots that just answer questions, agents can reason about what tools they need, decide when to use them, chain multiple actions together, and remember what happened earlier in a conversation.&lt;/p&gt;
&lt;p&gt;In this tutorial, I&amp;rsquo;ll show you how to build a real-world AI agent using &lt;a href="https://ai.boxlang.io/" title="BoxLang AI" target="_blank" rel="noopener noreferrer"&gt;BoxLang AI&lt;/a&gt;
 &amp;mdash; the official AI framework for the BoxLang JVM language. We&amp;rsquo;ll build &lt;strong&gt;SupportBot&lt;/strong&gt;, an e-commerce customer support agent that can look up orders, check inventory, issue refunds, and answer questions grounded in your knowledge base.&lt;/p&gt;</description></item><item><title>Foojay Podcast #95: Is Your Java App Actually Secure, Or Does It Just Look That Way?</title><link>https://foojayio.github.io/website/today/foojay-podcast-95/</link><pubDate>Mon, 11 May 2026 09:57:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-95/</guid><description>&lt;p&gt;Is your Java application actually secure, or does it just look that way? In this episode of the Foojay Podcast, Frank is joined by Steve Poole and David Welch, both from &lt;a href="https://www.herodevs.com/" target="_blank" rel="noopener noreferrer"&gt;HeroDevs&lt;/a&gt;
, to dig deep into the state of Java security in 2025 and beyond.&lt;/p&gt;
&lt;p&gt;Steve introduces the concept of zombie dependencies: end-of-life libraries that appear safely dormant but are quietly accumulating vulnerabilities waiting to bite you. David, a co-chair of the CVE Automation Working Group, explains what a CVE actually is, how the identification and disclosure process works in practice, and why AI tools like Mythos are dramatically accelerating the pace at which new vulnerabilities are found &amp;mdash; on both sides of the wall.&lt;/p&gt;</description></item><item><title>Liquid Glass, Material 3, And A Lot Of Plumbing</title><link>https://foojayio.github.io/website/today/liquid-glass-material-3-and-a-lot-of-plumbing/</link><pubDate>Mon, 11 May 2026 09:10:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/liquid-glass-material-3-and-a-lot-of-plumbing/</guid><description>&lt;p&gt;&lt;img src="https://www.codenameone.com/blog/liquid-glass-material-3-modern-native-themes.jpg" alt="Header Image" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;It has been one of those weeks where the diff is bigger than the headline. The headline is short &amp;mdash; Codename One now ships modern native themes: an iOS &amp;ldquo;liquid glass&amp;rdquo; look and an Android Material 3 look, bundled into the iOS and Android ports, on by default in the Playground, and selectable from a brand new menu in the simulator. The diff behind that headline is several thousand lines across the platform ports, the simulator, the GUI plumbing, and a small army of screenshot tests.&lt;/p&gt;</description></item><item><title>Explore Spring AI SDK – Amazon Bedrock AgentCore – Part 3</title><link>https://foojayio.github.io/website/today/explore-spring-ai-sdk-amazon-bedrock-agentcore-part-3/</link><pubDate>Sun, 10 May 2026 09:09:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/explore-spring-ai-sdk-amazon-bedrock-agentcore-part-3/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/spring-ai-amazon-bedrock-sdk-guide/"&gt;Part 1&lt;/a&gt;
 and &lt;a href="https://foojayio.github.io/website/today/explore-spring-ai-sdk-amazon-bedrock-agentcore-part-2/"&gt;Part 2&lt;/a&gt;
, we explored the Spring AI SDK and Amazon Bedrock AgentCore features, including the agentcore runtime starter and integration of agentcore memory. In this article, we will explore the integration of AgentCore built-in tools, including the Browser and Code Interpreter features.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Repository containing the companion code for the tutorial. &lt;a href="https://github.com/bsmahi/simple-spring-boot-agent" target="_blank" rel="noopener noreferrer"&gt;Go to GitHub&lt;/a&gt;
{#https://github.com/bsmahi/simple-spring-boot-agent}.&lt;/strong&gt;
&lt;img src="https://foojayio.github.io/website/today/explore-spring-ai-sdk-amazon-bedrock-agentcore-part-3/AgentcoreBrowser.png" alt="AgentCore Built-In Tool Browser" loading="lazy"&gt;
 Built-In Tool Browser&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;The use case I am trying to build here is for the given URL; it navigates the entire website and retrieves the content and gives key points and the summary of the page using &lt;strong&gt;the AgentCore Browser&lt;/strong&gt; tool.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>💪😤 THE 12 LABOURS OF PRIMEFACES 15.0.15 #release</title><link>https://foojayio.github.io/website/today/the-12-labours-of-primefaces-15-0-15-release/</link><pubDate>Sun, 10 May 2026 08:15:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-12-labours-of-primefaces-15-0-15-release/</guid><description>&lt;br /&gt;
&lt;img fetchpriority="high" decoding="async" class="size-medium wp-image-123733" src="toge-herculer-700x394.png" alt="💪😤 THE 12 LABOURS OF PRIMEFACES 15.0.15 #release" width="700" height="394"&gt;
&lt;br /&gt;
&lt;p&gt;💪😤 THE 12 LABOURS OF PRIMEFACES 15.0.15 #release&lt;/p&gt;
&lt;br /&gt;
&lt;h3 id="h3-0-primefaces-15-0-15-has-just-been-released"&gt;PrimeFaces 15.0.15 has just been released. 🚀&lt;/h3&gt;
&lt;p&gt;And no, this is not &amp;ldquo;React for Java&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;PrimeFaces is a component library for JSF / Jakarta Faces.&lt;/p&gt;
&lt;p&gt;Its goal is simple:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;build server-side Java web applications with rich UI components without writing everything manually in HTML, CSS and JavaScript.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This release is mostly about polish:&lt;/p&gt;</description></item><item><title>Using the Azul Zulu Docker Official Images: From Simple Pull to Lean Container</title><link>https://foojayio.github.io/website/today/using-the-azul-zulu-docker-official-images-from-simple-pull-to-lean-container/</link><pubDate>Fri, 08 May 2026 09:05:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-the-azul-zulu-docker-official-images-from-simple-pull-to-lean-container/</guid><description>&lt;p&gt;&lt;em&gt;Previously in this series:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.azul.com/blog/trusted-java-containers-azul-zulu-openjdk-joins-dockers-official-images/" target="_blank" rel="noopener noreferrer"&gt;Trusted Java Containers: Azul Zulu OpenJDK Joins Docker&amp;rsquo;s Official Images&lt;/a&gt;
&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.azul.com/blog/the-road-to-docker-official-images-for-java-the-azul-zulu-story/" target="_blank" rel="noopener noreferrer"&gt;The Road to Docker Official Images for Java: The Azul Zulu Story&lt;/a&gt;
&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://hub.docker.com/_/azul-zulu" target="_blank" rel="noopener noreferrer"&gt;Azul Zulu is now a Docker Official Image&lt;/a&gt;
, so getting a trusted, secure Java base image is now just a &lt;code&gt;FROM azul-zulu&lt;/code&gt; line in your Dockerfile. But pulling the right image is just the beginning. This post shows you how to use these images in practice, and how a few extra steps can seriously cut the size of what you ship.
&lt;img src="https://foojayio.github.io/website/today/using-the-azul-zulu-docker-official-images-from-simple-pull-to-lean-container/azul-docker-official-1024x576.avif" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 7 of 7: MCP — The Protocol That Connects Everything</title><link>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-7-of-7-mcp-the-protocol-that-connects-everything/</link><pubDate>Thu, 07 May 2026 21:51:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-7-of-7-mcp-the-protocol-that-connects-everything/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-7-of-7-mcp-the-protocol-that-connects-everything/bxai-series-cover-07-700x368.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 7 of 7&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The AI ecosystem has a tool problem. Every framework has its own way of defining tools, every agent has its own way of calling them, and every integration requires custom code on both sides. An agent built in Python can&amp;rsquo;t easily use tools built in Java. An MCP server written for Claude Desktop can&amp;rsquo;t easily be consumed by a BoxLang agent without a custom adapter.&lt;/p&gt;</description></item><item><title>Building an AI-Powered Operations Assistant with Spring AI and MongoDB Atlas — Part 1: RAG Foundation</title><link>https://foojayio.github.io/website/today/building-an-ai-powered-operations-assistant-with-spring-ai-and-mongodb-atlas-part-1-rag-foundation/</link><pubDate>Thu, 07 May 2026 19:22:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-an-ai-powered-operations-assistant-with-spring-ai-and-mongodb-atlas-part-1-rag-foundation/</guid><description>&lt;p&gt;This is the first article in a three-part series. Part 2 covers short-term and long-term memory; Part 3 introduces stateful workflow checkpointing with pause/resume.&lt;/p&gt;
&lt;h2 id="h2-0-the-problem"&gt;The problem&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s 2 a.m. Suddenly, an alert pops up indicating abnormal CPU usage on the payment services. The on-call engineer opens their laptop, logs into the monitoring dashboards, and begins the hunt. One by one, he searches the runbooks on Confluence, checks the Slack chats, and opens the GitHub wikis and documents shared during the design phase. By the time he finds any useful information, ten minutes have already passed.&lt;/p&gt;</description></item><item><title>Java is Not the Dark Side: Why Learning Java is Easier Than You Think</title><link>https://foojayio.github.io/website/today/java-is-not-the-dark-side-why-learning-java-is-easier-than-you-think/</link><pubDate>Thu, 07 May 2026 08:44:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-is-not-the-dark-side-why-learning-java-is-easier-than-you-think/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/java-is-not-the-dark-side-why-learning-java-is-easier-than-you-think/duke_sw_01-1024x687.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Every year on May 4th, fans around the world celebrate Star Wars Day with the iconic phrase &amp;ldquo;May the 4th be with you.&amp;rdquo; The following day, May 5th, is often recognized as &amp;ldquo;Revenge of the Fifth&amp;rdquo;, a playful nod to Revenge of the Sith, where many embrace the darker side of the Force and celebrate iconic Sith Lords and villains.&lt;/p&gt;
&lt;p&gt;So, this week is ideal for talking about one of the most misunderstood technologies in programming: &lt;strong&gt;Java&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>UCanAccess: The Modern Pure-Java Bridge to Microsoft Access</title><link>https://foojayio.github.io/website/today/ucanaccess-java-ms-access-jdbc-guide/</link><pubDate>Wed, 06 May 2026 08:44:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/ucanaccess-java-ms-access-jdbc-guide/</guid><description>&lt;p&gt;Microsoft Access databases are everywhere. Decades of &lt;code&gt;.mdb&lt;/code&gt; and &lt;code&gt;.accdb&lt;/code&gt; files silently power spreadsheets, small business applications, and legacy data stores across organizations of all sizes. Yet for Java developers, connecting to these files has historically meant wrestling with native Windows libraries, ODBC bridges, and platform-specific hacks.&lt;/p&gt;
&lt;figure class="aligncenter size-full is-resized"&gt;
 &lt;img decoding="async" src="ucanaccess-logo.svg" alt="UCanAccess Logo" class="wp-image-123938" style="width:320px"&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;UCanAccess&lt;/strong&gt; puts an end to that. It is an open-source, pure-Java JDBC driver that lets you read and write Microsoft Access databases (&lt;code&gt;.mdb&lt;/code&gt; and &lt;code&gt;.accdb&lt;/code&gt;) just like any other SQL database &amp;mdash; no native drivers, no Windows dependency, no friction.&lt;/p&gt;</description></item><item><title>When Should You Use a Cache With MongoDB?</title><link>https://foojayio.github.io/website/today/when-should-you-use-a-cache-with-mongodb/</link><pubDate>Tue, 05 May 2026 15:23:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/when-should-you-use-a-cache-with-mongodb/</guid><description>&lt;p&gt;From time to time, I&amp;rsquo;ll run a &lt;a href="https://www.mongodb.com/events/mongodb-schema-design-reviews/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=cache-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;design review&lt;/a&gt;
 for an application being migrated from a relational database onto MongoDB, where the customer shares an architectural diagram showing a caching layer (typically Redis) sitting between the app server and MongoDB.&lt;/p&gt;
&lt;p&gt;I like to keep the architecture as simple as possible&amp;mdash;after all, each layer brings its own complexity and management costs&amp;mdash;so I&amp;rsquo;ll ask why the caching layer is there. Of course, the answer is always that it&amp;rsquo;s there to speed up data access. This reveals a misunderstanding of both the reason why caching layers were created and what MongoDB provides.&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 6 of 7: Memory Systems &amp; RAG — Building AI That Remembers</title><link>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-6-of-7-memory-systems-rag-building-ai-that-remembers/</link><pubDate>Tue, 05 May 2026 15:10:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-6-of-7-memory-systems-rag-building-ai-that-remembers/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-6-of-7-memory-systems-rag-building-ai-that-remembers/bxai-series-cover-06-700x368.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 6 of 7&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A chatbot with no memory isn&amp;rsquo;t a conversation &amp;mdash; it&amp;rsquo;s a series of isolated queries. Every message starts from scratch. The user has to re-explain who they are, what they&amp;rsquo;re working on, and what was just said. It&amp;rsquo;s exhausting, and it signals that the AI isn&amp;rsquo;t really listening.&lt;/p&gt;
&lt;p&gt;Memory is what separates a useful AI application from a toy. BoxLang AI ships with one of the most comprehensive memory systems in any AI framework &amp;mdash; 20+ memory types across two major categories, vector embedding support for semantic retrieval, 30+ document loaders for RAG pipelines, and a per-call identity routing system that makes multi-tenant applications safe by default.&lt;/p&gt;</description></item><item><title>The Code Was Always the Door</title><link>https://foojayio.github.io/website/today/ai-shepherd-senior-developer/</link><pubDate>Tue, 05 May 2026 08:59:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/ai-shepherd-senior-developer/</guid><description>&lt;h2 id="h2-0-the-doorman-in-a-hoodie"&gt;The doorman in a hoodie&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s a story Rory Sutherland tells in his book &lt;em&gt;Alchemy&lt;/em&gt; . A consultant is hired to find savings at a luxury hotel. He watches a doorman for twenty minutes and writes in his report: &lt;em&gt;this man opens doors&lt;/em&gt;. Automatic doors also open doors. Automatic doors are cheaper. So the hotel removes him.&lt;/p&gt;
&lt;p&gt;The lobby falls apart. Guests can&amp;rsquo;t find the restaurant. Nobody hails a taxi. The ineffable sense that someone is in charge of the front of house disappears with him. The consultant measured the visible action and missed the actual function.&lt;/p&gt;</description></item><item><title>JCast</title><link>https://foojayio.github.io/website/today/introducing-jcast-conversations-about-java-and-developer-life-in-dutch/</link><pubDate>Mon, 04 May 2026 08:00:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-jcast-conversations-about-java-and-developer-life-in-dutch/</guid><description>&lt;p&gt;The Java community thrives on sharing knowledge and experiences. Most content is in English, which works well for many developers. However, there&amp;rsquo;s something special about discussing complex topics in your native language. The nuances. The humor. The ability to express yourself freely without translating your thoughts first.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s why we created JCast, a podcast for the Dutch-speaking developer community. Moreover, today we&amp;rsquo;re excited to launch Season 2!&lt;/p&gt;
&lt;h2 id="h2-0-season-2-starts-with-frank-delporte"&gt;Season 2 Starts with Frank Delporte&lt;/h2&gt;
&lt;p&gt;For our second season opener, we sat down with Frank Delporte. He&amp;rsquo;s well-known in the Java community as a Java Champion. Additionally, he&amp;rsquo;s a Java Developer, Technical Writer at Azul, Blogger, and Author of &amp;ldquo;Getting started with Java on Raspberry Pi&amp;rdquo;. Furthermore, he&amp;rsquo;s a Pi4J Contributor.&lt;/p&gt;</description></item><item><title>Foojay Podcast #94: More Than a Blog: How Foojay Connects, Sustains, and Evolves the Java Community</title><link>https://foojayio.github.io/website/today/foojay-podcast-94/</link><pubDate>Mon, 04 May 2026 06:26:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-94/</guid><description>&lt;p&gt;Foojay.io, the website for the Friends of OpenJDK, is turning six years old. To celebrate, Frank Delporte headed to JCON in Cologne, Germany, and sat down with twelve members of the Java community to talk about what Foojay means to them, what they learn from each other, and how the community is evolving.&lt;/p&gt;
&lt;p&gt;This episode covers a lot of ground. Sharat Chandar reflects on 25 years in the Java community and why the people are what keep the language alive. Markus Westergren and Iryna Dohndorf both focus on a theme that comes up again and again: developer sustainability. Not just green software, but how you stay healthy, grounded, and relevant when AI is changing everything around you. Markus and his wife researched how developers are reacting to AI, from ignoring it completely to transforming everything they do. Iryna talks about building resilience and robustness as skills, not afterthoughts.&lt;/p&gt;</description></item><item><title>Large-Scale ETL Pipeline Architecture</title><link>https://foojayio.github.io/website/today/large-scale-etl-pipeline-architecture/</link><pubDate>Fri, 01 May 2026 19:23:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/large-scale-etl-pipeline-architecture/</guid><description>&lt;p&gt;Modern data-driven systems. ETL pipelines are no longer simply scheduled background processes that run silently overnight, one after another. They are the backbone of real-time analytics, powering operational dashboards and recommendation systems. They enable machine learning workflows.&lt;/p&gt;
&lt;p&gt;This evolution, while creating enormous benefits, has&amp;mdash;with the increase in data volume and the decrease in latency tolerance&amp;mdash;called into question the traditional sequential ETL approach. A bottleneck for the speed is now required.&lt;/p&gt;</description></item><item><title>JavaFX Links of April 2026</title><link>https://foojayio.github.io/website/today/javafx-links-of-april-2026/</link><pubDate>Thu, 30 Apr 2026 09:02:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-april-2026/</guid><description>&lt;p&gt;Here are the JavaFX LinksOfTheMonth of April 2026. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; published a rework on Foojay of last week&amp;rsquo;s Azul Blog post about the Oracle announcement related to JavaFX: &lt;a href="https://foojayio.github.io/website/today/the-javafx-revival/"&gt;Oracle&amp;rsquo;s Java Verified Portfolio and JavaFX: What It Actually Means&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Blog post by Gluon: &lt;a href="https://gluonhq.com/april-2026-critical-patch-update-for-openjfx-now-available/" target="_blank" rel="noopener noreferrer"&gt;April 2026 Critical Patch Update for OpenJFX Now Available&lt;/a&gt;
. With a &lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3mjzkzn6zzs2v" target="_blank" rel="noopener noreferrer"&gt;message shared by &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Enjoy the latest and safest releases of JavaFX! And if you want to help us building/distributing these releases, consider our &lt;a href="https://gluonhq.com/services/javafx-support/#pricing" target="_blank" rel="noopener noreferrer"&gt;LTS support at gluonhq.com/lts&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Related to the three-monthly security update, a merge request has been created in the OpenJFX repo with the &lt;a href="https://github.com/openjdk/jfx26u/pull/23/changes" target="_blank" rel="noopener noreferrer"&gt;release notes for 26.0.1&lt;/a&gt;
 with seven fixes and one known issue: &amp;ldquo;&lt;em&gt;Media Playback Does Not Work on Ubuntu 26.04. This is because JavaFX Media does not support libavcodec version 62. Support will be added with &lt;a href="https://bugs.openjdk.org/browse/JDK-8378510" target="_blank" rel="noopener noreferrer"&gt;JDK-8378510&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Still on Java 8 with your JavaFX application and using Amazon Corretto? Apparently the &lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/04/amazon-corretto-april-2026-quarterly-updates/" target="_blank" rel="noopener noreferrer"&gt;April 2026 release is the last one Amazon is providing with JavaFX 8 support&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-scenebuilder"&gt;SceneBuilder&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On Reddit, &lt;strong&gt;No-Security-7518&lt;/strong&gt; is asking for feedback: &lt;a href="https://www.reddit.com/r/JavaFX/comments/1sebnus/scenebuilder_is_a_great_piece_of_software_what/" target="_blank" rel="noopener noreferrer"&gt;SceneBuilder is a GREAT piece of software. What features could make it even greater?&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;m thinking maybe I could become a contributor. Anyway, I was thinking: What could make Scenebuilder even better?&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/pdfsam.org/post/3midyc6gytc2l" target="_blank" rel="noopener noreferrer"&gt;PDFsam announced&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The new PDFsam Basic 6.0.0 is out with a lot of work done on the PDF engine and accessibility, upgraded JDK and JavaFX and more.&lt;/em&gt; &amp;quot; Check &lt;a href="https://blog.pdfsam.org/new-release/pdfsam-basic-6-0-0-is-out/2592/" target="_blank" rel="noopener noreferrer"&gt;this post&lt;/a&gt;
 for more details.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; did the first release of &lt;a href="https://melodymatrix.rocks/" target="_blank" rel="noopener noreferrer"&gt;MelodyMatrix&lt;/a&gt;
, live on camera, together with &lt;strong&gt;Steve Hannah&lt;/strong&gt; , the creator of &lt;a href="https://www.jdeploy.com/" target="_blank" rel="noopener noreferrer"&gt;jDeploy&lt;/a&gt;
. You can watch the &lt;a href="https://www.youtube.com/watch?v=_-IL7uHalIU" target="_blank" rel="noopener noreferrer"&gt;full video on YouTube&lt;/a&gt;
 and find more information &lt;a href="https://webtechie.be/post/2026-04-16-first-release-of-melodymatrix-with-jdeploy/" target="_blank" rel="noopener noreferrer"&gt;in this blog post&lt;/a&gt;
. MelodyMatrix is a desktop app to experience music in a new way with real-time MIDI recording, multiple visualization views, and powerful playback features. Perfect for musicians, educators, and music enthusiasts.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/viktor-karpyuk_mongodb-opensource-developertools-ugcPost-7449866993488297985-sKxe/?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAMtmUkBuuAVyJKMU3vtXsADMtuaTKIO8IA" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Viktor Karpyuk&lt;/strong&gt; shared on LinkedIn&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;It started with a small frustration: Studio 3T Community Edition only allowed 3 database connections. That limitation kept getting in the way of real day-to-day work, so instead of working around it, I decided to build something simpler, lighter, and more practical for everyday MongoDB usage. That is how Mongo Explorer was born &amp;mdash; a native MongoDB client focused on the things developers actually need: quick connections, easy browsing, solid querying, and a clean desktop experience without unnecessary overhead.&lt;/em&gt; &amp;quot; It&amp;rsquo;s &lt;a href="https://github.com/viktor-karpyuk/mongo-explorer" target="_blank" rel="noopener noreferrer"&gt;available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mign6rr7q22i" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared amazing screenshots&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Last weekend I worked on FlexGanttFX (flexganttfx.com) improvements and support for AtlantaFX theming / styling. A new showcase app with new demos / samples is also in the works.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/leewyatt.bsky.social/post/3mj4iduyq3s2y" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Lee Wyatt&lt;/strong&gt; announced JavaFX Tools v2.0&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Free IntelliJ plugin for JavaFX devs. CSS completion, variable resolution and gutter previews, 63,000+ Ikonli icons browser, weekly JFXCentral LOTW digest. Thanks to &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; for testing and guidance!&lt;/em&gt; &amp;quot; Check the &lt;a href="https://www.youtube.com/watch?v=a03BkmqNefk" target="_blank" rel="noopener noreferrer"&gt;video on YouTube&lt;/a&gt;
. The plugin is &lt;a href="https://plugins.jetbrains.com/plugin/17514-javafx-tools" target="_blank" rel="noopener noreferrer"&gt;available on the JetBrains Marketplace&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/sosuisen.bsky.social/post/3miqzesecvk2b" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hidekazu Kubota&lt;/strong&gt; announced&lt;/a&gt;
 the first stable release of the &lt;a href="https://github.com/sosuisen/javafx-builder-api" target="_blank" rel="noopener noreferrer"&gt;JavaFX Builder API&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;This API allows UI code to represent nested structures that mirror the container hierarchy of the user interface. This project aims to reintroduce builder classes to JavaFX. Although these classes were included in JavaFX 2, they were removed from the official library due to concerns about maintenance overhead. Nonetheless, for those who prefer a fluent style, having an API like this is a valuable addition.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Shared by &lt;a href="https://www.reddit.com/r/JavaFX/comments/1slll8c/running_javafx_apps_with_updates_and_dynamic/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Striking_Creme864&lt;/strong&gt; on Reddit&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Running JavaFX apps with updates and dynamic plugins. Today I want to share our project &lt;a href="https://github.com/techsenger/weaverbird" target="_blank" rel="noopener noreferrer"&gt;Weaverbird&lt;/a&gt;
 and show how it can be used with JavaFX. Usually, a JavaFX application is started with all modules loaded int the boot layer. However, JPMS allows you to create an unlimited number of child layers and build a graph from them, which in turn lets us separate application management from the application itself. For exactly this purpose, Weaverbird was created - it runs in the boot layer and is responsible for creating and managing the layers (at the same time its capabilities go much further).&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1sr105r/kickstartfx_v11_the_most_advanced_template_for/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; shared info about KickstartFX v1.1&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A few months ago I released a ready-to-use application template called &lt;a href="https://github.com/xpipe-io/kickstartfx" target="_blank" rel="noopener noreferrer"&gt;KickstartFX&lt;/a&gt;
. You can clone it and get started instantly or try out the pre-built releases on GitHub. The code and buildscripts are the same you find in a real-world production application as most of them are taken straight from one, in this case &lt;a href="https://github.com/xpipe-io/xpipe" target="_blank" rel="noopener noreferrer"&gt;XPipe&lt;/a&gt;
. Since then, quite a few additions and bug fixes have been integrated.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2026-04-20-lottie4j-unit-test-with-headless-javafx/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; blogged about headless testing of Lottie4J&lt;/a&gt;
, a library for parsing Lottie animations as Java objects and playing them as JavaFX animations: &amp;ldquo;&lt;em&gt;Lottie4J had a unit test I marked &amp;lsquo;can not run on CI, because it requires a display.&amp;rsquo; JavaFX 26 fixed that. There&amp;rsquo;s a built-in headless platform now, one JVM flag, and GitHub Actions just work without any display setup. There&amp;rsquo;s a small catch with Java version juggling (JavaFX 26 requires Java 24+, Lottie4J targets Java 21), but a Maven profile handles it cleanly.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1sti4zh/flexganttfx_showcase_application/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; published a FlexGanttFX Showcase Application&lt;/a&gt;
 : &amp;ldquo;&lt;em&gt;created a jdeploy installer for the FlexGanttFX showcase application. You can &lt;a href="https://www.jdeploy.com/~flexganttfxshowcase" target="_blank" rel="noopener noreferrer"&gt;find it here&lt;/a&gt;
. The installer will allow you to run the demo locally and the installation will auto-update whenever I push a new release. FlexGanttFX is a framework for building UIs for planning and scheduling applications. The showcase application contains a couple of demos and feature samples. If there is anything you would like to see being added to the demos then please let me know and I will try to come up with an example. I will soon add a JPro-based website that will allow you to run the same application in your browser.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Ytdo8OGEYFI" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Catherine Edelveis&lt;/strong&gt; published a new video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;New on CyberJAR: Comparing Top OpenJDK Distributions. If you&amp;rsquo;re looking for more than vanilla Java - JavaFX, Java 6 an 7, hardened container images, extended LTS support - check out this comparative summary.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=uvQwVpG3c5A" target="_blank" rel="noopener noreferrer"&gt;Live coding session with &lt;strong&gt;Johannes Rabauer&lt;/strong&gt; and &lt;strong&gt;Ryan Jarvinen&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;AI Coding with IBM Bob: Building a JavaFX Chess Game Live. In this live coding session we&amp;rsquo;ll we explore IBM Bob, IBM&amp;rsquo;s new AI-first development environment designed to act as a true software engineering partner rather than just an autocomplete tool. Bob integrates directly into the IDE and supports chat-driven development, real-time code review, and security-aware refactoring, while understanding your codebase and intent. It is purpose-built for tasks like Java modernization, large-scale refactoring, and enterprise-grade development workflows. The goal of this session is simple: Use a limited trial budget (40 Bobcoins) to build a functional JavaFX chess game and evaluate how far an AI IDE can realistically take us.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/olivier-pillods-9286a0113_javajavafx-3d-chess-final-project-2023-ugcPost-7450104328989663232-MdE6" target="_blank" rel="noopener noreferrer"&gt;And also a finished chess game in 3D by &lt;strong&gt;Olivier Pillods&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;We were asked to replicate the classic chess game with JavaFX, and to add new pieces and rule variants. I was the only student that decided to make it 3D. Developed my own obj file importer. I created piece animations and colored interactions for movement availability. To finish, I made a graveyard system, and a rollback functionality that remembers all until start.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; was &amp;ldquo;&lt;em&gt;struggling with the BentoFX layout in MelodyMatrix, and called &lt;strong&gt;Matt Coley&lt;/strong&gt;, the person who wrote it. We used ScenicView to inspect the running JavaFX scene graph, cleaned up some AI-generated code, and possibly found a bug. Honest and practical session.&lt;/em&gt; &amp;quot; Watch the &lt;a href="https://www.youtube.com/watch?v=grwzIWWZMNw" target="_blank" rel="noopener noreferrer"&gt;video on YouTube&lt;/a&gt;
 and check the &lt;a href="https://webtechie.be/post/2026-04-21-improving-melodymatrix-ui-with-bentofx/" target="_blank" rel="noopener noreferrer"&gt;blog post with more info and links&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Video by &lt;strong&gt;Lee Wyatt&lt;/strong&gt; : &lt;a href="https://www.youtube.com/watch?v=ycj1X_TwfeU" target="_blank" rel="noopener noreferrer"&gt;JavaFX Hot Reload in IntelliJ &amp;mdash; One Click, Zero Code Changes (FxmlKit + JavaFX Tools)&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX hot reload without touching your production code. FxmlKit 1.5.1 introduces a system property to enable dev mode externally. JavaFX Tools 2.1.1 takes it one step further &amp;mdash; just click the purple Runner button in IntelliJ IDEA, and your app starts with FXML/CSS hot reload enabled automatically. No need to call FxmlKit.enableDevelopmentMode() in your code. No risk of shipping dev mode to production. No extra configuration.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-conferences-presentations"&gt;Conferences, Presentations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/wolfgangweigend.bsky.social/post/3mjz5326mxk2p" target="_blank" rel="noopener noreferrer"&gt;Picture shared by &lt;strong&gt;Wolfgang Weigend&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A nice conversation about various topics such as Java dependencies, JUnit and also JavaFX at the oracle Java booth at the JCON 2026 conference in Cologne with &lt;strong&gt;Christian Stein&lt;/strong&gt; and &lt;strong&gt;Adam Bien&lt;/strong&gt;.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Article by &lt;strong&gt;Daniel Harris&lt;/strong&gt; : &lt;a href="https://www.coohom.com/article/interactive-floor-plan-editor-in-java-tools-and-frameworks" target="_blank" rel="noopener noreferrer"&gt;Interactive Floor Plan Editor in Java: Tools and Frameworks: A practical guide for developers building drag‑and‑drop architectural layout editors with Java and JavaFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Over the last decade, I&amp;rsquo;ve worked on several internal tools for architecture studios and real‑estate visualization teams. One recurring request is the same: build an interactive floor plan editor in Java that allows designers to quickly sketch layouts, drag walls, and experiment with room configurations. &amp;hellip; In this guide I&amp;rsquo;ll walk through the frameworks, design patterns, and engineering decisions that make Java floor plan editors usable and scalable.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Content changes on JFX Central:
&lt;ul&gt;
&lt;li&gt;Fifty (!) new &lt;a href="https://www.jfx-central.com/libraries" target="_blank" rel="noopener noreferrer"&gt;libraries&lt;/a&gt;
 and three &lt;a href="https://www.jfx-central.com/books" target="_blank" rel="noopener noreferrer"&gt;books&lt;/a&gt;
 were added to the JFX Central website.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The desktop client was updated to JavaFX 25 and now uses the new EXTENDED stage style, which allows for a more native feel of the application on Windows, Mac, Linux.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is working on more improvements:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mhzvnc76wc2u" target="_blank" rel="noopener noreferrer"&gt;Copilot is now updating the libraries catalogue for JFX Central for me&lt;/a&gt;
. &amp;lsquo;Find the most popular JavaFX libraries on GitHub and summarise the readme and download the images and integrate into libraries.json&amp;rsquo;. That&amp;rsquo;s what AI was made for 🙂&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;A little competition never hurt anyone &amp;hellip;.. &lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mi2dduhvnk2o" target="_blank" rel="noopener noreferrer"&gt;JFX Central will start showing the GitHub stars that a library has received so far.&lt;/a&gt;
&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mi2dgp7xdk2o" target="_blank" rel="noopener noreferrer"&gt;Here is another one&lt;/a&gt;
&lt;/em&gt; &amp;hellip; the header changes layout when a library has its own icon &amp;hellip;. good job &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; :-)_&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The JavaFX Links Of The Week of March got bundled and &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-march-2026/"&gt;published on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 5 of 7: One API, 17 Providers — The Provider Architecture Deep Dive</title><link>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-5-of-7-one-api-17-providers-the-provider-architecture-deep-dive/</link><pubDate>Wed, 29 Apr 2026 16:38:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-5-of-7-one-api-17-providers-the-provider-architecture-deep-dive/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-5-of-7-one-api-17-providers-the-provider-architecture-deep-dive/bxai-series-cover-05-700x368.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 5 of 7&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Vendor lock-in is the silent killer of AI projects. You pick OpenAI, build everything against the OpenAI API, and then GPT-5 launches at three times the price. Or a competitor launches a model that&amp;rsquo;s faster for your use case. Or you need to self-host for compliance. Or your client is on AWS and wants Bedrock.&lt;/p&gt;
&lt;p&gt;Every time the answer to &amp;ldquo;can we switch providers?&amp;rdquo; is &amp;ldquo;it would take months,&amp;rdquo; something went wrong architecturally.&lt;/p&gt;</description></item><item><title>Dockerizing a Java 26 Project with Docker Init</title><link>https://foojayio.github.io/website/today/dockerizing-a-java-26-project-with-docker-init/</link><pubDate>Mon, 27 Apr 2026 09:55:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/dockerizing-a-java-26-project-with-docker-init/</guid><description>&lt;p&gt;Docker Init was introduced in Docker Desktop 4.27, before LLMs became the default answer to everything. It&amp;rsquo;s a &amp;ldquo;smart&amp;rdquo; interactive wizard that analyzes your project and generates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A &lt;code&gt;Dockerfile&lt;/code&gt; (multi-stage, production-ready)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A &lt;code&gt;compose.yaml&lt;/code&gt; file&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A &lt;code&gt;.dockerignore&lt;/code&gt; file&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A &lt;code&gt;README.Docker.md&lt;/code&gt; with build and run instructions&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What makes it valuable is that it&amp;rsquo;s deterministic&amp;mdash;not a probabilistic guess. It produces the same correct output every time, following Docker&amp;rsquo;s own best practices.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://dockersecurity.io/commandos-asgard/asgard-init.png" alt="Docker Commandos setting up the command center" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Explore Spring AI SDK – Amazon Bedrock AgentCore – Part 2</title><link>https://foojayio.github.io/website/today/explore-spring-ai-sdk-amazon-bedrock-agentcore-part-2/</link><pubDate>Mon, 27 Apr 2026 09:09:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/explore-spring-ai-sdk-amazon-bedrock-agentcore-part-2/</guid><description>&lt;br /&gt;
&lt;p&gt;&lt;em&gt;If you&amp;rsquo;re joining us from &lt;a href="https://foojayio.github.io/website/today/spring-ai-amazon-bedrock-sdk-guide/"&gt;Part 1&lt;/a&gt;
 or need a quick refresher on the architecture, listen to this brief overview of how Spring AI and Amazon Bedrock work together.&lt;/em&gt;
&lt;em&gt;Generated using Notebook LLM for my previous &lt;a href="https://foojayio.github.io/website/today/spring-ai-amazon-bedrock-sdk-guide/"&gt;article&lt;/a&gt;
{#https://foojay.io/today/spring-ai-amazon-bedrock-sdk-guide/}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In this article, we explore one of the AgentCore capabilities i.e., &lt;em&gt;&lt;strong&gt;memory&lt;/strong&gt;&lt;/em&gt;
&lt;img src="https://a.b.cdn.console.awsstatic.com/a/v1/ACHOUHHJ3XZF7J5AYP2XIR2NCZIPH56WAM33AFJA44HJSRMAO4DA/assets/images/Overview/ac_overviewchart_04_07.png" alt="" loading="lazy"&gt;
 &lt;em&gt;&lt;strong&gt;Source: Amazon&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;To begin, enable &lt;strong&gt;AgentCore memory&lt;/strong&gt; for the agent you built earlier.&lt;br&gt;
&lt;img src="https://foojayio.github.io/website/today/explore-spring-ai-sdk-amazon-bedrock-agentcore-part-2/SpringAISDK.png" alt="SpringAI SDK" loading="lazy"&gt;
&lt;/p&gt;
&lt;h3 id="h3-0-step-1-add-the-ai-model-and-agentcore-memory-dependencies"&gt;Step 1: Add the Ai model and AgentCore memory dependencies&lt;/h3&gt;
&lt;br /&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;&amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;org.springframework.ai&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactId&amp;gt;spring-ai-model&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;org.springaicommunity&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactId&amp;gt;spring-ai-agentcore-memory&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/pre&gt;
&lt;h3 id="h3-1-step-2-create-short-long-term-in-aws-management-console"&gt;Step 2: Create Short/Long Term in AWS Management Console&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Navigate to &lt;strong&gt;Amazon Bedrock AgentCore &amp;gt; Memory&lt;/strong&gt; to create short/long-term memories.&lt;/em&gt;
&lt;img src="https://foojayio.github.io/website/today/explore-spring-ai-sdk-amazon-bedrock-agentcore-part-2/AgentCoreMemory-1024x441.png" alt="AgentCore Memory" loading="lazy"&gt;
 AgentCore Memory&lt;/p&gt;</description></item><item><title>The Road to Docker Official Images for Java: The Azul Zulu Story</title><link>https://foojayio.github.io/website/today/the-road-to-docker-official-images-for-java-the-azul-zulu-story/</link><pubDate>Fri, 24 Apr 2026 08:57:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-road-to-docker-official-images-for-java-the-azul-zulu-story/</guid><description>&lt;p&gt;&lt;em&gt;Previously in this series:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.azul.com/blog/trusted-java-containers-azul-zulu-openjdk-joins-dockers-official-images/" target="_blank" rel="noopener noreferrer"&gt;Trusted Java Containers: Azul Zulu OpenJDK Joins Docker&amp;rsquo;s Official Images&lt;/a&gt;
&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After more than two years of collaboration, reviews, and back-and-forth with the Docker team, Azul Zulu Builds of OpenJDK have officially joined &lt;a href="https://hub.docker.com/_/azul-zulu" target="_blank" rel="noopener noreferrer"&gt;Docker&amp;rsquo;s Official Images&lt;/a&gt;
 program. This is not just a badge of honor. It changes how Java developers can pull and trust their container base images.&lt;/p&gt;
&lt;p&gt;The formal announcement is on the &lt;a href="https://www.azul.com/blog/trusted-java-containers-azul-zulu-openjdk-joins-dockers-official-images/" target="_blank" rel="noopener noreferrer"&gt;Azul blog&lt;/a&gt;
. In this post, I&amp;rsquo;ll walk you through what happened, why it matters, and how to start using these images today.&lt;/p&gt;</description></item><item><title>Building a Personalized Content Delivery System</title><link>https://foojayio.github.io/website/today/building-a-personalized-content-delivery-system/</link><pubDate>Thu, 23 Apr 2026 15:10:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-a-personalized-content-delivery-system/</guid><description>&lt;p&gt;Recommendation engines have a reputation for requiring specialized ML infrastructure: matrix factorization pipelines, training jobs, and model serving layers. That is one way to do it, but not the only way. If your data already lives in MongoDB and your application runs on Spring Boot, you can build a practical recommendation system using tools you already have. MongoDB aggregation pipelines handle the scoring math server-side, and Atlas Vector Search adds semantic matching without a separate vector database.&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 4 of 7: Middleware — The Missing Layer in Every AI Framework 🧵</title><link>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-4-of-7-middleware-the-missing-layer-in-every-ai-framework/</link><pubDate>Thu, 23 Apr 2026 14:25:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-4-of-7-middleware-the-missing-layer-in-every-ai-framework/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-4-of-7-middleware-the-missing-layer-in-every-ai-framework/bxai-series-cover-04-700x368.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 4 of 7&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the question every team eventually asks about their AI agents: how do we test these things?&lt;/p&gt;
&lt;p&gt;Agents make live LLM calls. They invoke real tools. They have non-deterministic outputs. Standard unit testing approaches fall apart. You can&amp;rsquo;t mock every provider. You can&amp;rsquo;t replay a conversation from three weeks ago. You can&amp;rsquo;t confidently tell stakeholders that the agent you deployed today behaves the same way it did when you signed off on it.&lt;/p&gt;</description></item><item><title>Eliminating Flaky Tests to End World Hunger</title><link>https://foojayio.github.io/website/today/eliminating-flaky-tests-to-end-world-hunger/</link><pubDate>Thu, 23 Apr 2026 09:02:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/eliminating-flaky-tests-to-end-world-hunger/</guid><description>&lt;p&gt;Rita Mae Brown once said:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Insanity&lt;/strong&gt; is doing the same thing over and over again and expecting different results.​&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;However, everyone has at least once experienced a test that failed and then passed in the next run without changing the code or the environment. In software engineering, we don&amp;rsquo;t call it insanity; we call such unpredictable failures &lt;strong&gt;flaky tests&lt;/strong&gt;. At first, they may seem like minor problems, but like clutter in a junk drawer, they become worse over time if you never take care of them.&lt;/p&gt;</description></item><item><title>Azul Zulu April 2026 Quarterly Update Released</title><link>https://foojayio.github.io/website/today/azul-zulu-april-2026-quarterly-update-released/</link><pubDate>Thu, 23 Apr 2026 07:12:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/azul-zulu-april-2026-quarterly-update-released/</guid><description>&lt;p&gt;The &lt;strong&gt;April 2026 quarterly update for Azul Zulu Builds of OpenJDK&lt;/strong&gt; is now available. This quarterly release brings &lt;strong&gt;security and bug fixes&lt;/strong&gt;, along with a few notable new changes, to all currently supported Java versions.&lt;/p&gt;
&lt;h2 id="h2-0-the-quarterly-update-cycle"&gt;The Quarterly Update Cycle&lt;/h2&gt;
&lt;p&gt;Every three months (in January, April, July, and October), the OpenJDK project releases security updates, bug fixes, and improvements for all supported Java versions. This predictable schedule helps organizations plan their Java updates and maintain secure, stable production environments.&lt;/p&gt;</description></item><item><title>Distributed Cache Invalidation Patterns</title><link>https://foojayio.github.io/website/today/distributed-cache-invalidation-patterns/</link><pubDate>Tue, 21 Apr 2026 13:52:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/distributed-cache-invalidation-patterns/</guid><description>&lt;p&gt;Caching is one of the most powerful tools developers have at their disposal for optimizing application performance. Caching systems can significantly reduce latency and reduce the load on databases or external systems by storing frequently accessed data as close as possible to the application layer. The result? Improved responsiveness and overall system usability.&lt;/p&gt;
&lt;p&gt;In small monolithic applications, cache management is usually very simple. A service retrieves data from a database, stores it in memory, and fulfills subsequent requests by retrieving the data directly from the cache. When the data changes, the cache key is invalidated or updated.&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 3 of 7: Multi-Agent Orchestration — Building AI Teams That Work 🌲</title><link>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-3-of-7-multi-agent-orchestration-building-ai-teams-that-work/</link><pubDate>Tue, 21 Apr 2026 08:32:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-3-of-7-multi-agent-orchestration-building-ai-teams-that-work/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-3-of-7-multi-agent-orchestration-building-ai-teams-that-work/bxai-series-cover-03-700x368.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 3 of 7&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A single agent is useful. An orchestra of agents is powerful.&lt;/p&gt;
&lt;p&gt;The problem with most multi-agent frameworks is that the orchestration layer is bolted on &amp;mdash; you&amp;rsquo;re managing agent references manually, passing outputs between them by hand, and hoping you haven&amp;rsquo;t introduced a cycle. There&amp;rsquo;s no concept of hierarchy. No cycle detection. No way to ask &amp;ldquo;who&amp;rsquo;s in charge here?&amp;rdquo; or &amp;ldquo;how deep in the tree am I?&amp;rdquo;&lt;/p&gt;</description></item><item><title>MelodyMatrix V1.0.0 Released: Shipping a JavaFX App with jDeploy, GitHub Actions, and Auto-Update</title><link>https://foojayio.github.io/website/today/melodymatrix-v1-0-0-released-shipping-a-javafx-app-with-jdeploy-github-actions-and-auto-update/</link><pubDate>Mon, 20 Apr 2026 14:51:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/melodymatrix-v1-0-0-released-shipping-a-javafx-app-with-jdeploy-github-actions-and-auto-update/</guid><description>&lt;p&gt;Some side projects take a while to get to a proper release. &lt;a href="https://melodymatrix.rocks/" target="_blank" rel="noopener noreferrer"&gt;MelodyMatrix&lt;/a&gt;
 is one of those. The app has been downloadable for quite some time thanks to &lt;a href="https://www.jdeploy.com/" target="_blank" rel="noopener noreferrer"&gt;jDeploy&lt;/a&gt;
, but there was no official V1.0.0 yet. No tagged release. No moment of &amp;ldquo;okay, this is it.&amp;rdquo; Just a rolling build on every commit to the &lt;code&gt;main&lt;/code&gt; branch.&lt;/p&gt;
&lt;p&gt;That changed now: live, on camera, together with Steve Hannah, the creator of jDeploy.&lt;/p&gt;</description></item><item><title>Explore Spring AI SDK - Amazon Bedrock AgentCore - Part 1</title><link>https://foojayio.github.io/website/today/spring-ai-amazon-bedrock-sdk-guide/</link><pubDate>Mon, 20 Apr 2026 13:44:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-ai-amazon-bedrock-sdk-guide/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Artificial intelligence has rapidly expanded across every industry since the inception of ChatGPT. It represents a breakthrough in how we build and use software. Moreover, this breakthrough technology has driven major transformation. At the same time, it has created significant noise and hype.&lt;/p&gt;
&lt;p&gt;Today, AI is no longer experimental. Instead, it has become essential, much like electricity and the internet. As a result, it now plays a key role in our daily lives. Overall, this shift reflects strong technological acceleration across industries.&lt;/p&gt;</description></item><item><title>Spring Boot 3.5 EOL — The CVE Blind Spot Nobody Talks About</title><link>https://foojayio.github.io/website/today/crossing-the-river-styx-spring-boot-3-5-and-the-zombie-dependency-problem/</link><pubDate>Sun, 19 Apr 2026 13:37:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/crossing-the-river-styx-spring-boot-3-5-and-the-zombie-dependency-problem/</guid><description>&lt;p&gt;Tomorrow I start (o so early) for &lt;a href="https://2026.europe.jcon.one/" target="_blank" rel="noopener noreferrer"&gt;JCON Europe&lt;/a&gt;
 in Cologne and then, at the tail end of the week, go to Devoxx France to give more talks. If you&amp;rsquo;re at either, come say hi. Herodevs has a booth at both.&lt;/p&gt;
&lt;p&gt;After digging into the CVE stories behind &lt;a href="https://foojayio.github.io/website/today/the-real-mechanics-of-vulnerabilities-in-an-upstream-downstream-topsy-turvy-eol-world/"&gt;Tomcat 8.5&amp;rsquo;s end of life&lt;/a&gt;
, I turned my attention to Spring Boot 3.5. Same question, different framework: what &lt;em&gt;actually&lt;/em&gt; happens to your security posture when a project crosses the EOL line?&lt;/p&gt;</description></item><item><title>Choosing the Right OpenJDK Distribution for Production</title><link>https://foojayio.github.io/website/today/which-java-runtime-should-you-use-in-production-comparing-openjdk-distributions/</link><pubDate>Sat, 18 Apr 2026 15:01:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/which-java-runtime-should-you-use-in-production-comparing-openjdk-distributions/</guid><description>&lt;h2 id="h2-0-tldr"&gt;TLDR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;All eight distributions on this list start from the same OpenJDK codebase. The version number is the thing they have most in common. However, support ownership, vendor accountability, and additional tooling variety are where they go separate ways.&lt;/li&gt;
&lt;li&gt;BellSoft and Azul are the two vendors for whom Java is the primary business rather than a portfolio item. The difference is in support window length and toolchain depth.&lt;/li&gt;
&lt;li&gt;If your infrastructure already standardizes on AWS, Azure, RHEL, SAP, or IBM platforms, the aligned distribution answers itself. The real decision is for teams without that constraint.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;Picking a Java runtime is like picking any commodity infrastructure, isn&amp;rsquo;t it? You simply find the version you need and grab a build.&lt;/p&gt;</description></item><item><title>Spring I/O 2026: Field Notes from Barcelona</title><link>https://foojayio.github.io/website/today/spring-i-o-2026-field-notes-from-barcelona/</link><pubDate>Fri, 17 Apr 2026 13:09:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-i-o-2026-field-notes-from-barcelona/</guid><description>&lt;p&gt;Spring I/O 2026 wrapped in Barcelona on Wednesday. Three days at the Palau de Congressos. A thousand-plus developers, five tracks, sixty sessions (or there abouts) Here are the things I&amp;rsquo;m still thinking about..&lt;/p&gt;
&lt;h2 id="h2-0-agents-everywhere"&gt;Agents everywhere&lt;/h2&gt;
&lt;p&gt;It was a Spring AI conference with a Spring Boot conference attached.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s not a complaint. Count the programme yourself. Across the two main days, roughly a third of the main-track sessions were about Spring AI, MCP, agents, or building on LLMs. Josh Long opened Day 2 at eleven with &lt;em&gt;Bootiful Spring Boot 4&lt;/em&gt; . By twelve, the Auditorium had moved on to &lt;em&gt;The Spring AI Ecosystem in 2026: From Foundations to Agents&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>CQRS in Java: Separating Reads and Writes Cleanly</title><link>https://foojayio.github.io/website/today/cqrs-in-java-separating-reads-and-writes-cleanly/</link><pubDate>Thu, 16 Apr 2026 20:25:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/cqrs-in-java-separating-reads-and-writes-cleanly/</guid><description>&lt;h3 id="h3-0-what-you-ll-learn"&gt;What you&amp;rsquo;ll learn&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;How the MongoDB Spring repository can be used to abstract MongoDB operations&lt;/li&gt;
&lt;li&gt;Separating Reads and Writes in your application&lt;/li&gt;
&lt;li&gt;How separating these can make schema design changes easier&lt;/li&gt;
&lt;li&gt;Why you should avoid save() and saveAll() functions in Spring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Command Query Responsibility Segregation (CQRS) pattern is a design method that segregates data access into separate services for reading and writing data. This allows a higher level of maintainability in your applications, especially if the schema or requirements change frequently. This pattern was originally developed with separate read and write sources in mind. However, implementing CQRS for a single data source is an effective way to abstract data from the application and make maintenance easier in the future. In this blog, we will use Spring Boot with MongoDB in order to create a CQRS pattern-based application.&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 2 of 7: Building a Production-Grade AI Tool Ecosystem</title><link>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-2-of-7-building-a-production-grade-ai-tool-ecosystem/</link><pubDate>Thu, 16 Apr 2026 09:27:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-2-of-7-building-a-production-grade-ai-tool-ecosystem/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-2-of-7-building-a-production-grade-ai-tool-ecosystem/bxai-series-cover-02-700x368.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 2 of 7&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Function calling is where most AI frameworks look deceptively simple on the surface and turn into a mess underneath. You define a tool, pass it to the LLM, and when the LLM calls it &amp;mdash; who handles the lifecycle? Who fires observability events? Who serializes the result? Who resolves the tool by name when the only thing you have is a string?&lt;/p&gt;</description></item><item><title>How I Automated Weekly Twitter/X Posts With Java, JBang and GitHub Actions</title><link>https://foojayio.github.io/website/today/how-i-automated-weekly-twitter-x-posts-with-java-jbang-and-github-actions/</link><pubDate>Tue, 14 Apr 2026 16:05:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-i-automated-weekly-twitter-x-posts-with-java-jbang-and-github-actions/</guid><description>&lt;p&gt;Every Monday at 10 AM Eastern, &lt;a href="https://x.com/javaevolved" target="_blank" rel="noopener noreferrer"&gt;@javaevolved&lt;/a&gt;
 now tweets a modern Java pattern &amp;mdash; automatically. No manual steps, no third-party services, no cron servers. Just a GitHub Actions workflow, a couple of JBang scripts, and the Twitter API.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s how it works, and how you can do the same for your own project.&lt;/p&gt;
&lt;h2 id="h2-0-the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://javaevolved.github.io" target="_blank" rel="noopener noreferrer"&gt;Java Evolved&lt;/a&gt;
 is a static site with 113 code patterns showing the old way vs. the modern way to write Java. Each pattern has a title, summary, old/modern approach labels, JDK version, and a link to its detail page.&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 1 of 7: The Skills Revolution 🎓</title><link>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-1-of-7-the-skills-revolution/</link><pubDate>Tue, 14 Apr 2026 11:50:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-1-of-7-the-skills-revolution/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-1-of-7-the-skills-revolution/bxai-series-cover-01-700x368.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This article is part of our 7-part deep dive on building production-ready AI systems with BoxLang.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BoxLang AI 3.0 Series · Part 1 of 7&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every AI framework eventually hits the same wall: your system prompts start drifting. Agent A has a slightly different version of the SQL rules than Agent B. The tone policy on your support bot is three weeks behind the tone policy on your documentation bot. Someone copy-pasted the wrong version. Nobody noticed.&lt;/p&gt;</description></item><item><title>Foojay Podcast #93: Update Your JDK, Read More Code, and Talk to Your Users: Interviews From VoxxedDays Amsterdam</title><link>https://foojayio.github.io/website/today/foojay-podcast-93/</link><pubDate>Mon, 13 Apr 2026 06:35:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-93/</guid><description>&lt;p&gt;In this episode of the Foojay Podcast, we&amp;rsquo;re bringing you something special: a full batch of hallway-track conversations recorded live at VoxxedDays Amsterdam.&lt;/p&gt;
&lt;p&gt;Fifteen guests, one conference, and one theme that kept coming back, whether we planned it or not: Java has grown up quietly, steadily, and in ways that still surprise people who haven&amp;rsquo;t looked lately. We talked about migrating between versions, new features in the latest Java releases, authorization done right, AI-assisted coding, cryptography, containers, open-source contributions, GDPR data experiments, and, yes, the things people hate about Java but secretly love.&lt;/p&gt;</description></item><item><title>AWS Nitro and CPU Graviton Meets Unikernels</title><link>https://foojayio.github.io/website/today/aws-nitro-and-cpu-graviton-meets-unikernels/</link><pubDate>Fri, 10 Apr 2026 16:26:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/aws-nitro-and-cpu-graviton-meets-unikernels/</guid><description>&lt;h2 id="h2-0-aws-nitro-and-cpu-graviton-meets-unikernels-java-and-quarkus-on-arm64-aws-graviton-with-nanos-unikernel"&gt;AWS Nitro and CPU Graviton Meets Unikernels: Java and Quarkus on ARM64 AWS Graviton with Nanos Unikernel&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://github.com/user-attachments/assets/2c957ea8-2c6b-4caa-86f8-5adeb9e8bedc" alt="image" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-1-java-and-jakarta-ee-truly-meet-unikernels"&gt;Java and Jakarta EE Truly Meet Unikernels&lt;/h2&gt;
&lt;p&gt;The key message of this article is simple and strong:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;any Java or Jakarta EE application is already ready&lt;/strong&gt; to benefit from the advantages of unikernels.&lt;/p&gt;
&lt;p&gt;Java and Jakarta EE, including modern frameworks such as Quarkus, can immediately take advantage of the unikernel model &lt;strong&gt;without waiting for new languages, new runtimes, or radical rewrites&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Building a Kotlin App with Spring Boot and MongoDB Search</title><link>https://foojayio.github.io/website/today/building-a-kotlin-app-with-spring-boot-and-mongodb-search/</link><pubDate>Thu, 09 Apr 2026 15:21:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-a-kotlin-app-with-spring-boot-and-mongodb-search/</guid><description>&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/b0dkQYcvBkQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;One of my favorite activities is traveling and exploring the world. You know that feeling of discovering a new place and thinking, &amp;ldquo;How have I not been here before?&amp;rdquo; It&amp;rsquo;s with that sensation that I&amp;rsquo;m always motivated to seek out new places to discover. Often, when searching for a place to stay, we&amp;rsquo;re not entirely sure what we&amp;rsquo;re looking for or what experiences we&amp;rsquo;d like to have. For example, we might want to rent a room in a city with a view of a castle. Finding something like that can seem difficult, right? However, there is a way to search for information accurately using MongoDB Search.&lt;/p&gt;</description></item><item><title>Why Java Developers Over-Trust AI-Generated Code</title><link>https://foojayio.github.io/website/today/why-java-developers-over-trust-ai-dependency-suggestions/</link><pubDate>Thu, 09 Apr 2026 10:45:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-java-developers-over-trust-ai-dependency-suggestions/</guid><description>&lt;p&gt;&lt;em&gt;This article is adapted from &lt;a href="https://noregressions.substack.com/p/the-confidence-trap-why-developers" target="_blank" rel="noopener noreferrer"&gt;The Confidence Trap&lt;/a&gt;
, part of the &amp;ldquo;2026 Supply Chain Reckoning&amp;rdquo; series on my No Regressions newsletter.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Your boss calls you on a Friday afternoon. He&amp;rsquo;s read all the available data, he tells you with absolute confidence, and he&amp;rsquo;s decided that migrating from Spring Boot 3.5 to 4.0 will be straightforward. Wants it done over the weekend.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;d push back. You&amp;rsquo;d ask which data. You&amp;rsquo;d point out the breaking changes.&lt;/p&gt;</description></item><item><title>Introducing BoxLings! An interactive teacher for BoxLang and TDD/BDD</title><link>https://foojayio.github.io/website/today/introducing-boxlings-an-interactive-teacher-for-boxlang-and-tdd-bdd/</link><pubDate>Thu, 09 Apr 2026 08:48:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-boxlings-an-interactive-teacher-for-boxlang-and-tdd-bdd/</guid><description>&lt;p&gt;We believe the best way to learn a programming language is by writing code &amp;mdash; real code, with real feedback, and real tests. That&amp;rsquo;s exactly why we built &lt;strong&gt;BoxLings&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Inspired by the beloved &lt;a href="https://github.com/rust-lang/rustlings" target="_blank" rel="noopener noreferrer"&gt;rustlings&lt;/a&gt;
 project, &lt;strong&gt;BoxLings&lt;/strong&gt; is an interactive CLI tool that teaches you &lt;strong&gt;BoxLang&lt;/strong&gt; through hands-on exercises. You read failing tests, fix broken code, and level up &amp;mdash; one exercise at a time.&lt;/p&gt;
&lt;p&gt;Oh, and the whole thing is written in BoxLang itself. 🥊 Dogfooding at its finest.&lt;/p&gt;</description></item><item><title>Manage HTTP Sessions with Spring Session MongoDB</title><link>https://foojayio.github.io/website/today/building-distributed-http-sessions-with-spring-session-mongodb/</link><pubDate>Tue, 07 Apr 2026 15:19:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-distributed-http-sessions-with-spring-session-mongodb/</guid><description>&lt;p&gt;&lt;a href="https://www.mongodb.com/docs/drivers/java/sync/current/integrations/spring-session/?utm_campaign=devrel&amp;amp;utm_source=third-part-content&amp;amp;utm_medium=cta&amp;amp;utm_content=spring&amp;#43;sessions&amp;#43;mongodb&amp;amp;utm_term=tim.kelly" target="_blank" rel="noopener noreferrer"&gt;Spring Session MongoDB&lt;/a&gt;
 is a library that enables Spring applications to store and manage HTTP session data in MongoDB rather than relying on container-specific session storage. In traditional deployments, session state is often tied to a single application instance, which makes scaling across multiple servers difficult. By integrating &lt;a href="https://spring.io/projects/spring-session" target="_blank" rel="noopener noreferrer"&gt;Spring Session&lt;/a&gt;
 with MongoDB, session data can be persisted beyond application restarts and shared across instances in a cluster, enabling scalable distributed applications with minimal configuration.&lt;/p&gt;</description></item><item><title>Thread Safe Native Memory in Java</title><link>https://foojayio.github.io/website/today/java-native-memory-access-modes/</link><pubDate>Tue, 07 Apr 2026 10:00:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-native-memory-access-modes/</guid><description>&lt;h2 id="h2-0-what-is-memory-order-and-why-does-it-matter-for-native-memory"&gt;What is Memory Order and Why Does It Matter for Native Memory?&lt;/h2&gt;
&lt;p&gt;The Foreign Function and Memory (FFM) API is Java&amp;rsquo;s way of interacting with native code and memory. In the previous post, you learned how to do so using Java&amp;rsquo;s built-in &lt;code&gt;Arena&lt;/code&gt; types. The Arena provides temporal safety and bounds checks, but what about thread safety? MemorySegments created by &lt;code&gt;.ofShared()&lt;/code&gt;, &lt;code&gt;.auto()&lt;/code&gt;, and &lt;code&gt;.global()&lt;/code&gt; can be used by multiple threads at the same time. Using a VarHandle with just get/set can backfire if you don&amp;rsquo;t use something like locking. The downside is that locks are slow and heavy. So let us take a look at a more granular, hardware-aware approach: using VarHandle access modes.&lt;/p&gt;</description></item><item><title>BoxLang AI v3 Has Landed - Multi-Agent Orchestration, Tooling, Skills and so much more</title><link>https://foojayio.github.io/website/today/boxlang-ai-v3-has-landed-multi-agent-orchestration-tooling-skills-and-so-much-more/</link><pubDate>Mon, 06 Apr 2026 12:03:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-v3-has-landed-multi-agent-orchestration-tooling-skills-and-so-much-more/</guid><description>&lt;p&gt;It&amp;rsquo;s been a while since we&amp;rsquo;ve shipped something this big. &lt;strong&gt;BoxLang AI 3.0&lt;/strong&gt; is a ground-up rethink of how AI agents, models, and tools work in the BoxLang ecosystem &amp;mdash; and it lands with ten major features at once.&lt;/p&gt;
&lt;p&gt;The headline is the &lt;strong&gt;AI Skills system&lt;/strong&gt; : a first-class implementation of Anthropic&amp;rsquo;s &lt;a href="https://www.anthropic.com/news/agent-skills" target="_blank" rel="noopener noreferrer"&gt;Agent Skills open standard&lt;/a&gt;
 that lets you define reusable knowledge blocks: coding styles, domain rules, tone policies, API guidelines once in a &lt;code&gt;SKILL.md&lt;/code&gt; file and inject them into any number of agents and models at runtime. No more copy-pasting the same system-prompt boilerplate everywhere. Skills are versioned, composable, and come in two modes: always-on (full content in every call) and lazy (only a name + description until the LLM asks for more).&lt;/p&gt;</description></item><item><title>From Zero to Full Observability with Dash0</title><link>https://foojayio.github.io/website/today/from-zero-to-full-observability-with-dash0/</link><pubDate>Sat, 04 Apr 2026 06:35:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/from-zero-to-full-observability-with-dash0/</guid><description>&lt;p&gt;This guide walks through the complete process of deploying a minimal Spring Boot service to Kubernetes and adding full observability using the &lt;a href="https://www.dash0.com/docs/dash0/monitoring/kubernetes/about-kubernetes" target="_blank" rel="noopener noreferrer"&gt;Dash0 Kubernetes Operator&lt;/a&gt;
 &amp;mdash; without making any changes to the application code.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.dash0.com/docs/dash0" target="_blank" rel="noopener noreferrer"&gt;Dash0&lt;/a&gt;
 is an OpenTelemetry-native observability platform that collects and correlates traces, metrics, and logs, and provides infrastructure monitoring across Kubernetes resources &amp;mdash; pods, nodes, namespaces, deployments, daemonsets, statefulsets, jobs, and cronjobs &amp;mdash; as well as cloud infrastructure such as AWS. Its Kubernetes operator can automatically instrument workloads at the pod level, with no changes required to application code or container images.
&lt;img src="https://foojayio.github.io/website/today/from-zero-to-full-observability-with-dash0/kubernetes-dash0-1024x581.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Introducing Floci: A High-Performance, GraalVM-Powered AWS Emulator</title><link>https://foojayio.github.io/website/today/introducing-floci-a-high-performance-graalvm-powered-aws-emulator/</link><pubDate>Fri, 03 Apr 2026 19:00:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-floci-a-high-performance-graalvm-powered-aws-emulator/</guid><description>&lt;h2 id="h2-0-the-motivation-why-another-aws-emulator"&gt;The Motivation: Why Another AWS Emulator?&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/introducing-floci-a-high-performance-graalvm-powered-aws-emulator/perf-chart-light-700x394.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;As Java developers, we are used to local-first development. Tools that emulate the cloud environment have become essential for keeping feedback loops tight and costs at zero. However, the ecosystem has shifted. Many of us have felt the friction of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mandatory Authentication: Needing to log in or use tokens just to run local tests.&lt;/li&gt;
&lt;li&gt;Heavy Resource Footprint: Docker containers that consume a lot of resources.&lt;/li&gt;
&lt;li&gt;Slow Startup: Waiting several seconds for the environment to be &lt;strong&gt;ready.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I created Floci (from the floccus cloud formation) to solve these specific pain points. It is a 100% open-source, MIT-licensed alternative designed for speed, privacy, and simplicity.&lt;/p&gt;</description></item><item><title>Does Java Really Use Too Much Memory? Let’s Look at the Facts (JEPs)</title><link>https://foojayio.github.io/website/today/does-java-really-use-too-much-memory-lets-look-at-the-facts-jeps/</link><pubDate>Fri, 03 Apr 2026 07:28:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/does-java-really-use-too-much-memory-lets-look-at-the-facts-jeps/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/does-java-really-use-too-much-memory-lets-look-at-the-facts-jeps/duke_Pinocchio01-1024x640.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Breaking news: Java has been confirmed to consume all available RAM. Developers worldwide shocked.&lt;/p&gt;
&lt;p&gt;&amp;hellip; okay, not really. Happy April 1st.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s only fair to bring in the biggest liar in history to help us talk about one of the oldest myths in the Java world.&lt;/p&gt;
&lt;p&gt;Meet &lt;strong&gt;Pinocchio Duke&lt;/strong&gt;, the official Java mascot who swears up and down that &amp;ldquo;Java doesn&amp;rsquo;t use that much memory anymore!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;But every time he says it&amp;hellip; his nose grows a little longer.&lt;/p&gt;</description></item><item><title>Java Faceted Full-Text Search API Using MongoDB Atlas Search</title><link>https://foojayio.github.io/website/today/java-faceted-full-text-search-api-using-mongodb-atlas-search/</link><pubDate>Thu, 02 Apr 2026 16:27:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-faceted-full-text-search-api-using-mongodb-atlas-search/</guid><description>&lt;p&gt;This is going to be a fun, practical tutorial demonstrating how to build a Java faceted full-text search API (like the ones powering sites like Amazon)!&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll use an interesting dataset which showcases how you can effectively pair machine learning/AI-generated data with more traditional search to produce fast, cheap, repeatable, and intuitive search engines.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: If you (like me!) are less about words and more about code, you can jump straight in. Check it out and run it locally like this:&lt;/p&gt;</description></item><item><title>Oracle's Java Verified Portfolio and JavaFX: What It Actually Means</title><link>https://foojayio.github.io/website/today/the-javafx-revival/</link><pubDate>Thu, 02 Apr 2026 07:01:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-javafx-revival/</guid><description>&lt;p&gt;Oracle&amp;rsquo;s JavaOne 2026 brought an announcement that caught some attention in the Java community: the Java Verified Portfolio (JVP), a new program that bundles JDK-related tools, frameworks, libraries, and services under a single commercially supported umbrella with clear roadmaps and support timelines. One of the headline items? Commercial support for JavaFX in JDK 17, 21, 25, 26, and future LTS releases.&lt;/p&gt;
&lt;p&gt;Oracle&amp;rsquo;s own framing: &lt;em&gt;&amp;ldquo;Driven by customer demand, interest from academia, and the growing need for advanced visualizations in AI-powered applications and analytics, Oracle is reintroducing commercial support for JavaFX.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Grails Is Back: Inside the Apache Software Foundation Migration</title><link>https://foojayio.github.io/website/today/grails-isnt-done-yet-part-2-eol-spring-boot-and-what-comes-next/</link><pubDate>Wed, 01 Apr 2026 08:48:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/grails-isnt-done-yet-part-2-eol-spring-boot-and-what-comes-next/</guid><description>&lt;p&gt;In the &lt;a href="https://foojayio.github.io/website/today/grails-isnt-done-yet-part-1-inside-the-asf-reboot/"&gt;companion article&lt;/a&gt;
 to this one, I looked at the revitalisation of Grails under the Apache Software Foundation: the 18-month migration, the technical modernisation, and the release of Grails 7 as a Top-Level ASF Project. That is the good-news story, and it is a genuinely impressive piece of community engineering.&lt;/p&gt;
&lt;p&gt;This article is about the other side of the same coin.&lt;/p&gt;
&lt;p&gt;While Grails moves forward, many of the applications built on it cannot move at the same pace. The result is a growing gap between where the framework is heading and where a significant number of production systems actually sit. Understanding that gap, and what options exist for managing it, is what this piece is about.&lt;/p&gt;</description></item><item><title>MongoDB Search Score Breakdown</title><link>https://foojayio.github.io/website/today/mongodb-search-score-breakdown/</link><pubDate>Tue, 31 Mar 2026 15:05:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-search-score-breakdown/</guid><description>&lt;p&gt;Full-text search powers all of our digital lives &amp;mdash; googling for this and that; asking Siri where to find a tasty, nearby dinner; shopping at Amazon; and so on. We receive relevant results, often even in spite of our typos, voice transcription mistakes, or vaguely formed queries. We have grown accustomed to expecting the best results for our searching intentions, right there, at the top.&lt;/p&gt;
&lt;p&gt;But now it&amp;rsquo;s your turn, dear developer, to build the same satisfying user experience into your Atlas-powered application.&lt;/p&gt;</description></item><item><title>JavaFX Links of March 2026</title><link>https://foojayio.github.io/website/today/javafx-links-of-march-2026/</link><pubDate>Tue, 31 Mar 2026 07:49:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-march-2026/</guid><description>&lt;p&gt;Here are the JavaFX LinksOfTheMonth of March 2026. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Java and JavaFX 26 got released!
&lt;ul&gt;
&lt;li&gt;JavaFX 26 requires JDK 24 or later.&lt;/li&gt;
&lt;li&gt;You can find all important changes, removed and new features, and fixed issues in the &lt;a href="https://github.com/openjdk/jfx/blob/jfx26/doc-files/release-notes-26.md" target="_blank" rel="noopener noreferrer"&gt;Release Notes for JavaFX 26&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;You can download JavaFX 26 &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;from the Gluon website&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://www.techzine.eu/news/devops/139673/oracle-releases-java-26-ai-security-and-the-java-verified-portfolio/" target="_blank" rel="noopener noreferrer"&gt;remarkable move by Oracle&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Oracle is introducing the Java Verified Portfolio (JVP). This is a curated collection of enterprise-grade tools, frameworks, and libraries that Oracle commercially supports. &amp;hellip; It is worth noting that JavaFX, the Java GUI framework, is once again supported via JVP. According to Oracle, this is due to growing demand. Support will be available for all new Java versions and all LTS versions during the five-year Premium Support tier. Support for JDK 8 will be extended until March 2028.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blogs.oracle.com/java/announcing-jvp" target="_blank" rel="noopener noreferrer"&gt;Blog post by Oracle&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Announcing the Oracle Java Verified Portfolio including Helidon and reintroduction of JavaFX Commercial Support&lt;/em&gt;.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/116245211784256953" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; announced&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Gluon continues to lead the OpenJFX project. Here is JavaFX 26.&lt;/em&gt; &amp;quot; With a link to a &lt;a href="https://gluonhq.com/javafx-26-is-now-available/" target="_blank" rel="noopener noreferrer"&gt;Gluon blog post about JavaFX 26&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Video with the recording of the talk by Kevin Rusforth at JavaOne: &lt;a href="https://inside.java/2026/03/25/javaone-javafx/" target="_blank" rel="noopener noreferrer"&gt;JavaFX 26 Today&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Building a compelling desktop app today requires features such as UI controls, charts, interactive media, web content, animation, CSS styling, 2D and 3D rendering, rich text, and property binding, with an easy-to-use programming paradigm that runs cross-platform. JavaFX is all this and more, delivering a rich graphical UI toolkit for building your applications and can also seamlessly interoperate with Swing. In this session you&amp;rsquo;ll learn about the new and exciting features we&amp;rsquo;ve developed over the past couple of years, culminating with the release of JavaFX 26. You&amp;rsquo;ll also get an update on RichTextArea. We&amp;rsquo;ll show plenty of demos and sample code, and finish with a sneak peek at what&amp;rsquo;s coming next.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/java-javafx-javafx26-share-7442544660272627712-vVJf/" target="_blank" rel="noopener noreferrer"&gt;APIdia announced&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Adjacent to Java releases are JavaFX releases. Of course, API documentation of JavaFX 26 is similarly &lt;a href="https://apidia.net/mvn/org.openjfx/javafx/26/" target="_blank" rel="noopener noreferrer"&gt;available on APIdia&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://inside.java/2026/03/03/quality-heads-up/" target="_blank" rel="noopener noreferrer"&gt;Quality Outreach Heads-up - JavaFX 27: Metal Is Now the Default Rendering Pipeline on macOS&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;This heads-up is part of the quality outreach sent to the projects involved. &amp;hellip; On macOS, the default JavaFX rendering pipeline has been switched to Metal since JavaFX 27 Early Access (EA) build 3. Metal provides improved performance and better compatibility on modern hardware.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A blog by Gluon: &lt;a href="https://gluonhq.com/the-art-of-the-backport-why-javafx-security-doesnt-just-happen/" target="_blank" rel="noopener noreferrer"&gt;The Art of the Backport: Why JavaFX Security Doesn&amp;rsquo;t &amp;ldquo;Just Happen&amp;rdquo;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;In a perfect world, keeping a tech stack current is as simple as bumping a version number in a pom.xml or build.gradle file. You run a clean build, and suddenly, the latest fixes are integrated. But for those of us building mission-critical desktop and embedded applications, &amp;ldquo;just upgrading&amp;rdquo; to the latest major release isn&amp;rsquo;t always feasible. When your application is built on a stable Long Term Support (LTS) foundation, you need that environment to remain predictable. You want the stability of your current version, but you absolutely need the security fixes that are discovered in the newer branches. This is where the &amp;ldquo;Art of the Backport&amp;rdquo; comes in, and it&amp;rsquo;s a significant part of the heavy lifting we do at Gluon.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Related to the announcement of the Oracle Java Verified Portfolio (JVP) and the reintroduction of commercial support for JavaFX, &lt;strong&gt;Frank Delporte&lt;/strong&gt; wrote a blog: &lt;a href="https://www.azul.com/blog/the-javafx-revival-good-news-for-the-community-business-as-usual-for-azul/" target="_blank" rel="noopener noreferrer"&gt;The JavaFX Revival: Good News for the Community, Business as Usual for Azul&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Already want to experiment with JavaFX 27? Check the &lt;a href="https://jdk.java.net/javafx27/" target="_blank" rel="noopener noreferrer"&gt;early-access builds&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;LogoRRR announced &lt;a href="https://github.com/rladstaetter/LogoRRR/releases/tag/26.2.0" target="_blank" rel="noopener noreferrer"&gt;release 26.2.0&lt;/a&gt;
. &lt;a href="https://www.youtube.com/watch?v=4INweBlGWoQ" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt; published a video showing the new features&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/mapton.org/post/3mfysk3uxw22d" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mapton&lt;/strong&gt; announced&lt;/a&gt;
: &amp;ldquo;_&lt;a href="https://github.com/trixon/mapton/releases" target="_blank" rel="noopener noreferrer"&gt;Here is a new version of Mapton&lt;/a&gt;
!, &amp;lsquo;some kind of map application&amp;rsquo;, built with Jva &amp;amp; JavaFX on the Netbeans platform. Let&amp;rsquo;s call this one the &lt;code&gt;MARKDOWN_HASHca329fd857db05db392388a1d1c2b7f9MARKDOWN&lt;/code&gt;&lt;em&gt;HASH&lt;/em&gt;. Enjoy!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:groupPost:10070360-7435938631854419968/" target="_blank" rel="noopener noreferrer"&gt;Message by &lt;strong&gt;Jakob Jenkov&lt;/strong&gt;&lt;/a&gt;
 : &amp;ldquo;&lt;em&gt;I have started the process of building up the Polymorph Player in Java 25 and JavaFX 25. The code will now be located in the &lt;a href="https://github.com/jjenkov/polymorph" target="_blank" rel="noopener noreferrer"&gt;Polymorph mono-repo&lt;/a&gt;
. The first bits are already there, but the player app does not do anything yet, except starting up 😊 But from now on, you can always clone or pull this repo to see just exactly how much is working, officially. This is a project where we can allow ourselves to question the entire current status quo of tech. Some should be kept - but other parts could probably be replaced with better formats / models / architectures. Let&amp;rsquo;s experiment to see what works, and what doesn&amp;rsquo;t.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fredericksalazar/OllamaFX/releases/tag/v0.5.0" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frederick Salazar&lt;/strong&gt; released OllamaFX v0.5.0&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;OllamaFX is a modern, native desktop client for Ollama, built with JavaFX. It provides a beautiful, user-friendly interface to manage your local LLMs and chat with them, featuring a sleek GNOME/Adwaita-inspired design.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Robert von Burg&lt;/strong&gt; shared the &lt;a href="https://github.com/eitch/LumineLog" target="_blank" rel="noopener noreferrer"&gt;sources of LumineLog&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A modern, cross-platform log viewer application built with JavaFX. It provides a real-time &amp;rsquo;tail -f&amp;rsquo; experience with powerful highlighting and multi-file support.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mstdn.gsi.li/@eitch/116285194315067384" target="_blank" rel="noopener noreferrer"&gt;Release of LumineLog 0.3.0&lt;/a&gt;
: &amp;ldquo;_A modern, cross-platform log viewer application built with JavaFX. It provides a real-time &lt;code&gt;MARKDOWN_HASHc21d50ccb3e2b0daf559d6015794f6a7MARKDOWN&lt;/code&gt;&lt;em&gt;HASH&lt;/em&gt; experience with powerful highlighting and multi-file support. As always, feedback is welcome. Feel free to &lt;a href="https://github.com/eitch/LumineLog" target="_blank" rel="noopener noreferrer"&gt;raise a ticket&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/rladstaetter.bsky.social/post/3mhaoaaiw6s2k" target="_blank" rel="noopener noreferrer"&gt;Message by &lt;strong&gt;Robert Ladstätter&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Just released CameraApp on Windows and Linux appstores! &lt;a href="https://github.com/rladstaetter/CameraApp" target="_blank" rel="noopener noreferrer"&gt;Check out this project&lt;/a&gt;
 which resurrects my old passion of doing work with JavaCV and JavaFX. This project can be used as a starting point for experiments with OpenCV and Java.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; announced the first release of Lottie4J, a new Java(FX) library: &amp;ldquo;&lt;em&gt;With this library, you can load and parse LottieFiles animations as Java objects, and integrate them as a JavaFX animation component in your application. Watch &lt;a href="https://www.youtube.com/watch?v=6t1O7APENIo" target="_blank" rel="noopener noreferrer"&gt;this video for more info&lt;/a&gt;
 or &lt;a href="https://webtechie.be/post/2026-03-03-introducing-lottie4j/" target="_blank" rel="noopener noreferrer"&gt;read this blog&lt;/a&gt;
.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;Followed by release V1.1.0 of &lt;a href="https://github.com/lottie4j/lottie4j" target="_blank" rel="noopener noreferrer"&gt;Lottie4J&lt;/a&gt;
, a JavaFX player for LottieFiles animations. &amp;ldquo;&lt;em&gt;This release includes improved rendering and additional debugging tools. And of course, it also uses the new and animated Lottie4J logo for testing 😉&lt;/em&gt; &amp;quot; All info and a video demonstration are available &lt;a href="https://lottie4j.com/releases/" target="_blank" rel="noopener noreferrer"&gt;on the website in the release notes&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;And another release: &amp;ldquo;&lt;em&gt;Version 1.2.0 of &lt;a href="https://lottie4j.com/index.html" target="_blank" rel="noopener noreferrer"&gt;Lottie4J&lt;/a&gt;
 is out, and it&amp;rsquo;s again a big release! The headline feature is support for the dotLottie zip-container format, but that&amp;rsquo;s just the start. This release also brings marker-based playback, cropping, adaptive rendering, significant performance improvements, and a lot of core model fixes driven by testing more complex real-world animations. Detailed info and a video showing all new features are &lt;a href="https://webtechie.be/post/2026-03-20-release-1.2.0-of-lottie4j/" target="_blank" rel="noopener noreferrer"&gt;explained in this blog post&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://dev.to/liu_tiger_ef0f0505e13c8be/javafx-ui-automation-challenges-existing-tools-and-real-world-event-handling-problems-57k" target="_blank" rel="noopener noreferrer"&gt;good read by &lt;strong&gt;Liu Tiger&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX UI Automation: Challenges, Existing Tools, and Real-World Event Handling Problems. Automation testing has become a fundamental component of modern software engineering. In web development, automation ecosystems such as Selenium, Playwright, and Cypress are mature and widely adopted. However, the situation is very different for Java desktop applications, particularly those built using JavaFX.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/pavelcastornii/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pavel Castornîi&lt;/strong&gt;&lt;/a&gt;
 is preparing a new release of &lt;a href="https://github.com/techsenger/tabshell" target="_blank" rel="noopener noreferrer"&gt;TabShell&lt;/a&gt;
, &amp;ldquo;&lt;em&gt;a platform for building tab-based applications in JavaFX, where an application is structured as a tree of MVP components, each of which has its own lifecycle, history, etc. The platform provides abstract classes for creating the main types of components: tab, area, page, dialog, and popup, as well as containers for them.&lt;/em&gt;&amp;rdquo; Try it out and let him know if there are any remarks&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/HanSolo/svgconverter" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; created svgconverter&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;An SVG to JavaFX converter that can handle nearly everything except animations and masking. You can load a svg file and render it either to the JavaFX SceneGraph using nodes or to the JavaFX Canvas. It took some time to get the Canvas thing working because it is missing some things but now it works kind of ok.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; announced: &amp;ldquo;&lt;em&gt;I created a new &lt;a href="https://dlsc-software-consulting-gmbh.github.io/GemsFX/" target="_blank" rel="noopener noreferrer"&gt;website for GemsFX&lt;/a&gt;
 that will give you an idea which controls are available in this library.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/leewyatt.bsky.social/post/3mhvd52wuks2u" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Lee Wyatt&lt;/strong&gt; shared the new library CarouselFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A JavaFX carousel / slideshow component with 70+ built-in transition effects.&lt;/em&gt; &amp;quot; &lt;a href="https://www.youtube.com/watch?v=oFeuHs_HFwU" target="_blank" rel="noopener noreferrer"&gt;Demo on YouTube&lt;/a&gt;
 and &lt;a href="https://github.com/dlsc-software-consulting-gmbh/CarouselFX" target="_blank" rel="noopener noreferrer"&gt;sources on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=5T5DI23rJxE" target="_blank" rel="noopener noreferrer"&gt;GNUBSD404 Long N162 PacMan XXL (JavaFX Game) (Linux/FreeBSD)&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;This is another example of a &amp;ldquo;Quality&amp;rdquo; game on Linux made by some developers. THANKS ! to this developers is that Linux/FreeBSD gaming (and off course thanks to Valve and Steam) is alive!. The game is available on Linux andFreeBSD may work with OpenJDK or may require Linuxuator.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;New video by &lt;strong&gt;Helal Anwar&lt;/strong&gt; : &lt;a href="https://www.youtube.com/watch?v=ZHnSynN5R3Y" target="_blank" rel="noopener noreferrer"&gt;Student management app (Part 6)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Florian Enner&lt;/strong&gt; published a video demonstrating &lt;a href="https://www.youtube.com/live/B5GT9XAcqB8" target="_blank" rel="noopener noreferrer"&gt;HebiCharts&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A 2D and 3D plotting library built in JavaFX with ChartFX, compiled as GraalVM native-image, and accessible from Python / C++ / MATLAB via idiomatic interface over a C ABI.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/rladstaetter.bsky.social/post/3mg3f6kort22e" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt; is experimenting with JavaFX 26 and shared a video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Vibe coding an editable ToolBar for #JavaFX supporting drag&amp;rsquo;n drop for the editable Search Term Toolbar Feature. It is amazing how easy it is to implement such things with JavaFX. Looking forward to JavaFX26 which will be released soon.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/sikorsky43/building-a-tcp-group-chat-app-with-javafx-and-maven-1e46" target="_blank" rel="noopener noreferrer"&gt;Interesting read by &lt;strong&gt;SikorSky&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Building a Real-Time Group Chat with Java TCP Sockets and JavaFX. We recently implemented a mini project where the objective was to build a real-time group chat application using Java TCP sockets and JavaFX. This article summarizes the architecture, design decisions, and lessons learned during development.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mgflg35sgc2u" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
 &amp;ldquo;&lt;em&gt;did some more evaluation of GitHub Copilot CLI today and built a nice launcher app for my GemsFX open source project. The productivity I get out of this surpassed all my expectations.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gluonhq.com/why-spend-a-week-on-a-bug-that-we-can-fix-in-an-hour/" target="_blank" rel="noopener noreferrer"&gt;Post by Gluon&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;We&amp;rsquo;ve all been there. You&amp;rsquo;re working on a JavaFX application, and you hit that wall. Maybe it&amp;rsquo;s a strange rendering glitch on a specific OS, a memory leak you can&amp;rsquo;t pin down, or a performance bottleneck that only appears in production. You search the forums. You check Stack Overflow. You spend days tweaking code, hoping for a breakthrough. There is a faster way! To make it easier for teams to experience the value of expert support, we are introducing a one-time JavaFX Quick-Fix Package.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/lottie4j" target="_blank" rel="noopener noreferrer"&gt;Lottie4J&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Libraries: &lt;a href="https://www.jfx-central.com/libraries/tabshell" target="_blank" rel="noopener noreferrer"&gt;TabShell&lt;/a&gt;
 got updated.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Internal improvements in JFX Central with latest release of &lt;a href="https://www.jpro.one/" target="_blank" rel="noopener noreferrer"&gt;JPro&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mgs3b37pjc2p" target="_blank" rel="noopener noreferrer"&gt;Screenshots shared by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Thanks to the efforts of several open source developers we can now display syntax-highlighted code in markdown files via JPro Markdown by &lt;a href="https://bsky.app/profile/floriankirmaier.bsky.social" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Florian Kirmaier&lt;/strong&gt;&lt;/a&gt;
. Available hopefully by the end of the week.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mhxunuetrk2h" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared another screenshot&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;We finally moved to JavaFX 25 for JFX Central and this now allows us to use StageStyle.EXTENDED. Sounds like a minor thing but allows apps to look much more native than before. No more custom resizing borders and behaviour.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;The JavaFX Links Of The Week of February got bundled and &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-february-2026/"&gt;published on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Best practices for Mastering AI Agents, Subagents, Skills &amp; MCP</title><link>https://foojayio.github.io/website/today/best-practices-for-working-with-ai-agents-subagents-skills-and-mcp/</link><pubDate>Mon, 30 Mar 2026 18:55:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/best-practices-for-working-with-ai-agents-subagents-skills-and-mcp/</guid><description>&lt;p&gt;A practical guide to the five best practices every developer should apply when working with AI agents, subagents, skills and MCP servers &amp;mdash; from choosing the right model and writing precise prompts, to defining agent behaviour with SDD, isolating context with Claude Code subagents, securing MCP calls, and guiding agent response quality with guardrails.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="h2-0-0-where-this-fits-in-the-series"&gt;§0 📖 Where This Fits in the Series&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;This article assumes you already know what MCP is and have used or built at least one Agent.&lt;/p&gt;</description></item><item><title>The Java in Education Catalog Now Has a Beautiful Home</title><link>https://foojayio.github.io/website/today/the-java-in-education-catalog-now-has-a-beautiful-home/</link><pubDate>Fri, 27 Mar 2026 13:17:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-java-in-education-catalog-now-has-a-beautiful-home/</guid><description>&lt;p&gt;A few weeks ago, Igor De Souza shared &lt;a href="https://foojayio.github.io/website/today/bringing-java-closer-to-education-a-community-driven-initiative/"&gt;Bringing Java Closer to Education: A Community-Driven Initiative&lt;/a&gt;
 here on Foojay. It&amp;rsquo;s something we started together to gather Java educational resources in one place, making it easier for mentors, educators, and learners to discover what&amp;rsquo;s out there.&lt;/p&gt;
&lt;p&gt;But let&amp;rsquo;s be honest: a GitHub README, while perfectly functional, is not exactly the most inviting front door for educators who aren&amp;rsquo;t already deep in the coding ecosystem. That&amp;rsquo;s now fixed&amp;hellip;
&lt;img src="https://foojayio.github.io/website/today/the-java-in-education-catalog-now-has-a-beautiful-home/java-in-education-site-1024x745.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Modeling One-to-Many Relationships in Java with MongoDB</title><link>https://foojayio.github.io/website/today/modeling-one-to-many-relationships-in-java-with-mongodb/</link><pubDate>Thu, 26 Mar 2026 15:50:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/modeling-one-to-many-relationships-in-java-with-mongodb/</guid><description>&lt;p&gt;In a relational database, modeling a one-to-many relationship is straightforward: you create two tables and connect them with a foreign key. When you need the data together, you write a JOIN. In MongoDB, you have a choice, and that choice has a direct impact on your application&amp;rsquo;s performance, scalability, and maintainability.&lt;/p&gt;
&lt;p&gt;Consider a common scenario: a BlogPost that has many Comment objects. In Java, this is a natural List&amp;lt;Comment&amp;gt; field on the post. But when it comes time to persist that relationship in MongoDB, you need to decide &lt;em&gt;how&lt;/em&gt; to store it. Should the comments live inside the blog post document? Or should they sit in their own collection, connected by references?&lt;/p&gt;</description></item><item><title>Spring Boot Actuator Health for MicroProfile Developers</title><link>https://foojayio.github.io/website/today/spring-boot-actuator-health-for-microprofile-developers/</link><pubDate>Thu, 26 Mar 2026 09:30:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-actuator-health-for-microprofile-developers/</guid><description>&lt;p&gt;If you worked with MicroProfile Health, you already understand the value of exposing application health information through standardized endpoints. You know about liveness, readiness and startup probes. You implemented the HealthCheck interface and annotated your procedures with @Liveness, @Readiness and @Startup. Spring Boot Actuator follows a similar philosophy but takes a different architectural approach. This post will help you map your MicroProfile Health knowledge to Spring&amp;rsquo;s world.&lt;/p&gt;
&lt;h2 id="h2-0-the-conceptual-bridgethe-conceptual-bridge"&gt;The Conceptual BridgeThe Conceptual Bridge&lt;/h2&gt;
&lt;p&gt;At its core, Spring Boot Actuator serves the same purpose as MicroProfile Health: it provides a mechanism for validating the availability and status of your application in containerized environments. Both specifications recognize that modern cloud platforms like Kubernetes need machine-readable health information to make decisions about pod lifecycle management.&lt;/p&gt;</description></item><item><title>Does Language Still Matter in the Age of AI? Yes — But the Tradeoff Has Changed</title><link>https://foojayio.github.io/website/today/does-language-still-matter-in-the-age-of-ai-yes-but-the-tradeoff-has-changed/</link><pubDate>Wed, 25 Mar 2026 16:37:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/does-language-still-matter-in-the-age-of-ai-yes-but-the-tradeoff-has-changed/</guid><description>&lt;h2 id="h2-0-"&gt;&lt;img src="https://foojayio.github.io/website/today/does-language-still-matter-in-the-age-of-ai-yes-but-the-tradeoff-has-changed/dominance-700x467.png" alt="" loading="lazy"&gt;
&lt;/h2&gt;
&lt;p&gt;I keep hearing the same question in architecture reviews, slack threads, and conference Hallways:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;If AI is writing the code, does language even matter anymore?&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It does. More than ever, actually &amp;mdash; just not for the reasons we&amp;rsquo;ve been arguing about for the last decade.&lt;/p&gt;
&lt;h2 id="h2-1-the-bottleneck-has-moved"&gt;The Bottleneck Has Moved&lt;/h2&gt;
&lt;p&gt;For decades, we optimized for developer productivity. How fast can someone write code? How expressive is the language? How quickly can we ship features?&lt;/p&gt;</description></item><item><title>How We Built a Java AI Agent by Connecting the Dots the Ecosystem Already Had</title><link>https://foojayio.github.io/website/today/how-we-built-a-java-ai-agent-by-connecting-the-dots-the-ecosystem-already-had/</link><pubDate>Wed, 25 Mar 2026 09:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-we-built-a-java-ai-agent-by-connecting-the-dots-the-ecosystem-already-had/</guid><description>&lt;p&gt;Everyone assumes you need Python to build AI agents. But the Java ecosystem already has every piece: Spring AI for LLM integration, Spring Events for decoupled messaging, JobRunr for reliable background jobs, and Spring Modulith for clean architecture. We didn&amp;rsquo;t build anything new. We connected the pieces that were already there.&lt;/p&gt;
&lt;p&gt;The result is &lt;a href="https://ClawRunr.io" target="_blank" rel="noopener noreferrer"&gt;ClawRunr&lt;/a&gt;
 (everyone calls it JavaClaw, and we&amp;rsquo;ve stopped correcting them). An open-source AI agent runtime, written in pure Java. You can chat with it on Telegram or in the browser, ask it to summarize your emails every morning, schedule reminders, browse websites, run shell commands, connect external tools via MCP, and teach it new skills at runtime by dropping a Markdown file into a folder.&lt;/p&gt;</description></item><item><title>Grails Is Back: Inside the Apache Software Foundation Migration</title><link>https://foojayio.github.io/website/today/grails-isnt-done-yet-part-1-inside-the-asf-reboot/</link><pubDate>Wed, 25 Mar 2026 08:30:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/grails-isnt-done-yet-part-1-inside-the-asf-reboot/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Steve Poole | With contributions from James Fredley, Apache Grails PMC Chair&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For a technology that many people filed under &amp;ldquo;legacy,&amp;rdquo; Grails has been unusually active. While much of the industry&amp;rsquo;s attention has drifted toward newer frameworks and shinier stacks, something more deliberate has been happening in the background.&lt;/p&gt;
&lt;p&gt;Grails has been moving into the Apache Software Foundation (ASF), modernising and positioning itself for the next chapter.&lt;/p&gt;
&lt;p&gt;If you have not looked at Grails recently, your mental model is likely several years out of date. And that, in many ways, is exactly the problem.&lt;/p&gt;</description></item><item><title>TestBox 7: Real-Time Feedback, a Browser-Based IDE, and Modern Testing Workflows on the JVM</title><link>https://foojayio.github.io/website/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/</link><pubDate>Tue, 24 Mar 2026 16:58:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/testbox-7-1-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;TestBox 7.x focuses on improving testing workflows for BoxLang and CFML applications. This release introduces improvements to the &lt;strong&gt;BoxLang CLI runner&lt;/strong&gt; , real-time &lt;strong&gt;streaming test execution via SSE&lt;/strong&gt; , &lt;strong&gt;dry run&lt;/strong&gt; capabilities, a browser-based &lt;strong&gt;TestBox RUN&lt;/strong&gt; interface, and several developer experience enhancements.&lt;/p&gt;
&lt;p&gt;Check out the what&amp;rsquo;s new here: &lt;a href="https://testbox.ortusbooks.com/readme/release-history/whats-new-with-7.0.0" target="_blank" rel="noopener noreferrer"&gt;https://testbox.ortusbooks.com/readme/release-history/whats-new-with-7.0.0&lt;/a&gt;
&lt;/p&gt;
&lt;h4 id="testbox-run-a-browser-ide-for-your-tests"&gt;TestBox RUN: A Browser IDE for Your Tests&lt;/h4&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/image-700x155.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The centerpiece of TestBox 7 is &lt;strong&gt;TestBox RUN&lt;/strong&gt; : a self-hosted, single-page web app (&lt;code&gt;bx/tests/index.bxm&lt;/code&gt;) that you drop into any &lt;strong&gt;BoxLang&lt;/strong&gt; project and open in a browser. No build toolchain. No external service. Just BoxLang.&lt;/p&gt;</description></item><item><title>Clean Architecture with Spring Boot and MongoDB</title><link>https://foojayio.github.io/website/today/clean-architecture-with-spring-boot-and-mongodb/</link><pubDate>Tue, 24 Mar 2026 16:43:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/clean-architecture-with-spring-boot-and-mongodb/</guid><description>&lt;p&gt;Most Spring Boot tutorials tightly wire everything together. Controllers call services, services call repositories, and MongoDB annotations like &lt;code&gt;@Document&lt;/code&gt; and &lt;code&gt;@Field&lt;/code&gt; sit right next to your business logic. It works until you need to swap the database, test logic in isolation, or reuse domain rules in a different context.&lt;/p&gt;
&lt;p&gt;Clean Architecture enforces one rule: source code dependencies always point inward. Your business logic never imports Spring or MongoDB classes. The database becomes a pluggable detail at the outermost layer, something you can replace without rewriting core application code.&lt;/p&gt;</description></item><item><title>Eclipse GlassFish: This Isn’t Your Father’s GlassFish</title><link>https://foojayio.github.io/website/today/eclipse-glassfish-this-isnt-your-fathers-glassfish/</link><pubDate>Tue, 24 Mar 2026 15:30:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/eclipse-glassfish-this-isnt-your-fathers-glassfish/</guid><description>&lt;p&gt;GlassFish is an application server with a long history and has always had a special role in the Java world as the reference implementation of Java EE, being one of the most popular Java EE servers. Since Oracle lost interest in the project several years ago, developers and organizations have held certain beliefs about GlassFish, often based on their experiences with older versions.&lt;/p&gt;
&lt;p&gt;If you still think of GlassFish as a slow, unsupported, and purely for-development application server, it&amp;rsquo;s time to take a fresh look. At OmniFish, we&amp;rsquo;ve been working hard to change that perception since 2022. The Eclipse GlassFish of today, particularly from version 7.0 onwards, is a completely different platform, and we&amp;rsquo;re proud to show you what we&amp;rsquo;ve helped to build with the rest of the Eclipse GlassFish contributors.&lt;/p&gt;</description></item><item><title>Lottie4J 1.2.0: dotLottie Support, Marker Playback, Cropping, and a Big Speed Boost</title><link>https://foojayio.github.io/website/today/lottie4j-1-2-0-dotlottie-support-marker-playback-cropping-and-a-big-speed-boost/</link><pubDate>Tue, 24 Mar 2026 07:51:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/lottie4j-1-2-0-dotlottie-support-marker-playback-cropping-and-a-big-speed-boost/</guid><description>&lt;p&gt;Version 1.2.0 of &lt;a href="https://lottie4j.com" target="_blank" rel="noopener noreferrer"&gt;Lottie4J&lt;/a&gt;
 is out, and it&amp;rsquo;s again a big release! The headline feature is support for the &lt;code&gt;.lottie&lt;/code&gt; container format, but that&amp;rsquo;s just the start. This release also brings marker-based playback, cropping, adaptive rendering, significant performance improvements, and a lot of core model fixes driven by testing more complex real-world animations.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/9lE6UO8XNpU?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;h2 id="h2-0-dotlottie-file-support"&gt;dotLottie File Support&lt;/h2&gt;
&lt;p&gt;Until now, Lottie4J only supported the plain JSON format (&lt;code&gt;.json&lt;/code&gt;). That&amp;rsquo;s the original Lottie format, but LottieFiles also introduced a newer container format: &lt;code&gt;.lottie&lt;/code&gt;. It&amp;rsquo;s essentially a ZIP archive that can hold one or more animations, embedded images, sounds, and a manifest file that describes the contents.&lt;/p&gt;</description></item><item><title>How to Use Java as a Scripting Language</title><link>https://foojayio.github.io/website/today/java-for-scripting/</link><pubDate>Mon, 23 Mar 2026 10:00:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-for-scripting/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/java-for-scripting/java-script-cover-700x467.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-the-scripting-dilemma"&gt;The Scripting Dilemma&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re like me, as a Java developer, you struggle to remember bash or python syntax for quick scripts.&lt;/p&gt;
&lt;p&gt;You end up &amp;ldquo;vibe coding&amp;rdquo; it, then struggle again when you need to adapt it. If only you could write it in Java!&lt;/p&gt;
&lt;p&gt;You might say &amp;ldquo;Java is not for scripting&amp;rdquo; and &amp;ldquo;I don&amp;rsquo;t want maven or Gradle&amp;rdquo;.Modern Java has quietly eliminated the traditional barriers that made it unsuitable for scripting.With instant execution, shebang support, and zero-setup automation, Java has evolved into a lean scripting language. Write precise, maintainable code without the &amp;ldquo;vibe coding&amp;rdquo; that comes with unfamiliar languages.&lt;/p&gt;</description></item><item><title>Azul Zulu OpenJDK Docker Images Now Available on Docker Hub</title><link>https://foojayio.github.io/website/today/official-azul-zulu-openjdk-images-now-available-on-docker-hub/</link><pubDate>Mon, 23 Mar 2026 07:53:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/official-azul-zulu-openjdk-images-now-available-on-docker-hub/</guid><description>&lt;p&gt;&lt;a href="https://www.azul.com/blog/trusted-java-containers-azul-zulu-openjdk-joins-dockers-official-images/" title="Azul recently announced that" target="_blank" rel="noopener noreferrer"&gt;Azul recently announced that&lt;/a&gt;
 Azul Zulu Builds of OpenJDK are now available as Docker Official images on Docker Hub. That means you can pull TCK‑verified, fully compliant OpenJDK builds directly from the same Official Images library you already trust for your base OS and databases.&lt;/p&gt;
&lt;p&gt;You can browse and pull the images here:&lt;br&gt;
&lt;a href="https://hub.docker.com/_/azul-zulu" target="_blank" rel="noopener noreferrer"&gt;https://hub.docker.com/_/azul-zulu&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-why-should-you-care-about-official-images"&gt;Why should you care about official images?&lt;/h2&gt;
&lt;p&gt;With the official Docker images you get:&lt;/p&gt;</description></item><item><title>Native Memory in Java: Arenas, Malloc, and Pools</title><link>https://foojayio.github.io/website/today/java-native-memory-allocation-ffm-api/</link><pubDate>Fri, 20 Mar 2026 10:20:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-native-memory-allocation-ffm-api/</guid><description>&lt;h2 id="h2-0-what-is-the-memory-api"&gt;What is the Memory API&lt;/h2&gt;
&lt;p&gt;The Foreign Function &amp;amp; Memory (FFM) API is Java&amp;rsquo;s new way of interacting with native code and memory. It is mostly useful when storing data off-heap or passing arguments to a native method. Handling this native memory comes down to balancing how much control you need against the risk of memory leaks. You can rely on the provided &lt;code&gt;Arena&lt;/code&gt;s to bind memory to safe scopes, or you do it yourself using &lt;code&gt;malloc&lt;/code&gt; and &lt;code&gt;free&lt;/code&gt; for absolute control, or implement custom pools and slices to optimize allocations for your use case.&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>Building Reactive Data Streams with Project Reactor</title><link>https://foojayio.github.io/website/today/building-reactive-data-streams-with-project-reactor/</link><pubDate>Thu, 19 Mar 2026 15:13:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-reactive-data-streams-with-project-reactor/</guid><description>&lt;h2 id="h2-0-creating-non-blocking-streaming-endpoints-for-high-throughput-applications"&gt;Creating Non-Blocking Streaming Endpoints for High-Throughput Applications&lt;/h2&gt;
&lt;p&gt;There are problems that only occur in production. Or rather, we only notice them in production.&lt;/p&gt;
&lt;p&gt;We have created an application that exposes clean APIs, according to all standards. You have modeled the domain elegantly and efficiently: all load tests show reassuring data. CPU usage is reasonable, to say the least. However, there is a problem: when traffic exceeds a threshold, the system slows down. Response time latency becomes inconsistent; threads stack up on top of each other. Response times increase unpredictably, and application customers begin to complain about this situation.&lt;/p&gt;</description></item><item><title>Introducing the BoxLang Spring Boot Starter: Dynamic JVM Templating for Spring</title><link>https://foojayio.github.io/website/today/introducing-the-boxlang-spring-boot-starter-dynamic-jvm-templating-for-spring/</link><pubDate>Thu, 19 Mar 2026 14:20:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-the-boxlang-spring-boot-starter-dynamic-jvm-templating-for-spring/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/introducing-the-boxlang-spring-boot-starter-dynamic-jvm-templating-for-spring/boxlang-spring-boot-release-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Spring Boot developers know the pain of evaluating view technologies. Thymeleaf is great &amp;mdash; until you need more expressiveness. FreeMarker is powerful &amp;mdash; until the syntax fights you. What if you could write templates in a dynamic JVM language that gives you the full power of the platform, feels natural, and requires zero setup to integrate?&lt;/p&gt;
&lt;p&gt;Meet the &lt;strong&gt;BoxLang Spring Boot Starter.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Drop one dependency into your Spring Boot 3 app and start writing dynamic &lt;code&gt;.bxm&lt;/code&gt; templates powered by BoxLang &amp;mdash; a modern, expressive JVM language. Zero configuration. Full web scopes. 100% Java interoperable. Not only that, you get full access to BoxLang&amp;rsquo;s framework capabilities so you can integrate tons of features into your Spring Boot applications:&lt;/p&gt;</description></item><item><title>How is Leyden improving Java Performance? Part 3 of 3</title><link>https://foojayio.github.io/website/today/how-is-leyden-improving-java-performance-part-3-of-3/</link><pubDate>Thu, 19 Mar 2026 12:10:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-is-leyden-improving-java-performance-part-3-of-3/</guid><description>&lt;p&gt;In part 1 of this series of 3 blog posts we introduced the specific performance challenges OpenJDK faces lowering application &amp;lsquo;startup&amp;rsquo;, &amp;lsquo;warmup&amp;rsquo; and &amp;lsquo;initial footprint&amp;rsquo; costs and provided an overview of what Leyden is doing to address those challenges.&lt;/p&gt;
&lt;p&gt;Part 2 described how to use the new capabilities offered by Leyden and presented test results which show that very significant progress has already been made and is set to continue.&lt;/p&gt;</description></item><item><title>How is Leyden improving Java Performance? Part 2 of</title><link>https://foojayio.github.io/website/today/how-is-leyden-improving-java-performance-part-2-of-3/</link><pubDate>Wed, 18 Mar 2026 12:05:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-is-leyden-improving-java-performance-part-2-of-3/</guid><description>&lt;p&gt;In part 1 of this series of 3 blog posts we introduced the specific performance challenges OpenJDK faces lowering application &amp;lsquo;startup&amp;rsquo;, &amp;lsquo;warmup&amp;rsquo; and &amp;lsquo;initial footprint&amp;rsquo; costs and provided an overview of what Leyden is doing to address those challenges.&lt;/p&gt;
&lt;p&gt;Part 2 describes how to use the new AOT capabilities offered by Leyden and presents test results which show that very significant progress has already been made and is set to continue.&lt;/p&gt;</description></item><item><title>Language Learning Flashcard System - Part 1</title><link>https://foojayio.github.io/website/today/language-learning-flashcard-system-part-1/</link><pubDate>Tue, 17 Mar 2026 16:39:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/language-learning-flashcard-system-part-1/</guid><description>&lt;p&gt;My native language is Spanish. I&amp;rsquo;ve been learning (and butchering) English my whole life. But at some point, I felt confident with English and wanted to learn Japanese. Big mistake. This is a totally different beast: three writing systems (Hiragana ひらがな, Katakana カタカナ and Kanji 漢字), a completely different grammar, no relation whatsoever with European languages&amp;hellip; I needed help. And tools to learn. And one of them is Space Repetition System based apps.&lt;/p&gt;</description></item><item><title>How is Leyden improving Java Performance? Part 1 of 3</title><link>https://foojayio.github.io/website/today/how-is-leyden-improving-java-performance-part-1-of-3/</link><pubDate>Tue, 17 Mar 2026 12:00:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-is-leyden-improving-java-performance-part-1-of-3/</guid><description>&lt;p&gt;In this series of 3 blog posts we will explain how OpenJDK project Leyden is helping to improve a specific area of performance where Java has notably lagged behind other languages i.e. application &amp;lsquo;startup&amp;rsquo;, &amp;lsquo;warmup&amp;rsquo;, and &amp;lsquo;initial footprint&amp;rsquo;.&lt;/p&gt;
&lt;p&gt;Part 1 explains what those terms mean and why Java faces challenges in matching the behaviour of other languages. It then provides an overview of what Leyden has done to improve startup and warmup in existing JDK releases and what is planned for upcoming releases.&lt;/p&gt;</description></item><item><title>BoxLang 1.11.0 Release</title><link>https://foojayio.github.io/website/today/boxlang-1-11-0-release/</link><pubDate>Tue, 17 Mar 2026 09:40:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-11-0-release/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-1-11-0-release/boxlang-v1.11.0-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re proud to announce &lt;strong&gt;BoxLang 1.11.0&lt;/strong&gt;, a highly focused performance and stability release that delivers measurable speed improvements across every BoxLang application, with zero code changes required. The team invested deeply in bytecode generation, class loading, lock management, and type casting to produce one of the most impactful runtime optimization releases to date. Alongside the performance wave, this release resolves critical concurrency bugs, hardens DateTime handling, and ships powerful new developer tooling.&lt;/p&gt;</description></item><item><title>Java 26 Is Here, And With It a Solid Foundation for the Future</title><link>https://foojayio.github.io/website/today/java-26-is-here-and-with-it-a-solid-foundation-for-the-future/</link><pubDate>Tue, 17 Mar 2026 07:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-26-is-here-and-with-it-a-solid-foundation-for-the-future/</guid><description>&lt;p&gt;Java 26 is here! Six months ago, we welcomed Java 25 into our hearts, which means it&amp;rsquo;s time for another fresh helping of Java features. This time, the set of features is a bit smaller compared to some of the previous releases, which can only mean one thing: the focus for this release was to provide a solid foundation for something big to be released soon™️! My hope is that the first JEPs out of Project Valhalla will be announced later this year. That hope is fueled by some of Java 26&amp;rsquo;s changes as they feel like appropriate preparation steps for the first Valhalla features (this is especially true for JEPs &lt;a href="#jep-500-prepare-to-make-final-mean-final"&gt;500&lt;/a&gt;
 and &lt;a href="#jep-529-vector-api-eleventh-incubator"&gt;529&lt;/a&gt;
).&lt;/p&gt;</description></item><item><title>Foojay Podcast #92: Java 26 Is Here: What's New, What's Gone, and Why It Matters in 2026</title><link>https://foojayio.github.io/website/today/foojay-podcast-92/</link><pubDate>Mon, 16 Mar 2026 06:58:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-92/</guid><description>&lt;p&gt;Welcome to another episode of the Foojay Podcast! In this episode, we&amp;rsquo;re talking about Java 26, released on March 17 in the year 26. Again, right on schedule with Java&amp;rsquo;s six-month release cadence.&lt;/p&gt;
&lt;p&gt;Now, Java 26 is not a Long Term Support (LTS) release; that was Java 25. But don&amp;rsquo;t let that fool you into thinking there&amp;rsquo;s nothing interesting here. This release brings ten JDK Enhancement Proposals (JEPs). They cover everything from performance improvements to long-overdue cleanups. Of those ten JEPS, five are new features, and we also get five preview/incubator features.&lt;/p&gt;</description></item><item><title>Lottie4J 1.1.0: Better Rendering, Smarter Debugging, and an animated Lottie4J Logo!</title><link>https://foojayio.github.io/website/today/lottie4j-1-1-0-better-rendering-smarter-debugging/</link><pubDate>Fri, 13 Mar 2026 07:30:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/lottie4j-1-1-0-better-rendering-smarter-debugging/</guid><description>&lt;p&gt;Just one week after the first public release of &lt;a href="https://lottie4j.com" target="_blank" rel="noopener noreferrer"&gt;Lottie4J&lt;/a&gt;
, the open-source Java library for rendering Lottie animations in JavaFX, version 1.1.0 is already out. And it&amp;rsquo;s a big one!&lt;/p&gt;
&lt;p&gt;A lot happened in that one week. A logo was designed for the project, a Lottie animation was created for that logo (naturally!), and, most importantly, a significant number of rendering improvements landed after testing a much wider range of animation files. That&amp;rsquo;s the reason for the version bump from &lt;code&gt;1.0.0&lt;/code&gt; to &lt;code&gt;1.1.0&lt;/code&gt;: there are some API changes that come with it.&lt;/p&gt;</description></item><item><title>Atlas Online Archive: Efficiently Manage the Data Lifecycle</title><link>https://foojayio.github.io/website/today/atlas-online-archive-efficiently-manage-the-data-lifecycle/</link><pubDate>Thu, 12 Mar 2026 14:55:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/atlas-online-archive-efficiently-manage-the-data-lifecycle/</guid><description>&lt;h2 id="h2-0-problem-statement"&gt;Problem statement&lt;/h2&gt;
&lt;p&gt;In the production environment, in a MongoDB Atlas database, a collection contains massive amounts of data stored, including aged and current data. However, aged data is not frequently accessed through applications, and the data piles up daily in the collection, leading to performance degradation and cost consumption. This results in needing to upgrade the cluster tier size to maintain sufficient resources according to workload, as it would be difficult to continue with the existing tier size.&lt;/p&gt;</description></item><item><title>Event-Driven Architecture in Java and Kafka</title><link>https://foojayio.github.io/website/today/event-driven-architecture-in-java-and-kafka/</link><pubDate>Tue, 10 Mar 2026 18:35:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/event-driven-architecture-in-java-and-kafka/</guid><description>&lt;p&gt;Reactive Java is well suited to modern streaming, event driven applications. In this article, we&amp;rsquo;ll walk through an example of such an application using Reactive Java with MongoDB. Specifically, we&amp;rsquo;re going to cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Why Reactive Java was introduced and how it differs from more traditional Java programming.&lt;/li&gt;
&lt;li&gt;Details of some of the key elements of Reactive Java - &lt;strong&gt;Mono&lt;/strong&gt; , &lt;strong&gt;Flux&lt;/strong&gt; and &lt;strong&gt;flatMap&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A walk through of a sample application, comparing a Reactive version of the code using the Reactive Streams MongoDB driver, with a more traditional version of the code using the synchronous MongoDB driver.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-streaming-data-the-air-traffic-control-example"&gt;Streaming Data - The Air Traffic Control Example.&lt;/h2&gt;
&lt;p&gt;As a key part of global initiatives to modernize national airspace systems, many national aviation authorities have introduced mandates requiring most non-military aircraft transmit GPS based location data using a system known as Automatic Dependent Surveillance Broadcast, or &amp;ldquo;ADS-B&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Introducing the BoxLang IDE Plugin for IntelliJ</title><link>https://foojayio.github.io/website/today/introducing-the-boxlang-ide-plugin-for-intellij/</link><pubDate>Tue, 10 Mar 2026 14:25:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-the-boxlang-ide-plugin-for-intellij/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/introducing-the-boxlang-ide-plugin-for-intellij/1773053085130-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The IntelliJ ecosystem is one of the most powerful development environments for JVM developers. Today, we&amp;rsquo;re excited to introduce &lt;a href="http://https://plugins.jetbrains.com/plugin/30311-boxlang-ide" title="the official BoxLang IDE plugin for IntelliJ" target="_blank" rel="noopener noreferrer"&gt;the official BoxLang IDE plugin for IntelliJ&lt;/a&gt;
, bringing modern BoxLang development directly into the JetBrains IDE family.&lt;/p&gt;
&lt;p&gt;Whether you&amp;rsquo;re building new BoxLang applications or maintaining existing CFML codebases, this plugin gives you first-class tooling inside IntelliJ.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/introducing-the-boxlang-ide-plugin-for-intellij/testbox-integration-700x438.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-installing-the-plugin"&gt;Installing the Plugin&lt;/h2&gt;
&lt;p&gt;Installing the plugin is easy from the JetBrains Marketplace.&lt;/p&gt;</description></item><item><title>Introducing Lottie4J, a Java(FX) Library to Parse and Play Lottie Animation Files</title><link>https://foojayio.github.io/website/today/introducing-lottie4j-a-javafx-library-to-parse-and-play-lottie-animation-files/</link><pubDate>Tue, 10 Mar 2026 08:24:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-lottie4j-a-javafx-library-to-parse-and-play-lottie-animation-files/</guid><description>&lt;p&gt;I&amp;rsquo;m proud to present a new JavaFX library: &lt;strong&gt;Lottie4J&lt;/strong&gt;, that brings Lottie animations to JavaFX applications. I first learned about Lottie many years ago when we were developing a mobile app. We used Lottie animations to explain to users how to operate a physical device. The animations made the instructions so much clearer than static images or text alone.&lt;/p&gt;
&lt;p&gt;At the time, I wanted to create a similar experience in JavaFX, but I couldn&amp;rsquo;t find a JavaFX player for the Lottie format. So I decided to build one myself. What I didn&amp;rsquo;t realize then was just how complex this journey would be&amp;hellip;&lt;/p&gt;</description></item><item><title>DPoP: What It Is, How It Works, and Why Bearer Tokens Aren't Enough</title><link>https://foojayio.github.io/website/today/dpop-what-it-is-how-it-works-and-why-bearer-tokens-arent-enough/</link><pubDate>Mon, 09 Mar 2026 08:08:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/dpop-what-it-is-how-it-works-and-why-bearer-tokens-arent-enough/</guid><description>&lt;p&gt;DPoP is one of the most exciting developments in the IAM (Identity and Access Management) space in recent years. Yet many backend developers either have not heard of it or are unsure what it actually changes. In this article, I will break down what DPoP is, what problem it solves, and walk through a working implementation with Keycloak and Quarkus.&lt;/p&gt;
&lt;h2 id="h2-0-what-is-dpop"&gt;What is DPoP?&lt;/h2&gt;
&lt;p&gt;DPoP (Demonstration of Proof-of-Possession) is an OAuth 2.0 security mechanism defined in &lt;a href="https://datatracker.ietf.org/doc/html/rfc9449" target="_blank" rel="noopener noreferrer"&gt;RFC 9449&lt;/a&gt;
. Its core purpose is simple: cryptographically bind an access token to the client that requested it. This way, even if a token is intercepted, it cannot be used by another client.&lt;/p&gt;</description></item><item><title>Role-Based Access Control in Java Applications</title><link>https://foojayio.github.io/website/today/role-based-access-control-in-java-applications/</link><pubDate>Thu, 05 Mar 2026 20:31:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/role-based-access-control-in-java-applications/</guid><description>&lt;p&gt;We often work with Java applications where security begins and ends with authentication. The JWT token is validated, Spring Security is integrated, and an identity provider is added, thinking that this type of configuration is sufficiently secure.&lt;/p&gt;
&lt;p&gt;The real problem is that authentication only answers one question: who are you? In real applications, we also have to answer another question, which is often more complex and more dangerous to get wrong: what are you allowed to do?&lt;/p&gt;</description></item><item><title>No Keys, No LLM: Building a Wikidata Definition API with Embabel</title><link>https://foojayio.github.io/website/today/embabel-spring-boot-wikidata-definition-api/</link><pubDate>Thu, 05 Mar 2026 08:00:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/embabel-spring-boot-wikidata-definition-api/</guid><description>&lt;h2 id="h2-0-tl-dr"&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I built a &lt;strong&gt;Spring Boot 4&lt;/strong&gt; API that defines terms via &lt;strong&gt;Wikidata&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The app is fully reproducible: &lt;strong&gt;no API keys&lt;/strong&gt; and &lt;strong&gt;no model installation&lt;/strong&gt; needed.&lt;/li&gt;
&lt;li&gt;Embabel orchestrates the pipeline as a sequence of actions to achieve the goal &lt;code&gt;DefinitionResult&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The logs show planning, execution, and typed object binding&amp;mdash;the most useful part for teaching agentic flows.&lt;/li&gt;
&lt;/ul&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/TiuYS6K3HaU?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;I wanted a demo that is &lt;strong&gt;simple&lt;/strong&gt; , &lt;strong&gt;reproducible&lt;/strong&gt; , and still &lt;strong&gt;shows agentic orchestration&lt;/strong&gt; in a way that&amp;rsquo;s easy to explain on video.&lt;/p&gt;</description></item><item><title>I Benchmarked Java on Single-Board Computers: Orange Pi 5 Ultra and Raspberry Pi 5 Lead the Pack</title><link>https://foojayio.github.io/website/today/java-benchmarks-on-single-board-computers/</link><pubDate>Wed, 04 Mar 2026 06:52:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-benchmarks-on-single-board-computers/</guid><description>&lt;hr&gt;
&lt;p&gt;In my &amp;ldquo;Java on Single Board Computers&amp;rdquo; series, I already published several posts and videos in which I unpack the board, connect it for the first time, and try to install and run some simple Java code. In this post, I want to share some benchmarks of Java on these boards to get a better idea of the performance we can expect from Java on these platforms.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/efLS8pBtqZ0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Already published in this series:&lt;/p&gt;</description></item><item><title>Data Enrichment in MongoDB</title><link>https://foojayio.github.io/website/today/data-enrichment-in-mongodb/</link><pubDate>Tue, 03 Mar 2026 16:10:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/data-enrichment-in-mongodb/</guid><description>&lt;p&gt;In a recent design review, a customer was enriching new data as it came in. As the enrichment process was fairly complex, they ran into some issues with concurrency. To solve this, they decided that data should go into a staging collection rather than the main collection that held the data. This did nothing to help with concurrency issues and actually created more work on the database side of things when enrichment was complete.&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>BoxLang Homebrew Installer Released</title><link>https://foojayio.github.io/website/today/boxlang-homebrew-installer-released/</link><pubDate>Tue, 03 Mar 2026 12:34:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-homebrew-installer-released/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-homebrew-installer-released/boxlang-homebrew-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re excited to announce the official &lt;strong&gt;BoxLang Homebrew tap&lt;/strong&gt; &amp;mdash; the easiest way to get BoxLang up and running on macOS (and Linux with Homebrew). One command, and you&amp;rsquo;re in business.&lt;/p&gt;
&lt;h3 id="h3-0-getting-started"&gt;Getting Started&lt;/h3&gt;
&lt;p&gt;First, make sure you have &lt;a href="https://brew.sh/" title="Homebrew installed" target="_blank" rel="noopener noreferrer"&gt;Homebrew installed&lt;/a&gt;
, then add our tap:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java"&gt;brew tap ortus-boxlang/boxlang
&lt;/pre&gt;
&lt;p&gt;From there, choose your installation path.&lt;/p&gt;
&lt;h2 id="h2-1-option-1-bvm-boxlang-version-manager"&gt;Option 1: BVM &amp;mdash; BoxLang Version Manager&lt;/h2&gt;
&lt;p&gt;If you want to manage multiple BoxLang versions side by side, &lt;strong&gt;BVM&lt;/strong&gt; is your tool.&lt;/p&gt;</description></item><item><title>Java 26: What’s New?</title><link>https://foojayio.github.io/website/today/java-26-whats-new/</link><pubDate>Tue, 03 Mar 2026 10:00:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-26-whats-new/</guid><description>&lt;p&gt;This article was first published in my personal blog: &lt;a href="https://www.loicmathieu.fr/wordpress/informatique/java-26-whats-new/" target="_blank" rel="noopener noreferrer"&gt;Java 26: What&amp;rsquo;s new?&lt;/a&gt;
 and is part of a serie on &lt;a href="https://www.loicmathieu.fr/wordpress/tag/whatsnew/" target="_blank" rel="noopener noreferrer"&gt;what&amp;rsquo;s new on the last versions of Java&lt;/a&gt;
).&lt;/p&gt;
&lt;p&gt;Now that Java 26 is features complete (Rampdown Phase Two at the day of writing), it&amp;rsquo;s time to walk through all the functionalities that bring to us, developers, this new version.&lt;/p&gt;
&lt;p&gt;After Java 25 and its 18 JEPs, Java 26 arrives with a small number of JEPs, 10, with very few new features.&lt;/p&gt;</description></item><item><title>Shaping Jakarta Agentic AI Together</title><link>https://foojayio.github.io/website/today/shaping-jakarta-agentic-ai-together-watch-the-open-conversation/</link><pubDate>Mon, 02 Mar 2026 11:15:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/shaping-jakarta-agentic-ai-together-watch-the-open-conversation/</guid><description>&lt;p&gt;Last week, Eclipse Foundation and Payara hosted &lt;em&gt;Jakarta Agentic AI, An Open Conversation&lt;/em&gt;, an open house Jakarta TechTalk session, exploring a brand new initiative under the Eclipse Foundation. If you could not join us live, the full recording is now available.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/92Iv-q6o1fQ?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;h2 id="h2-0-what-is-jakarta-agentic-ai"&gt;What is Jakarta Agentic AI?&lt;/h2&gt;
&lt;p&gt;Jakarta Agentic AI is an exploratory project looking at how AI agents could be built, deployed and run within Jakarta EE runtimes. As AI systems increasingly move from simple inference to autonomous, agent-based behaviour, the question becomes how these systems fit into enterprise Java environments that value reliability, security, and portability.&lt;/p&gt;</description></item><item><title>25 Years of IntelliJ IDEA: The IDE That Grew Up With Java</title><link>https://foojayio.github.io/website/today/foojay-podcast-91/</link><pubDate>Mon, 02 Mar 2026 07:21:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-91/</guid><description>&lt;p&gt;In this Foojay Podcast, we&amp;rsquo;re celebrating a major milestone in Java development history: 25 years of IntelliJ IDEA.&lt;/p&gt;
&lt;p&gt;Think about it: IntelliJ IDEA launched in 2000, and since then, it has become the go-to IDE for millions of Java developers worldwide. From its revolutionary code completion and refactoring tools to AI-powered features and the recent unified Community and Ultimate release, IntelliJ has shaped how we write Java, and keeps reinventing itself to stay ahead.&lt;/p&gt;</description></item><item><title>JavaFX Links of February 2026</title><link>https://foojayio.github.io/website/today/javafx-links-of-february-2026/</link><pubDate>Sat, 28 Feb 2026 10:13:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-february-2026/</guid><description>&lt;p&gt;Here are the JavaFX LinksOfTheMonth of February 2026. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Amazing work by &lt;strong&gt;CommonGround_2048&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;Excited to share Cycle Power, a complete cycling ecosystem built entirely with Java! From a native mobile app to a web dashboard, it&amp;rsquo;s &amp;lsquo;Java Everywhere&amp;rsquo; in action. Huge thanks to &lt;strong&gt;Johan Vos&lt;/strong&gt; and the Gluon team for making native mobile Java a reality. It&amp;rsquo;s &amp;lsquo;Java Everywhere&amp;rsquo; in action!&lt;/em&gt; &amp;quot; Check &lt;a href="https://mastodon.social/@CommonGround_2048/116092121019823454" target="_blank" rel="noopener noreferrer"&gt;the thread on Mastodon for screenshots&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;The Mobile App (Android/iOS) uses GluonFX &amp;amp; JavaFX for a high-performance native experience.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;The Web Dashboard is the cherry on top! Built with #WebFX, it transpiles JavaFX directly to JavaScript.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/116093437764667818" target="_blank" rel="noopener noreferrer"&gt;Reply by &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Fantastic work! Java and JavaFX are extremely suitable for many end-to-end applications, bridging the gap between user-friendly applications and enterprise data platforms.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@jabref/116025388844914606" target="_blank" rel="noopener noreferrer"&gt;JabRef news&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;In the latest development version, JabRef now supports multiple citation fetchers/providers, including SemanticScholar, crossref, opencitations, and OpenAlex. And at the bottom we provide some additional metrics from scite.ai. &lt;a href="https://builds.jabref.org/main/" target="_blank" rel="noopener noreferrer"&gt;Grab the version here&lt;/a&gt;
. PS: This version now uses also JavaFX 25.02 and JDK 25.02. -&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/tom-doerr.bsky.social/post/3mezxgtgt3f2e" target="_blank" rel="noopener noreferrer"&gt;Message with screenshot by &lt;strong&gt;Tom Dörr&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Customizable application dock for Windows built with JavaFX.&lt;/em&gt; &amp;quot; You can &lt;a href="https://github.com/arthurdeka/cedro-modern-dock" target="_blank" rel="noopener noreferrer"&gt;find it on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/lidianycs.bsky.social/post/3meykpmad6s2p" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Lidiany Cerqueira&lt;/strong&gt; announced a new release of CERCA&lt;/a&gt;
, the Citation Extraction &amp;amp; Reference Checking Assistant, with support for Semantic Scholar&amp;rsquo;s API. Get it from &lt;a href="https://sourceforge.net/projects/cerca/" target="_blank" rel="noopener noreferrer"&gt;Sourceforge&lt;/a&gt;
 or check the &lt;a href="https://github.com/lidianycs/cerca" target="_blank" rel="noopener noreferrer"&gt;code on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/logorrr.bsky.social/post/3mfaiintmjk2v" target="_blank" rel="noopener noreferrer"&gt;Message with screenshot by LogoRRR&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;LogoRRR just got a major facelift. Analysing logs has never looked this good 😉 &lt;a href="https://www.logorrr.app/posts/release-26.1.0/" target="_blank" rel="noopener noreferrer"&gt;Get it here&lt;/a&gt;
&lt;/em&gt;.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vitor Pereira&lt;/strong&gt; is working on his version of Wireshark and &lt;a href="https://www.linkedin.com/posts/vitordef_java-softwareengineering-performance-activity-7431169143522914304-vOW8/" target="_blank" rel="noopener noreferrer"&gt;shared some ot the challenges and solutions&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The result was a 5x reduction in RAM usage. I dropped from 5GB on 800,000 packets down to just 1GB.&lt;/em&gt; &amp;quot; Check &lt;a href="https://github.com/VitorDeF/PacketAnalyser" target="_blank" rel="noopener noreferrer"&gt;Java Packet Analyzer on GitHub&lt;/a&gt;
 for the sources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Library updates by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mdv6tqelnk2a" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared a screenshot&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Just finished putting a &amp;lsquo;Mail App Demo&amp;rsquo; together for GemsFX. It shows how you can leverage the &amp;lsquo;TagsField&amp;rsquo;&amp;rdquo;&amp;rsquo; to implement the email address lookup in a user-friendly way.&lt;/em&gt; &amp;quot; Check the GemsFX library &lt;a href="https://github.com/dlsc-software-consulting-gmbh/GemsFX" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3melv56fvhs2p" target="_blank" rel="noopener noreferrer"&gt;On Bluesky with screenshot&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I revisited the PopOver control that I wrote years ago. I noticed that the clipping wasn&amp;rsquo;t working perfectly and that the placement logic had issues (to say the least), which caused the popover arrow to point at the wrong location. It&amp;rsquo;s all fixed now and will be in the next GemsFX release.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3melvqalpnc2n" target="_blank" rel="noopener noreferrer"&gt;Release 3.9.0 of GemsFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mfm7pcta5223" target="_blank" rel="noopener noreferrer"&gt;Release 3.10.0 of GemsFX&lt;/a&gt;
 : &amp;ldquo;&lt;em&gt;It contains a new feature for the InfoCenterPane allowing you to specify where to show notifications (upper left, upper right, etc&amp;hellip;).&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A new library by &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; : &lt;a href="https://github.com/HanSolo/splitflap26" target="_blank" rel="noopener noreferrer"&gt;SplitFlap 2026&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A JavaFX implementation of a SplitFlap component.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/sjhannah_javafx-java-desktopdevelopment-activity-7428512640110383104-C1jH/" target="_blank" rel="noopener noreferrer"&gt;Message by &lt;strong&gt;Steve Hannah&lt;/strong&gt; on LinkedIn&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Most desktop apps feel disconnected from the web. You can&amp;rsquo;t link directly into them. You can&amp;rsquo;t share a URL that opens a specific screen. Users have to manually navigate after launching. I just added deep linking to jDeploy 6.0 for JavaFX apps. Now you can register custom URL schemes like: &amp;lsquo;myapp://settings&amp;rsquo; and &amp;lsquo;myapp://document/123&amp;rsquo;. Click the link and your app opens directly to that view. Works on macOS, Windows, and Linux. I wrote a &lt;a href="https://www.jdeploy.com/docs/tutorials/deep-linking-javafx/" target="_blank" rel="noopener noreferrer"&gt;tutorial showing how to set it up step by step&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New video by &lt;strong&gt;Helal Anwar&lt;/strong&gt; showing new features in his : &lt;a href="https://www.youtube.com/watch?v=rhRcOt3TUy4" target="_blank" rel="noopener noreferrer"&gt;Student management app (Part 5)&lt;/a&gt;
. Sources of the project &lt;a href="https://github.com/24F3004969/GradedAttendance" target="_blank" rel="noopener noreferrer"&gt;are on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;New JavaFX In Action interview published by &lt;strong&gt;Frank Delporte&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;While reviewing scientific papers, &lt;strong&gt;Lidiany Cerqueira&lt;/strong&gt; had a recurring problem: each reference needed to be checked, as more and more of them were #hallucinations introduced by LLMs and Chatbots. As a solution, she created CERCA during her Christmas holiday. Thanks to #Java, #JavaFX, open-source libraries, and free APIs, the number of references to be checked gets reduced a lot, making her work and that of many other reviewers a lot easier!&lt;/em&gt; &amp;quot; You can find the &lt;a href="https://www.youtube.com/watch?v=QVN57j1zcik" target="_blank" rel="noopener noreferrer"&gt;video interview on YouTube&lt;/a&gt;
 and &lt;a href="https://webtechie.be/post/2026-02-05-jfxinaction-lidiany-cerqueira-cerca/" target="_blank" rel="noopener noreferrer"&gt;more info in this blog post&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; took a next stop in his &amp;ldquo;2026 #JavaOnSingleBoardComputers Journey&amp;rdquo; with four BeagleBoards (2x #Arm, 2x #RISCV). With his first quick unboxing and test, he got Java(FX) running on the BeagleY-AI. The &lt;a href="https://www.youtube.com/watch?v=pZ8hMuQbk8Y" target="_blank" rel="noopener noreferrer"&gt;video is available on YouTube&lt;/a&gt;
 with more info, links, and details &lt;a href="https://webtechie.be/post/2026-02-10-first-test-beagleboard-java/" target="_blank" rel="noopener noreferrer"&gt;in this blog post&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; published a new interview in his &amp;ldquo;JavaFX In Action&amp;rdquo; series: &amp;ldquo;&lt;em&gt;&lt;strong&gt;Helal Anwar&lt;/strong&gt; builds impressive educational tools with Java and JavaFX. In this interview, we discuss his GradedAttendance application and other projects he&amp;rsquo;s working on.&lt;/em&gt; &amp;quot; The &lt;a href="https://www.youtube.com/watch?v=pbQZK68tplA" target="_blank" rel="noopener noreferrer"&gt;video is on YouTube&lt;/a&gt;
 with &lt;a href="https://webtechie.be/post/2026-02-19-jfxinaction-helal-anwar-gradedattendance/" target="_blank" rel="noopener noreferrer"&gt;more info in this blog post&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=0kpWW36GDKs" target="_blank" rel="noopener noreferrer"&gt;Video by &lt;strong&gt;Florian Enner&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;POC: JavaFX native-image snapshots integrated into wxPython. A JavaFX application compiled as a native-image and called from Python. The wxPython GUI updates the JavaFX state and integrates the JavaFX snapshot as an image.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=7vtGXLgZ3XQ" target="_blank" rel="noopener noreferrer"&gt;Video by &lt;strong&gt;Sethlans Forge&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Vulkan rendering surface embedded inside a JavaFX application, using Java and LWJGL. This setup demonstrates how low-level Vulkan rendering can coexist with a high-level JavaFX UI, enabling tools, editors, or engine frontends built in Java while keeping full control over the GPU. This is part of the development of Sethlans, a Vulkan graphics engine written in Java, focusing on modern rendering, engine architecture, and low-level GPU control.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=q8sXNXR6iKc" target="_blank" rel="noopener noreferrer"&gt;Video by &lt;strong&gt;Ken Kousen&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I Built a Star Trek Computer with Java 25 &amp;amp; Spring AI. Is it possible to launch a full Spring Boot AI application in 35 milliseconds? Yes&amp;mdash;if you use the right tools. In this video, we aren&amp;rsquo;t just faking a sci-fi UI. We are building the actual ENGINE of a Star Trek computer using the latest in the Java ecosystem: Java 25, Spring AI, and the Model Context Protocol (MCP), using Java FX Voice Interface at 10'50&amp;rdquo;.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/helal-anwar-94571016b_java-javafx-iitm-activity-7428570421710557184-EY9n/" target="_blank" rel="noopener noreferrer"&gt;Video published on LinkedIn by &lt;strong&gt;Helal Anwar&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;ChessFX made in 10 minutes (Fully vibe coded). Fully written in JavaFX. This is a solid version given the time we had. I believe we can leverage LLMs to build Java and JavaFX applications. If not fully fledged products, then at least substantial parts, since the ecosystem is mature and there&amp;rsquo;s plenty of data available. Just my opinion 😊.&lt;/em&gt; &amp;quot; The &lt;a href="https://github.com/24F3004969/GradedAttendance/blob/main/src/main/java/org/graded_classes/graded_attendance/test/ChessFX.java" target="_blank" rel="noopener noreferrer"&gt;source (in one single file!) is available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nicolas Frankel&lt;/strong&gt; published do Foojay.io: &lt;a href="https://foojayio.github.io/website/today/from-a-jar-to-a-full-fledged-macos-app/"&gt;From a JAR to a full-fledged MacOS app&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;The solution is straightforward: create a regular MacOS app from the UberJAR. At its simplest, a MacOS app is only a folder with a specific structure. You could replicate it by hand, but I&amp;rsquo;m lazy, and there are tools for this. jpackage is such a tool. jpackage is one of the tools I learned about, am ecstatic about, used once, and forgot until the next time. Add one to the counter.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://robintegg.com/2026/02/08/java-ui-in-2026-the-complete-guide" target="_blank" rel="noopener noreferrer"&gt;Java UI in 2026: The Complete Guide&lt;/a&gt;
 by &lt;a href="https://bsky.app/profile/robintegg.bsky.social" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robin Tegg&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;When developers think about building user interfaces today, the conversation often revolves around the same familiar choices. But Java offers a fully modern, end-to-end alternative &amp;mdash; desktop, web, terminal, and even mobile apps &amp;mdash; all powered by a single language. With one cohesive Java stack, teams and AI tools can reason, build, and iterate more efficiently than ever.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;This guide (and JavaFX) are also mentioned in the &lt;a href="https://www.linkedin.com/pulse/java-reaches-gpu-records-fall-off-cliff-gatherers-prove-skowro%C5%84ski-rnqlf/" target="_blank" rel="noopener noreferrer"&gt;JVM Weekly newsletter&lt;/a&gt;
 by &lt;a href="https://bsky.app/profile/askowronski.bsky.social" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Artur Skowroński&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7424168822129025024/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jakob Jenkov&lt;/strong&gt; shared a quick update about the Polymorph project&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The Polymorph Player is beginning to take shape. It can only display some very simple graphics at this point, so I will not include a screenshot in this post. At this point the main structural design is reasonably in place. From here on it is hundreds, if not thousands, of small improvements that need to be added before the Player has a somewhat useful and coherent base set of functionality. These improvements are both in the Player itself, and in the Polymorph Tools toolkit - especially in the virtual machine that executes the scripts which can be run from within the Player app. Lots of work to do ! &amp;hellip; but it&amp;rsquo;s in progress ! 😊 The Player app is made with JavaFX, by the way! ☺️&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Created by &lt;a href="https://bsky.app/profile/robintegg.bsky.social" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robin Tegg&lt;/strong&gt;&lt;/a&gt;
: &lt;a href="https://awesome-java-ui.com/" target="_blank" rel="noopener noreferrer"&gt;Awesome Java UI&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;This site provides an overview of the latest and greatest Java UI projects, frameworks and libraries, along with their status, Java version compatibility, learning curve, last release date, and more. Explore the projects to find the right Java UI solution for your needs. This is a community-driven resource, built by Java developers for Java developers. Whether you&amp;rsquo;re discovering a new framework, sharing your expertise, or helping others navigate the Java UI landscape - your contributions make this guide better for everyone. Join us in building the most comprehensive resource for Java UI development!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/QVN57j1zcik" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with &lt;strong&gt;Lidiany Cerqueira&lt;/strong&gt; about CERCA&lt;/a&gt;
, an open-source research tool that supports the verification of bibliographic references in scientific manuscripts.&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/pbQZK68tplA" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Helal Anwar about GradedAttendance&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;JFX Central got bumped to JavaFX 25 and &lt;a href="https://www.jpro.one/" target="_blank" rel="noopener noreferrer"&gt;JPro 2026.1.1&lt;/a&gt;
 to fix a few styling issues.&lt;/li&gt;
&lt;li&gt;The links of January 2026 got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-january-2026/"&gt;published on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>How to Build a Search Service in Java with MongoDB</title><link>https://foojayio.github.io/website/today/how-to-build-a-search-service-in-java-with-mongodb/</link><pubDate>Fri, 27 Feb 2026 18:28:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-build-a-search-service-in-java-with-mongodb/</guid><description>&lt;p&gt;We need to code our way from the search box to our search index. Performing a search and rendering the results in a presentable fashion, itself, is not a tricky endeavor: Send the user&amp;rsquo;s query to the search server, and translate the response data into some user interface technology. However, there are some important issues that need to be addressed, such as security, error handling, performance, and other concerns that deserve isolation and control.&lt;/p&gt;</description></item><item><title>Gotta Code 'Em All: How Java Evolved Beyond Verbosity – Celebrating 30 Years of Pokémon</title><link>https://foojayio.github.io/website/today/gotta-code-em-all-how-java-evolved-beyond-verbosity-celebrating-30-years-of-pokemon/</link><pubDate>Fri, 27 Feb 2026 09:57:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/gotta-code-em-all-how-java-evolved-beyond-verbosity-celebrating-30-years-of-pokemon/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/gotta-code-em-all-how-java-evolved-beyond-verbosity-celebrating-30-years-of-pokemon/pokemon01-1024x640.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Happy 30th Anniversary to &lt;strong&gt;Pokémon&lt;/strong&gt;! 🎉&lt;/p&gt;
&lt;p&gt;February 27, 2026 marks exactly 30 years since the original Pokémon Red and Green launched in Japan on February 27, 1996. From catching your first Pokémon in Pallet Town to becoming Champion in the Indigo League, the franchise has spent three decades teaching millions of players about strategy, friendship, exploration, and constant improvement, evolving creatures, teams, and even entire generations of games.&lt;/p&gt;
&lt;p&gt;Pokémon is literally all about evolution and that same spirit of evolution perfectly matches what&amp;rsquo;s happening in Java right now.&lt;/p&gt;</description></item><item><title>Tomcat TLSv1.3 cipher configuration</title><link>https://foojayio.github.io/website/today/tomcat-tlsv13-cipher-configuration-spring-boot/</link><pubDate>Thu, 26 Feb 2026 18:02:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/tomcat-tlsv13-cipher-configuration-spring-boot/</guid><description>&lt;p&gt;A recent update to Apache Tomcat introduced a subtle but significant change to how TLS cipher suites are configured. If your Spring Boot application explicitly configures TLS ciphers, particularly TLSv1.3 ciphers, and runs on Tomcat 9.0.115+ (Spring Boot 2.x), 10.1.52+ (Spring Boot 3.x), or 11.0.18+ (Spring Boot 4.x), your cipher configuration may be silently ignored.&lt;/p&gt;
&lt;p&gt;Prior to the change, Tomcat used a single &lt;code&gt;ciphers&lt;/code&gt; attribute on the SSL connector to configure cipher suites for all TLS versions. Starting with the versions of Tomcat listed above (Tomcat &lt;a href="https://github.com/apache/tomcat/commit/9abf6bddb2e84ecf1668780bb3150b799f832ccf" target="_blank" rel="noopener noreferrer"&gt;commit&lt;/a&gt;
), this attribute was split:&lt;/p&gt;</description></item><item><title>Translating a Website into 8 Languages with AI Agents in One Night</title><link>https://foojayio.github.io/website/today/translating-a-website-into-8-languages-with-ai-agents-in-one-night/</link><pubDate>Thu, 26 Feb 2026 14:15:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/translating-a-website-into-8-languages-with-ai-agents-in-one-night/</guid><description>&lt;h2 id="h2-0-how-i-used-claude-sonnet-4-6-and-fleets-of-github-copilot-coding-agents-to-internationalize-java-evolved-from-spec-to-deployment"&gt;How I used Claude Sonnet 4.6 and fleets of GitHub Copilot Coding Agents to internationalize java.evolved &amp;mdash; from spec to deployment&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://javaevolved.github.io" target="_blank" rel="noopener noreferrer"&gt;java.evolved&lt;/a&gt;
 is a static site I built to showcase modern Java patterns side-by-side with their legacy equivalents. 112 patterns across 11 categories &amp;mdash; language, collections, streams, concurrency, and more &amp;mdash; each with code comparisons, explanations, and curated documentation links. All generated from YAML content files by a JBang-powered Java build script.&lt;/p&gt;</description></item><item><title>Personal Branding Tips for Java Developers</title><link>https://foojayio.github.io/website/today/watch-the-recording-diy-technical-marketing-for-java-developers/</link><pubDate>Thu, 26 Feb 2026 10:28:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/watch-the-recording-diy-technical-marketing-for-java-developers/</guid><description>&lt;p&gt;The software development industry is more competitive than ever. Being a strong technical expert is essential, but on its own it is often not enough to grow your career or open new opportunities.&lt;/p&gt;
&lt;p&gt;In this short, practical talk&lt;em&gt;DIY Technical Marketing, Real World Tips For Building A Successful Developer Brand&lt;/em&gt; , delivered at &lt;a href="https://www.jfokus.se/" title="Jfokus 2026 conference" target="_blank" rel="noopener noreferrer"&gt;Jfokus 2026 conference&lt;/a&gt;
, Payara Community Manager Dominika Tasarz-Sochacka explores why personal branding matters for developers and how even small, intentional actions can make a real difference over time.&lt;/p&gt;</description></item><item><title>I Got Java 25 Running on the RISC-V BeagleBoard BeagleV-Fire</title><link>https://foojayio.github.io/website/today/i-got-java-25-running-on-the-risc-v-beagleboard-beaglev-fire/</link><pubDate>Wed, 25 Feb 2026 06:04:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/i-got-java-25-running-on-the-risc-v-beagleboard-beaglev-fire/</guid><description>&lt;p&gt;After my initial struggles with the BeagleV-Fire in a &lt;a href="https://webtechie.be/post/2026-02-10-first-test-beagleboard-java/" target="_blank" rel="noopener noreferrer"&gt;previous video&lt;/a&gt;
, I succeeded in getting Java 25 running on RISC-V-powered BeagleV-Fire! Let me walk you through the journey and the steps I took to make it work.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/p08u_g7hFwE?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;h2 id="h2-0-the-challenge"&gt;The Challenge&lt;/h2&gt;
&lt;p&gt;In my earlier &lt;a href="https://webtechie.be/post/2026-02-10-first-test-beagleboard-java/" target="_blank" rel="noopener noreferrer"&gt;blog post and video about several BeagleBoards&lt;/a&gt;
, I demonstrated that Java, JavaFX, and even Pi4J worked perfectly. That&amp;rsquo;s expected, since ARM processors, like those in Raspberry Pi boards, have run Java reliably for years.&lt;/p&gt;</description></item><item><title>MongoDB and the Raft Algorithm</title><link>https://foojayio.github.io/website/today/mongodb-and-the-raft-algorithm/</link><pubDate>Tue, 24 Feb 2026 15:47:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-and-the-raft-algorithm/</guid><description>&lt;p&gt;&lt;a href="https://www.mongodb.com/docs/manual/replication/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=mongodb-raft-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;MongoDB&amp;rsquo;s replica&lt;/a&gt;
 set architecture uses distributed consensus to ensure consistency, availability, and fault tolerance across nodes. At the core of this architecture is the &lt;strong&gt;Raft consensus algorithm&lt;/strong&gt;, which breaks the complexities of distributed consensus into manageable operations: leader election, log replication, and commitment. This document explores how MongoDB integrates and optimizes Raft for its high-performance replication needs.{#1c95}&lt;br&gt;
&lt;img src="https://miro.medium.com/v2/resize:fit:700/0*CAtq0SjCCYL4gRBY.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h3 id="e650"&gt;Raft Roles and MongoDB&amp;rsquo;s Replica Set&lt;/h3&gt;
&lt;p&gt;In Raft, nodes can assume one of three roles: &lt;strong&gt;leader&lt;/strong&gt; , &lt;strong&gt;follower&lt;/strong&gt; , or &lt;strong&gt;candidate&lt;/strong&gt; . MongoDB maps these roles to its architecture seamlessly. The &lt;strong&gt;primary&lt;/strong&gt; node functions as the leader, handling all client write operations and coordinating replication. The &lt;strong&gt;secondaries&lt;/strong&gt; serve as followers, maintaining copies of the primary&amp;rsquo;s data. A node transitions to the &lt;strong&gt;candidate&lt;/strong&gt; role during an election, triggered by leader unavailability.{#5e79}&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>Announcing Cloud-Native BoxLang for $5/Month</title><link>https://foojayio.github.io/website/today/announcing-cloud-native-boxlang-for-5-month/</link><pubDate>Mon, 23 Feb 2026 16:39:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-cloud-native-boxlang-for-5-month/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/announcing-cloud-native-boxlang-for-5-month/boxlang-digitalocean-wave-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; We just released a production-ready starter template that deploys a modern BoxLang application to DigitalOcean App Platform in under 5 minutes&amp;mdash;starting at just &lt;strong&gt;$5/month.&lt;/strong&gt; One-click deployment, auto-scaling, automatic redeployments, and zero downtime included.&lt;/p&gt;
&lt;h2 id="h2-0-cloud-native-boxlang-has-never-been-easier"&gt;Cloud-Native BoxLang Has Never Been Easier&lt;/h2&gt;
&lt;p&gt;Today, we&amp;rsquo;re excited to announce the BoxLang DigitalOcean Starter Template&amp;mdash;a complete, production-ready solution that takes you from zero to deployed BoxLang application in minutes, not hours.&lt;/p&gt;
&lt;p&gt;For many developers evaluating modern JVM languages, the question isn&amp;rsquo;t &amp;ldquo;Can it run?&amp;rdquo; but rather &amp;ldquo;How easily can I get this into production?&amp;rdquo; With this starter, the answer is now: ridiculously easy.&lt;/p&gt;</description></item><item><title>The Triforce That Slays Legacy Java Myths – Happy 40th Zelda!</title><link>https://foojayio.github.io/website/today/the-triforce-that-slays-legacy-java-myths-happy-40th-zelda/</link><pubDate>Sat, 21 Feb 2026 18:13:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-triforce-that-slays-legacy-java-myths-happy-40th-zelda/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/the-triforce-that-slays-legacy-java-myths-happy-40th-zelda/zelda01-1024x683.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h4 id="happy-40th-anniversary-to-the-legend-of-zelda-"&gt;Happy 40th Anniversary to &lt;strong&gt;The Legend of Zelda&lt;/strong&gt;! 🎉🗡️&lt;/h4&gt;
&lt;p&gt;Today, February 21, 2026, marks exactly 40 years since the original game launched in Japan on February 21, 1986. From the humble 8-bit NES adventure to the breathtaking open worlds of Breath of the Wild and Tears of the Kingdom, Zelda has constantly reinvented itself. Zelda evolved.&lt;/p&gt;
&lt;p&gt;And that spirit perfectly mirrors what&amp;rsquo;s happening in the Java world right now. Java evolved.&lt;/p&gt;</description></item><item><title>Stop Writing YAML: Automating Your Repo with Plain Natural Language</title><link>https://foojayio.github.io/website/today/stop-writing-yaml-automating-your-repo-with-plain-natural-language/</link><pubDate>Fri, 20 Feb 2026 19:01:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/stop-writing-yaml-automating-your-repo-with-plain-natural-language/</guid><description>&lt;p&gt;If you maintain a busy codebase, you already know the daily grind: triaging issues, writing status reports, updating documentation, and chasing down failed CI builds. What if your repository could handle that routine maintenance for you, using natural language instead of complex, fragile scripts?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You can even write in languages other than English!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In this week&amp;rsquo;s &lt;a href="https://www.youtube.com/live/Dw2S-VQDvhs?t=426s" target="_blank" rel="noopener noreferrer"&gt;Rubber Duck Thursdays live stream, Cassidy Williams and I&lt;/a&gt;
 took a deep dive into &lt;strong&gt;&lt;a href="https://github.github.com/gh-aw/" target="_blank" rel="noopener noreferrer"&gt;GitHub Agentic Workflows&lt;/a&gt;
&lt;/strong&gt;. We explored how to move past deterministic if-then scripts and embrace &amp;ldquo;Continuous AI&amp;rdquo;, a world where your repository actually has the agency to understand context and safely execute tasks for you.&lt;/p&gt;</description></item><item><title>A Visual Diff of Java’s Evolution: Inside java.evolved</title><link>https://foojayio.github.io/website/today/a-visual-diff-of-javas-evolution-inside-java-evolved/</link><pubDate>Fri, 20 Feb 2026 17:48:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-visual-diff-of-javas-evolution-inside-java-evolved/</guid><description>&lt;p&gt;A community project called &lt;a href="https://javaevolved.github.io/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;java.evolved&lt;/strong&gt;&lt;/a&gt;
 was recently launched to document how common Java coding patterns have changed across releases. Instead of explaining features in isolation, the site presents &amp;ldquo;before and after&amp;rdquo; examples: traditional idioms next to modern alternatives.&lt;/p&gt;
&lt;p&gt;The approach targets a practical problem. Most developers work in mixed-era codebases where Java 6, 8, and 17 styles coexist. Rather than memorizing new language features, the site shows what existing code would look like if written today.
&lt;img src="https://foojayio.github.io/website/today/a-visual-diff-of-javas-evolution-inside-java-evolved/Screenshot-2026-02-20-at-6.28.07-AM-700x446.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Ports and Adapters in Java: Keeping Your Core Clean</title><link>https://foojayio.github.io/website/today/ports-and-adapters-in-java-keeping-your-core-clean/</link><pubDate>Thu, 19 Feb 2026 16:13:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/ports-and-adapters-in-java-keeping-your-core-clean/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;If we want to evolve our Java system over time, architecture is more important than the choice of framework. Very often, teams realize too late that what was supposed to be a simple persistence layer at the beginning ended up influencing and overwhelming the entire application design. MongoDB annotations end up in domain models, repository abstractions mirror collections, and business logic becomes an integral part of the infrastructure.&lt;/p&gt;
&lt;p&gt;Hexagonal architecture, also known as Ports and Adapters, offers an architectural model that aims to avoid this problem. It involves the correct attribution of responsibilities to the various application layers. It encourages us to consider external systems (databases, message brokers, HTTP APIs, MCP servers) as details rather than pillars at the center of our design.&lt;/p&gt;</description></item><item><title>GlassFish 8 is here with Jakarta EE 11, virtual threads, and Jakarta Data</title><link>https://foojayio.github.io/website/today/glassfish-8-is-here-with-jakarta-ee-11-virtual-threads-and-jakarta-data/</link><pubDate>Wed, 18 Feb 2026 16:06:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/glassfish-8-is-here-with-jakarta-ee-11-virtual-threads-and-jakarta-data/</guid><description>&lt;p&gt;The final version of Eclipse GlassFish 8 is here, released on 5 February 2026. As a GlassFish committer, I&amp;rsquo;d like to share what it brings for the Java community and some behind-the-scenes stories from the development process&lt;/p&gt;
&lt;p&gt;Recently my company OmniFish published an announcement article introducing GlassFish 8.0.0 and covering all the major features: &lt;a href="https://omnifish.ee/glassfish-8-released-enterprise-grade-java-redefined/" target="_blank" rel="noopener noreferrer"&gt;GlassFish 8 Released: Enterprise-Grade Java, Redefined&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Here, I&amp;rsquo;d like to report on this article and also share some behind-the-scenes stories about my involvement in GlassFish 8 and why I think the new features matter for solving real pain points in the Java community.&lt;/p&gt;</description></item><item><title>BoxLang NeoVim Plugin Released</title><link>https://foojayio.github.io/website/today/boxlang-neovim-plugin-released/</link><pubDate>Wed, 18 Feb 2026 14:51:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-neovim-plugin-released/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-neovim-plugin-released/boxlang-neovim-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re excited to announce the release of the BoxLang NeoVim Plugin - a comprehensive syntax highlighting solution designed specifically for BoxLang developers working in Vim and NeoVim environments. This isn&amp;rsquo;t a port or adaptation of existing CFML syntax files; it&amp;rsquo;s a ground-up implementation built for BoxLang&amp;rsquo;s modern feature set. Coming soon as well will be our runners, syntax validators, and integration with our LSP for live previews, insights, and much more.&lt;/p&gt;</description></item><item><title>First Test of Java on BeagleBoards (ARM and RISC-V)</title><link>https://foojayio.github.io/website/today/first-test-of-java-on-beagleboards-arm-and-risc-v/</link><pubDate>Wed, 18 Feb 2026 07:10:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/first-test-of-java-on-beagleboards-arm-and-risc-v/</guid><description>&lt;p&gt;As part of my 2026 learning goals around Java on RISC-V (see &lt;a href="https://webtechie.be/post/2026-01-07-x86-arm-riscv/" target="_blank" rel="noopener noreferrer"&gt;this post about x86 versus ARM versus RISC-V&lt;/a&gt;
), I&amp;rsquo;ve asked various suppliers to send me evaluation boards. I already published these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2025-11-25-first-test-lattepanda-iota-with-ubuntu-and-java/" target="_blank" rel="noopener noreferrer"&gt;LattePanda IOTA (x86)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2026-01-12-first-test-orangepi-java/" target="_blank" rel="noopener noreferrer"&gt;OrangePi 5 Ultra (ARM) and OrangePi RV2 (RISC-V)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2026-01-16-first-test-visionfive-java/" target="_blank" rel="noopener noreferrer"&gt;VisionFive 2 Lite (RISC-V)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;In this post: BeagleBoards (ARM and RISC-V)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I got all these boards for free, but what I write here and show in the video is not controlled by BeagleBoard or one of the other suppliers.&lt;/p&gt;</description></item><item><title>Optimizing the MongoDB Java Driver</title><link>https://foojayio.github.io/website/today/optimizing-the-mongodb-java-driver-how-minor-optimizations-led-to-macro-gains/</link><pubDate>Tue, 17 Feb 2026 15:33:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/optimizing-the-mongodb-java-driver-how-minor-optimizations-led-to-macro-gains/</guid><description>&lt;p&gt;Co-authored by &lt;em&gt;Slav Babanin&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www-cs-faculty.stanford.edu/~knuth/" target="_blank" rel="noopener noreferrer"&gt;Donald Knuth&lt;/a&gt;
{#https://www-cs-faculty.stanford.edu/~knuth/}, widely recognized as the &amp;lsquo;father of the analysis of algorithms,&amp;rsquo; warned against premature optimization&amp;mdash;spending effort on code that appears inefficient but is not on the critical path. He observed that programmers often focus on the wrong 97% of the codebase. Real performance gains come from identifying and optimizing the critical 3%. But, how can you identify the critical 3%? Well, that&amp;rsquo;s where the philosophy of &amp;rsquo;never guess, always measure&amp;rsquo; comes in.&lt;/p&gt;</description></item><item><title>Runtime Code Analysis in the Age of Vibe Coding</title><link>https://foojayio.github.io/website/today/runtime-code-analysis-in-the-age-of-vibe-coding/</link><pubDate>Tue, 17 Feb 2026 14:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/runtime-code-analysis-in-the-age-of-vibe-coding/</guid><description>&lt;p&gt;In the era of &lt;strong&gt;vibe coding&lt;/strong&gt;&amp;mdash;where large amounts of code are introduced or refactored in short bursts, often with the help of LLMs&amp;mdash;you need immediate feedback on how new logic actually executes. Not comprehensive analysis. Not nanosecond-precise timing. Just a quick confirmation that your loops aren&amp;rsquo;t spinning 10,000x more than they should.&lt;/p&gt;
&lt;p&gt;However, traditional profilers can feel like overkill for quick validation. In addition, they present results at method/stack granularity and require context-switching to interpret. They also introduce overhead, ranging from negligible (e.g., JFR/sampling) to noticeable (call tracing/instrumentation). As a result, they are less convenient as always-on feedback during rapid iteration.&lt;/p&gt;</description></item><item><title>DevBcn, the developer's conference in Barcelona</title><link>https://foojayio.github.io/website/today/devbcn-2026/</link><pubDate>Tue, 17 Feb 2026 09:56:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/devbcn-2026/</guid><description>&lt;p&gt;Hola developers !!!!!&lt;/p&gt;
&lt;p&gt;The 11th edition of &lt;strong&gt;&lt;a href="http://www.devbcn.com" target="_blank" rel="noopener noreferrer"&gt;DevBcn&lt;/a&gt;
&lt;/strong&gt;, the developer&amp;rsquo;s conference in Barcelona is coming next June. The perfect place to have great technology talks 🤖, perfect weather 🏖️, amazing food 🥘, and an unforgettable experience 💖.&lt;/p&gt;
&lt;figure class="aligncenter size-full is-resized"&gt;
 &lt;a target="_blank" href="http://www.devbcn.com"&gt;&lt;img fetchpriority="high" decoding="async" width="1011" height="851" src="Screenshot-2026-02-17-at-10.35.06.png" alt="" class="wp-image-122749" style="aspect-ratio:1.18804004331396;width:564px;height:auto"&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;br /&gt;
&lt;p&gt;It will be hosted on the 16th and 17th of June 2026, in the &lt;strong&gt;World Trade Center Conference Center&lt;/strong&gt; , having 4 rooms with talks in parallel during the 2 days of the conference : &lt;strong&gt;Java/JVM, AI, Cloud, Frontend, Managing and Soft skills&lt;/strong&gt;.
&lt;img src="https://foojayio.github.io/website/today/devbcn-2026/unnamed-1-1024x282.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>What 2,000+ Professionals Told Us About the State of Java, AI, Cloud Costs, and the Future of the Java Ecosystem</title><link>https://foojayio.github.io/website/today/what-2000-professionals-told-us-about-the-state-of-java-ai-cloud-costs-and-the-future-of-the-java-ecosystem/</link><pubDate>Tue, 17 Feb 2026 08:58:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-2000-professionals-told-us-about-the-state-of-java-ai-cloud-costs-and-the-future-of-the-java-ecosystem/</guid><description>&lt;p&gt;Every year, I look forward to our &lt;a href="https://www.azul.com/state-of-java-2026?utm_medium=blog&amp;amp;utm_campaign=State-of-Java-2026&amp;amp;utm_source=web&amp;amp;utm_content=&amp;amp;utm_term=" target="_blank" rel="noopener noreferrer"&gt;State of Java Survey &amp;amp; Report&lt;/a&gt;
 because it gives us a view into how organizations are using Java today and where they&amp;rsquo;re heading next. This year, more than 2,000 Java professionals from around the world weighed in, and their message is clear:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Java is evolving faster than ever. AI is accelerating that shift. And the pressure to optimize cloud spending and avoid unpredictable Java licensing costs is now shaping strategic decisions across the enterprise.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Enabling AI Agents to Use a Real Debugger Instead of Logging</title><link>https://foojayio.github.io/website/today/enabling-ai-agents-to-use-a-real-debugger-instead-of-logging/</link><pubDate>Mon, 16 Feb 2026 21:12:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/enabling-ai-agents-to-use-a-real-debugger-instead-of-logging/</guid><description>&lt;p&gt;Every Java developer has been there. Something breaks, and the first instinct is to litter the code with &lt;code&gt;System.out.println(&amp;quot;&amp;gt;&amp;gt;&amp;gt; HERE 1&amp;quot;)&lt;/code&gt;. Then &lt;code&gt;HERE 2&lt;/code&gt;. Then &lt;code&gt;HERE 3 --- value is: &amp;quot; + x&lt;/code&gt;. Rebuild. Rerun. Stare at the console. Repeat.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve been doing this for decades. And now, so have our AI agents.&lt;/p&gt;
&lt;p&gt;When you ask an AI coding assistant to debug a Java application, it almost always reaches for the same playbook: add logging statements, recompile, rerun, read the output, and reason about what happened. It&amp;rsquo;s the &lt;code&gt;println&lt;/code&gt; debugging loop, automated &amp;mdash; but it&amp;rsquo;s still &lt;code&gt;println&lt;/code&gt; debugging.&lt;/p&gt;</description></item><item><title>Windsurf AI and SonarQube The Dream Team for AI Code Quality</title><link>https://foojayio.github.io/website/today/windsurf-ai-java-code-quality/</link><pubDate>Mon, 16 Feb 2026 09:34:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/windsurf-ai-java-code-quality/</guid><description>&lt;p&gt;Hola! 👋 As a Java developer, you probably spend a good chunk of your day making sure your code doesn&amp;rsquo;t just &amp;ldquo;work,&amp;rdquo; but is also maintainable, secure, and reliable. I&amp;rsquo;ve been using a tool that is changing how I handle large projects: &lt;strong&gt;Windsurf&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It is an agentic IDE that understands what you are trying to do across your whole project. Let&amp;rsquo;s see why this is a game-changer for our Java workflows. 🚀&lt;/p&gt;</description></item><item><title>Foojay Podcast #90: Highlights of the Java Features Between LTS 21 and 25</title><link>https://foojayio.github.io/website/today/foojay-podcast-90/</link><pubDate>Mon, 16 Feb 2026 07:32:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-90/</guid><description>&lt;p&gt;Every six months, we get a new version of Java. Java 26 is just around the corner and will be released soon. But most companies stick to LTS (Long-Term Support) versions, which are maintained and receive security updates for many more years. Versions 8, 11, 17, 21, and 25 are such LTS versions. Hopefully, most of your systems are already on the latest versions and you are not stuck on 8 or earlier. As a reminder, 8 was released in 2014, so much has changed since then.&lt;/p&gt;</description></item><item><title>How to Customize JaCoCo Report Styling in Your Java Project</title><link>https://foojayio.github.io/website/today/how-to-customize-jacoco-report-styling-in-your-java-project/</link><pubDate>Fri, 13 Feb 2026 13:10:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-customize-jacoco-report-styling-in-your-java-project/</guid><description>&lt;p&gt;JaCoCo is the go-to code coverage tool for Java projects. It integrates seamlessly with Maven, generates detailed HTML reports, and works out of the box. But let&amp;rsquo;s be honest &amp;mdash; the default reports look like they were designed in 2008, because they were.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re publishing coverage reports as part of your project documentation (on GitHub Pages, for example), you probably want them to match your site&amp;rsquo;s look and feel. The good news: it&amp;rsquo;s entirely possible. The bad news: JaCoCo offers zero built-in support for CSS customization.&lt;/p&gt;</description></item><item><title>MongoDB Sharding: What to Know Before You Shard a Collection</title><link>https://foojayio.github.io/website/today/mongodb-sharding-what-to-know-before-you-shard/</link><pubDate>Thu, 12 Feb 2026 16:47:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-sharding-what-to-know-before-you-shard/</guid><description>&lt;p&gt;When we think about a system that operates at scale, we are usually talking about an application that needs to serve millions of users. This often happens when an application suddenly becomes popular and usage grows much faster than expected. As more people start using it, the system naturally begins to struggle to keep up with the load.&lt;/p&gt;
&lt;p&gt;More users mean more requests, more data being generated, and more pressure on the database. If nothing is done, bottlenecks start to appear and the overall performance of the system degrades. There are two traditional ways to deal with this problem: vertical scaling and horizontal scaling.&lt;/p&gt;</description></item><item><title>Shai-Hulud and the npm Worm: How Speed-Optimised Dev Ecosystems Made a Self-Propagating Supply Chain Attack Inevitable</title><link>https://foojayio.github.io/website/today/the-shai-hulud-cyber-worm-and-more-thoughts-on-supply-chain-attacks/</link><pubDate>Thu, 12 Feb 2026 11:47:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-shai-hulud-cyber-worm-and-more-thoughts-on-supply-chain-attacks/</guid><description>&lt;h2 id="h2-0-first-a-word-about-ecosystems"&gt;first, a word about ecosystems&lt;/h2&gt;
&lt;p&gt;Before we dive into Shai-Hulud, before we label it &amp;ldquo;sophisticated&amp;rdquo; or &amp;ldquo;advanced&amp;rdquo; or &amp;ldquo;next generation,&amp;rdquo; we need to be honest about something.&lt;/p&gt;
&lt;p&gt;The worm didn&amp;rsquo;t appear in a broken system. It appeared in the one we deliberately optimised.&lt;/p&gt;
&lt;p&gt;In the book Dune, the worm is integral to the ecosystem. The planet, its environment, and the worms are deeply interconnected.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s true for the cyber-worm equivalent. The worm is an entirely predictable outcome of the ecosystem in which we, as developers, are part&lt;/p&gt;</description></item><item><title>Unikernel: Profiling and Troubleshooting JVM on Nanos Unikernel</title><link>https://foojayio.github.io/website/today/unikernel-profiling-and-troubleshooting-jvm-on-nanos-unikernel/</link><pubDate>Wed, 11 Feb 2026 13:50:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/unikernel-profiling-and-troubleshooting-jvm-on-nanos-unikernel/</guid><description>&lt;h3 id="h3-0-profiling-a-java-application-running-inside-an-unikernel-with-jprofiler"&gt;Profiling a Java Application Running Inside an Unikernel with JProfiler&lt;/h3&gt;
&lt;p&gt;Unikernels are often associated with minimalism and tight resource control.&lt;/p&gt;
&lt;p&gt;But can we profile a Java application running inside a unikernel using a standard JVM profiler?&lt;/p&gt;
&lt;p&gt;The answer is yes.&lt;/p&gt;
&lt;p&gt;In this guide, we will walk step by step through profiling a Quarkus&lt;/p&gt;
&lt;p&gt;application running inside a Nanos unikernel using &lt;strong&gt;JProfiler&lt;/strong&gt; and&lt;br&gt;
&lt;strong&gt;IBM Semeru JRE 25 (OpenJ9)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;No special hacks. Just standard JVM tooling.&lt;/p&gt;</description></item><item><title>Reactive Java with Project Reactor</title><link>https://foojayio.github.io/website/today/reactive-java-with-project-reactor/</link><pubDate>Tue, 10 Feb 2026 14:32:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/reactive-java-with-project-reactor/</guid><description>&lt;p&gt;&lt;strong&gt;Introduction: Why Reactive Java Still Matters&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Over the past decade, the Java ecosystem has gradually abandoned the idea that increasing the number of threads is the scalable solution to growing load. Cloud-native implementations, containerized workloads, and high-I/O applications have highlighted the inefficiencies of the traditional synchronous thread-per-request model.&lt;/p&gt;
&lt;p&gt;Reactive programming is not a panacea, a miracle solution. Certainly, it does not make applications &amp;ldquo;faster&amp;rdquo; by default. What it offers, when applied correctly, is the ability to predict behavior under load, better resource utilization, and explicit control over data flow. For systems that handle high concurrency, streaming data, or variable traffic patterns, these characteristics are hugely relevant.&lt;/p&gt;</description></item><item><title>Join Our Webinar: Build Agents, RAG Pipelines and More</title><link>https://foojayio.github.io/website/today/join-our-webinar-build-agents-rag-pipelines-multi-model-workflows-with-boxlang-ai/</link><pubDate>Tue, 10 Feb 2026 12:18:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/join-our-webinar-build-agents-rag-pipelines-multi-model-workflows-with-boxlang-ai/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/join-our-webinar-build-agents-rag-pipelines-multi-model-workflows-with-boxlang-ai/Webinar-SM1-700x394.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Build Agents, RAG Pipelines &amp;amp; Multi-Model Workflows &amp;mdash; One API, Zero Lock-In&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Modern enterprises want to move fast with AI&amp;mdash;but juggling different providers, SDKs, formats, and deployment models quickly becomes complex and brittle.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s why we&amp;rsquo;re excited to announce our upcoming webinar:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unlock Enterprise AI on the JVM: Build Agents, RAG Pipelines &amp;amp; Multi-Model Workflows with BoxLang AI One API, Zero Lock-In Led by Luis Majano&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this session, you&amp;rsquo;ll discover &lt;strong&gt;BoxLang AI&lt;/strong&gt; , an open-source library that brings unified, fluent AI orchestration to the JVM ecosystem. With a single, intuitive API, BoxLang AI lets you integrate 12+ &lt;strong&gt;leading AI providers&lt;/strong&gt; (including OpenAI, Claude, Gemini, Grok, Ollama, Groq, and more), switch models, or combine them into advanced workflows&amp;mdash;&lt;strong&gt;without rewriting your code.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Machine Learning in Java - SPAM detection using ONNX</title><link>https://foojayio.github.io/website/today/machine-learning-based-spam-detection-using-onnx-in-java/</link><pubDate>Tue, 10 Feb 2026 06:51:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/machine-learning-based-spam-detection-using-onnx-in-java/</guid><description>&lt;p&gt;Believe it or not, it is possible to do Machine Learning in Java. In this article I go over how to implement a Spring Boot API for Spam Detection using an advanced anti-spam model from the &lt;a href="https://huggingface.co/onnx-community/models" target="_blank" rel="noopener noreferrer"&gt;Hugging Face onnx-community&lt;/a&gt;
 and Microsoft&amp;rsquo;s &lt;a href="https://onnxruntime.ai/docs/get-started/with-java.html" target="_blank" rel="noopener noreferrer"&gt;ONNX Runtime for Java&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;We will package the API up as a Docker image which we can run a container from using docker or podman, and I guess in theory you could deploy on your Kubernetes cluster, if you (are) fancy.&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>MongoDB 8.0 Migration Guide: What You Need to Know Before Upgrading</title><link>https://foojayio.github.io/website/today/mongodb-8-0-migration-guide-what-you-need-to-know-before-upgrading/</link><pubDate>Thu, 05 Feb 2026 14:56:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-8-0-migration-guide-what-you-need-to-know-before-upgrading/</guid><description>&lt;p&gt;Have you ever wondered why updates and upgrades are so essential for any system? Well, it&amp;rsquo;s no secret: They ensure that systems remain relevant and efficient. With MongoDB, it&amp;rsquo;s no different. Whenever we think about updating, we seek efficiency, security, performance, and other benefits that come with updated systems. However, every update introduces changes that need to be carefully managed. In this article, we will cover some of the new features of MongoDB version 8.0 and highlight the key considerations you should take into account before migrating to this new version.&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>BoxLang 1.10.0: Functional Arrays, Elegant Loops &amp; Distributed Locking</title><link>https://foojayio.github.io/website/today/boxlang-1-10-0-functional-arrays-elegant-loops-distributed-locking/</link><pubDate>Wed, 04 Feb 2026 10:46:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-10-0-functional-arrays-elegant-loops-distributed-locking/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-1-10-0-functional-arrays-elegant-loops-distributed-locking/boxlang-v1.10.0-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re excited to announce &lt;strong&gt;BoxLang 1.10.0&lt;/strong&gt;, a feature-packed release that brings powerful functional programming capabilities, elegant loop syntax, and enterprise-grade distributed locking to the BoxLang runtime. This release represents a significant leap forward in developer productivity and application scalability.&lt;/p&gt;
&lt;h2 id="h2-0-what-s-new"&gt;🎯 What&amp;rsquo;s New&lt;/h2&gt;
&lt;h3 id="h3-1-nine-new-array-methods-for-functional-programming"&gt;Nine New Array Methods for Functional Programming&lt;/h3&gt;
&lt;p&gt;BoxLang 1.10.0 introduces nine powerful array methods that bring modern functional programming patterns to your collections. These methods enable cleaner, more expressive code while reducing the need for verbose iteration patterns.&lt;/p&gt;</description></item><item><title>First Test of Java on the VisionFive 2 Lite (RISC-V</title><link>https://foojayio.github.io/website/today/first-test-of-java-on-the-visionfive-2-lite-risc-v/</link><pubDate>Wed, 04 Feb 2026 07:59:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/first-test-of-java-on-the-visionfive-2-lite-risc-v/</guid><description>&lt;p&gt;As part of my 2026 learning goals around Java on RISC-V (see &lt;a href="https://foojayio.github.io/website/today/java-on-single-board-computers-x86-vs-arm-vs-risc-v/"&gt;this post about x86 versus ARM versus RISC-V&lt;/a&gt;
), I&amp;rsquo;ve asking various suppliers to send me evaluation boards. I already published about two and adding a third one now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/first-experiments-with-java-on-the-lattepanda-iota/"&gt;LattePanda IOTA&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/first-test-of-java-on-the-orange-pi-arm-and-risc-v/"&gt;OrangePi 5 Ultra and OrangePi RV2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;In this post: StarFive VisionFive 2 Lite&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I got all these boards for free, but what I write here and show in the video is not controlled by StarFive or one of the other suppliers.&lt;/p&gt;</description></item><item><title>GraphQL for Java Developers: Building a Flexible Data Layer</title><link>https://foojayio.github.io/website/today/graphql-for-java-developers-building-a-flexible-data-layer/</link><pubDate>Tue, 03 Feb 2026 15:43:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/graphql-for-java-developers-building-a-flexible-data-layer/</guid><description>&lt;p&gt;For many years, REST has been the standard architectural style for creating APIs in the Java ecosystem. Frameworks such as Spring MVC and, more recently, Spring WebFlux make it easy to expose HTTP endpoints with the REST paradigm, supported by well-structured service layers. In many cases, this model works well and serves as the basis for numerous enterprise solutions.&lt;/p&gt;
&lt;p&gt;However, as applications grow and frontend requirements become more dynamic, REST-based APIs are beginning to show their limitations. Multiple endpoints that return rigid DTOs often lead to over-fetching, under-fetching, and a proliferation of specialised endpoints created to meet slightly different customer needs. Over time, APIs become more difficult to evolve without introducing radical changes.&lt;/p&gt;</description></item><item><title>FOSDEM 2026: Open Source Supply Chains, CRA Compliance, and the Future of Software</title><link>https://foojayio.github.io/website/today/fosdem-2026-and-the-open-source-firehose/</link><pubDate>Mon, 02 Feb 2026 22:52:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/fosdem-2026-and-the-open-source-firehose/</guid><description>&lt;p&gt;&lt;em&gt;(a.k.a. &amp;ldquo;So&amp;hellip; what did you do this weekend?&amp;rdquo;)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m back from four days in Brussels and the uniquely exhausting experience that is FOSDEM. Mentally fried. Physically wrecked. Entirely glad I went.&lt;/p&gt;
&lt;h2 id="h2-0-the-chaos-and-the-crowd"&gt;The Chaos and the Crowd&lt;/h2&gt;
&lt;p&gt;Around 8,000 people made the trip this year. Some arrived for the first time; many returned as annual pilgrims.&lt;/p&gt;
&lt;p&gt;FOSDEM remains a strange outlier in the modern conference world: free to attend, no registration gatekeeping, and no sponsors dictating the tone. You just turn up.&lt;/p&gt;</description></item><item><title>Bringing Java Closer to Education: A Community-Driven Initiative</title><link>https://foojayio.github.io/website/today/bringing-java-closer-to-education-a-community-driven-initiative/</link><pubDate>Mon, 02 Feb 2026 18:02:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/bringing-java-closer-to-education-a-community-driven-initiative/</guid><description>&lt;p&gt;Over the past decades, Java has proven itself to be one of the most reliable, versatile, and widely used programming languages in the world. From enterprise systems to mobile applications and embedded devices, Java continues to evolve and adapt. Yet, one important area still holds enormous untapped potential: education.&lt;/p&gt;
&lt;p&gt;This initiative was born from a simple but powerful idea: to aggregate Java-related educational content in a way that helps newcomers get started, supports educators, and encourages new Java initiatives focused on learning. By making Java more accessible and visible in educational environments, we strengthen not only the language itself, but the entire ecosystem around it.&lt;/p&gt;</description></item><item><title>Claude Code SonarQube MCP: A Java Developer’s Workflow</title><link>https://foojayio.github.io/website/today/claude-code-sonarqube-mcp/</link><pubDate>Mon, 02 Feb 2026 15:15:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/claude-code-sonarqube-mcp/</guid><description>&lt;p&gt;Hola Java developers! 👋&lt;/p&gt;
&lt;p&gt;We all know the feeling. You are &amp;ldquo;in the zone,&amp;rdquo; coding away in your terminal, feeling like a hacker from a 90s movie. But then, reality hits. You need to check a rule, review a vulnerability, or verify if your project passes the quality gate.&lt;/p&gt;
&lt;p&gt;What do you do? You Alt+Tab. You open the browser. You log in. You search. And just like that&amp;hellip; the flow is gone. 📉&lt;/p&gt;</description></item><item><title>Announcing: Sustainability for Java Developers</title><link>https://foojayio.github.io/website/today/announcing-sustainability-for-java-developers-a-new-collaborative-guide-from-the-foojay-io-community/</link><pubDate>Mon, 02 Feb 2026 11:04:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-sustainability-for-java-developers-a-new-collaborative-guide-from-the-foojay-io-community/</guid><description>&lt;p&gt;Java developers from around the world are writing a book about a question that&amp;rsquo;s becoming impossible to ignore: how do we write software that&amp;rsquo;s good for both our projects and the planet?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Sustainability for Java Developers: Towards an Understanding of Sustainable Java Software Development&lt;/em&gt; is now freely available on Leanpub, bringing together Java Champions, architects, and technical writers to look at sustainability from every angle.&lt;/p&gt;
&lt;figure class="wp-block-image size-large is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="793" height="1024" src="sustainabilitybook-793x1024.png" alt="" class="wp-image-122569" style="width:277px;height:auto"&gt;
&lt;/figure&gt;
&lt;p&gt;The book covers everything from the environmental footprint of our data centers to the ethics of open source supply chains, from efficient data formats to the often-overlooked topic of career longevity.&lt;/p&gt;</description></item><item><title>JavaFX Links of January 2026</title><link>https://foojayio.github.io/website/today/javafx-links-of-january-2026/</link><pubDate>Sat, 31 Jan 2026 08:57:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-january-2026/</guid><description>&lt;p&gt;Here are the JavaFX LinksOfTheMonth of January 2026. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/gluonhq.com/post/3mcwe4ha3os2f" target="_blank" rel="noopener noreferrer"&gt;Gluon published quarterly releases&lt;/a&gt;
 of:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gluonhq.com/products/javafx/openjfx-25-release-notes/#25.0.2" target="_blank" rel="noopener noreferrer"&gt;JavaFX 25.0.2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gluonhq.com/products/javafx/openjfx-21-release-notes/#21.0.10" target="_blank" rel="noopener noreferrer"&gt;JavaFX 21.0.10&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gluonhq.com/products/javafx/openjfx-17-release-notes/#17.0.18" target="_blank" rel="noopener noreferrer"&gt;JavaFX 17.0.18&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Read more in this blog post: &amp;ldquo;&lt;a href="https://gluonhq.com/securing-the-future-of-openjfx-january-2026-critical-patch-update-released/" target="_blank" rel="noopener noreferrer"&gt;Securing the Future of OpenJFX: January 2026 Critical Patch Update Released&lt;/a&gt;
&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/115932393975918195" target="_blank" rel="noopener noreferrer"&gt;Message by &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Maintaining LTS versions for a project like JavaFX is complex and resource-intensive. It requires a fair amount of the Gluon resources, but it is extremely important to keep JavaFX secure, modern and relevant. You can support us at &lt;a href="https://gluonhq.com/lts" target="_blank" rel="noopener noreferrer"&gt;gluonhq.com/lts&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.azul.com/core/release-notes" target="_blank" rel="noopener noreferrer"&gt;Azul release notes&lt;/a&gt;
 show the list of &lt;a href="https://docs.azul.com/core/release-notes#fixed-common-vulnerabilities-and-exposures" target="_blank" rel="noopener noreferrer"&gt;Fixed Common Vulnerabilities and Exposures&lt;/a&gt;
 in this release. There are 11 in total, of which 7 are related to JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/leewyatt.bsky.social/post/3mcz3c5qogk2w" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Lee Wyatt&lt;/strong&gt; has a proposal for a missing component in JavaFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;It is missing a native Switch control &amp;mdash; every major UI framework has one except JavaFX. I&amp;rsquo;ve implemented a SwitchButton with full theme support. Hope to contribute to OpenJFX. &lt;a href="https://github.com/leewyatt/SwitchButtonShowcase" target="_blank" rel="noopener noreferrer"&gt;Check the README for details&lt;/a&gt;
 on why JavaFX needs this.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@jabref/115765522014656502" target="_blank" rel="noopener noreferrer"&gt;Message by JabRef&lt;/a&gt;
: &amp;ldquo;_Thanks to the cool feature of #javafx called the &lt;code&gt;shortcut&lt;/code&gt; modifier, we can now display and handle the keyboard shortcuts in a more OS independent way. On Linux and Windows &lt;code&gt;cmd&lt;/code&gt; key will be replaced with &lt;code&gt;ctrl&lt;/code&gt; automatically and &lt;code&gt;option&lt;/code&gt; key with &lt;code&gt;MARKDOWN_HASH34823136d0dd91d0f5d22db740f7679cMARKDOWN&lt;/code&gt;&lt;em&gt;HASH&lt;/em&gt;. &lt;a href="https://builds.jabref.org/main/" target="_blank" rel="noopener noreferrer"&gt;Grab the latest version here&lt;/a&gt;
.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;And a &lt;a href="https://blog.jabref.org/2025/12/26/JabRef6-0-alpha4/" target="_blank" rel="noopener noreferrer"&gt;blog post announcing an alpha release&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Happy Holidays from the JabRef Team! We have a present for you: We are happy to announce the release of JabRef 6.0 Alpha 4, the next step towards the stable version of JabRef 6.0. This alpha release brings a number of bug fixes, improvements, and new features, as well as some changes under the hood in the machine room of JabRef, to make future improvements easier and JabRef more versatile.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rladstaetter/LogoRRR/releases" target="_blank" rel="noopener noreferrer"&gt;Release v25.2.0 of LogoRRR&lt;/a&gt;
 with several improvements and bump to Java(FX) 25.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/mapton.org/post/3malzb6knvc2p" target="_blank" rel="noopener noreferrer"&gt;Message on Bluesky by mapton.org&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Hello, World! So, after more than three years this account is now back online posting about its development progress among other things. Mapton is powered by Java, JavaFX, and the Netbeans platform among other great open source projects.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/trixon/mapton/releases/tag/v26.01" target="_blank" rel="noopener noreferrer"&gt;Mapton v26.01 is now available&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Let&amp;rsquo;s start this brand new year with a brand new version of Mapton.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/trixon.se/post/3mbmkkym63k2r" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Patrik Karlström&lt;/strong&gt; is having fun&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;As a weekend project I made an earthquake module for Mapton with data feed from usgs. The image shows recent quakes, but you can pretty much filter on any attribute. Colors indicates age in days, circle and lines the magnitude.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://www.reddit.com/r/JavaFX/comments/1q5m017/added_a_few_features_since_my_last_showcase_d/" target="_blank" rel="noopener noreferrer"&gt;video on Reddit of Mable&lt;/a&gt;
, a cross-platform deadline management application, created by &lt;a href="https://github.com/n-xiao" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;@n-xiao&lt;/strong&gt;&lt;/a&gt;
. Sources are &lt;a href="https://github.com/n-xiao/mable" target="_blank" rel="noopener noreferrer"&gt;available on GitHub&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;Mable is an application which allows you to create Countdowns &amp;mdash; it counts down the days till a date you set. When a Countdown approaches or passes its due date, the built-in Heads Up Display will update, showing you how many Countdowns are either overdue, due today or due tomorrow. Mable is not intended to replace your Calendar or To-Do list. Instead, it provides you with a quick overview about how much time you have left for multiple deadlines.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/lidianycs.bsky.social" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Lidiany Cerqueira&lt;/strong&gt;&lt;/a&gt;
 built a tool to detect AI-generated fake references in academic papers. A &lt;a href="https://dev.to/lidianycs/how-i-built-a-tool-to-detect-ai-generated-fake-references-2891" target="_blank" rel="noopener noreferrer"&gt;long and detailed post is available on dev.to&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;Seeing the flawed metadata published in a journal was a wake-up call that led me to build CERCA, an open-source tool designed to assist researchers, reviewers, and editors in quickly verifying the accuracy of references. It was developed to improve trust, transparency, and reliability academic writing.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;She also &lt;a href="https://bsky.app/profile/lidianycs.bsky.social/post/3mdbwylfn5k27" target="_blank" rel="noopener noreferrer"&gt;announced CERCA v1.2.0-alpha&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;New feature: Manual Reference Entry. If it can&amp;rsquo;t read your PDF, paste your reference list. It&amp;rsquo;s now on &lt;a href="https://sourceforge.net/projects/cerca/" target="_blank" rel="noopener noreferrer"&gt;SourceForge&lt;/a&gt;
!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;And in &lt;a href="https://bsky.app/profile/lidianycs.bsky.social/post/3mdfr5scukk2u" target="_blank" rel="noopener noreferrer"&gt;another message from &lt;strong&gt;Lidiany&lt;/strong&gt; on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Started the day chatting with &lt;strong&gt;Frank Delporte&lt;/strong&gt; . We had a great time talking about Java, JavaFX, and CERCA. I highly recommend his &lt;a href="https://www.youtube.com/@FrankDelporte" target="_blank" rel="noopener noreferrer"&gt;YouTube channel&lt;/a&gt;
, if you&amp;rsquo;re interested in Java.&lt;/em&gt;&amp;rdquo; The recording of that interview will soon be available on YouTube in the #JFXInAction series.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/defold.com/post/3mczvnpdups2i" target="_blank" rel="noopener noreferrer"&gt;Defold Engine&lt;/a&gt;
 published their &lt;a href="https://www.youtube.com/watch?v=XCgJ3T-_1oE" target="_blank" rel="noopener noreferrer"&gt;Showreel 2025&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;We&amp;rsquo;ve gathered some of the best #MadeWithDefold games released over the past year in our traditional annual video.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;Defold is a completely free to use game engine for development of console, desktop, mobile and web games created with JavaFX. Check the &lt;a href="https://www.jfx-central.com/showcases/defold" target="_blank" rel="noopener noreferrer"&gt;showcase on JFX Central&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/videos/1JL6zdkM1GU" target="_blank" rel="noopener noreferrer"&gt;Here is an interview with Vlad Protsenko&lt;/a&gt;
, one of the developers of Defold and the creator of &lt;a href="https://www.jfx-central.com/tools/cljfx" target="_blank" rel="noopener noreferrer"&gt;Cljfx, a declarative, functional and extensible wrapper of JavaFX for Clojure&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/markjkoch.bsky.social/post/3md5evj5yrc2z" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mark J. Koch&lt;/strong&gt; shares a screenshot on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;ve made a lot of progress on my neuromancerpc restoration and it&amp;rsquo;s largely playable (let&amp;rsquo;s call it alpha), but I&amp;rsquo;m not done reverse engineering the original game&amp;rsquo;s data files&amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A lot of library updates by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; this month!
&lt;ul&gt;
&lt;li&gt;About FlexGanttFX: &amp;ldquo;&lt;em&gt;I finally managed to create a jdeploy installer for FlexGanttFX. You can find it on the updated &lt;a href="https://www.flexganttfx.com/" target="_blank" rel="noopener noreferrer"&gt;FlexGanttFX.com website&lt;/a&gt;
 under &amp;lsquo;Downloads/Demo&amp;rsquo;. The demo shows how this custom JavaFX component manages to draw thousands and thousands of activities below a timeline.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;A new FlexGanttFX demo app installer is &lt;a href="https://www.jdeploy.com/~flexganttfxsampler" target="_blank" rel="noopener noreferrer"&gt;available online now&lt;/a&gt;
&amp;hellip; These are basically interactive unit tests for various features available by this control. If you are doing planning and scheduling apps, this control is for you.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mal46a7y522e" target="_blank" rel="noopener noreferrer"&gt;This screenshot of a FlexGanttFX demo&lt;/a&gt;
 shows how it can be used to visualise a project plan imported from MSProject.&lt;/li&gt;
&lt;li&gt;About FxmlKit: it&amp;rsquo;s a modern JavaFX FXML framework with hot reload, zero-configuration loading, and optional dependency injection. &lt;a href="https://bsky.app/profile/leewyatt.bsky.social/post/3maoeqzsizs2h" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Lee Wyatt&lt;/strong&gt; shared a video on Bluesky&lt;/a&gt;
 and &lt;a href="https://www.youtube.com/watch?v=FwZNcqjZ1kY" target="_blank" rel="noopener noreferrer"&gt;on YouTube&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Implementing FXML and CSS hot reloading in FxmlKit. Edit, save, and see the results immediately. No more rebuild-restart loops!&lt;/em&gt; &amp;quot; And &lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3manngcfpf222" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; announced v1.5&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3md46lrvfss2p" target="_blank" rel="noopener noreferrer"&gt;Release 3.4.2 of PDFViewFX is out now&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;The visual properties of the view can now be styled via CSS and not just via API.&lt;/em&gt; &amp;quot; &lt;a href="https://github.com/dlsc-software-consulting-gmbh/PDFViewFX" target="_blank" rel="noopener noreferrer"&gt;More info on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3md45wshhz22p" target="_blank" rel="noopener noreferrer"&gt;Release 3.8.3 of GemsFX is out&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;It contains a couple of bug fixes and new capabilities for the SessionManager (used to persist observable values into the preferences store).&lt;/em&gt; &amp;quot; &lt;a href="https://github.com/dlsc-software-consulting-gmbh/GemsFX" target="_blank" rel="noopener noreferrer"&gt;More info on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mdfwzfcg6c2f" target="_blank" rel="noopener noreferrer"&gt;Release 1.3.0 of #KeyboardFX is out&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;This is a maintenance release used to replace javax.xml with jakarta.xml.&lt;/em&gt; &amp;quot; &lt;a href="https://github.com/dlsc-software-consulting-gmbh/KeyboardFX" target="_blank" rel="noopener noreferrer"&gt;More info on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Published on Foojay: &lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-6/"&gt;Video series &amp;ldquo;JavaFX In Action&amp;rdquo;, Part 6&lt;/a&gt;
 with &lt;strong&gt;Vlad Protsenko&lt;/strong&gt; (Clojure), &lt;strong&gt;Matt Coley&lt;/strong&gt; (Recaf), &lt;strong&gt;Craig Raw&lt;/strong&gt; (Sparrow), and &lt;strong&gt;Florian Enner&lt;/strong&gt; (3D Robot Visualization).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Helal Anwar&lt;/strong&gt; shared a new video: &lt;a href="https://www.youtube.com/watch?v=ADb44wswVs0" target="_blank" rel="noopener noreferrer"&gt;Devlog 4| Student management app (Part 4)&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; continues his #JavaOnSingleBoardComputers and &lt;a href="https://www.youtube.com/watch?v=X_t8DiUWBUo" target="_blank" rel="noopener noreferrer"&gt;published a video&lt;/a&gt;
 and &lt;a href="https://webtechie.be/post/2026-01-12-first-test-orangepi-java/" target="_blank" rel="noopener noreferrer"&gt;blog with more info&lt;/a&gt;
 showing Java and JavaFX on an OrangePi 5 Ultra with ARM processor. As expected, JavaFX doesn&amp;rsquo;t work on an OrangePi RV2 with RISC-V processor. Challenge for 2026: Who can build JavaFX on RISC-V?&lt;/li&gt;
&lt;li&gt;A video by &lt;strong&gt;Binary Academy&lt;/strong&gt; : &lt;a href="https://www.youtube.com/watch?v=ISFUT9Aax8U" target="_blank" rel="noopener noreferrer"&gt;JavaFX 3D Solar System Full Animation Tutorial | Planets Orbiting Around the Sun&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; updated his blog series from 2022 on Foojay.io &lt;a href="https://foojay.social/@foojay/115818063541453234" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Project Panama for Newbies&amp;rdquo;&lt;/a&gt;
. In &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-4/"&gt;Part 4 you can read more&lt;/a&gt;
 about &amp;ldquo;&lt;em&gt;Imagine C code capable of performing a computation and after its completion the C code will notify Java code to perform updates to JavaFX UI components&amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Post by &lt;strong&gt;iifx.dev&lt;/strong&gt; : &lt;a href="https://iifx.dev/en/articles/460354306/from-modules-to-databases-solving-hibernate-visibility-issues-in-javafx-and-maven" target="_blank" rel="noopener noreferrer"&gt;From Modules to Databases: Solving Hibernate Visibility Issues in JavaFX and Maven&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Integrating Jakarta Persistence (JPA)&amp;mdash;specifically Hibernate&amp;mdash;into a modular (JPMS) JavaFX application can be a bit like solving a puzzle. Because the Java Module System is very strict about visibility, getting Hibernate to talk to your private entities requires a few specific &amp;lsquo;handshakes.&amp;rsquo; Here is a guide to getting this working smoothly.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Video tutorial by &lt;strong&gt;Hacktrickz&lt;/strong&gt; : &amp;ldquo;&lt;a href="https://www.youtube.com/watch?v=CtKEM_giUIw" target="_blank" rel="noopener noreferrer"&gt;31.1: JavaFX Introduction, Setup &amp;amp; Application Structure| [Abdul Bari] Java course&lt;/a&gt;
&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Video tutorial by &lt;strong&gt;Kawsar Technologies&lt;/strong&gt; : &amp;ldquo;&lt;a href="https://www.youtube.com/watch?v=ghRx5TcR5W4" target="_blank" rel="noopener noreferrer"&gt;Part 13 | User Management System in JavaFX &amp;amp; MySQL | Fetch Assigned Roles &amp;amp; Display Them in Table&lt;/a&gt;
&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3mal5vjvgpk2n" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The online JavaFX &amp;lsquo;Ensemble&amp;rsquo; demos are pretty cool. Wished more library developers would leverage it. Check &lt;a href="https://www.jfx-ensemble.com" target="_blank" rel="noopener noreferrer"&gt;jfx-ensemble.com&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/mattcoley.bsky.social/post/3mbvlnisiys2z" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Matt Coley&lt;/strong&gt; is asking for feedback&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Any JavaFX people experience removed nodes being stuck around in memory after they&amp;rsquo;ve been removed from the scene graph? If I have a node that has a ~500 MB byte array, and then I remove it, I should be able to expect that to be freeable right?&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Found &lt;a href="https://news.ycombinator.com/item?id=43860582" target="_blank" rel="noopener noreferrer"&gt;on Hacker News by &lt;strong&gt;ezst&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Call me an idiot, but I still gladly take Swing and javafx over JS and monstrosities like react. The state of Qt is also very good. Web won because the distribution model is easier on the user, and because managers thought UX designers would be making whole apps now, saving on rates. Not because it&amp;rsquo;s technically superior.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;In March 2024, ArcGIS announced that they were deprecating ArcGIS Maps SDK for Java. In a new &lt;a href="https://www.esri.com/arcgis-blog/products/sdk-java/developers/using-arcgis-maps-sdk-for-qt-in-a-javafx-based-application" target="_blank" rel="noopener noreferrer"&gt;blog post by &lt;strong&gt;Lucas Danzinger&lt;/strong&gt;&lt;/a&gt;
 they explore a technique of using ArcGIS Maps SDK for Qt as a map control in a JavaFX based application: &amp;ldquo;&lt;em&gt;Through the above techniques, we&amp;rsquo;ve shown that it is possible to display a Qt MapView in Java, as well as to have two-way communication between Java and Qt via JNI. While this example is by no means a silver bullet, we hope that it might be an inspiration on how you can continue to move forward with your JavaFX apps using the latest ArcGIS technology.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Interesting &lt;a href="https://github.com/webfx-project/webfx/discussions/59" target="_blank" rel="noopener noreferrer"&gt;discussion on GitHub&lt;/a&gt;
: Can &lt;a href="https://cheerpj.com/" target="_blank" rel="noopener noreferrer"&gt;CheerpJ&lt;/a&gt;
 be integrated in &lt;a href="https://github.com/webfx-project/webfx" target="_blank" rel="noopener noreferrer"&gt;WebFX&lt;/a&gt;
?
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;CheerpJ is a JVM and a distribution of OpenJDK for the browser in WebAssembly and JavaScript. Now supporting Java 8, Java 11 and Java 17 (preview), with Java 21+ coming in 2026.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;WebFX is a JavaFX application transpiler powered by GWT. It can transpile a JavaFX application into a traditional self-contained pure JavaScript web app (with no plugin or server required for its execution in the browser).&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/fxmlkit" target="_blank" rel="noopener noreferrer"&gt;FxmlKit&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A modern JavaFX FXML framework that eliminates boilerplate code, provides FXML/CSS hot reload, and optional progressive dependency injection support.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Tools: &lt;a href="https://www.jfx-central.com/tools/fxtools" target="_blank" rel="noopener noreferrer"&gt;FXTools&lt;/a&gt;
 created by &lt;strong&gt;Lee Wyatt&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;A practical desktop toolkit for JavaFX developers, providing image processing, color picking, SVG path extraction, font preview, and more.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The links of December got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-december-2025/"&gt;published on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>One Java community. Many countries. One place to meet: JCON EUROPE</title><link>https://foojayio.github.io/website/today/one-java-community-many-countries-one-place-to-meet-jcon-europe/</link><pubDate>Fri, 30 Jan 2026 14:50:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/one-java-community-many-countries-one-place-to-meet-jcon-europe/</guid><description>&lt;p&gt;At &lt;a href="https://2026.europe.jcon.one/" target="_blank" rel="noopener noreferrer"&gt;JCON EUROPE&lt;/a&gt;
, developers, speakers, and contributors from across the globe come together to exchange ideas, share experiences, and connect around Java.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/one-java-community-many-countries-one-place-to-meet-jcon-europe/54518501956_8d8431b49d_o-700x403.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;What makes our Java community special isn&amp;rsquo;t just new frameworks, AI, or shiny tooling &amp;mdash; it&amp;rsquo;s the people.&lt;/p&gt;
&lt;p&gt;JCON EUROPE 2025 brought together a truly international community: participants from 60+ countries and speakers from 40+ countries. Different backgrounds, cultures, and perspectives &amp;mdash; united by a shared passion for Java.&lt;/p&gt;</description></item><item><title>Abstracting Data Access in Java With the DAO Pattern</title><link>https://foojayio.github.io/website/today/abstracting-data-access-in-java-with-the-dao-pattern/</link><pubDate>Thu, 29 Jan 2026 16:37:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/abstracting-data-access-in-java-with-the-dao-pattern/</guid><description>&lt;p&gt;The Data Access Object (DAO) pattern is a structural pattern that isolates your application&amp;rsquo;s business logic from persistence operations. By using an abstract API, the DAO pattern hides all the complexity of performing CRUD operations against your database&amp;mdash;whether that&amp;rsquo;s MongoDB, a relational database, or any other storage mechanism.&lt;/p&gt;
&lt;p&gt;This separation is crucial: Your business logic shouldn&amp;rsquo;t care whether you&amp;rsquo;re using MongoDB&amp;rsquo;s flexible document model or a rigid SQL schema. The DAO pattern ensures both layers can evolve independently.&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>Testing Emails with Testcontainers and Mailpit</title><link>https://foojayio.github.io/website/today/testing-emails-with-testcontainers-and-mailpit/</link><pubDate>Thu, 29 Jan 2026 08:38:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/testing-emails-with-testcontainers-and-mailpit/</guid><description>&lt;p&gt;Testing email functionality is often painful. SMTP servers are external, tests become slow or flaky, and local setups differ from CI environments. As a result, many teams either mock the mail sender or skip proper email tests completely.&lt;/p&gt;
&lt;p&gt;Both approaches are unsatisfying. Mocking does not test real behavior, and shared SMTP servers introduce hidden dependencies. What we really want is a real SMTP server that runs locally and in CI, is fully isolated per test run, and allows us to inspect sent emails easily.&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>First Test of Java on the Orange Pi (ARM and RISC-V)</title><link>https://foojayio.github.io/website/today/first-test-of-java-on-the-orange-pi-arm-and-risc-v/</link><pubDate>Wed, 28 Jan 2026 06:52:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/first-test-of-java-on-the-orange-pi-arm-and-risc-v/</guid><description>&lt;p&gt;As part of my 2026 learning goals around Java on Single Board Computers and RISC-V (see &lt;a href="https://webtechie.be/post/2026-01-07-x86-arm-riscv/" target="_blank" rel="noopener noreferrer"&gt;this post about x86 versus ARM versus RISC-V&lt;/a&gt;
), I&amp;rsquo;ve been asking various suppliers to send me evaluation boards. After testing the &lt;a href="https://webtechie.be/post/2025-11-25-first-test-lattepanda-iota-with-ubuntu-and-java/" target="_blank" rel="noopener noreferrer"&gt;LattePanda IOTA&lt;/a&gt;
, I received two boards from OrangePi to evaluate: the OrangePi 5 Ultra (ARM) and the OrangePi RV2 (RISC-V).&lt;/p&gt;
&lt;p&gt;I got both boards for free, but what I write here and show in the video is not controlled by OrangePi or any other supplier.&lt;/p&gt;</description></item><item><title>Introduction to Behavior Driving Development with Java and MongoDB</title><link>https://foojayio.github.io/website/today/introduction-to-behavior-driving-development-with-java-and-mongodb/</link><pubDate>Tue, 27 Jan 2026 16:35:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-to-behavior-driving-development-with-java-and-mongodb/</guid><description>&lt;p&gt;When we face software development, the biggest mistake is about delivering what the client wants. It sounds like a cliché, but after decades, we are still facing this problem. One good way to solve it is to start the test focusing on what the business needs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Behavior-driven development&lt;/strong&gt; (BDD) is a software development methodology where the focus is on behavior and the domain terminology or ubiquitous language. It utilizes a shared, natural language to define and test software behaviors from the user&amp;rsquo;s perspective. BDD builds upon test-driven development (TDD) by focusing on scenarios that are relevant to the business. These scenarios are written as plain-language specifications that can be automated as tests, simultaneously serving as living documentation.&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>What’s New in the January 2026 Payara Platform Release?</title><link>https://foojayio.github.io/website/today/whats-new-in-the-january-2026-payara-platform-release/</link><pubDate>Mon, 26 Jan 2026 14:37:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/whats-new-in-the-january-2026-payara-platform-release/</guid><description>&lt;p&gt;As we begin 2026, we&amp;rsquo;re pleased to announce new releases across all Payara Platform editions this January: &lt;a href="https://payara.fish/downloads/payara-platform-community-edition/" title="Payara Platform Community 7.2026.1" target="_blank" rel="noopener noreferrer"&gt;Payara Platform Community 7.2026.1&lt;/a&gt;
, &lt;a href="https://payara.fish/payara-enterprise-downloads/" title="Payara Platform Enterprise 6.34.0 and 5.83.0" target="_blank" rel="noopener noreferrer"&gt;Payara Platform Enterprise 6.34.0 and 5.83.0&lt;/a&gt;
. These releases deliver important security fixes, address deployment and administration issues as well as refreshing multiple component versions across the platform.&lt;/p&gt;
&lt;h2 id="h2-0-security-priority"&gt;Security Priority&lt;/h2&gt;
&lt;p&gt;This month&amp;rsquo;s releases address two security vulnerabilities. First, we&amp;rsquo;ve resolved CVE-2020-5258, a cross-site scripting vulnerability in the dojo.js library (versions 6.0.2 and earlier). This fix applies to Payara Platform Community 7.2026.1 and Payara Platform Enterprise 6.34.0, with dojo.js now upgraded to version 6.0.3.&lt;/p&gt;</description></item><item><title>Webinar: "Moving Applications From JDK 21 to JDK 25: What You Need to Know"</title><link>https://foojayio.github.io/website/today/webinar-moving-applications-from-jdk-21-to-jdk-25-what-you-need-to-know/</link><pubDate>Mon, 26 Jan 2026 14:14:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/webinar-moving-applications-from-jdk-21-to-jdk-25-what-you-need-to-know/</guid><description>&lt;p&gt;JDK 25 has arrived as the latest long-term support (LTS) release for Java, bringing performance improvements and enhanced stability for modern applications. If your organization is running JDK 21, now is the time to start planning your migration path.&lt;/p&gt;
&lt;h2 id="h2-0-why-upgrade"&gt;Why Upgrade?&lt;/h2&gt;
&lt;p&gt;Each new LTS release represents years of refinements, optimizations, and new capabilities. JDK 25 builds on the foundation of JDK 21 while delivering the reliability that enterprise applications demand. But understanding what&amp;rsquo;s changed&amp;mdash;and what might break&amp;mdash;is essential for a smooth transition.&lt;/p&gt;</description></item><item><title>Foojay Podcast #89: Quarkus and Agentic Commerce</title><link>https://foojayio.github.io/website/today/foojay-podcast-89/</link><pubDate>Mon, 26 Jan 2026 06:34:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-89/</guid><description>&lt;p&gt;For this episode of the Foojay Podcast, we invited the author of three recent posts published on Foojay. And he brought a colleague to get even more expert knowledge in this podcast! We talk about Quarkus, how it is &amp;ldquo;cloud-native&amp;rdquo;, how it compares to other frameworks, the advantages for developers and managers, etc. We also discussed nano businesses and how they can serve as a model for paying creators of digital content, thanks to x402 and ERC-8004.&lt;/p&gt;</description></item><item><title>Bring AI into your Jakarta EE apps with LangChain4J-CDI</title><link>https://foojayio.github.io/website/today/bring-ai-into-your-jakarta-ee-apps-with-langchain4j-cdi/</link><pubDate>Sat, 24 Jan 2026 17:20:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/bring-ai-into-your-jakarta-ee-apps-with-langchain4j-cdi/</guid><description>&lt;p&gt;&lt;strong&gt;Goal&lt;/strong&gt; : This article will demonstrate how to add AI features to a Jakarta EE / MicroProfile application using &lt;strong&gt;LangChain4J‑CDI&lt;/strong&gt;, with simple to implement examples that runs on Payara, WildFly, Open Liberty, Helidon, Quarkus or any CDI 4.x compatible runtime.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is an updated article to the one published on the &lt;a href="https://javapro.io/2025/10/28/04-2025-java-25-special-edition/" target="_blank" rel="noopener noreferrer"&gt;JAVAPRO&amp;rsquo;s magazine - &amp;ldquo;04-2025 | Java 25 - Special Edition&amp;rdquo;&lt;/a&gt;
. Since the release of LangChain4J-CDI version 1.0.0, there&amp;rsquo;s been minor changes, but the fundamental architecture and usage of the library is the same.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Security Doesn’t Start at Liftoff</title><link>https://foojayio.github.io/website/today/security-doesnt-start-at-liftoff/</link><pubDate>Fri, 23 Jan 2026 10:22:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/security-doesnt-start-at-liftoff/</guid><description>&lt;p&gt;This is a follow-on to the article &lt;a href="https://foojayio.github.io/website/today/the-real-mechanics-of-vulnerabilities-in-an-upstream-downstream-topsy-turvy-eol-world/"&gt;The Real Mechanics of Vulnerabilities in an Upstream/Downstream, Topsy-Turvy EOL World&lt;/a&gt;
.&lt;/p&gt;
&lt;h4 id="what-youll-learn-in-this-article"&gt;What you&amp;rsquo;ll learn in this article:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Security Timeline Inversion&lt;/strong&gt;: CVE disclosure is no longer the true start of the security timeline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Outcomes&lt;/strong&gt;: Routine maintenance decisions, not reaction speed or tooling, determine security outcomes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flawed Indicators&lt;/strong&gt;: CVE scores, scanners, and compliance deadlines are not effective early-warning systems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Distortion&lt;/strong&gt;: Embedded, forked, and end-of-life components obscure vulnerability visibility and responsibility.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your Mission&lt;/strong&gt;: Governance and lifecycle changes are necessary to avoid being structurally late to &amp;ldquo;silent&amp;rdquo; vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-are-you-sitting-comfortably"&gt;Are you sitting comfortably?&lt;/h2&gt;
&lt;p&gt;In February 2025, Apache Tomcat shipped a set of routine point releases. They arrived without urgency, without commentary, and without the kind of noise that can accompany significant security incidents.&lt;/p&gt;</description></item><item><title>Java on Single Board Computers: x86 vs ARM vs RISC-V</title><link>https://foojayio.github.io/website/today/java-on-single-board-computers-x86-vs-arm-vs-risc-v/</link><pubDate>Fri, 23 Jan 2026 06:17:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-single-board-computers-x86-vs-arm-vs-risc-v/</guid><description>&lt;p&gt;Ever since I started my #JavaOnRaspberryPi journey in 2019, which resulted in my book &amp;ldquo;&lt;a href="https://webtechie.be/books/" target="_blank" rel="noopener noreferrer"&gt;Getting Started with Java on the Raspberry Pi&lt;/a&gt;
&amp;rdquo;, I&amp;rsquo;ve been fascinated with these tiny, inexpensive computers. For 2026, I&amp;rsquo;ve set one of my goals to experiment with Java on various Single-Board Computers (SBC), going beyond my &amp;ldquo;Raspberry Pi comfort zone.&amp;rdquo; The market is flooded with SBCs ranging from budget boards (tens of euros) to powerhouses (hundreds of euros). One of the reasons of this price range is the difference between the processors they use. Raspberry Pi uses an ARM processor, but RISC-V is gaining momentum, while Intel maintains its presence. So before I start experimenting, now is the perfect time to compare these three processor families and understand their differences.&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>OpenJDK January 2026 Critical Patch Update and Patch Set Update Released</title><link>https://foojayio.github.io/website/today/openjdk-january-2026-critical-patch-update-and-patch-set-update-released/</link><pubDate>Wed, 21 Jan 2026 08:32:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/openjdk-january-2026-critical-patch-update-and-patch-set-update-released/</guid><description>&lt;p&gt;The January 2026 OpenJDK quarterly updates are now (or will soon be) available from various OpenJDK distributors. This quarterly release brings important security fixes and updates to all currently supported Java versions.&lt;/p&gt;
&lt;h2 id="h2-0-the-quarterly-update-cycle"&gt;The Quarterly Update Cycle&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Every three months&lt;/strong&gt; (in January, April, July, and October), the OpenJDK project releases &lt;strong&gt;security updates, bug fixes, and improvements&lt;/strong&gt; for &lt;strong&gt;all supported Java versions&lt;/strong&gt;. This predictable schedule helps organizations plan their Java updates and maintain secure, stable production environments.&lt;/p&gt;</description></item><item><title>Get high performance Java applications with IBM Semeru Runtimes</title><link>https://foojayio.github.io/website/today/high-performance-java-semeru/</link><pubDate>Tue, 20 Jan 2026 13:53:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/high-performance-java-semeru/</guid><description>&lt;p&gt;Originally published at &lt;a href="https://developer.ibm.com/articles/j-java-performance/" title="developer.ibm.com" target="_blank" rel="noopener noreferrer"&gt;developer.ibm.com&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By Vijay Sundaresan, Mark Stoodley, Marius Pirvu, Grace Robinson, Laura Cowen&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Explore real‑world benchmarks, tuning options, and best‑practice strategies to optimize latency, throughput, and memory on modern hardware with Semeru Runtimes, an OpenJDK distribution.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;When running applications in the cloud, performance matters. An application that handles more requests with less CPU and memory is cheaper to run. Java and its associated frameworks are widely appreciated for stability, throughput performance, and portability but not typically recognized for starting quickly, ramping up quickly, or consuming resources frugally. These limitations can pose significant challenges, especially when migrating Java applications to the cloud or developing new cloud-native Java solutions where more resources immediately make deployments more expensive.&lt;/p&gt;</description></item><item><title>Command completion (..) in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/command-completion-intellij-idea/</link><pubDate>Tue, 20 Jan 2026 07:31:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/command-completion-intellij-idea/</guid><description>&lt;p&gt;How many shortcuts can you remember? Three? Five? More? I try to learn as many as I can and still forget some of them&amp;hellip;&lt;/p&gt;
&lt;p&gt;What if you could unlock IntelliJ IDEA features, without having to remember shortcuts? You can still use shortcuts if you want. But you don&amp;rsquo;t &lt;em&gt;&lt;strong&gt;have&lt;/strong&gt;&lt;/em&gt;to.&lt;/p&gt;
&lt;p&gt;Command completion (..) is a new feature in IntelliJ IDEA that lets you discover and execute IDE actions right from your editor.&lt;/p&gt;</description></item><item><title>SonarQube AI Code Assurance &amp; MCP: Auto-Fix Java (Part 4)</title><link>https://foojayio.github.io/website/today/sonarqube-part-4-ai-code-assurance/</link><pubDate>Mon, 19 Jan 2026 15:27:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/sonarqube-part-4-ai-code-assurance/</guid><description>&lt;p&gt;Hola Java developers! 👋&lt;/p&gt;
&lt;p&gt;Welcome to the &lt;strong&gt;Grand Finale&lt;/strong&gt; of our series.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-1/"&gt;Part 1&lt;/a&gt;
&lt;/strong&gt;: We turned your IDE into a fortress.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-2/"&gt;Part 2&lt;/a&gt;
&lt;/strong&gt;: We synced the team with Connected Mode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://foojayio.github.io/website/today/avoid-the-trojan-horse-in-your-pom-xml-sonarqube-advanced-security-part-3/"&gt;Part 3&lt;/a&gt;
&lt;/strong&gt;: We secured the Supply Chain (dependencies).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We have become excellent at &lt;em&gt;finding&lt;/em&gt; bugs. But let&amp;rsquo;s be honest: Finding them is only half the battle. &lt;strong&gt;Who is going to fix them?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We are drowning in a backlog of &amp;ldquo;Technical Debt,&amp;rdquo; &amp;ldquo;Code Smells,&amp;rdquo; and &amp;ldquo;Security Hotspots.&amp;rdquo; You don&amp;rsquo;t have enough hours in the day to refactor every complex method or research the perfect fix for a regex denial-of-service vulnerability.&lt;/p&gt;</description></item><item><title>foojay – Documentation as Code with AsciiDoctor, GitLab CI, and GitLab Pages</title><link>https://foojayio.github.io/website/today/documentation-as-code-with-asciidoctor-gitlab-ci-and-gitlab-pages/</link><pubDate>Mon, 19 Jan 2026 06:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/documentation-as-code-with-asciidoctor-gitlab-ci-and-gitlab-pages/</guid><description>&lt;p&gt;Writing documentation should be as low-key as possible to remove the pain from the process. One way to achieve this is through Documentation as Code. Setting it up and configuring it may take some time, but once it&amp;rsquo;s done, you can focus on creating the content itself.&lt;/p&gt;
&lt;p&gt;As a developer, I appreciate good documentation, but writing it myself is often cumbersome and feels unrewarding &amp;mdash; especially when no one reads or uses it. The reason: documentation spread across multiple tools, with no clear way to find it.&lt;/p&gt;</description></item><item><title>The FFM API: How OpenJDK Changed the Game for Native Interactions (And Made Pi4J Better!)</title><link>https://foojayio.github.io/website/today/the-ffm-api-how-openjdk-changed-the-game-for-native-interactions-and-made-pi4j-better/</link><pubDate>Fri, 16 Jan 2026 08:18:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-ffm-api-how-openjdk-changed-the-game-for-native-interactions-and-made-pi4j-better/</guid><description>&lt;p&gt;The &lt;a href="https://www.pi4j.com/" target="_blank" rel="noopener noreferrer"&gt;Pi4J project&lt;/a&gt;
 is a Java library that allows you to control the GPIO pins and electronic components connected to a Raspberry Pi with pure Java code. It removes the complexity of using native libraries and the &lt;a href="https://www.baeldung.com/jni" target="_blank" rel="noopener noreferrer"&gt;Java Native Interface (JNI)&lt;/a&gt;
, allowing you to focus on your application logic.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;This is a crosspost from the article I contributed to &lt;a href="https://www.javaadvent.com/2025/12/ffm-api-for-java-on-raspberry-pi.html" target="_blank" rel="noopener noreferrer"&gt;this year&amp;rsquo;s JVM Advent&lt;/a&gt;
.&lt;/strong&gt;&lt;/em&gt;
&lt;img src="https://foojayio.github.io/website/today/the-ffm-api-how-openjdk-changed-the-game-for-native-interactions-and-made-pi4j-better/pi4j-overview-1024x427.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In the Java Advent of 2020, I published &amp;ldquo;&lt;a href="https://www.javaadvent.com/2020/12/light-up-your-christmas-lights-with-java-and-raspberry-pi.html" target="_blank" rel="noopener noreferrer"&gt;Light up your Christmas lights with Java and Raspberry Pi&lt;/a&gt;
&amp;rdquo;, using Java 11 and Pi4J V1.2. Wow, things have changed a lot: this article uses Java 25 and a snapshot of the soon-to-be-released Pi4J V4!&lt;/p&gt;</description></item><item><title>The Ultimate 10 Years Java Garbage Collection Guide (2016–2026) - Choosing the Right GC for Every Workload</title><link>https://foojayio.github.io/website/today/the-ultimate-10-years-java-garbage-collection-guide-2016-2026-choosing-the-right-gc-for-every-workload/</link><pubDate>Thu, 15 Jan 2026 10:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-ultimate-10-years-java-garbage-collection-guide-2016-2026-choosing-the-right-gc-for-every-workload/</guid><description>&lt;p&gt;Memory management remains the primary factor for application performance in enterprise Java environments. Between 2017 and 2025, the ecosystem shifted from manual tuning to architectural selection. Industry data suggests that 60 percent of Java performance issues and 45 percent of production incidents in distributed systems stem from suboptimal Garbage Collection (GC) behavior. This guide provides a strategic framework for selecting collectors based on workload characteristics. It covers the transition from legacy collectors to Generational ZGC, analyzing trade-offs regarding throughput, latency, and hardware constraints with mathematical precision.&lt;/p&gt;</description></item><item><title>Pointer Arithmetic in Modern Java</title><link>https://foojayio.github.io/website/today/pointer-arithmetic-in-modern-java/</link><pubDate>Thu, 15 Jan 2026 09:00:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/pointer-arithmetic-in-modern-java/</guid><description>&lt;h2 id="_introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In this post, we dive into a more advanced topic: pointer arithmetic in Java. With the introduction of the Foreign Function &amp;amp; Memory API (Panama), we can interact with native memory.&lt;/p&gt;
&lt;p&gt;Usually, when we work with off-heap memory, we use &lt;code&gt;MemorySegment&lt;/code&gt; instances to ensure safety. However, creating these objects can sometimes add overhead. In this post, we will look at how to access native memory using addresses. The goal is to create fewer objects that are not strictly needed and only add GC pressure.&lt;/p&gt;</description></item><item><title>Why is my Talk selected? Reflections from a Program Committee Reviewer</title><link>https://foojayio.github.io/website/today/why-is-my-talk-selected-reflections-from-a-program-committee-reviewer/</link><pubDate>Wed, 14 Jan 2026 15:14:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-is-my-talk-selected-reflections-from-a-program-committee-reviewer/</guid><description>&lt;p&gt;If you are like me, get the adrenaline rush of getting up on stage and can&amp;rsquo;t wait to share things that you experienced and learned, then submitting talks to conferences and local meetups excites you.&lt;/p&gt;
&lt;p&gt;But as much as you are proud and happy when you are accepted to present, normally there is a lot of work before that for the reviewers and organizers to find the right presentation that resonates with the attendees and fits the whole program.&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>Flaky Tests: a journey to beat them all</title><link>https://foojayio.github.io/website/today/flaky-tests-a-journey-to-beat-them-all/</link><pubDate>Tue, 13 Jan 2026 13:00:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/flaky-tests-a-journey-to-beat-them-all/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Sleep is not a synchronization primitive.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Every test engineer, eventually&lt;/p&gt;
&lt;h2 id="h2-0-what-s-a-flaky-test"&gt;What&amp;rsquo;s a flaky test?&lt;/h2&gt;
&lt;p&gt;A &lt;strong&gt;flaky test&lt;/strong&gt; is a test that sometimes passes and sometimes fails without any code changes. They&amp;rsquo;re the by‑product of non‑determinism: timing, concurrency, eventual consistency, network hiccups, clock drift, resource contention, and (our favorite) &lt;strong&gt;tests leaking state across runs&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://kestra.io" target="_blank" rel="noopener noreferrer"&gt;Kestra&lt;/a&gt;
 is an open-source declarative orchestration platform designed to run, coordinate, and monitor large-scale, event-driven workflows. It is built to handle parallelism, asynchronous execution, and distributed systems at scale, exactly the kind of environment where determinism is hard and flaky tests tend to emerge.&lt;/p&gt;</description></item><item><title>BoxLang Dynamic JVM Language Release 1.9.0</title><link>https://foojayio.github.io/website/today/boxlang-1-9-0-released-production-ready-stability-and-enterprise-grade-reliability/</link><pubDate>Mon, 12 Jan 2026 11:16:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-9-0-released-production-ready-stability-and-enterprise-grade-reliability/</guid><description>&lt;p&gt;&lt;strong&gt;Houston, Texas &amp;ndash; January 2025&lt;/strong&gt; &amp;ndash; Ortus Solutions, a leading innovator in professional open-source development, today announced the release of BoxLang 1.9.0, a major stability and compatibility release focused on production-readiness. This release resolves over 50 critical bugs and introduces significant enhancements to datasource management, context lifecycle handling, and web form processing for mission-critical enterprise applications.&lt;/p&gt;
&lt;h2 id="h2-0-production-ready-enhancements"&gt;Production-Ready Enhancements&lt;/h2&gt;
&lt;p&gt;BoxLang 1.9.0 delivers critical improvements based on real-world client migrations and production deployments:&lt;/p&gt;</description></item><item><title>How to choose your LLM without ruining your Java code</title><link>https://foojayio.github.io/website/today/dev-guide-how-to-choose-your-llm/</link><pubDate>Fri, 09 Jan 2026 19:49:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/dev-guide-how-to-choose-your-llm/</guid><description>&lt;p&gt;Let&amp;rsquo;s be honest: when we try a new AI model, the first thing we look at is if the code compiles and does what we asked. But if you have been in the Java world for a while, you know that &lt;strong&gt;&amp;ldquo;working&amp;rdquo; is just level 1&lt;/strong&gt;. The real final boss is reliability, maintenance and security. 💀&lt;/p&gt;
&lt;p&gt;I have been analyzing the latest &lt;a href="https://www.sonarsource.com/the-coding-personalities-of-leading-llms/leaderboard/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sonar Leaderboard&lt;/strong&gt;&lt;/a&gt;
 (with fresh data from late 2025/2026 on 4,444 tasks) and there are big surprises.
&lt;img src="https://foojayio.github.io/website/today/dev-guide-how-to-choose-your-llm/Screenshot-2026-01-09-at-19.51.02-1024x528.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Not a Lucid Web3 Dream Anymore: x402, ERC-8004, A2A, and The Next Wave of AI Commerce</title><link>https://foojayio.github.io/website/today/not-a-lucid-web3-dream-anymore-x402-erc-8004-a2a-and-the-next-wave-of-ai-commerce/</link><pubDate>Fri, 09 Jan 2026 16:05:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/not-a-lucid-web3-dream-anymore-x402-erc-8004-a2a-and-the-next-wave-of-ai-commerce/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/not-a-lucid-web3-dream-anymore-x402-erc-8004-a2a-and-the-next-wave-of-ai-commerce/daydreams-scaled.jpg" alt="DayDreams" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This article is for technically savvy readers, especially developers, protocol designers, and product teams working with AI agents, APIs, or crypto rails, who want a clear view of how these areas connect.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;It explains how x402, ERC-8004, and agent discovery layers turn APIs and agents into small usage-based businesses, and what that means for real systems over the next 1&amp;ndash;3 years.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3 id="h3-0-vocabulary-for-this-article"&gt;Vocabulary for this article&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;In this article, I use the term &lt;em&gt;micro business&lt;/em&gt; for a very small overall business, and &lt;em&gt;nano business&lt;/em&gt; for a single x402-priced endpoint or agent that earns on its own from per-call payments in stablecoins.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AP2 (Agent Payment Protocol):&lt;/strong&gt; AP2 defines how agents pay each other. It standardizes how a service quotes a price, how payment is confirmed, and how both sides record what was bought, so payments fit directly into automated agent workflows. In practice, it is a protocol that lets one machine pay another machine for work, without a human in the loop.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A2A (Agent-to-Agent communication):&lt;/strong&gt; A2A covers how agents talk, pass context, and coordinate work. It lets agents call each other, exchange structured messages, and chain tasks instead of acting as isolated scripts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;x402:&lt;/strong&gt; x402 is an HTTP-based payment protocol for APIs. A server responds with status &lt;code&gt;402 Payment Required&lt;/code&gt;, the price, and a payment route, and the client pays by using stablecoins on-chain and then retries the request to get the result.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ERC-8004 (8004):&lt;/strong&gt; ERC-8004 standard is an on-chain registry for agents. It gives each agent an identity and a place to store reputation data, so other agents and tools can decide whom to trust and which services to call.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id="h2-1-foreword"&gt;Foreword&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;x402&lt;/strong&gt; and &lt;strong&gt;ERC-8004&lt;/strong&gt; .&lt;/p&gt;</description></item><item><title>Java Warmup and the Scaling Loop Problem</title><link>https://foojayio.github.io/website/today/java-warmup-and-the-scaling-loop-problem/</link><pubDate>Wed, 07 Jan 2026 06:50:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-warmup-and-the-scaling-loop-problem/</guid><description>&lt;p&gt;In cloud environments with auto-scaling, a &amp;ldquo;scaling loop&amp;rdquo; can make Java application warmup even worse. It can cause you to run unnecessary instances. Even worse, Java warmup might never end. Fortunately, there are four reliable fixes for this issue.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In this post you will learn:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;High CPU during startup triggers auto-scaling and spins up more instances&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;One solution is to give the compiler more resources&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;A second solution is to &lt;em&gt;lower the compilation threshold&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;A third solution is to use the ReadyNow feature in Azul Platform Prime to start fast every time&lt;/li&gt;
&lt;li&gt;In a fourth solution, we add Azul&amp;rsquo;s Optimizer Hub to offload compilations to dedicated hardware&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ve probably noticed it: You start a Java application and the CPU usage spikes. It remains high for a while, then gradually settles. That&amp;rsquo;s the warmup phase, and it&amp;rsquo;s completely normal. But in cloud environments with auto-scaling, it creates a nasty problem. High CPU during startup triggers auto-scaling. More instances spin up. Those new instances also undergo this warmup phase with high CPU utilization. More scaling gets triggered. You see where this is going? Let&amp;rsquo;s call it the &amp;ldquo;scaling loop problem,&amp;rdquo; and it&amp;rsquo;s both expensive and frustrating.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Optimizing Java for the Cloud-Native Era with Quarkus</title><link>https://foojayio.github.io/website/today/optimizing-java-for-the-cloud-native-era-with-quarkus/</link><pubDate>Tue, 06 Jan 2026 21:09:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/optimizing-java-for-the-cloud-native-era-with-quarkus/</guid><description>&lt;p&gt;This article explores how Quarkus can help organizations reduce costs, streamline development, and modernize their Java applications for today&amp;rsquo;s cloud-native environments. It outlines the real-world benefits of adopting Quarkus and highlights how its core features address the performance and scalability challenges commonly associated with traditional Java frameworks.&lt;/p&gt;
&lt;p&gt;Quarkus is already being adopted across industries. One example is Orange, a global telecom provider that selected Quarkus to support its 5G API initiative, and benefited from fast startup times, a lightweight footprint, and seamless integration with Kubernetes.&lt;/p&gt;</description></item><item><title>Java and Jakarta EE and the Evolution of the Cloud with Nanos Unikernel</title><link>https://foojayio.github.io/website/today/java-jakarta-ee-and-the-evolution-of-the-cloud-with-nanos-unikernel/</link><pubDate>Tue, 06 Jan 2026 20:51:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-jakarta-ee-and-the-evolution-of-the-cloud-with-nanos-unikernel/</guid><description>&lt;p&gt;The evolution of the Java and Jakarta Enterprise ecosystem is converging toward an increasingly simple, efficient, and scalable architecture that improves security, delivers higher performance, and reduces hardware and infrastructure costs.&lt;/p&gt;
&lt;p&gt;For years, Kubernetes has been considered the de‑facto standard for modernizing Java applications in a cloud‑native direction. However, Kubernetes is not the only way to achieve scalability, continuous upgrades, and isolation. An alternative approach &amp;mdash; often underestimated &amp;mdash; is to leverage the &lt;strong&gt;hypervisors already included and fully managed by major cloud providers&lt;/strong&gt; , using &lt;strong&gt;Unikernel&lt;/strong&gt; images based on &lt;a href="https://nanovms.com" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Nanos&lt;/strong&gt;&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Quarkus: A Runtime and Framework for Cloud-Native Java</title><link>https://foojayio.github.io/website/today/quarkus-a-runtime-and-framework-for-cloud-native-java/</link><pubDate>Tue, 06 Jan 2026 13:46:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/quarkus-a-runtime-and-framework-for-cloud-native-java/</guid><description>&lt;p&gt;Public clouds such as AWS, Microsoft Azure, and Google Cloud, and platforms like Red Hat OpenShift, favor services that start fast and stay lean. Quarkus is engineered for exactly that.&lt;/p&gt;
&lt;p&gt;Build time processing reduces runtime overhead and results in rapid startup, a small memory footprint, and frictionless deployment across Kubernetes, OpenShift, serverless, and managed container services in any cloud. If your Java services need to start in milliseconds, run dense on shared nodes, and still feel great to build, Quarkus was made for that job.&lt;/p&gt;</description></item><item><title>Project Panama for Newbies (Part 2)</title><link>https://foojayio.github.io/website/today/project-panama-for-newbies-part-2/</link><pubDate>Fri, 02 Jan 2026 01:21:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/project-panama-for-newbies-part-2/</guid><description>&lt;p&gt;&lt;strong&gt;Updated December 29, 2025 &lt;strong&gt;(&lt;strong&gt;originally published August 17&lt;/strong&gt;, 2021, republished January 2, 2026):&lt;/strong&gt;&lt;/strong&gt; This article now features Java 25 and the Foreign Function &amp;amp; Memory (FFM) API, which has been a standard feature since JDK 22 (&lt;a href="https://openjdk.java.net/jeps/454" target="_blank" rel="noopener noreferrer"&gt;JEP-454&lt;/a&gt;
).&lt;/p&gt;
&lt;figure class="wp-block-image size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="218" height="407" src="panama_part2.png" alt="" class="wp-image-46434" style="width:140px;height:261px"&gt;
&lt;/figure&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Welcome back to Part 2 of Project Panama for Newbies! If you are new to this series, check out &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-1/"&gt;Part 1&lt;/a&gt;
 first.&lt;/p&gt;
&lt;p&gt;If you remember from Part 1, we learned how to create C language strings, primitive data types and arrays. We also got a chance to iterate through the data outside of the Java heap and later display items via C&amp;rsquo;s &lt;code&gt;printf()&lt;/code&gt; and Java&amp;rsquo;s &lt;code&gt;printf()&lt;/code&gt; method from the &lt;code&gt;IO.printf()&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Project Panama for Newbies (Part 1)</title><link>https://foojayio.github.io/website/today/project-panama-for-newbies-part-1/</link><pubDate>Thu, 01 Jan 2026 09:11:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/project-panama-for-newbies-part-1/</guid><description>&lt;p&gt;&lt;strong&gt;Updated December 28, 2025 (&lt;strong&gt;originally published August 10&lt;/strong&gt;, 2021, republished January 1, 2026):&lt;/strong&gt; This article now features Java 25 and the Foreign Function &amp;amp; Memory (FFM) API, which has been a standard feature since JDK 22.
&lt;img src="https://foojayio.github.io/website/today/project-panama-for-newbies-part-1/duke_and_panama.png" alt="Java&amp;rsquo;s Project Panama" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In this series of articles, we will explore the APIs from OpenJDK&amp;rsquo;s &lt;a href="https://openjdk.java.net/projects/panama/" target="_blank" rel="noopener noreferrer"&gt;Project&lt;/a&gt;
 &lt;a href="http://jdk.java.net/panama/" target="_blank" rel="noopener noreferrer"&gt;Panama&lt;/a&gt;
. My intent is to show you how to be proficient in using the Foreign Function and Memory Access APIs as it relates to Java interoperability with native code. After FFI (foreign function interface) &amp;amp; FFM (foreign function memory) have been finalized in JDK 22 the APIs currently reside in the following package namespaces.&lt;/p&gt;</description></item><item><title>JavaFX Links of December 2025</title><link>https://foojayio.github.io/website/today/javafx-links-of-december-2025/</link><pubDate>Wed, 31 Dec 2025 06:05:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-december-2025/</guid><description>&lt;p&gt;Here is the final JavaFX LinksOfTheMonth for 2025&amp;hellip; Thank you all for sharing your knowledge and experience with JavaFX. And we hope to see even more in the next year!&lt;/p&gt;
&lt;p&gt;You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ra-VYA7gvBg" target="_blank" rel="noopener noreferrer"&gt;A one second, but still impressive, video on YouTube by Carl Dea&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I was able to get 100,000-2M particles ~ 120fps using Apple&amp;rsquo;s Metal API on M4/GPU, using Java 25 FFM (project Panama), JavaFX WritableImage API. Of course there are more optimizations but really excited to be able to mix Java/JavaFX code with native bindings in a memory safe way. Still more to learn and do. There are different strategies to avoid data copies between CPU and GPU.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Juan Antonio Breña Moral&lt;/strong&gt; created an &amp;ldquo;animated spinning ripple surface rendered with JavaFX&amp;rdquo; using &lt;code&gt;MemorySegment&lt;/code&gt; from the FFM API (Java 22+), &lt;a href="https://openjdk.org/jeps/454" target="_blank" rel="noopener noreferrer"&gt;JEP 454&lt;/a&gt;
, to increase performance. &lt;a href="https://github.com/jabrena/sombrero" target="_blank" rel="noopener noreferrer"&gt;Sources and screenshot on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fosstodon.org/@trixon/115741355988091625" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Patrik Karlström&lt;/strong&gt; released CRIC 25.12&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;CRIC is a Java custom runtime image creator, a GUI for jlink. It&amp;rsquo;s built with JDK 25, JavaFX and the Netbeans platform. &lt;a href="https://github.com/trixon/cric/releases/tag/v25.12" target="_blank" rel="noopener noreferrer"&gt;Downloads available for Windows and Linux&lt;/a&gt;
, including appimage and Snap.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3m7asibknqc2u" target="_blank" rel="noopener noreferrer"&gt;Message by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Check out FXMLKit. Another convention-over-configuration framework that removes boilerplate code for loading screens done in FXML. It is inspired by afterburner.fx but also supports JPro multi-user sessions and dependency injection for nested components.&lt;/em&gt; &amp;quot; &lt;a href="https://github.com/dlsc-software-consulting-gmbh/FxmlKit" target="_blank" rel="noopener noreferrer"&gt;Sources and more description on GitHub&lt;/a&gt;
 and available from Maven Central.
&lt;ul&gt;
&lt;li&gt;Version 1.2.0: &amp;ldquo;&lt;em&gt;It now also supports hot reloading of FXML and CSS. Yes, that&amp;rsquo;s right &amp;hellip; see the changes you made to FXML without restarting your application.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3m7rvb7x5lk2z" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; announced v1.3.0 of FxmlKit&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Fixing an issue related to hot reloading of user agent stylesheets of custom controls. It had too many side-effects. It can still be enabled, but by default it is off.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2025-12-04-jfxinaction-florian-enner-robot-3d-charts/" target="_blank" rel="noopener noreferrer"&gt;A new JFXInAction interview by &lt;strong&gt;Frank Delporte&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;&lt;strong&gt;Florian Enner&lt;/strong&gt; impressed me at the Devoxx conference with his 3D visualizations and scientific charts with millions of points, showing real-time data received from robots and sensors. And using the same code, he does this in both desktop and mobile apps! Awe-inspiring work, making maximum use of the powers of hashtag#Java to combine network communication with a JavaFX user interface. And he also shows some amazing things with a JavaFX UI in a C++ application!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lazy Brownie&lt;/strong&gt; recorded the coding process of a &lt;a href="https://www.youtube.com/watch?v=veZXcM_Glfc&amp;amp;t=1886s" target="_blank" rel="noopener noreferrer"&gt;Two Player Pong&lt;/a&gt;
. No shared code, no comments, just some relaxed music and a screen recording 🙂&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New tutorial videos this week by &lt;strong&gt;Troels Mortensen&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=_vEapBhebPs" target="_blank" rel="noopener noreferrer"&gt;The Controller Factory&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=gxKpus7t8w0" target="_blank" rel="noopener noreferrer"&gt;Changing views through events&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://bsky.app/profile/deadsuperhero.com/post/3m74qyncm7k2v" target="_blank" rel="noopener noreferrer"&gt;Bluesky thread by &lt;strong&gt;Sean Tilley&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;For my capstone project in Computer Science, I&amp;rsquo;m writing a desktop music player in Java. I&amp;rsquo;ve never tried to build one before, but it seems like a decent challenge, and it covers the different data structures we&amp;rsquo;ve learned about. &amp;hellip; Playback will also be interesting to figure out. Java&amp;rsquo;s audio API doesn&amp;rsquo;t support MP3 out of the box, but JavaFX does.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Similarly, &lt;a href="https://bsky.app/profile/kossayzemzem.bsky.social/post/3m6pcqfulrs2d" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Kz&lt;/strong&gt; needs to create a game&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I am required to make a game in JavaFX for a University project and I have zero experience in video game dev.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Repost of the &lt;a href="https://foojayio.github.io/website/today/first-experiments-with-java-on-the-lattepanda-iota/"&gt;article by &lt;strong&gt;Frank Delporte&lt;/strong&gt; on Foojay&lt;/a&gt;
: First Experiments with Java on the LattePanda IOTA: An Alternative to Raspberry Pi? &amp;ldquo;&lt;em&gt;Since I installed the Java version from Azul with JavaFX included, I could also run a JavaFX demo application. &amp;hellip; The application ran smoothly! It showed we&amp;rsquo;re running on a Linux 64-bit system with Java 25.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;The JavaFX plugin in IntelliJ IDEA is marked as &amp;lsquo;Ultimate Only&amp;rsquo; in the unified distribution IDEA 2025.3. But no panic, &lt;a href="https://youtrack.jetbrains.com/issue/IDEA-383652/JavaFX-plugin-is-marked-as-Ultimate-Only-in-IDEA-2025.3-Unified-Distribution" target="_blank" rel="noopener noreferrer"&gt;it&amp;rsquo;s a bug&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Until the fix is out, you can install the previous version 2025.2.6 of IntelliJ IDEA to bypass the issue.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;On Reddit, &lt;a href="https://www.reddit.com/r/JavaFX/comments/1pk0la8/fxgl_fps_problem/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Rvaranda&lt;/strong&gt; shared a video and is asking for support&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;m having a weird problem with FXGL. Don&amp;rsquo;t know if it&amp;rsquo;s FPS related, but what happens is, when I start the game, the app&amp;rsquo;s timer spikes up very briefly at the start, then it stabilizes. As a result, all moving entities moves very quickly initialy, then they slow down to their actual speed.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/cdetastes.bsky.social/post/3ma7olcch2k2q" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Clément de Tastes&lt;/strong&gt; shared a screenshot&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Exploring Mandelbrot&amp;rsquo;s fascinating fractals has been a wonderful way for me to play with Java features. It started as a JavaFX project only, then became the perfect playground to experiment with upcoming features such as Valhalla Value Types and the Vector API. Special mention to FFM as well.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;People: &lt;a href="https://www.jfx-central.com/people/f.enner" target="_blank" rel="noopener noreferrer"&gt;Florian Enner&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/_DGz4YyojpE" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Florian Enner about Robot 3D Visualizations and Charts&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The links of November got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-november-2025/"&gt;published on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>TornadoInsight - Compatibility with TornadoVM SDK 2.0+ &amp; Configuration Guide</title><link>https://foojayio.github.io/website/today/tornadoinsight-compatibility-with-tornadovm-sdk-2-0-configuration-guide/</link><pubDate>Tue, 30 Dec 2025 09:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/tornadoinsight-compatibility-with-tornadovm-sdk-2-0-configuration-guide/</guid><description>&lt;figure class="wp-block-image size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="298" height="298" src="tornado-insight.webp" alt="" class="wp-image-106112" style="width:138px;height:auto"&gt;
&lt;/figure&gt;
&lt;p&gt;This blog updates the previously published &lt;strong&gt;TornadoInsight&lt;/strong&gt; configuration &lt;a href="https://www.tornadovm.org/post/introducing-tornadoinsight-unleashing-the-power-of-tornadovm-in-intellij-idea" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;++guidelines++&lt;/strong&gt;&lt;/a&gt;
 and explains how to configure the required environment variable to ensure that TornadoInsight correctly detects the TornadoVM SDK when IntelliJ IDEA is launched from a graphical environment.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="6bbq84970"&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;TornadoInsight requires access to a compatible Java Development Kit (JDK) and the TornadoVM SDK.{#o7o5c20810}&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important update:&lt;/strong&gt;{#mvwo920904}&lt;/p&gt;
&lt;p&gt;Since version &lt;a href="https://github.com/beehive-lab/tornado-insight/releases/tag/v1.4.0" target="_blank" rel="noopener noreferrer"&gt;++v1.4.0++&lt;/a&gt;
, TornadoInsight can also use the &lt;strong&gt;JDK configured directly in IntelliJ IDEA&lt;/strong&gt; via &lt;strong&gt;Project Structure&lt;/strong&gt;. This means that, in many cases, users no longer need to configure the Java SDK in the plugins settings.{#welj420814}&lt;/p&gt;</description></item><item><title>Foojay Podcast #88: From Code to Stage: Organizing Conferences and Finding Your Voice as a Speake</title><link>https://foojayio.github.io/website/today/foojay-podcast-88/</link><pubDate>Mon, 29 Dec 2025 06:02:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-88/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;What turns a nervous first-timer into a confident conference speaker? Let&amp;rsquo;s find out.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This the last Foojay Podcast of 2025 and also the last one with interviews recorded at the Devoxx and JFall conferences. Maybe you&amp;rsquo;re already thinking about your goals for 2026: organizing a meetup, submitting your first conference talk, or taking a bigger role in the Java community. If that sounds like you, this episode is for you.&lt;/p&gt;</description></item><item><title>Video series “JavaFX In Action”, Part 6 with Vlad Protsenko (Clojure), Matt Coley (Recaf), Craig Raw (Sparrow), and Florian Enner (3D Robot Visualization)</title><link>https://foojayio.github.io/website/today/video-series-javafx-in-action-part-6/</link><pubDate>Fri, 26 Dec 2025 08:07:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/video-series-javafx-in-action-part-6/</guid><description>&lt;p&gt;This is the next part in the series of &amp;ldquo;JavaFX in Action&amp;rdquo; interviews. Are you working on a fantastic JavaFX application? Let me know, and let&amp;rsquo;s discuss it in the new year!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/new-video-series-javafx-in-action-part-1/"&gt;July &amp;lsquo;24: Pedro Duque Vieira, Daniel Zimmermann, Christopher Schnick, and Robert Ladstätter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-2/"&gt;November &amp;lsquo;24: Maciej Gorywoda, Ramiro Domínguez Ayub, Christoph Schwentker, Ulas Ergin&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-3/"&gt;December &amp;lsquo;24: Özkan Pakdil, Clément de Tastes, Almas Baim, Steve Hannah, Jago de Vreede&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-4/"&gt;March &amp;lsquo;25: Mike Hearn, Sven Reimers, Chris Newland&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-5/"&gt;July &amp;lsquo;25: Cormac Redmond, Brian Schlining, Gerrit Grunwald, Dirk Lemmermann&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="h2-0-vlad-protsenko-combining-clojure-with-javafx-for-game-development-with-defold"&gt;Vlad Protsenko: Combining Clojure with JavaFX for Game Development with Defold&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/vlad-protsenko-0999b2163/" target="_blank" rel="noopener noreferrer"&gt;Vlad Protsenko&lt;/a&gt;
 is a Senior Developer with proficiency in many JVM-based languages. He worked both in very small and large teams, gaining experience in developing projects of various sizes, from scratch and from legacy codebases. He enjoys full-stack development, writing backend, frontend, and Android applications. He started as a game developer and switched to developing enterprise software, currently mixing both at Defold.&lt;/p&gt;</description></item><item><title>Stop the trojan horse in your pom : SonarQube Advace Security</title><link>https://foojayio.github.io/website/today/avoid-the-trojan-horse-in-your-pom-xml-sonarqube-advanced-security-part-3/</link><pubDate>Mon, 22 Dec 2025 10:42:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/avoid-the-trojan-horse-in-your-pom-xml-sonarqube-advanced-security-part-3/</guid><description>&lt;p&gt;Hola Java developers! 👋&lt;/p&gt;
&lt;p&gt;Welcome to &lt;strong&gt;Part 3&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In &lt;a href="https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-1/"&gt;&lt;strong&gt;Part 1&lt;/strong&gt;&lt;/a&gt;
, we turned your IntelliJ into a security guard.&lt;/li&gt;
&lt;li&gt;In &lt;a href="https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-2/"&gt;&lt;strong&gt;Part 2&lt;/strong&gt;&lt;/a&gt;
, we connected it to the server to enforce the Quality Gate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are feeling good. Our code is high quality. Our logic is sound. But here is the scary reality: In a modern Spring Boot application, &lt;strong&gt;you only wrote about 10% of the code.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The other 90%? It comes from Maven Central. It&amp;rsquo;s Hibernate, Jackson, Apache Commons, Spring Security&amp;hellip; You are building a house, and you made sure &lt;em&gt;your&lt;/em&gt; bricks are solid. But did you check if the foundation you bought from a stranger is made of explosive material? 🧨&lt;/p&gt;</description></item><item><title>Getting Started with TornadoVM 2.0 for Accelerating Java Applications</title><link>https://foojayio.github.io/website/today/getting-started-with-tornadovm-2-0/</link><pubDate>Mon, 22 Dec 2025 10:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-tornadovm-2-0/</guid><description>&lt;p&gt;Starting with &lt;strong&gt;TornadoVM 2.0&lt;/strong&gt; , installing and using TornadoVM is easier than ever. The project now provides prebuilt SDKs for multiple operating systems, architectures, and accelerator backends, and is also available via &lt;strong&gt;Maven Central&lt;/strong&gt; for seamless integration with existing Java codebases.{#viewer-bsvyh182}&lt;/p&gt;
&lt;p&gt;This guide walks you through:{#viewer-aq221189}&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installing the TornadoVM SDK&lt;/li&gt;
&lt;li&gt;Verifying your setup&lt;/li&gt;
&lt;li&gt;Integrating TornadoVM into Java projects using Maven&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="viewer-f868f305-69f0-46b4-bbc6-baaa3d02051b"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;Before installing TornadoVM, ensure that your system has the following:{#viewer-k00hu10420}&lt;/p&gt;</description></item><item><title>Foojay Podcast #87: The Human Side of Development: Career Growth, Staying Healthy, and Why People Matter More Than AI</title><link>https://foojayio.github.io/website/today/foojay-podcast-87/</link><pubDate>Mon, 22 Dec 2025 06:52:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-87/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;What if work-life balance is a myth, and the real secret is just&amp;hellip; life?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In this Foojay Podcast we&amp;rsquo;re stepping away from pure code and diving into something equally important: how we live our lives as developers. Because let&amp;rsquo;s be honest, being a great programmer isn&amp;rsquo;t just about mastering Java or the latest framework. It&amp;rsquo;s about managing your career, your health, your family, and finding purpose in all of it.&lt;/p&gt;</description></item><item><title>The Real Mechanics of Vulnerabilities in an Upstream/Downstream, Topsy-Turvy EOL World</title><link>https://foojayio.github.io/website/today/the-real-mechanics-of-vulnerabilities-in-an-upstream-downstream-topsy-turvy-eol-world/</link><pubDate>Fri, 19 Dec 2025 13:36:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-real-mechanics-of-vulnerabilities-in-an-upstream-downstream-topsy-turvy-eol-world/</guid><description>&lt;h3 id="h3-0-in-this-article-you-ll-learn"&gt;In this article you&amp;rsquo;ll learn&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Why CVEs record that a vulnerability exists, not that a usable fix exists&lt;/li&gt;
&lt;li&gt;How vulnerabilities are often discovered and fixed downstream before upstream ever acknowledges them&lt;/li&gt;
&lt;li&gt;Why EOL branches continue to accumulate exploitable behaviour even when no CVEs appear&lt;/li&gt;
&lt;li&gt;How downstream-only patches break the assumptions scanners and SBOMs rely on&lt;/li&gt;
&lt;li&gt;What disclosure actually enables when &amp;ldquo;just upgrade&amp;rdquo; is not a viable option&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-1-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;There is a tidy, almost academic version of how software security is supposed to work. It appears in conference talks, compliance documents and in the cheerful diagrams seen on marketing slides. It usually looks something like this:&lt;/p&gt;</description></item><item><title>MongoDB and WiredTiger: A Journey Through the Storage Engine</title><link>https://foojayio.github.io/website/today/mongodb-and-wiredtiger-a-journey-through-the-storage-engine/</link><pubDate>Thu, 18 Dec 2025 20:26:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-and-wiredtiger-a-journey-through-the-storage-engine/</guid><description>&lt;p&gt;Databases are the backbone of modern applications, and &lt;a href="https://www.mongodb.com/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=mongodb-wiredtiger-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;
 stands out with its flexibility and scalability. Central to its functionality is the WiredTiger storage engine. WiredTiger, as MongoDB&amp;rsquo;s default engine, seamlessly merges document-level concurrency for high throughput, advanced compression techniques for optimized storage, and an in-memory architecture for rapid data access.{#e668}&lt;/p&gt;
&lt;p&gt;With the addition of write-ahead logging for robust durability and the sophistication of MultiVersion Concurrency Control for snapshot-like data views, WiredTiger harmoniously orchestrates MongoDB&amp;rsquo;s data management.{#6fac}&lt;/p&gt;</description></item><item><title>Scalable Enterprise Java for the Cloud</title><link>https://foojayio.github.io/website/today/scalable-enterprise-java-for-the-cloud/</link><pubDate>Thu, 18 Dec 2025 11:41:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/scalable-enterprise-java-for-the-cloud/</guid><description>&lt;p&gt;We&amp;rsquo;re excited to introduce &lt;a href="https://payara.fish/resource/scalable-enterprise-java-for-the-cloud/" title="*Scalable Enterprise Java for the Cloud*," target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;Scalable Enterprise Java for the Cloud&lt;/em&gt;,&lt;/a&gt;
 a new free eBook created through a close collaboration between &lt;a href="https://payara.fish/" title="Payara" target="_blank" rel="noopener noreferrer"&gt;Payara&lt;/a&gt;
, Java Champion &lt;a href="https://otaviojava.com/" title="Otavio Santana" target="_blank" rel="noopener noreferrer"&gt;Otavio Santana&lt;/a&gt;
, and the Oracle NoSQL team Dario Vega &amp;amp; Michael Brey. This project brings together different parts of the Java ecosystem with a shared goal, helping developers build modern, cloud-native enterprise applications using open standards.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://payara.fish/resource/scalable-enterprise-java-for-the-cloud/" title="**Download the free eBook here**" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Download the free eBook here&lt;/strong&gt;&lt;/a&gt;
 (no form fill necessary).&lt;/p&gt;</description></item><item><title>Make Java Fleets Warm Up Faster on AWS With Azul Optimizer Hub</title><link>https://foojayio.github.io/website/today/make-java-fleets-warm-up-faster-on-aws-with-azul-optimizer-hub/</link><pubDate>Thu, 18 Dec 2025 08:35:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/make-java-fleets-warm-up-faster-on-aws-with-azul-optimizer-hub/</guid><description>&lt;p&gt;&lt;em&gt;Traditional Java executes code in slower interpreted mode, known as Java warmup, until it can build an optimized profile. This means it can only start optimizing once the application takes traffic and touches the critical code paths. Just when you are scaling out for a large bump in traffic, your machines are running at their slowest and are splitting their available CPU power between handling requests and performing expensive JIT optimizations&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Inside the Engine: Performance Relay of MongoDB 8.0</title><link>https://foojayio.github.io/website/today/inside-the-engine-the-sub-millisecond-performance-relay-of-mongodb-8-0/</link><pubDate>Tue, 16 Dec 2025 20:16:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/inside-the-engine-the-sub-millisecond-performance-relay-of-mongodb-8-0/</guid><description>&lt;figure class="aligncenter size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="720" height="720" src="1_rM-JIRWo49QIKv-vZ4taEQ.webp" alt="" class="wp-image-121981" style="width:308px;height:auto"&gt;
&lt;/figure&gt;
&lt;p&gt;In environments where microseconds dictate competitive advantage, &lt;a href="https://www.mongodb.com/products/updates/version-release/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=mongodb-engine-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;MongoDB 8.0&lt;/a&gt;
 delivers a meticulously tuned execution pipeline that transforms raw network packets into sub-millisecond query responses at global scale.{#e2e4}&lt;/p&gt;
&lt;p&gt;This reference traces a single trade query through every internal boundary network ingress, scheduling, security, parsing, planning, execution, storage‐engine internals, indexing, replication, sharding, change streams, time‐series buckets, backup, and monitoring illustrating how MongoDB 8.0&amp;rsquo;s per-CPU allocators, active-work profiling, SIMD-vectorized execution, adaptive bucketization, compact resume tokens, and refined journaling coalesce into a seamless, predictable performance engine.{#e2e4}&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>Java developer's guide : Sync Rules &amp; Stop CI Failures</title><link>https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-2/</link><pubDate>Tue, 16 Dec 2025 15:53:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-2/</guid><description>&lt;p&gt;Hola Java developers! 👋&lt;/p&gt;
&lt;p&gt;Welcome back. In &lt;a href="https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-1/"&gt;&lt;strong&gt;Part 1&lt;/strong&gt;&lt;/a&gt;
, we installed &lt;strong&gt;SonarQube for IDE&lt;/strong&gt; in IntelliJ. You are now catching those nasty NullPointerExceptions and Optional.get() risks &lt;em&gt;before&lt;/em&gt; they leave your keyboard.&lt;/p&gt;
&lt;p&gt;But&amp;hellip; you are not working alone. You are part of a team pushing code to a repo full of XML configs, DTOs, and Services.&lt;/p&gt;
&lt;p&gt;Here is the nightmare scenario: You spend all day refactoring your &lt;strong&gt;Spring Boot&lt;/strong&gt; service. It looks perfect. You run your tests. They pass. You push it to Git. You grab a coffee. ☕ And then&amp;hellip; &lt;strong&gt;FAIL.&lt;/strong&gt; 🔴&lt;/p&gt;</description></item><item><title>BoxLang Native Couchbase Module</title><link>https://foojayio.github.io/website/today/boxlang-couchbase-module-enterprise-caching-distributed-locking-and-ai-vector-memory/</link><pubDate>Tue, 16 Dec 2025 08:37:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-couchbase-module-enterprise-caching-distributed-locking-and-ai-vector-memory/</guid><description>&lt;p&gt;&lt;strong&gt;Ortus Solutions&lt;/strong&gt; is thrilled to announce the official release of &lt;strong&gt;bx-couchbase v1.0&lt;/strong&gt; , a groundbreaking module that brings native enterprise-grade Couchbase capabilities to the BoxLang language and ecosystem. Designed for modern distributed applications, &lt;strong&gt;bx-couchbase&lt;/strong&gt; unifies high-performance caching, resilient distributed locking, and advanced AI vector memory&amp;mdash;empowering developers to build scalable, intelligent, fault-tolerant systems with unprecedented ease.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="h2-0-couchbase-boxlang-a-high-performance-combination"&gt;&lt;strong&gt;Couchbase + BoxLang: A High-Performance Combination&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Couchbase is more than a database&amp;mdash;it&amp;rsquo;s a distributed NoSQL platform engineered for speed, flexibility, and global scale. With sub-millisecond key-value operations, built-in vector search, and multi-data-center support, it is the ideal foundation for next-generation AI-powered applications.&lt;/p&gt;</description></item><item><title>Foojay Podcast #86: Agents, MCP, and Graph Databases: Java Developers Navigate the AI Revolution</title><link>https://foojayio.github.io/website/today/foojay-podcast-86/</link><pubDate>Mon, 15 Dec 2025 06:45:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-86/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;The AI revolution isn&amp;rsquo;t replacing Java developers. No, it&amp;rsquo;s forcing us to think harder.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Welcome to another episode of the Foojay Podcast! Today, we&amp;rsquo;re talking about AI and Java, how it&amp;rsquo;s changing the way we work, what we need to watch out for, and why understanding what&amp;rsquo;s really happening matters more than ever.&lt;/p&gt;
&lt;p&gt;I recorded interviews at Devoxx and JFall and spoke with people who build and use this technology every day.&lt;/p&gt;</description></item><item><title>The End of One-Sized-Fits-All Prompts: Why LLM Models Are No Longer Interchangeable</title><link>https://foojayio.github.io/website/today/the-end-of-one-sized-fits-all-prompts-why-llm-models-are-no-longer-interchangeable/</link><pubDate>Sun, 14 Dec 2025 18:48:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-end-of-one-sized-fits-all-prompts-why-llm-models-are-no-longer-interchangeable/</guid><description>&lt;p&gt;For developers and product builders, one assumption has guided the last few years of LLM application development. To improve your product, just swap in the latest frontier large language model. Flip a single switch and your tool&amp;rsquo;s capabilities level up.&lt;/p&gt;
&lt;p&gt;But that era is over. We&amp;rsquo;re now seeing that new models like Anthropic&amp;rsquo;s Claude Sonnet 4.5 and OpenAI&amp;rsquo;s GPT-5-Codex have diverged in fundamental ways. The choice of which model to use is no longer a simple engineering decision but a critical product decision. Flip that switch today&amp;hellip; and the very texture of your product changes.&lt;/p&gt;</description></item><item><title>SonarQube for IDE in IntelliJ: The Ultimate Java Developer’s Guide</title><link>https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-1/</link><pubDate>Fri, 12 Dec 2025 15:43:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-1/</guid><description>&lt;p&gt;Hola Java developers! 👋&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s be honest. We have all been there. You write a piece of code, it compiles perfectly, the unit tests pass, and you think: &lt;em&gt;&amp;ldquo;This is solid.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Then&amp;hellip; boom. The CI/CD pipeline fails 20 minutes later because of a security vulnerability. Or worse, a NullPointerException wakes you up on the weekend because you forgot to check if that Optional was actually present.&lt;/p&gt;
&lt;p&gt;We want to deliver &lt;strong&gt;High&lt;/strong&gt; &lt;strong&gt;Code Quality and Security&lt;/strong&gt;, but we are humans. We get tired, we lose focus.&lt;/p&gt;</description></item><item><title>Jakarta Data Makes Persistence a Breeze</title><link>https://foojayio.github.io/website/today/jakarta-data-makes-persistence-a-breeze/</link><pubDate>Fri, 12 Dec 2025 11:55:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/jakarta-data-makes-persistence-a-breeze/</guid><description>&lt;p&gt;Working with enterprise Java databases can sometimes feel like swimming upstream. Jakarta EE 11&amp;rsquo;s Jakarta Data helps developers glide through data operations effortlessly, cutting complexity and keeping projects flowing smoothly.&lt;/p&gt;
&lt;p&gt;In this blog post, we look at what Jakarta Data brings to the table and how it can transform everyday Java development tasks.&lt;/p&gt;
&lt;p&gt;Jakarta EE is evolving, and one of the most talked-about additions in the latest release (&lt;a href="https://payara.fish/blog/jakarta-ee-11-is-here-and-its-ready-for-the-cloud/" title="Jakarta EE 11" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE 11&lt;/a&gt;
) is &lt;a href="https://projects.eclipse.org/projects/ee4j.data" title="Jakarta Data" target="_blank" rel="noopener noreferrer"&gt;Jakarta Data&lt;/a&gt;
, a framework designed to simplify how developers interact with databases. By reducing boilerplate and offering a more intuitive approach, Jakarta Data promises to make enterprise Java development cleaner, faster and more maintainable.&lt;/p&gt;</description></item><item><title>How to Release a Java Module to Maven Central with JReleaser and GitHub Actions (2025 Guide)</title><link>https://foojayio.github.io/website/today/how-to-publish-a-java-maven-project-to-maven-central-using-jreleaser-and-github-actions-2025-guide/</link><pubDate>Fri, 12 Dec 2025 07:42:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-publish-a-java-maven-project-to-maven-central-using-jreleaser-and-github-actions-2025-guide/</guid><description>&lt;p&gt;This article is a tutorial that guides you through the process of releasing a Java module with &lt;a href="https://jreleaser.org/" target="_blank" rel="noopener noreferrer"&gt;JReleaser&lt;/a&gt;
 to Maven Central with Github Actions. It is a 2025 update of the &lt;a href="https://foojayio.github.io/website/today/how-to-release-a-java-module-with-jreleaser-to-maven-central-with-github-actions/"&gt;foojay.io/today/how-to-release-a-java-module-with-jreleaser-to-maven-central-with-github-actions&lt;/a&gt;
 article.&lt;/p&gt;
&lt;p&gt;JReleaser is a tool that streamlines the release process for Java projects, allowing developers to quickly and efficiently publish their modules to Maven Central.&lt;/p&gt;
&lt;p&gt;This article will use the &lt;a href="https://github.com/jagodevreede/semver-check/" title="SemVer Check project" target="_blank" rel="noopener noreferrer"&gt;SemVer Check project&lt;/a&gt;
 as an example project that uses Maven as a build tool.&lt;/p&gt;</description></item><item><title>Building Java Microservices with the Repository Pattern</title><link>https://foojayio.github.io/website/today/building-java-microservices-with-the-repository-pattern/</link><pubDate>Thu, 11 Dec 2025 23:19:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-java-microservices-with-the-repository-pattern/</guid><description>&lt;h3 id="h3-0-what-you-ll-learn"&gt;What you&amp;rsquo;ll learn&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;How the MongoDB Spring repository can be used to abstract MongoDB operations&lt;/li&gt;
&lt;li&gt;Ensuring data access is separate from core application logic&lt;/li&gt;
&lt;li&gt;Why you should avoid save() and saveAll() functions in Spring&lt;/li&gt;
&lt;li&gt;Why schema and index design still matters in this case&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The repository pattern is a design method that allows for abstraction between business logic and the data of an application. This allows for retrieving and saving/updating objects without exposing the technical details of how that data is stored in the main application. In this blog, we will use Spring Boot with MongoDB in order to create a repository pattern-based application.&lt;/p&gt;</description></item><item><title>First Experiments with Java on the LattePanda IOTA: An Alternative to Raspberry Pi?</title><link>https://foojayio.github.io/website/today/first-experiments-with-java-on-the-lattepanda-iota/</link><pubDate>Thu, 11 Dec 2025 09:13:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/first-experiments-with-java-on-the-lattepanda-iota/</guid><description>&lt;p&gt;After years of experimenting with Raspberry Pi boards, Java, JavaFX, and &lt;a href="https://www.pi4j.com/" target="_blank" rel="noopener noreferrer"&gt;Pi4J&lt;/a&gt;
 to control electronics, I wanted to explore whether my knowledge and experience could be applied to similar boards from other providers. There are many alternatives available these days, based on ARM, Intel processors, and RISC-V architectures.&lt;/p&gt;
&lt;p&gt;I reached out to several suppliers to see if I could get evaluation copies, and I&amp;rsquo;m happy to share that I received my first box from DFRobot containing the &lt;a href="https://www.dfrobot.com/product-2989.html" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;LattePanda IOTA&lt;/strong&gt;&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>More Java From Azul!</title><link>https://foojayio.github.io/website/today/more-java-from-azul/</link><pubDate>Wed, 10 Dec 2025 17:14:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/more-java-from-azul/</guid><description>&lt;p&gt;&lt;strong&gt;Azul is a company focused purely on Java through builds of OpenJDK, in the form of Platform Core, and our high-performance Java platform (including JVM), Platform Prime. We build on these with Intelligence Cloud to deliver precise information about security vulnerabilities in running code, unused code and an inventory of all JVMs in use.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When looking at expanding the company through acquisition, we obviously wanted to maintain that dedication to all things Java, so what better company than Payara?&lt;/p&gt;</description></item><item><title>Spring Boot 4 - OpenTelemetry Guide</title><link>https://foojayio.github.io/website/today/spring-boot-4-opentelemetry-explained/</link><pubDate>Wed, 10 Dec 2025 09:09:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-4-opentelemetry-explained/</guid><description>&lt;p&gt;In my previous &lt;a href="https://foojayio.github.io/website/today/preparing-for-spring-framework-7-and-spring-boot-4/"&gt;article&lt;/a&gt;
, I outlined a comprehensive list of features introduced in Spring Framework 7 and Spring Boot 4.&lt;/p&gt;
&lt;p&gt;In this series of articles, we will explore these features in detail using a pragmatic approach. In this second article, I will dive deep into integration of Observability framework i.e., &lt;em&gt;&lt;strong&gt;OpenTelemetry with SpringBoot&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;As an architect and developer, when I engage in system design&amp;mdash;whether it involves monolithic architecture, microservices, or contemporary cloud-native applications&amp;mdash;I have made the integration of &lt;strong&gt;observability&lt;/strong&gt; patterns utilizing &lt;strong&gt;open-telemetry&lt;/strong&gt; tools a standard practice. Through observability, we can monitor application behavior via &lt;strong&gt;metrics, logs, and traces&lt;/strong&gt; that we trigger&lt;/p&gt;</description></item><item><title>Optimizing MongoDB Queries in Java Applications</title><link>https://foojayio.github.io/website/today/optimizing-mongodb-queries-in-java-applications/</link><pubDate>Tue, 09 Dec 2025 17:45:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/optimizing-mongodb-queries-in-java-applications/</guid><description>&lt;p&gt;Modern Java applications often struggle with performance bottlenecks that have little to do with the JVM itself. In most cases, the culprit lies deeper in how the application interacts with its database. Slow queries, missing indexes, or inefficient access patterns can quietly degrade user experience, increase latency, and inflate infrastructure costs. MongoDB, known for its flexibility and document-oriented design, can deliver remarkable performance when used correctly. However, that performance can quickly diminish when queries and indexes are not aligned with real-world access patterns.&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>The 5 Knights of the MCP Apocalypse 😱</title><link>https://foojayio.github.io/website/today/the-5-knights-of-the-mcp-apocalypse/</link><pubDate>Tue, 09 Dec 2025 15:55:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-5-knights-of-the-mcp-apocalypse/</guid><description>&lt;p&gt;Let&amp;rsquo;s talk about that new &lt;strong&gt;MCP (Model Context Protocol) Server&lt;/strong&gt; your team is using to connect to your real data services. It&amp;rsquo;s awesome, right? It&amp;rsquo;s the &amp;ldquo;magic box&amp;rdquo; that gives your AI Agent access to the &lt;strong&gt;real world&lt;/strong&gt;&amp;mdash;live databases, internal APIs, and all your tools.&lt;/p&gt;
&lt;p&gt;But here&amp;rsquo;s the catch: &lt;strong&gt;you don&amp;rsquo;t own the code.&lt;/strong&gt; 🚫&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a vendor product, an open-source project, or another team&amp;rsquo;s platform. You can&amp;rsquo;t just change its code when you find a security hole, unless you have the code and recompile it and deploy it.&lt;/p&gt;</description></item><item><title>BoxLang v1.8.0 : Revolutionary HTTP Client, SOAP Integration, and Production-Grade Stability</title><link>https://foojayio.github.io/website/today/boxlang-v1-8-0-revolutionary-http-client-soap-integration-and-production-grade-stability/</link><pubDate>Tue, 09 Dec 2025 11:04:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-v1-8-0-revolutionary-http-client-soap-integration-and-production-grade-stability/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-v1-8-0-revolutionary-http-client-soap-integration-and-production-grade-stability/boxlang-v1.8.0-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The BoxLang team is excited to announce BoxLang 1.8.0, a massive release that revolutionizes HTTP capabilities, introduces comprehensive SOAP/WSDL integration, and delivers over 100 critical bug fixes for production-grade stability. This release focuses on modern web application development with fluent APIs, streaming support, persistent connection management, and extensive CFML compatibility improvements.&lt;/p&gt;
&lt;h2 id="h2-0-what-s-new-in-1-8-0"&gt;🚀 What&amp;rsquo;s New in 1.8.0&lt;/h2&gt;
&lt;h3 id="h3-1-modular-compiler-architecture-ultra-slim-runtime"&gt;🎯 Modular Compiler Architecture &amp;amp; Ultra-Slim Runtime&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;BoxLang 1.8.0 introduces a revolutionary modular compiler architecture that delivers unprecedented flexibility, security, and deployment efficiency for enterprise applications.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Java, What's Old? Part III - I/O</title><link>https://foojayio.github.io/website/today/java-whats-old-part-iii-i-o/</link><pubDate>Tue, 09 Dec 2025 08:23:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-whats-old-part-iii-i-o/</guid><description>&lt;p&gt;After Java, &lt;a href="https://foojayio.github.io/website/today/java-whats-old-part-i-collections/"&gt;What&amp;rsquo;s Old? Part I: Collections&lt;/a&gt;
 and &lt;a href="https://foojayio.github.io/website/today/java-whats-old-part-ii-utils/"&gt;Java, What&amp;rsquo;s Old? Part II: Utils&lt;/a&gt;
, let&amp;rsquo;s now have a look at less-known old input/output classes of the JDK that can still be useful.&lt;/p&gt;
&lt;p&gt;Everything in this series will be in Java 8 and later, so after reading this article, you will be able to use it in your projects.&lt;/p&gt;
&lt;h2 id="h2-0-scanner"&gt;Scanner&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html" target="_blank" rel="noopener noreferrer"&gt;Scanner&lt;/a&gt;
 is a class in &lt;code&gt;java.util&lt;/code&gt; package that helps you parse files and input stream.&lt;/p&gt;</description></item><item><title>Foojay Podcast #85: Code, Community, and Opportunity: Making Tech Accessible for Everyone</title><link>https://foojayio.github.io/website/today/foojay-podcast-85/</link><pubDate>Mon, 08 Dec 2025 06:07:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-85/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;What if the future of Java depends on who we invite to learn it today?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In this Foojay Podcast, we&amp;rsquo;re diving into something that affects all of us in the Java community: How can we inspire the next generation of developers, and how do we make the developer world more inclusive?&lt;/p&gt;
&lt;p&gt;In this episode, you&amp;rsquo;ll hear four incredible guests who are actively working to make tech more accessible and inclusive. First, Daniel De Luca talks about Devoxx for Kids and how they support underprivileged students in IT education. Then Kenny Schwegler shares his insights on how we can actively promote diversity and inclusion in tech. Cassandra Chin, the youngest Java Champion and author, talks about inspiring young coders through hands-on projects and making technology fun. And finally, Igor De Souza discusses his mission to bring Java into Raspberry Pi education and bring more Java into coding clubs worldwide.&lt;/p&gt;</description></item><item><title>How CodeRabbit's Agentic Code Validation helps with code reviews</title><link>https://foojayio.github.io/website/today/how-coderabbits-agentic-code-validation-helps-with-code-reviews/</link><pubDate>Sun, 07 Dec 2025 11:10:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-coderabbits-agentic-code-validation-helps-with-code-reviews/</guid><description>&lt;p&gt;The &lt;a href="https://survey.stackoverflow.co/2025/" target="_blank" rel="noopener noreferrer"&gt;2025 Stack Overflow survey&lt;/a&gt;
 reveals a paradox: while 84% of developers express confidence in adopting AI tools, nearly half (48%) still distrust the accuracy of their outputs. This tension between optimism and skepticism has reshaped how teams think about quality assurance.
&lt;img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1764049813672/6ad5aea0-625a-4f7f-bf4c-a0b3c8a4903f.png?auto=compress,format&amp;amp;format=webp" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="heading-from-prd-to-pr-in-days-not-weeks"&gt;&lt;strong&gt;From PRD to PR in days (not weeks)&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The bottleneck in software development has fundamentally shifted from writing code to validating it.&lt;/p&gt;
&lt;p&gt;In the early days of AI-assisted development, the workflow was straightforward: AI suggested code, humans read the suggested snippet and then decided whether or not to accept that suggestion. Tab completion wrote boilerplate. Copilot suggested functions. But a senior engineer still manually validated and chose each line of code to ensure its quality, structure, and safety before making a pull request.&lt;/p&gt;</description></item><item><title>Building Systems That Know Why They Exist ~ When Data, Logic, and Intent Finally Align</title><link>https://foojayio.github.io/website/today/building-systems-that-know-why-they-exist-when-data-logic-and-intent-finally-align/</link><pubDate>Thu, 04 Dec 2025 19:06:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-systems-that-know-why-they-exist-when-data-logic-and-intent-finally-align/</guid><description>&lt;figure class="aligncenter size-medium"&gt;
 &lt;img fetchpriority="high" decoding="async" width="510" height="510" src="1_fKlXRaOCelfpXA_XhNaitA-510x510.webp" alt="" class="wp-image-121821"&gt;
&lt;/figure&gt;
&lt;p&gt;Every software system begins with intent. A human decision. A statement of what should exist, how it should behave, and why it matters. But somewhere along the way, that intent dies. It&amp;rsquo;s decomposed into documentation, user stories, and scattered logic. It becomes a shadow of itself fragmented across layers of code, processes, and people who no longer remember what it was meant to achieve.{#7cd1}&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve automated infrastructure. We&amp;rsquo;ve scripted configurations. We&amp;rsquo;ve even made AI write code for us. But we&amp;rsquo;ve never automated &lt;strong&gt;understanding&lt;/strong&gt; . Our systems execute brilliantly yet comprehend nothing. They operate without memory of purpose. They run, but they do not know &lt;em&gt;why&lt;/em&gt;.{#657d}&lt;/p&gt;</description></item><item><title>foojay – a place for friends of OpenJDKJava 21+ on Raspberry Pi Zero 2 is Back In Business</title><link>https://foojayio.github.io/website/today/java-21-on-raspberry-pi-zero-2-is-back-in-business/</link><pubDate>Thu, 04 Dec 2025 08:46:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-21-on-raspberry-pi-zero-2-is-back-in-business/</guid><description>&lt;p&gt;As described before on &lt;a href="https://webtechie.be/post/2025-06-25-java-21-not-working-on-zero-2/" target="_blank" rel="noopener noreferrer"&gt;Java 21+ Not Working on Raspberry Pi Zero 2&lt;/a&gt;
, a problem appeared to execute Java code on the Raspberry Pi Zero 2 with OpenJDK 21 or higher. Reason: in OpenJDK 21 the Just-In-Time (JIT) compiler has been improved, but this change doesn&amp;rsquo;t work correctly on the ARM Cortex-A53 processor as used in the Zero 2. It&amp;rsquo;s another type of processor compared to, for instance, the Raspberry Pi 4 (Cortex-A72) and 5 (Cortex-A76).&lt;/p&gt;</description></item><item><title>Java 25: What's New?</title><link>https://foojayio.github.io/website/today/java-25-whats-new/</link><pubDate>Wed, 03 Dec 2025 09:02:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-25-whats-new/</guid><description>&lt;p&gt;&lt;em&gt;This article was first published in my personal blog: &lt;a href="https://www.loicmathieu.fr/wordpress/informatique/java-25-whats-new/" target="_blank" rel="noopener noreferrer"&gt;Java 25: What&amp;rsquo;s new?&lt;/a&gt;
 and is part of a serie on &lt;a href="//www.loicmathieu.fr/wordpress/tag/whatsnew/" target="_blank" rel="noopener noreferrer"&gt;what&amp;rsquo;s new on the last versions of Java&lt;/a&gt;
.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now that Java 25 is out, it&amp;rsquo;s time to walk through all the functionalities that bring to us, developers, this new version.&lt;/p&gt;
&lt;p&gt;Java 25 is the new Long-Term Support (LTS) version, containing no less than 18 JEPs. Even if this isn&amp;rsquo;t as good as the 24 JEPs in Java 24, it&amp;rsquo;s still a pretty significant number. No big news on the program, but a number of nice little ones anyway.&lt;/p&gt;</description></item><item><title>Atlas Searching with the Java Driver</title><link>https://foojayio.github.io/website/today/atlas-searching-with-the-java-driver/</link><pubDate>Tue, 02 Dec 2025 17:28:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/atlas-searching-with-the-java-driver/</guid><description>&lt;p&gt;Dear fellow developer, welcome!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.mongodb.com/atlas/search/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=atlas-search-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;Atlas Search&lt;/a&gt;
 is a full-text search engine embedded in MongoDB Atlas that gives you a seamless, scalable experience for building relevance-based app features. Built on Apache Lucene, Atlas Search eliminates the need to run a separate search system alongside your database. The gateway to Atlas Search is the $search aggregation pipeline stage.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://www.mongodb.com/docs/atlas/atlas-search/query-syntax/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=atlas-search-foojay&amp;amp;utm_term=tony.kim#std-label-search-agg-pipeline" target="_blank" rel="noopener noreferrer"&gt;$search&lt;/a&gt;
 stage, as one of the newest members of the &lt;a href="https://www.mongodb.com/docs/manual/core/aggregation-pipeline/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=atlas-search-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;MongoDB aggregation pipeline&lt;/a&gt;
 family, has gotten native, convenient support added to various language drivers. Driver support helps developers build concise and readable code. This article delves into using the Atlas Search support built into the MongoDB Java driver, where we&amp;rsquo;ll see how to use the driver, how to handle `$search` features that don&amp;rsquo;t yet have native driver convenience methods or have been released after the driver was released, and a glimpse into Atlas Search relevancy scoring. Let&amp;rsquo;s get started!&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>Unleashing the Power of Data Visualization: Introducing BX-Charts for BoxLang</title><link>https://foojayio.github.io/website/today/unleashing-the-power-of-data-visualization-introducing-bx-charts-for-boxlang/</link><pubDate>Tue, 02 Dec 2025 09:21:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/unleashing-the-power-of-data-visualization-introducing-bx-charts-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/unleashing-the-power-of-data-visualization-introducing-bx-charts-for-boxlang/bx-chart-release-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In the world of modern web applications, data is king&amp;mdash;but raw numbers rarely tell the full story. 📈 That&amp;rsquo;s where visualization becomes crucial, transforming complex datasets into intuitive, compelling narratives. Today, we&amp;rsquo;re thrilled to introduce BX-Charts, a game-changing charting module that brings professional-grade data visualization directly into the BoxLang ecosystem. 🌟&lt;/p&gt;
&lt;h2 id="h2-0-the-visualization-challenge"&gt;The Visualization Challenge 🧩&lt;/h2&gt;
&lt;p&gt;Developers have long struggled with creating meaningful charts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🔧 Complex JavaScript libraries&lt;/li&gt;
&lt;li&gt;🏗️ Extensive configuration&lt;/li&gt;
&lt;li&gt;📚 Steep learning curves&lt;/li&gt;
&lt;li&gt;🚧 Limited flexibility&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;BX-Charts&lt;/strong&gt; demolishes these barriers, offering a seamless, powerful charting solution that&amp;rsquo;s both developer-friendly and enterprise-ready. 💪&lt;/p&gt;</description></item><item><title>Foojay Podcast #84: Developing Performant, Cost Efficient, and Eco-friendly Code</title><link>https://foojayio.github.io/website/today/foojay-podcast-84/</link><pubDate>Mon, 01 Dec 2025 06:43:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-84/</guid><description>&lt;p&gt;In this Foojay Podcast, we&amp;rsquo;re exploring a critical topic that&amp;rsquo;s becoming increasingly important in our industry: developing sustainable software that is both performant and environmentally friendly.&lt;/p&gt;
&lt;p&gt;At the Devoxx and JFall conferences, I had fascinating conversations about how we as Java developers can make a real impact on both our cloud costs and our carbon footprint. And it&amp;rsquo;s interesting to learn how these two goals are often perfectly aligned: what&amp;rsquo;s good for your budget is usually good for the planet too.&lt;/p&gt;</description></item><item><title>JavaFX Links of November 2025</title><link>https://foojayio.github.io/website/today/javafx-links-of-november-2025/</link><pubDate>Sun, 30 Nov 2025 06:42:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-november-2025/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of November 2025. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.infoworld.com/article/4082709/will-javafx-return-to-java.html" target="_blank" rel="noopener noreferrer"&gt;Article by &lt;strong&gt;Paul Krill&lt;/strong&gt; on InfoWorld&lt;/a&gt;
: &amp;ldquo;Will JavaFX return to Java?&amp;rdquo; &amp;ldquo;&lt;em&gt;Just as a proposal to return JavaFX to the Java Development Kit has drawn interest in the OpenJDK community, Oracle too says it wants to make the Java-based rich client application more approachable within the JDK. &amp;hellip; An &lt;a href="https://mail.openjdk.org/pipermail/discuss/2025-October/006553.html" target="_blank" rel="noopener noreferrer"&gt;October 29 post by &lt;strong&gt;Bruce Haddon&lt;/strong&gt; on an OpenJDK discussion list&lt;/a&gt;
 argues that the reasons for the separation &amp;hellip; are much less applicable today.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; sees a perfect match with the Java on Mobile project and published a post about it: &lt;a href="https://webtechie.be/post/2025-11-05-openjfx-returning-to-openjdk/" target="_blank" rel="noopener noreferrer"&gt;Will OpenJFX Be Merged Into OpenJDK? It Would Be a Perfect Match with Java on Mobile!&lt;/a&gt;
 &amp;ldquo;&lt;em&gt;Again, some exciting developments seem to be happening in the Java world! There&amp;rsquo;s a growing discussion about bringing JavaFX back into the OpenJDK, and it couldn&amp;rsquo;t come at a better time, especially with Johan Vos and the team at Gluon working hard on making Java a first-class citizen on mobile platforms. &amp;hellip; I&amp;rsquo;m excited to see where this goes. Java has always been about &amp;lsquo;write once, run anywhere,&amp;rsquo; and these initiatives could finally deliver on that promise more completely than ever before.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;This post got also &lt;a href="https://foojayio.github.io/website/today/will-openjfx-be-merged-into-openjdk-it-would-be-a-perfect-match-with-java-on-mobile/"&gt;republished on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3m5jiv22b7s2u" target="_blank" rel="noopener noreferrer"&gt;Request by &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX developers using Windows: please help the development by doing some performance test for Direct3D 12.&lt;/em&gt; &amp;quot; More info in this &lt;a href="https://mail.openjdk.org/pipermail/openjfx-dev/2025-November/057510.html" target="_blank" rel="noopener noreferrer"&gt;mailinglist message by &lt;strong&gt;Lukasz Kostyra&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.infoq.com/news/2025/11/java-on-ios/" target="_blank" rel="noopener noreferrer"&gt;Article by &lt;strong&gt;Ben Evans&lt;/strong&gt; on InfoQ&lt;/a&gt;
: &amp;ldquo;Running Java on iOS: Gluon Introduces OpenJDK Mobile Resources and Automated Build Pipelines&amp;rdquo;. &amp;ldquo;&lt;em&gt;The long-awaited Hotspot-on-iOS project is reporting major progress - OpenJDK is now able to build and run on iOS. This is the next milestone on a journey that started a long time ago - InfoQ first reported on it back in 2015. More recently, the mobile repository of OpenJDK (which is downstream of the main repo) has been able to build a static version of libjvm, allowing iOS binaries to execute Java code.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/did:plc:tysr26jaqf3moymuf7jc2uyr/post/3m5ymv2fcw22o" target="_blank" rel="noopener noreferrer"&gt;Message by &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
 highlighting the fact JavaFX is a full open-source project: &amp;ldquo;&lt;em&gt;Keep in mind that the Gluon LTS releases of JavaFX 17u and JavaFX 21u are free to download and use. With Gluon, we do &lt;a href="https://gluonhq.com/services/javafx-support/#pricing" target="_blank" rel="noopener noreferrer"&gt;offer an LTS service&lt;/a&gt;
 but the releases themselves are really free. We don&amp;rsquo;t want to charge people for creating JavaFX applications. No reason to pay unless you need support.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;And he is &lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3m5yjlouems2o" target="_blank" rel="noopener noreferrer"&gt;looking for feedback about a core JavaFX feature&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The JavaFX Properties/listeners approach is really powerful to bind UI components to changing values. But it is often over-used and the main source of performance issues. It&amp;rsquo;s very easy to kill performance by adding a listener to a property that is modified during layout.&lt;/em&gt;&amp;rdquo; What do you think? Did you experience such performance issues?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/abaddongtz.bsky.social/post/3m4rdpoes5s2a" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Rafael Gutierrez&lt;/strong&gt; shared on Bluesky&lt;/a&gt;
: &amp;ldquo;A Pomodoro Timer built with JavaFX and Spring Shell using Hexagonal Architecture (any feedback is welcome.)_&amp;rdquo; You can find it &lt;a href="https://github.com/abadongutierrez/pomodoro-timer" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; updated JDKMon to Java(FX) 25. &lt;a href="https://github.com/HanSolo/SpaceFX/releases" target="_blank" rel="noopener noreferrer"&gt;Downloads are available on GitHub&lt;/a&gt;
. JDKMon is a little tool written in JavaFX that tries to detect all JDKs installed on your machine.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/codedead.com/post/3m5oxetgrec2x" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;codedead&lt;/strong&gt; announced&lt;/a&gt;
 Opal v1.5.1. &lt;a href="https://codedead.com/blog/2025/11/15/opal-1.5.1/" target="_blank" rel="noopener noreferrer"&gt;Here are the release notes&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;Opal is a simple app that includes different sound groupings to suit anyone, from office to fantasy. All have volume controls so you can keep faint in the background or bring them forward. You can also set up a delay timer from the settings tab to remind you to take a break. You also have the option to combine multiple sounds at varying volumes to produce the perfect background noise.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@credmond/115617279097981595" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Cormac Redmond&lt;/strong&gt; shared an impressive screenshot&lt;/a&gt;
 showing a lot of different UI windows of KafkIO: &amp;ldquo;&lt;em&gt;Version 2.0.14 is released, packed with new features. &lt;a href="https://kafkio.com/" target="_blank" rel="noopener noreferrer"&gt;Download the fast, easy Apache Kafka™ GUI&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; updated SpaceFX to Java(FX) 25. &lt;a href="https://github.com/HanSolo/SpaceFX/releases" target="_blank" rel="noopener noreferrer"&gt;Downloads are available on GitHub&lt;/a&gt;
. SpaceFX is a space shooter written in JavaFX. It can run on Mac, Windows, Linux, on mobile devices, and even in the browser. A true &amp;ldquo;write once run anywhere&amp;rdquo; application that illustrates the true power and the promise made by Java and JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/defold.com/post/3m6m2cbjfgk2f" target="_blank" rel="noopener noreferrer"&gt;Defold, the free game engine with a JavaFX UI engine, shared&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;&lt;a href="https://defold.com/manuals/editor/" target="_blank" rel="noopener noreferrer"&gt;The Defold Editor Overview manual&lt;/a&gt;
 has been updated! Get familiar with the new Editor features and let us know if there is anything we could improve further.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1p178xg/webfx_now_supports_teavm_bringing_webassembly_and/" target="_blank" rel="noopener noreferrer"&gt;Message on Reddit JavaFX&lt;/a&gt;
 by &lt;strong&gt;Bruno Salmon&lt;/strong&gt; : &amp;ldquo;WebFX now supports TeaVM: bringing WebAssembly and Kotlin to JavaFX on the Web!&amp;rdquo; with a &lt;a href="https://blog.webfx.dev/2025/11/17/teavm/" target="_blank" rel="noopener noreferrer"&gt;link to a full blog post&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;We&amp;rsquo;re excited to announce that WebFX now officially supports TeaVM, a Java to WebAssembly compiler that unlocks faster startup times and broader JVM language compatibility with now Kotlin and Scala! We already have multiple live demos running with TeaVM.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; interviewed &lt;strong&gt;Johan Vos&lt;/strong&gt; and &lt;strong&gt;Stephen Chin&lt;/strong&gt; at Devoxx Belgium 2025. The video is now available &lt;a href="https://www.youtube.com/watch?v=OrhGyTGJgOg" target="_blank" rel="noopener noreferrer"&gt;on YouTube&lt;/a&gt;
. Johan is one of the lead OpenJFX developers and talks about the history of Java and JavaFX, and the future with the Java on Mobile project. Stephen is the author of &amp;ldquo;The Definitive Guide to Modern Java Clients with JavaFX.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;New &lt;a href="https://www.youtube.com/watch?v=Mc3fUTxoKIg" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;JavaFX In Action&amp;rdquo; interview published by &lt;strong&gt;Frank Delporte&lt;/strong&gt; with &lt;strong&gt;Craig Raw&lt;/strong&gt; about the Sparrow Bitcoin Wallet&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I don&amp;rsquo;t have any bitcoin myself, but still find the idea of the blockchain and &amp;lsquo;public shared money&amp;rsquo; fascinating. And as it turns out, there is a free and open-source bitcoin wallet, Sparrow, created with JavaFX, that wants to help people understand how the Bitcoin system works and make transactions easy to understand. And while Craig explains the app itself, we also learn a lot about the Bitcoin ecosystem, reproducible builds, security, hardware wallets, and more!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/foojay-podcast-83/"&gt;Foojay Podcast #83 with &lt;strong&gt;Johan Vos&lt;/strong&gt; and &lt;strong&gt;Stephen Chin&lt;/strong&gt;&lt;/a&gt;
: OpenJDK Evolutions plus Tips and Tricks:
&lt;ul&gt;
&lt;li&gt;Johan takes us on a journey through Java&amp;rsquo;s history, from porting Java to Linux in 1995 to his current work on bringing Java and JavaFX to mobile and embedded devices through the Java On Mobile project.&lt;/li&gt;
&lt;li&gt;Stephen is the author of &amp;ldquo;The Definitive Guide to Modern Java Clients with JavaFX,&amp;rdquo; who shares insights on building cross-platform client applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Troels Mortensen&lt;/strong&gt; is working on a series of YouTube tutorials:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=LsxLAjTXROw" target="_blank" rel="noopener noreferrer"&gt;Your first app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=_jEooKZFWkI" target="_blank" rel="noopener noreferrer"&gt;Your first button&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=pv4pZx7ewww" target="_blank" rel="noopener noreferrer"&gt;Your first TextField&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=tjq0XfaY6Zg" target="_blank" rel="noopener noreferrer"&gt;Simple app structure&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=j02aTD7AMkA" target="_blank" rel="noopener noreferrer"&gt;Introducing the SceneBuilder&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=iTMEyaQJxjo" target="_blank" rel="noopener noreferrer"&gt;Designing in the SceneBuilder&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=JkONOwnDTDs" target="_blank" rel="noopener noreferrer"&gt;Opening the SceneBuilder through IntelliJ&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=8OO5-p2mBjs" target="_blank" rel="noopener noreferrer"&gt;Your first controller&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=peZT8Fv6MzE&amp;amp;t=1s" target="_blank" rel="noopener noreferrer"&gt;Introducing the View Manager&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=jSXD3-rg8P0" target="_blank" rel="noopener noreferrer"&gt;Passing data between views&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ylkQyqZxiIg" target="_blank" rel="noopener noreferrer"&gt;ViewManager v3&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=KVD12NS8VQg" target="_blank" rel="noopener noreferrer"&gt;Putting fxml files into resource directory&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=8eIY_xsRm2A" target="_blank" rel="noopener noreferrer"&gt;Single view application&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=AUNqzm4AJxo" target="_blank" rel="noopener noreferrer"&gt;The Controller Configurator&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=8gvLIt5zSxg" target="_blank" rel="noopener noreferrer"&gt;By &lt;strong&gt;Sour coders&lt;/strong&gt;&lt;/a&gt;
: JavaFX install and setup in IntelliJ (Local JavaFX template) with Scene Builder setup.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=rLSiLMbpdUY" target="_blank" rel="noopener noreferrer"&gt;By &lt;strong&gt;Programming of Life&lt;/strong&gt;&lt;/a&gt;
: Mini JavaFX Particles Animation Tutorial | Beautiful FX Effect in Under 100 Lines&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/hansolo.eu/post/3m5fzwwhuoc2l" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; has fans! 😉&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Yesterday at the event of the Amsterdam JUG, someone from the audience came to me after my session and thanked me for creating the JavaFX libraries I did create&amp;hellip; It always makes me really happy to see people use the things that I just created for the fun of it. Love the Java Community.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Interesting read: &lt;a href="https://iifx.dev/en/articles/457273426/solving-the-java-24-javafx-24-compatibility-issue-unsafe-access-flag" target="_blank" rel="noopener noreferrer"&gt;Solving the Java 24/JavaFX 24 Compatibility Issue: Unsafe Access Flag&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;The warnings you&amp;rsquo;re seeing, especially those related to sun.misc.Unsafe and WARNING: package sun.misc not in java.base, are a direct result of JEP 471 and JEP 498 in the newer Java versions (starting around JDK 23/24). &amp;hellip; Future JavaFX Versions (JavaFX 25 and beyond) are expected to have this internal usage removed or replaced with modern alternatives (like the Foreign Function &amp;amp; Memory API introduced in Java). Until then, using the &amp;ndash;sun-misc-unsafe-memory-access=allow flag is the correct way to handle this transition period. You should keep an eye on the JavaFX release notes for updates on when this internal dependency is completely phased out!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/markjkoch.bsky.social/post/3m5yyiqgmxk2y" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mark J. Koch&lt;/strong&gt; needs a JavaFX-break&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;My end of the year goal is to make this pile of circuits into a working analog synth. Then, and only then, am I allowed to go back to gamedev on my JavaFX Neuromancer PC remake while sipping egg nog. Too many hobbies.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1p6ek5p/new_color_picker_idea/" target="_blank" rel="noopener noreferrer"&gt;Screenshot by &lt;strong&gt;jaavaaguru&lt;/strong&gt; on Reddit&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;m working on a theme designer app, and came up with this color picker idea this morning and implemented it from scratch. Any thoughts for improvements?&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@frankdelporte/115612004093020148" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; introduced the new hashtag #JavaOnSingleBoardComputers&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;Thanks to DFRobot, I took my first step toward testing other single-board computers with Java, JavaFX, and Pi4J. The LattePanda IOTA looks like a great board and calls for more experiments after a quick first test&amp;hellip;&lt;/em&gt; &amp;quot; &lt;a href="https://webtechie.be/post/2025-11-25-first-test-lattepanda-iota-with-ubuntu-and-java/" target="_blank" rel="noopener noreferrer"&gt;Video and blog are available here&lt;/a&gt;
 and show a JavaFX JBang application running smoothly on the IOTA.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;Tools: &lt;a href="https://www.jfx-central.com/tools/sdkman-gui" target="_blank" rel="noopener noreferrer"&gt;SDKMAN GUI&lt;/a&gt;
, a modern graphical management tool for SDKMAN, providing an Applite-like user experience.&lt;/li&gt;
&lt;li&gt;Showcase: &lt;a href="https://www.jfx-central.com/real_world/sparrow" target="_blank" rel="noopener noreferrer"&gt;Sparrow Bitcoin Wallet&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;People: &lt;a href="https://www.jfx-central.com/people/c.raw" target="_blank" rel="noopener noreferrer"&gt;Craig Raw&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/Mc3fUTxoKIg" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Craig Raw about the Sparrow Bitcoin Wallet&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The links of October got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-october-2025/"&gt;published on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>From Spring Boot To Jakarta EE 11</title><link>https://foojayio.github.io/website/today/from-spring-boot-to-jakarta-ee-11-how-payara-starter-eases-the-transition/</link><pubDate>Fri, 28 Nov 2025 08:11:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/from-spring-boot-to-jakarta-ee-11-how-payara-starter-eases-the-transition/</guid><description>&lt;p&gt;If you&amp;rsquo;ve been living in the Spring ecosystem, you&amp;rsquo;re used to fast project setup. Spring Initializr gives you a sleek interface, some starter dependencies and a running project within minutes. Now you&amp;rsquo;re moving to Jakarta EE, where do you begin?&lt;/p&gt;
&lt;p&gt;In this blog, you&amp;rsquo;ll see how Spring developers &lt;strong&gt;can create Jakarta EE applications with the same ease they&amp;rsquo;re used to from Spring Initializr.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s be honest: Spring Boot abstracts away so much of the setup pain that you forget it&amp;rsquo;s even there. You don&amp;rsquo;t worry about the underlying servlet container, dependency versions or deployment descriptors, as Spring Boot handles it all.&lt;/p&gt;</description></item><item><title>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>The Visitor Pattern - 'Revisited' using Data Oriented Programming techniques</title><link>https://foojayio.github.io/website/today/the-visitor-pattern-revisited-using-data-oriented-programming-techniques/</link><pubDate>Wed, 26 Nov 2025 10:38:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-visitor-pattern-revisited-using-data-oriented-programming-techniques/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Design patterns are great, they standardize solutions for common programming problems so you don&amp;rsquo;t shoot yourself in the foot or reinvent the wheel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;However, some might argue that some design patterns only exist in a programming language because that language lacks a way to elegantly and efficiently express it in its syntax.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For example, the &lt;a href="https://en.wikipedia.org/wiki/Strategy_pattern" target="_blank" rel="noopener noreferrer"&gt;Strategy pattern&lt;/a&gt;
 is a design pattern that enables selecting algorithms at runtime. Taking the example of different &lt;em&gt;strategies&lt;/em&gt; of tax calculation, let&amp;rsquo;s see what an implementation looked like &lt;em&gt;before&lt;/em&gt; java 8:&lt;/p&gt;</description></item><item><title>Will OpenJFX Be Merged Into OpenJDK? It Would Be a Perfect Match with Java on Mobile!</title><link>https://foojayio.github.io/website/today/will-openjfx-be-merged-into-openjdk-it-would-be-a-perfect-match-with-java-on-mobile/</link><pubDate>Wed, 26 Nov 2025 09:18:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/will-openjfx-be-merged-into-openjdk-it-would-be-a-perfect-match-with-java-on-mobile/</guid><description>&lt;p&gt;While looking for articles for the &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;JFX Central Links Of The Week&lt;/a&gt;
, I found this very interesting &lt;a href="https://www.infoworld.com/article/4082709/will-javafx-return-to-java.html" target="_blank" rel="noopener noreferrer"&gt;article by &lt;strong&gt;Paul Krill&lt;/strong&gt; on InfoWorld&lt;/a&gt;
. It&amp;rsquo;s based on an &lt;a href="https://mail.openjdk.org/pipermail/discuss/2025-October/006553.html" target="_blank" rel="noopener noreferrer"&gt;October 29 post by &lt;strong&gt;Bruce Haddon&lt;/strong&gt; on an OpenJDK discussion list&lt;/a&gt;
 in which he argues that the reasons for the separation of OpenJFX from OpenJDK in Java 11, more than seven years ago, are much less applicable today.&lt;/p&gt;
&lt;p&gt;Again, some exciting developments seem to be happening in the Java world! There&amp;rsquo;s a growing discussion about bringing JavaFX back into the OpenJDK, and it couldn&amp;rsquo;t come at a better time, especially with Johan Vos and the team at Gluon working hard on making Java a first-class citizen on mobile platforms.&lt;/p&gt;</description></item><item><title>BoxLang Redis Has Landed: Enterprise-Grade Caching, Pub/Sub, and Distributed Locking</title><link>https://foojayio.github.io/website/today/boxlang-redis-has-landed-enterprise-grade-caching-pub-sub-and-distributed-locking/</link><pubDate>Tue, 25 Nov 2025 09:33:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-redis-has-landed-enterprise-grade-caching-pub-sub-and-distributed-locking/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-redis-has-landed-enterprise-grade-caching-pub-sub-and-distributed-locking/bx-redis-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re thrilled to announce the release of the &lt;strong&gt;BoxLang Redis Module&lt;/strong&gt; (&lt;code&gt;bx-redis&lt;/code&gt;) - a powerful addition to BoxLang that brings enterprise-grade Redis functionality directly into your applications. Whether you&amp;rsquo;re building distributed systems, implementing real-time messaging, or need high-performance caching, this module has you covered.&lt;/p&gt;
&lt;h2 id="h2-0-what-is-the-redis-module"&gt;🎯 What is the Redis Module?&lt;/h2&gt;
&lt;p&gt;The BoxLang Redis Module provides native Redis functionality, enabling you to connect to Redis instances, clusters, or Sentinel setups with ease. It seamlessly integrates with BoxLang&amp;rsquo;s caching infrastructure while adding powerful new capabilities like publish/subscribe messaging and distributed locking.&lt;/p&gt;</description></item><item><title>The Art of Performance Tuning: Why Saving 30% in the Cloud Means Nothing if Your Code Wastes 1000× More</title><link>https://foojayio.github.io/website/today/the-art-of-performance-tuning-why-saving-30-in-the-cloud-means-nothing-if-your-code-wastes-1000x-more/</link><pubDate>Tue, 25 Nov 2025 06:46:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-art-of-performance-tuning-why-saving-30-in-the-cloud-means-nothing-if-your-code-wastes-1000x-more/</guid><description>&lt;h2 id="h2-0-the-hidden-cost-of-good-enough-code"&gt;The Hidden Cost of &amp;ldquo;Good Enough&amp;rdquo; Code&lt;/h2&gt;
&lt;p&gt;A few weeks ago, Kirk Pepperdine published a fascinating performance challenge &amp;mdash; a small Java code snippet that appeared trivial but produced puzzling runtime behavior.&lt;/p&gt;
&lt;p&gt;He invited readers to take a shot at solving it. If you haven&amp;rsquo;t seen it yet, stop here for a moment and try it yourself &amp;mdash; and when you&amp;rsquo;re done, check his Kirk&amp;rsquo;s official solution&lt;/p&gt;
&lt;p&gt;When I saw it, I thought it would be a fun exercise to revisit some fundamentals &amp;mdash; but the deeper I went, the more I realized it wasn&amp;rsquo;t just about performance. It was about how we think.&lt;/p&gt;</description></item><item><title>Foojay Podcast 83: OpenJDK Evolutions plus Tips and Tricks</title><link>https://foojayio.github.io/website/today/foojay-podcast-83/</link><pubDate>Mon, 24 Nov 2025 06:07:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-83/</guid><description>&lt;p&gt;Welcome to another episode of the Foojay Podcast! Just like in the previous episode, I bring you conversations from two of Europe&amp;rsquo;s premier Java conferences - Devoxx in Belgium and JFall in the Netherlands.&lt;/p&gt;
&lt;p&gt;At these conferences, I had the opportunity to speak with members of the Java community about topics ranging from the evolution of Java itself to mobile development, performance optimization, and even automotive security.&lt;/p&gt;
&lt;p&gt;My first guest is Johan Vos, a Java Champion who takes us on a journey through Java&amp;rsquo;s history - from porting Java to Linux in 1995 to his current work on bringing Java and JavaFX to mobile and embedded devices through the Java On Mobile project.&lt;/p&gt;</description></item><item><title>Spring Framework 7.0 Jakarta EE 11 Compatibility</title><link>https://foojayio.github.io/website/today/spring-framework-7-0-and-spring-data-2025-1-0-embrace-jakarta-ee-11-compatibility/</link><pubDate>Fri, 21 Nov 2025 13:50:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-framework-7-0-and-spring-data-2025-1-0-embrace-jakarta-ee-11-compatibility/</guid><description>&lt;p&gt;The recent releases of&lt;a href="https://spring.io/blog/2025/11/13/spring-framework-7-0-general-availability" title=" Spring Framework 7.0" target="_blank" rel="noopener noreferrer"&gt;Spring Framework 7.0&lt;/a&gt;
 and &lt;a href="https://spring.io/blog/2025/11/14/spring-data-2025-1-goes-ga" title="Spring Data 2025.1.0" target="_blank" rel="noopener noreferrer"&gt;Spring Data 2025.1.0&lt;/a&gt;
 mark an important milestone for the Java ecosystem, with both now aligned with &lt;a href="https://jakarta.ee/news/jakarta-ee-11-released/" title="Jakarta EE 11" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE 11&lt;/a&gt;
. This compatibility represents a continued convergence between the two major Enterprise Java Platforms.&lt;/p&gt;
&lt;h2 id="h2-0-why-this-matters"&gt;Why This Matters&lt;/h2&gt;
&lt;p&gt;Compatibility with Jakarta EE 11 ensures that Spring applications can integrate more naturally with modern Jakarta runtimes, including Payara Platform. This leads to improvements such as:&lt;/p&gt;</description></item><item><title>Navigating the Nuances of GraphRAG vs. RAG</title><link>https://foojayio.github.io/website/today/navigating-the-nuances-of-graphrag-vs-rag/</link><pubDate>Thu, 20 Nov 2025 21:28:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/navigating-the-nuances-of-graphrag-vs-rag/</guid><description>&lt;p&gt;While large language models (LLMs) hold immense promise for building AI applications and agentic systems, ensuring they generate reliable and trustworthy outputs remains a persistent challenge. Effective data management&amp;mdash;particularly how data is stored, retrieved, and accessed&amp;mdash;is crucial to overcoming this issue. Retrieval-augmented generation (RAG) has emerged as a widely adopted strategy, grounding LLMs in external knowledge beyond their original training data.&lt;/p&gt;
&lt;p&gt;The standard, or baseline, implementation of RAG typically relies on a vector-based approach. While effective for retrieving contextually relevant documents and references, vector-based RAG faces limitations in other situations, particularly when applications require robust reasoning capabilities and the ability to understand complex relationships between diverse concepts spread across large knowledge bases. This can lead to outputs that disappoint or even mislead end-users.&lt;/p&gt;</description></item><item><title>Goodbye Payara Community 6, welcome Payara Community 7</title><link>https://foojayio.github.io/website/today/goodbye-payara-community-6-on-to-the-next-chapter-with-payara-community-7/</link><pubDate>Thu, 20 Nov 2025 16:00:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/goodbye-payara-community-6-on-to-the-next-chapter-with-payara-community-7/</guid><description>&lt;p&gt;With the November 2025 release, Payara community reached an important milestone. Payara Platform Community 6 &lt;a href="https://payara.fish/blog/whats-new-in-the-payara-platform-november-2025-release/" title="received its final update" target="_blank" rel="noopener noreferrer"&gt;received its final update&lt;/a&gt;
 , marking the official end of community support for the 6.x line. At the same time, we introduced Payara Platform Community 7, a new generation of the platform built for Jakarta EE 11 and modern cloud native development.&lt;/p&gt;
&lt;p&gt;See what this transition means and how it benefits Java and Jakarta EE developers today and long term.&lt;/p&gt;</description></item><item><title>Service Layer Pattern in Java With Spring Boot</title><link>https://foojayio.github.io/website/today/service-layer-pattern-in-java-with-spring-boot/</link><pubDate>Tue, 18 Nov 2025 14:40:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/service-layer-pattern-in-java-with-spring-boot/</guid><description>&lt;p&gt;In modern software design, it is important to develop code that is clean and maintainable. One way developers do this is using the &lt;strong&gt;Service Layer pattern&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="h2-0-what-you-ll-learn"&gt;What you&amp;rsquo;ll learn&lt;/h2&gt;
&lt;p&gt;In this article, you&amp;rsquo;ll learn:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What the Service Layer pattern is and why it matters.&lt;/li&gt;
&lt;li&gt;How it fits with the MVC architecture.&lt;/li&gt;
&lt;li&gt;How to implement it in a real Spring Boot application.&lt;/li&gt;
&lt;li&gt;How to add MongoDB with minimal code.&lt;/li&gt;
&lt;li&gt;Best practices and common mistakes to avoid.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-what-is-the-service-layer-pattern"&gt;What is the Service Layer pattern?&lt;/h2&gt;
&lt;p&gt;The Service Layer pattern is an architectural pattern that defines an application&amp;rsquo;s boundary with a layer of services that establishes a set of available operations and coordinates the application&amp;rsquo;s response in each operation.&lt;/p&gt;</description></item><item><title>Foojay Podcast #82: OpenJDK Projects (Leyden, Babylon, Panama) and TornadoVM</title><link>https://foojayio.github.io/website/today/foojay-podcast-82/</link><pubDate>Mon, 17 Nov 2025 07:35:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-82/</guid><description>&lt;p&gt;In this Foojay Podcast, we&amp;rsquo;re diving deep into some of the most exciting developments happening within the OpenJDK and TornadoVM projects.&lt;/p&gt;
&lt;p&gt;At the Devoxx and JFall conferences, we spoke with several speakers and visitors about some of the major themes shaping the future of Java development. The first guest is Moritz Halbritter from the Spring Engineering team. He provides us with more insights into Project Leyden and how it&amp;rsquo;s improving Java startup times through ahead-of-time compilation and profiling. We&amp;rsquo;ll learn how Spring Boot developers can already take advantage of these improvements today.&lt;/p&gt;</description></item><item><title>Micrometer &amp; Prometheus in Spring Boot: Kafka Burger Orders</title><link>https://foojayio.github.io/website/today/micrometer-prometheus-in-spring-boot-kafka-burger-orders/</link><pubDate>Fri, 14 Nov 2025 10:13:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/micrometer-prometheus-in-spring-boot-kafka-burger-orders/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/eSreg0xPGqo?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;br /&gt;
&lt;p&gt;👨‍💻 GitHub: &lt;a href="https://github.com/vinny59200/dukeburger" target="_blank" rel="noopener noreferrer"&gt;https://github.com/vinny59200/dukeburger&lt;/a&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪&lt;/p&gt;
&lt;p&gt;This guide shows how to use &lt;strong&gt;Micrometer and Prometheus in Spring Boot&lt;/strong&gt; to track a custom metric for a Kafka-driven Burger Orders app. You&amp;rsquo;ll post a burger order to a REST endpoint, publish it to Kafka, consume the topic, and increment a counter for all &amp;ldquo;DukeBurger&amp;rdquo; orders. Copy the snippets, run, and you&amp;rsquo;ll see your metric on &lt;code&gt;/actuator/prometheus&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Beyond Keywords: Hybrid Search With Atlas and Vector Search (Part 3)</title><link>https://foojayio.github.io/website/today/beyond-keywords-hybrid-search-with-atlas-and-vector-search-part-3/</link><pubDate>Thu, 13 Nov 2025 13:56:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/beyond-keywords-hybrid-search-with-atlas-and-vector-search-part-3/</guid><description>&lt;p&gt;Bringing together semantic vectors and exact keyword matching with $rankFusion&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve been following along this series, you already know we started by giving our movie search app the ability to understand meaning&amp;mdash;not just keywords&amp;mdash;using semantic search, as discussed in &lt;a href="https://foojayio.github.io/website/today/beyond-keywords-implementing-semantic-search-in-java-with-spring-data-part-1/"&gt;&lt;em&gt;Part 1: Implementing Semantic Search in Java With Spring Data&lt;/em&gt;&lt;/a&gt;
. Then, we made it even smarter by adding filters and optimizing performance with embedding strategies in &lt;a href="https://foojayio.github.io/website/today/beyond-keywords-optimizing-vector-search-with-filters-and-caching-part-2/"&gt;&lt;em&gt;Part 2: Optimizing Vector Search With Filters and Caching&lt;/em&gt;&lt;/a&gt;
.&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>The Cost of Not Knowing MongoDB - Part 3: (appV6R0 to appV6R4)</title><link>https://foojayio.github.io/website/today/the-cost-of-not-knowing-mongodb-part-3-appv6r0-to-appv6r4/</link><pubDate>Tue, 11 Nov 2025 19:31:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-cost-of-not-knowing-mongodb-part-3-appv6r0-to-appv6r4/</guid><description>&lt;p&gt;Welcome to the third and final part of the series &amp;ldquo;The Cost of Not Knowing MongoDB.&amp;rdquo; Building upon the foundational optimizations explored in &lt;a href="https://foojayio.github.io/website/today/the-cost-of-not-knowing-mongodb-part-1-appv0-to-appv4/"&gt;Part 1&lt;/a&gt;
 and &lt;a href="https://foojayio.github.io/website/today/the-cost-of-not-knowing-mongodb-part-2-appv5r0-to-appv5r4/"&gt;Part 2&lt;/a&gt;
, this article delves into advanced MongoDB design patterns that can dramatically transform application performance.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/the-cost-of-not-knowing-mongodb-part-1-appv0-to-appv4/"&gt;Part 1&lt;/a&gt;
, we improved application performance by concatenating fields, changing data types, and shortening field names. In &lt;a href="https://foojayio.github.io/website/today/the-cost-of-not-knowing-mongodb-part-2-appv5r0-to-appv5r4/"&gt;Part 2&lt;/a&gt;
, we implemented the Bucket Pattern and Computed Pattern and optimized the aggregation pipeline to achieve even better performance.&lt;/p&gt;</description></item><item><title>BoxLang 1.7 Released!</title><link>https://foojayio.github.io/website/today/boxlang-1-7-0-delivers-streaming-distributed-caching-and-enhanced-jvm-performance/</link><pubDate>Tue, 11 Nov 2025 12:59:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-7-0-delivers-streaming-distributed-caching-and-enhanced-jvm-performance/</guid><description>&lt;p&gt;&lt;strong&gt;Dynamic JVM Language Adds Server-Sent Events, JDBC Cache Store, and AST Generation Capabilities&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Houston, TX &amp;ndash; November 7, 2025&lt;/strong&gt; &amp;ndash; Ortus Solutions announced the release of &lt;strong&gt;BoxLang 1.7.0&lt;/strong&gt;, a major update to its modern dynamic language for the JVM that delivers enterprise-grade capabilities for building real-time, horizontally scalable, and AI-driven applications.&lt;/p&gt;
&lt;p&gt;This release introduces &lt;strong&gt;native Server-Sent Events (SSE)&lt;/strong&gt; for real-time streaming, &lt;strong&gt;JDBC-powered distributed caching&lt;/strong&gt; , &lt;strong&gt;Abstract Syntax Tree (AST)&lt;/strong&gt; programmatic access, and &lt;strong&gt;bytecode compatibility versioning&lt;/strong&gt;&amp;mdash;alongside extensive performance optimizations across the runtime.&lt;/p&gt;</description></item><item><title>Java Security Starts with the JVM</title><link>https://foojayio.github.io/website/today/java-security-starts-with-the-jvm/</link><pubDate>Mon, 10 Nov 2025 12:37:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-security-starts-with-the-jvm/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;When it comes to Java security, the first thing that comes to mind should be the JVM. If you&amp;rsquo;re relying on outdated, unpatched, or unsupported Java runtimes, you&amp;rsquo;re taking unnecessary risks.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;In this article, you will learn:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Timely, predictable updates are critical for Java security&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Long-term security hinges on long-term support&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;If your Java runtime is compromised, every application that runs on it could be compromised too&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;As environments become cluttered with multiple JDK versions and unpatched workloads, organizations lose visibility into what&amp;rsquo;s deployed&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When it comes to securing your Java applications, the JVM might not be the first thing that comes to mind&amp;mdash;but it should be. Your JDK isn&amp;rsquo;t just a runtime; it&amp;rsquo;s part of your software supply chain. If you&amp;rsquo;re relying on outdated, unpatched, or unsupported Java runtimes, you&amp;rsquo;re taking unnecessary risks.&lt;/p&gt;</description></item><item><title>A Guide to SonarQube MCP Server on IntelliJ</title><link>https://foojayio.github.io/website/today/your-new-ai-powered-coding-buddy-a-guide-to-sonarqube-mcp-server-on-intellij/</link><pubDate>Fri, 07 Nov 2025 17:00:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/your-new-ai-powered-coding-buddy-a-guide-to-sonarqube-mcp-server-on-intellij/</guid><description>&lt;p&gt;Hey Java devs! 👋 Ever feel like you&amp;rsquo;re drowning in a sea of code, trying to keep it reliable,, efficient, and secure? We&amp;rsquo;ve all been there. Juggling new features, bug fixes, and pull requests is a daily grind. But what if you had an AI-powered assistant to help you out? That&amp;rsquo;s where the &lt;a href="https://github.com/SonarSource/sonarqube-mcp-server" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;SonarQube MCP Server&lt;/strong&gt;&lt;/a&gt;
 comes in. Let&amp;rsquo;s dive into how this cool new MCP can supercharge your daily coding routine. 🚀&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>Modeling Relationships With Hibernate ORM and MongoDB</title><link>https://foojayio.github.io/website/today/modeling-relationships-with-hibernate-orm-and-mongodb/</link><pubDate>Tue, 04 Nov 2025 17:08:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/modeling-relationships-with-hibernate-orm-and-mongodb/</guid><description>&lt;p&gt;In the&lt;a href="https://foojayio.github.io/website/today/getting-started-with-hibernate-orm-and-mongodb/"&gt;previous article&lt;/a&gt;
&amp;mdash;&lt;em&gt;Getting Started With Hibernate ORM and MongoDB&lt;/em&gt;&amp;mdash;we learned how to configure Hibernate to work with MongoDB, create an entity, and perform basic CRUD operations using the familiar Hibernate API.&lt;/p&gt;
&lt;p&gt;If you haven&amp;rsquo;t read that first part yet, I recommend starting there before continuing. It covers the project setup, dependencies, and the fundamentals that we&amp;rsquo;ll build upon here.&lt;/p&gt;
&lt;p&gt;In this second part, we&amp;rsquo;ll &lt;strong&gt;extend our application&lt;/strong&gt; to model relationships between entities&amp;mdash;introducing a Review entity and linking it to our existing Book class. This will allow us to explore more advanced capabilities of the MongoDB Hibernate integration, including:&lt;/p&gt;</description></item><item><title>Getting Started With Hibernate ORM and MongoDB</title><link>https://foojayio.github.io/website/today/getting-started-with-hibernate-orm-and-mongodb/</link><pubDate>Tue, 04 Nov 2025 17:06:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-hibernate-orm-and-mongodb/</guid><description>&lt;p&gt;For years, &lt;a href="https://hibernate.org/" target="_blank" rel="noopener noreferrer"&gt;Hibernate&lt;/a&gt;
 ORM has been one of the most popular frameworks in the Java ecosystem. It was built to simplify data persistence by letting developers work with Java objects instead of SQL statements, a technique known as &lt;em&gt;object-relational mapping (ORM)&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Traditionally, Hibernate ORM has been tightly associated with relational databases like PostgreSQL, MySQL, and Oracle. It manages connections, transactions, and entity state behind the scenes, and even provides &lt;strong&gt;Hibernate Query Language (HQL)&lt;/strong&gt; so you can query your data using Java entity names rather than table names.&lt;/p&gt;</description></item><item><title>Sonar Connect Zurich</title><link>https://foojayio.github.io/website/today/sonar-connect-zurich/</link><pubDate>Mon, 03 Nov 2025 17:19:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/sonar-connect-zurich/</guid><description>&lt;p&gt;&lt;strong&gt;Sonar Connect Zurich: Maximize the ROI of your generative AI projects&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where?&lt;/strong&gt; AWS Offices Event Space - Marsstrasse 2, 8002 Zurich, Switzerland&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When?&lt;/strong&gt; November 18, 13:00 - 17:00&lt;/p&gt;
&lt;p&gt;Generative AI projects&amp;mdash;especially code assistants&amp;mdash;introduce new complexities. Maintaining code quality and security is paramount to control the exponential growth of technical debt and ensure you achieve the desired return on investment (ROI). Join us at the AWS offices to:&lt;/p&gt;
&lt;p&gt;Gain insights on the key success factors for Gen AI coding projects, based on data from thousands of customers.&lt;/p&gt;</description></item><item><title>Let's create an AI MCP server with Quarkus</title><link>https://foojayio.github.io/website/today/lets-talk-about-mcp/</link><pubDate>Mon, 03 Nov 2025 10:15:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/lets-talk-about-mcp/</guid><description>&lt;h2 id="h2-0-hey-java-devs-let-s-talk-about-ai-mcp"&gt;&lt;strong&gt;Hey Java Devs, Let&amp;rsquo;s Talk About AI MCP! 🤖&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Ever feel like your AI models are stuck in a bubble, cut off from the real-time data and tools they need to be truly useful? Well, you&amp;rsquo;re not alone! This has been a major headache for developers. But what if I told you there&amp;rsquo;s a new sheriff in town that&amp;rsquo;s changing the game? Enter the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="h3-1-so-what-s-the-big-deal-with-mcp"&gt;&lt;strong&gt;So, What&amp;rsquo;s the Big Deal with MCP?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Think of MCP as a universal translator for your AI. It&amp;rsquo;s an open standard that lets AI assistants, like large language models (LLMs), seamlessly connect with external data sources, tools, and just about any environment you can think of. No more building custom, one-off integrations for every single tool and data source. With MCP, you create a standardized way for your AI to talk to the outside world. Pretty neat, huh? 😉&lt;/p&gt;</description></item><item><title>Foojay Podcast #81: Maven 4 - The Future of Java Build Automation</title><link>https://foojayio.github.io/website/today/foojay-podcast-81/</link><pubDate>Mon, 03 Nov 2025 06:03:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-81/</guid><description>&lt;p&gt;&lt;strong&gt;Maven 4 is approaching its release, bringing many improvements to the build tool powering millions of Java projects.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this Foojay Podcast episode, we talk about Apache Maven 4, a significant milestone that has been years in the making. Maven has been the backbone of Java dependency management and build automation since the early 2000s; however, the road to version 4 has been a long and deliberate one. With significant performance improvements, a modernized API for plugin developers, and changes that affect how we think about project structure, Maven 4 represents both an evolution and a revolution. What does this mean for the millions of developers who depend on Maven daily? How should teams prepare for the transition? And what&amp;rsquo;s the story behind the Maven Central Repository changes that have been making headlines? To answer these questions and more, we&amp;rsquo;re joined by a few of the many contributors who are actually building Maven 4 and stewarding its ecosystem.&lt;/p&gt;</description></item><item><title>JavaFX Links of October 2025</title><link>https://foojayio.github.io/website/today/javafx-links-of-october-2025/</link><pubDate>Fri, 31 Oct 2025 07:31:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-october-2025/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of October 2025. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.infoworld.com/article/4065025/javafx-25-previews-javafx-controls-in-title-bars.html" target="_blank" rel="noopener noreferrer"&gt;Article by &lt;strong&gt;Paul Krill&lt;/strong&gt;&lt;/a&gt;
: JavaFX 25 previews JavaFX controls in title bars. &amp;ldquo;&lt;em&gt;Preview feature in latest update of the Java client application platform defines a Stage style that allows applications to place scene graph nodes in the header bar area.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/115309280336500000" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; is working on Java on Mobile&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I can now run HelloFX on an iPhone. This required only really minor changes to OpenJFX and OpenJDK, and I&amp;rsquo;ll update &lt;a href="https://github.com/openjdk-mobile/openjfx-build" target="_blank" rel="noopener noreferrer"&gt;github.com/openjdk-mobile/openjfx-build&lt;/a&gt;
 as soon as I find some time. Most of the work (&amp;gt; 99%) went into understanding the tons of options in XCode. Next step is the integration of Leyden code into OpenJDK/mobile. Hope to get support from the Leyden experts.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/gluonhq.com/post/3m3puhsuhrk2a" target="_blank" rel="noopener noreferrer"&gt;Message from Gluon&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The CPU releases for JavaFX are available. &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;Download the latest JavaFX SDKs with security fixes&lt;/a&gt;
 or get them from Maven Central. You&amp;rsquo;ll find the latest released, JavaFX 25.0.1 and the Gluon JavaFX LTS releases 17.0.17 and 21.0.9.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Is the &amp;ldquo;OpenSource Model&amp;rdquo; broken for OpenJFX (and all other projects)? And are those who are making money from it not interested in fixing it? &lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3m3mejmxq5k2p" target="_blank" rel="noopener noreferrer"&gt;Interesting discussion on Bluesky&lt;/a&gt;
&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-scenebuilder"&gt;SceneBuilder&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Plant Fall&lt;/strong&gt; is working on a SceneBuilder-alternative without XML, see the &lt;a href="https://www.youtube.com/watch?v=TpYZLPtD62A" target="_blank" rel="noopener noreferrer"&gt;video on YouTube&lt;/a&gt;
. Looks like it&amp;rsquo;s in early stage, curious to see how it will evolve&amp;hellip;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Plant Fall&lt;/strong&gt; published a new video about a SceneBuilder-alternative without XML: &amp;ldquo;&lt;em&gt;In &lt;a href="https://www.youtube.com/watch?v=BrXzMbWUU-Y" target="_blank" rel="noopener noreferrer"&gt;this video&lt;/a&gt;
, I show the progress of Morphos Desktop FX &amp;ndash; Version 2, a powerful GUI builder that lets you create your JavaFX interfaces visually &amp;mdash; and now it can generate complete source code and save your layouts as JSON files.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/trixon.se/post/3lzsd33jkzs2a" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Patrik Karlström&lt;/strong&gt; released version 25.09 of nbRsync&lt;/a&gt;
, a rsync GUI: &amp;ldquo;&lt;em&gt;It&amp;rsquo;s mostly about dependency updates such as Netbeans 27, JDK and JavaFX 25.&lt;/em&gt; &amp;quot; You can find it on &lt;a href="https://github.com/trixon/nbRsync" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/logorrr.bsky.social/post/3lzywsev5622b" target="_blank" rel="noopener noreferrer"&gt;Video shared by LogoRRR on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Working on a nice addition to LogoRRR - Group and reuse your search queries! Reapply them to your multiple log files - this will surely save you time. This will be part of the next release.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/logorrr.bsky.social/post/3m3bbbh3pjk2x" target="_blank" rel="noopener noreferrer"&gt;LogoRRR shared a screenshot of an upcoming release&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The goal is absolute simplicity for you, which requires a lot of development and careful planning behind the scenes.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patrik Karlström&lt;/strong&gt; announced &lt;a href="https://bsky.app/profile/trixon.se/post/3m2k7itmwi22z" target="_blank" rel="noopener noreferrer"&gt;Mapton 25.10&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;&amp;hellip;the open source Java(FX) based generic map platform built on WorldWind Netbeans 27 platform &amp;amp; JDK 25. 👋 Downloads with runtime from
Azul are &lt;a href="https://github.com/trixon/mapton/releases" target="_blank" rel="noopener noreferrer"&gt;available for Windows &amp;amp; Linux&lt;/a&gt;
 (including appimage &amp;amp; snapcraft).&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/mirkosertic.de/post/3m3sgoql3k22o" target="_blank" rel="noopener noreferrer"&gt;Message by &lt;strong&gt;Mirko Sertic&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I found some time to update JavaFX DesktopSearch to the latest Java 25, Lucene and#Tika releases. Maybe I will also add some LLM or MCP features. We&amp;rsquo;ll find out. &lt;a href="https://github.com/mirkosertic/FXDesktopSearch" target="_blank" rel="noopener noreferrer"&gt;Checkout on GitHub&lt;/a&gt;
 for more to come 🙂&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://social.binjr.eu/@binjr/statuses/01K8R4TE2R0HDXQR1816KE4MC6" target="_blank" rel="noopener noreferrer"&gt;v3.25.0 of binjr, a standalone time series browser, is now available&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Aside from being based on the latest Java25 runtime &amp;mdash; making this a somewhat themed release &amp;mdash; the main features this time around are: much improved support for the ZGC garbage collector logs files for the OpenJDK JVM, improvements to handling of CSV files with things like support for comments and better number parsing for uncommon notations, bug fixes, and quality of life enhancements. Full changelog and download links are available on &lt;a href="https://binjr.eu" target="_blank" rel="noopener noreferrer"&gt;binjr.eu&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;No JavaFX, but still very impressive Java-based game development: Nostr Game Engine on &lt;a href="https://github.com/NostrGameEngine/ngengine" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
 and &lt;a href="https://ngengine.org/" target="_blank" rel="noopener noreferrer"&gt;here is the website&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;Based on jMonkeyEngine. A game engine and framework for building games and applications integrated with the Nostr ecosystem and p2p networking.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;KickstartFX is an impressive project by &lt;strong&gt;Christopher Schnick&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;An advanced, ready-to-use template for JavaFX applications. It can serve as a solid foundation for your own JavaFX application as everything is fully customizable and extendable. KickstartFX is much more than just a basic template that opens a simple window. It contains a lot of code to handle the challenges of applications in the real world to achieve the best possible desktop application experience across all operating systems. The code is based on &lt;a href="https://github.com/xpipe-io/xpipe" target="_blank" rel="noopener noreferrer"&gt;XPipe&lt;/a&gt;
, a well-established JavaFX application, and is the result of years of experience developing a desktop application that is used by many thousands of users right now.&lt;/em&gt; &amp;quot; Very &lt;a href="https://kickstartfx.xpipe.io" target="_blank" rel="noopener noreferrer"&gt;detailed documentation is available here&lt;/a&gt;
 and the &lt;a href="https://github.com/xpipe-io/kickstartfx" target="_blank" rel="noopener noreferrer"&gt;sources are available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/sunnykentz.bsky.social/post/3m2k2gs3t6c2l" target="_blank" rel="noopener noreferrer"&gt;JPM promises to provide a better experience compared to Maven and Gradle&lt;/a&gt;
: &amp;ldquo;_Imagine if it was simple to create a desktop app in kotlin&amp;hellip;. Wait it is: &lt;a href="https://www.jpmhub.org/" target="_blank" rel="noopener noreferrer"&gt;jpmhub.org&lt;/a&gt;
: &lt;code&gt;MARKDOWN_HASH141e92adc7387a4d2beb57a986c7513bMARKDOWN&lt;/code&gt;&lt;em&gt;HASH&lt;/em&gt;.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/sunnykentz.bsky.social/post/3m37jrdglpc2a" target="_blank" rel="noopener noreferrer"&gt;JPM shared a video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;To show the true power of &lt;a href="https://foojayio.github.io/website/www.jpmhub.org"&gt;JPM&lt;/a&gt;
 I created Neutron, a native app builder that leverages the power of JavaFX&amp;rsquo;s webview for easy development.&lt;/em&gt; &amp;quot; &lt;a href="https://github.com/jpm-hub/neutron?tab=readme-ov-file" target="_blank" rel="noopener noreferrer"&gt;Sources on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/cdetastes.bsky.social/post/3m2w77c2kts2w" target="_blank" rel="noopener noreferrer"&gt;Message from &lt;strong&gt;Clément de Tastes&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A major milestone has been reached on the quarkus-fx extension as it now supports native build in its 0.10.0 release. &lt;a href="https://github.com/quarkiverse/quarkus-fx" target="_blank" rel="noopener noreferrer"&gt;Please report any found issue&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3m3mrf4f2ps2u" target="_blank" rel="noopener noreferrer"&gt;Message by Dirk Lemmermann&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Chasing memory leaks in my JavaFX based application is a breeze when using &lt;a href="https://github.com/Sandec/JMemoryBuddy" target="_blank" rel="noopener noreferrer"&gt;JMemoryBuddy&lt;/a&gt;
 from &lt;a href="https://bsky.app/profile/did:plc:mszvyrtwuphvznao54kwrqat" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Florian Kirmaier&lt;/strong&gt;&lt;/a&gt;
 I add it to my prod code, not just test classes. At any time I can see whether UI views got garbage collected or not. When I see that a view did to get garbage collected I launch &lt;a href="https://visualvm.github.io/" target="_blank" rel="noopener noreferrer"&gt;VisualVM&lt;/a&gt;
, search for the JMemoryBuddyLive instance (in the heapdump) with the uncollected view, click on the &amp;lsquo;referent&amp;rsquo; and open the &amp;lsquo;GC Root&amp;rsquo; view. That tells me what is still holding a reference to the view.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;And &lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3m3mk7r2usk2z" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk&lt;/strong&gt; shared screenshots&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I have added an updated and improved version of the SegmentedBar control to GemsFX. Will be released today in version 3.6.0. This is a real-world example of the SegmentedBar control being used. Our app is using it as part of the &amp;lsquo;debt collection&amp;rsquo; user interface. It shows how many bills haven&amp;rsquo;t been paid, how many have started the collection process, etc&amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3m3ufrkafyc27" target="_blank" rel="noopener noreferrer"&gt;Followed by screenshots of version 3.6.1&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I have added a new &amp;lsquo;StretchingTilePane&amp;rsquo; container so that I can finally create a nice responsive tile-based layout for the module selection view of our CRM solution. The default JavaFX TilePane does not fill the available width. It also came in handy for the launch pad section of our &amp;ldquo;market data portal&amp;rdquo;. Each card is a &amp;ldquo;tile&amp;rdquo; and depending on available width we want to either have two or three of them in a row.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-conferences-presentations"&gt;Conferences, Presentations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Talks from Devoxx Belgium using JavaFX:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://m.devoxx.com/events/dvbe25/talks/23160/java-adventures-jtaccuino-java-25-and-ai" target="_blank" rel="noopener noreferrer"&gt;Java Adventures - JTaccuino, Java 25 and AI&lt;/a&gt;
 by &lt;strong&gt;Sven Reimers&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;A demo packed session awaits you showing you the latest Java 25 features using JTacccuino notebooks. JTaccuino is a pure Java and JavaFX notebook solution, which allows for easy exploration in Java by leveraging JShell, dependency resolution, custom extensions and more. The aim is to reduce typical existing ceremony in API&amp;rsquo;s for simpler and more scripting style interaction.&lt;/em&gt; &amp;quot; The &lt;a href="https://www.youtube.com/watch?v=HJIst2dXKEA" target="_blank" rel="noopener noreferrer"&gt;video is available here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://m.devoxx.com/events/dvbe25/talks/26808/empowering-agentic-ai-with-industrial-and-scientific-javafx-desktop-applications-via-mcp" target="_blank" rel="noopener noreferrer"&gt;Empowering Agentic AI with Industrial and Scientific JavaFX Desktop Applications via MCP&lt;/a&gt;
 by &lt;strong&gt;Michael Hoffer&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;Most companies, research groups and development temas have established, high-quality desktop tools that are cut off from the benefits of Agentic AI. This talk will show how to integrate these existing JavaFX applications with AI using the Model Context Protocol (MCP), unlocking sophisticated new automation workflows.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://m.devoxx.com/events/dvbe25/talks/20674/robotics-and-graalvm-native-libraries" target="_blank" rel="noopener noreferrer"&gt;Robotics and GraalVM native libraries&lt;/a&gt;
 by &lt;strong&gt;Florian Enner&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;Our company creates custom robotic solutions for a wide range of applications, from performing real-world industrial inspection tasks to providing robust platforms for building intelligent autonomous systems. This presentation provides a rare behind-the-scenes look into how we use Java for real-time control, and why we are considering replacing parts of our C++ codebase with GraalVM&amp;rsquo;s native shared libraries.&lt;/em&gt; &amp;quot; The &lt;a href="https://www.youtube.com/watch?v=md2JFgegN7U" target="_blank" rel="noopener noreferrer"&gt;video is available here&lt;/a&gt;
. It shows a very impressive JavaFX UI with 3D visualization of the interactions with robot arms.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/did:plc:jx7h5s74cqipmtc7zrb5224m/post/3m27psgxob22t" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; is working on the 2025 update&lt;/a&gt;
 of his book with Java and JavaFX examples for the Raspberry Pi: &amp;ldquo;&lt;em&gt;I have just published a new version of my book, &amp;lsquo;Getting Started with Java on the Raspberry Pi,&amp;rsquo; on Leanpub. If you purchase now, you will receive any future updates at no additional cost. Updated for Java 25, with more updates following soon!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A new video by &lt;strong&gt;Catherine Edelveis&lt;/strong&gt; : &lt;a href="https://www.youtube.com/watch?v=2KiFPZIc0MI" target="_blank" rel="noopener noreferrer"&gt;Top 7 JavaFX Testing Mistakes You Need To Avoid!&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Stop making these common JavaFX testing mistakes! No more random NullPointerExceptions or deadlocks &amp;mdash; in this video, we&amp;rsquo;ll show you how to fix the 7 most common TestFX pitfalls when testing JavaFX applications. Learn how to handle FX threading, integrate with Spring Boot, avoid event queue races, fix pixel test differences, configure headless CI with Monocle, and properly separate business logic from UI tests. Whether you&amp;rsquo;re writing your first JavaFX test or debugging flaky CI builds, this guide will help you build reliable and maintainable UI tests.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;New &amp;ldquo;JavaFX In Action&amp;rdquo; interviews, published by &lt;strong&gt;Frank Delporte&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2025-10-16-jfxinaction-vlad-protsenko-closure-cljfx-defold/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Vlad Protsenko&lt;/strong&gt;, Combining Clojure with JavaFX for Game Development with Defold&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;Vlad is a Clojure developer working at Defold. While I initially wanted to learn about the Cljfx project, our conversation evolved into a learning experience: a practical getting-started guide to Clojure, a hands-on demonstration of building JavaFX user interfaces with minimal code, and an inside look at the Defold game engine and its JavaFX-based IDE.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="#ZgotmplZ"&gt;&lt;strong&gt;Matt Coley&lt;/strong&gt; about Recaf and the JavaFX libraries he&amp;rsquo;s working on&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;But unexpectedly, I got a deep-dive course on #Java byte code, obfuscated code, and how JARs can be (ab)used to hide the real code they are executing&amp;hellip;! So, it&amp;rsquo;s not just a new JavaFX In Action interview, but an inspiring story about how Matt got into the foundations of the Java language thanks to his love for Minecraft.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Abid Maqbool&lt;/strong&gt; published &lt;a href="https://www.linkedin.com/pulse/my-journey-porting-javafx-macos-iphone-challenges-tips-maqbool-7pxme/" target="_blank" rel="noopener noreferrer"&gt;My Journey of Porting JavaFX to macOS and iPhone &amp;mdash; Challenges, Tips, and Cross-Platform Lesson&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;In this article, I&amp;rsquo;ll share my motivations, challenges, setup, results, and key lessons from testing JavaFX for macOS and iPhone. Hopefully, this will help other developers aiming to explore true cross-platform Java development.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Haidar Ali&lt;/strong&gt; on the Baeldung website: &lt;a href="https://www.baeldung.com/javafx-constructor-vs-initialize" target="_blank" rel="noopener noreferrer"&gt;Constructor vs initialize() Method in OpenJFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;In this article, we&amp;rsquo;ll compare the standard constructor method of POJO and the JavaFX-specific initialize() method. First, we&amp;rsquo;ll grasp the JavaFX controller lifecycle, and then we&amp;rsquo;ll compare it against a constructor. Finally, we&amp;rsquo;ll look at some of the gotchas, pitfalls, and best practices that we can employ in a JavaFX software.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;From &lt;strong&gt;Michiel&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;Yes, I&amp;rsquo;ve managed to deploy my very first 100% Java (with JavaFX) mobile application in the &lt;a href="https://play.google.com/store/apps/details?id=nl.dotjava.javafx.iceconverter" target="_blank" rel="noopener noreferrer"&gt;Google Play Store&lt;/a&gt;
! I&amp;rsquo;ve described the &lt;a href="https://www.dotjava.nl/2025/10/05/signing-your-app-to-get-it-in-the-google-play-store/" target="_blank" rel="noopener noreferrer"&gt;process of getting it in the Play Store here&lt;/a&gt;
. Now you can convert euros to Icelandic krónur without building the app first 😉 Of course, it&amp;rsquo;s still &lt;a href="https://github.com/michiel-jfx/iceconverter" target="_blank" rel="noopener noreferrer"&gt;free and open source&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-8-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3lzzz7kiwhc26" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; is looking forward&lt;/a&gt;
 to Devoxx Belgium next week: &amp;ldquo;&lt;em&gt;Excellent speakers/sessions, and great atmosphere. I&amp;rsquo;m more than happy to do interviews about &lt;a href="https://github.com/openjdk-mobile" target="_blank" rel="noopener noreferrer"&gt;Java/JavaFX on Mobile&lt;/a&gt;
 so ping me if interested. (also happy to chat about quantum computing, javafx, science, cycling&amp;hellip;)&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/thejeed.bsky.social/post/3lzsrffhc622y" target="_blank" rel="noopener noreferrer"&gt;Weekend hustle by &lt;strong&gt;David&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Testing JavaFX Direct3D 12 support 🤓 Since I&amp;rsquo;ve got the RTX 4090, JavaFX projects feel a bit brittle on Nvidia&amp;rsquo;s Game Ready and Studio drivers. I&amp;rsquo;m not sure if it&amp;rsquo;s really a JFX issue or the drivers don&amp;rsquo;t work as expected&amp;hellip;maybe I&amp;rsquo;ll know more in a few hours.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3m2lx4k2ul22v" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared screenshots&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Thanks to the new stage style EXTENDED in JavaFX 25 we now have full control over the user experience in JavaFX applications. Together with the new HeaderBar control we can place controls in the title bar area. Add AtlantaFX theming (including dark mode) and UIs are pro level.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/hansolo.eu/post/3m3jqu2uans27" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; is using JavaFX as an animation tool&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Was looking for a tool to animate text to create some stuff for my PixelMug &amp;hellip; well the easiest thing to so was creating the animations with JavaFX , export as png&amp;rsquo;s and create an animated gif&amp;hellip;done 😁 I ❤️ it.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/mattcoley.bsky.social/post/3m3wok2nync2m" target="_blank" rel="noopener noreferrer"&gt;Tip by &lt;strong&gt;Matt Coley&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;If you&amp;rsquo;re using the JavaFX &amp;lsquo;Flowless&amp;rsquo; library for virtualized controls and are observing sluggish performance, do not add stylesheets to the Virtualized Node. Add them to the Scene. I observed an immediate 10x performance boost by doing this.&lt;/em&gt; &amp;quot; A video demo is &lt;a href="https://www.youtube.com/watch?v=l4PcbsDa-zU" target="_blank" rel="noopener noreferrer"&gt;available here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/cdetastes.bsky.social/post/3m3wel4pj522w" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Clément de Tastes&lt;/strong&gt; wrote a JavaFX app that uses Java&amp;rsquo;s upcoming &amp;ldquo;Value Types&amp;rdquo;&lt;/a&gt;
 from OpenJDK Project Valhalla: &amp;ldquo;&lt;em&gt;Combining the strength of encapsulation with the performance of primitives.&lt;/em&gt; &amp;quot; Code is &lt;a href="https://github.com/CodeSimcoe/MandelbrotFx/tree/valhalla" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-9-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;Showcase: &lt;a href="https://www.jfx-central.com/showcases/polarion" target="_blank" rel="noopener noreferrer"&gt;Polarion Application Lifecycle Management (ALM)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Showcase: &lt;a href="https://www.jfx-central.com/showcases/recaf" target="_blank" rel="noopener noreferrer"&gt;Recaf&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;People: &lt;a href="https://www.jfx-central.com/people/v.protsenko" target="_blank" rel="noopener noreferrer"&gt;Vlad Protsenko&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;People: &lt;a href="https://www.jfx-central.com/people/m.coley" target="_blank" rel="noopener noreferrer"&gt;Matt Coley&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/treemapfx" target="_blank" rel="noopener noreferrer"&gt;TreeMapFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Tools: &lt;a href="https://www.jfx-central.com/tools/cljfx" target="_blank" rel="noopener noreferrer"&gt;Cljfx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/1JL6zdkM1GU" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Vlad Protsenko: Combining Clojure with JavaFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/6NIJ54h3iVY" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Matt Coley about Recaf and his JavaFX libraries&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The links of September got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-september-2025/"&gt;published on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>The Pitfall of Increasing Read Capacity by Reading From Secondary Nodes in a MongoDB Replica Set</title><link>https://foojayio.github.io/website/today/the-pitfall-of-increasing-read-capacity-by-reading-from-secondary-nodes-in-a-mongodb-replica-set/</link><pubDate>Thu, 30 Oct 2025 15:23:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-pitfall-of-increasing-read-capacity-by-reading-from-secondary-nodes-in-a-mongodb-replica-set/</guid><description>&lt;h2 id="h2-0-the-scenario"&gt;The scenario&lt;/h2&gt;
&lt;p&gt;Imagine we are responsible for managing the MongoDB cluster that supports our country&amp;rsquo;s national financial payment system, similar to&lt;a href="https://en.wikipedia.org/wiki/Pix_%28payment_system%29" target="_blank" rel="noopener noreferrer"&gt;Pix&lt;/a&gt;
 in Brazil. Our application was designed to be read-heavy, with one write operation for every 20 read operations.&lt;/p&gt;
&lt;p&gt;With&lt;a href="https://en.wikipedia.org/wiki/Black_Friday_%28shopping%29" target="_blank" rel="noopener noreferrer"&gt;Black Friday&lt;/a&gt;
 approaching, a critical period for our national financial payment system, we have been entrusted with the crucial task of creating a scaling plan for our cluster to handle the increased demand during this shopping spree. Given that our system is read-heavy, we are exploring ways to enhance the read performance and capacity of our cluster.&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>BoxLang v1.6.0 - Performance, AI-Powered Docs, and Advanced Async Monitoring</title><link>https://foojayio.github.io/website/today/boxlang-v1-6-0-performance-ai-powered-docs-and-advanced-async-monitoring-2/</link><pubDate>Wed, 29 Oct 2025 06:48:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-v1-6-0-performance-ai-powered-docs-and-advanced-async-monitoring-2/</guid><description>&lt;img fetchpriority="high" decoding="async" class="size-medium wp-image-121537 aligncenter" src="boxlang-v1.6.0-1-700x467.jpg" alt="" width="700" height="467"&gt;
&lt;br /&gt;
&lt;p&gt;We&amp;rsquo;re thrilled to announce BoxLang 1.6.0, a release that delivers massive performance improvements, intelligent developer tooling, and enhanced async capabilities. This release focuses on making BoxLang faster, smarter, and more observable than ever before.&lt;/p&gt;
&lt;h2 id="h2-0-what-s-new-in-1-6-0"&gt;🚀 What&amp;rsquo;s New in 1.6.0?&lt;/h2&gt;
&lt;h3 id="h3-1-boxlang-documentation-meets-ai-mcp-server-integration"&gt;🤖 BoxLang Documentation Meets AI: MCP Server Integration&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-v1-6-0-performance-ai-powered-docs-and-advanced-async-monitoring-2/BoxLang_docs-531x510.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;BoxLang documentation is now accessible via the Model Context Protocol (MCP)! Connect AI assistants like Claude, GitHub Copilot, and other MCP-compatible tools directly to comprehensive BoxLang documentation for instant access to language references, framework features, and best practices.&lt;/p&gt;</description></item><item><title>Spring Framework 7 API Versioning Explained</title><link>https://foojayio.github.io/website/today/explore-spring-framework-7-features-api-versioning/</link><pubDate>Wed, 29 Oct 2025 06:45:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/explore-spring-framework-7-features-api-versioning/</guid><description>&lt;p&gt;In my previous &lt;a href="https://foojayio.github.io/website/today/preparing-for-spring-framework-7-and-spring-boot-4/"&gt;article&lt;/a&gt;
, I outlined a comprehensive list of features introduced in Spring Framework 7 and Spring Boot 4.&lt;/p&gt;
&lt;p&gt;In this series of articles, we will explore these features in detail using a pragmatic approach. To begin, I will deep dive into the &lt;em&gt;&lt;strong&gt;API&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;&lt;strong&gt;versioning&lt;/strong&gt;&lt;/em&gt; feature introduced in Spring Framework 7.
&lt;img src="https://foojayio.github.io/website/today/explore-spring-framework-7-features-api-versioning/Sb4version_1.png" alt="API Versioning" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Any architectural or feature change stems from evolving business requirements, and API versioning is no exception. In today&amp;rsquo;s app-driven ecosystem, APIs are central to product integration and user experience.&lt;/p&gt;</description></item><item><title>How MongoDB Decides What to Forget?</title><link>https://foojayio.github.io/website/today/how-mongodb-decides-what-to-forget/</link><pubDate>Tue, 28 Oct 2025 14:00:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-mongodb-decides-what-to-forget/</guid><description>&lt;figure class="aligncenter size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="720" height="720" src="1_2RyMETT6diUSVGKdJPoQgQ.webp" alt="" class="wp-image-121588" style="width:368px;height:auto"&gt;
&lt;/figure&gt;
&lt;p&gt;Inside MongoDB&amp;rsquo;s storage engine, &lt;a href="https://www.mongodb.com/docs/manual/core/wiredtiger/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=mongodb-forget-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;WiredTiger&lt;/a&gt;
, &lt;strong&gt;nothing happens by accident.&lt;/strong&gt;{#4cf7}&lt;/p&gt;
&lt;p&gt;Every page in &lt;a href="https://www.mongodb.com/docs/atlas/sizing-tier-selection/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=mongodb-forget-foojay&amp;amp;utm_term=tony.kim#memory" target="_blank" rel="noopener noreferrer"&gt;memory&lt;/a&gt;
 exists under policy &amp;mdash; governed, measured, and continuously evaluated against the limits of RAM, I/O bandwidth, and checkpoint cadence. Eviction is not cleanup. It&amp;rsquo;s &lt;strong&gt;runtime arbitration between volatility and durability&lt;/strong&gt;.{#ba51}&lt;/p&gt;
&lt;p&gt;When the process starts, WiredTiger allocates a fixed memory region known as the &lt;strong&gt;cache arena&lt;/strong&gt; typically 50% of physical RAM. Within that space live &lt;strong&gt;B-tree pages&lt;/strong&gt; : internal nodes, leaf nodes, and history-store entries. Each page carries operational metadata: &lt;strong&gt;dirty, clean, hazard-protected, in-use, last_access_time, and generation&lt;/strong&gt; . This metadata feeds into a &lt;strong&gt;per-page score&lt;/strong&gt;, which informs the eviction subsystem&amp;rsquo;s next decision.{#61cb}&lt;/p&gt;</description></item><item><title>Certified for the Future: Jakarta EE 11 with Payara Platform</title><link>https://foojayio.github.io/website/today/leading-the-way-payara-platform-community-7-beta-now-fully-jakarta-ee-11-certified/</link><pubDate>Fri, 24 Oct 2025 06:39:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/leading-the-way-payara-platform-community-7-beta-now-fully-jakarta-ee-11-certified/</guid><description>&lt;p&gt;&lt;strong&gt;We&amp;rsquo;re excited to announce that Payara Platform Community 7 Beta application server is now fully certified as Jakarta EE 11 compatible for the Web, Platform and Core Profiles.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This milestone makes Payara the first vendor to achieve full Jakarta EE 11 certification across all profiles, underscoring our commitment to delivering an innovative, production-ready runtime for the enterprise Java community.&lt;/p&gt;
&lt;p&gt;The Jakarta EE 11 certification was achieved by successfully passing the Jakarta EE Technology Compatibility Kit (TCK), also referred to as the Compatibility Test Suite (CTS). This verifies that an implementation conforms to the Jakarta EE specifications across all profiles.&lt;/p&gt;</description></item><item><title>Beyond Keywords: Optimizing Vector Search with Filters and Caching (Part 2)</title><link>https://foojayio.github.io/website/today/beyond-keywords-optimizing-vector-search-with-filters-and-caching-part-2/</link><pubDate>Thu, 23 Oct 2025 15:44:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/beyond-keywords-optimizing-vector-search-with-filters-and-caching-part-2/</guid><description>&lt;p&gt;Enhancing precision with pre-filters and reducing costs with embedding caching&lt;/p&gt;
&lt;p&gt;Welcome back! If you landed here without reading &lt;a href="https://foojayio.github.io/website/today/beyond-keywords-implementing-semantic-search-in-java-with-spring-data-part-1/"&gt;&lt;em&gt;Part 1: Beyond Keywords: Implementing Semantic Search in Java With Spring Data&lt;/em&gt;&lt;/a&gt;
, I recommend going back and checking it first so the steps in this article make more sense in sequence.&lt;/p&gt;
&lt;p&gt;This is the second part of a &lt;strong&gt;three-part series&lt;/strong&gt; where we&amp;rsquo;re building a movie search application. So far, our app supports &lt;strong&gt;semantic search&lt;/strong&gt; using vector queries with Spring Data and Voyage AI. In this article, we&amp;rsquo;ll take things further:&lt;/p&gt;</description></item><item><title>The Cost of Not Knowing MongoDB - Part 2</title><link>https://foojayio.github.io/website/today/the-cost-of-not-knowing-mongodb-part-2-appv5r0-to-appv5r4/</link><pubDate>Tue, 21 Oct 2025 14:26:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-cost-of-not-knowing-mongodb-part-2-appv5r0-to-appv5r4/</guid><description>&lt;p&gt;This is the second part of the series &amp;ldquo;The Cost of Not Knowing MongoDB,&amp;rdquo; where we go through many ways we can model our MongoDB schemas for the same application and have different performances. In the &lt;a href="https://www.mongodb.com/developer/products/mongodb/cost-of-not-knowing-mongodb/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=cost-part2-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;first part&lt;/a&gt;
 of the series, we concatenated fields, changed data types, and short-handed field names to improve the application performance. In this second part, as discussed in the &lt;a href="https://www.mongodb.com/developer/products/mongodb/cost-of-not-knowing-mongodb/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=cost-part2-foojay&amp;amp;utm_term=tony.kim#issues-and-improvements:~:text=than%20appV3.-,Issues%20and%20improvements,-Enough%20of%20focusing" target="_blank" rel="noopener noreferrer"&gt;issues and improvement of appV4&lt;/a&gt;
, the performance gains will be achieved by analyzing the application behavior and how it stores and reads its data, leading us to the use of the &lt;a href="https://www.mongodb.com/blog/post/building-with-patterns-the-bucket-pattern/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=cost-part2-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;Bucket Pattern&lt;/a&gt;
 and the &lt;a href="https://www.mongodb.com/blog/post/building-with-patterns-the-computed-pattern/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=cost-part2-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;Computed Pattern&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Transactions and ThreadLocal in Spring</title><link>https://foojayio.github.io/website/today/transactions-and-threadlocal-in-spring/</link><pubDate>Tue, 21 Oct 2025 13:27:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/transactions-and-threadlocal-in-spring/</guid><description>&lt;p&gt;Two years ago, my friend José Paumard held the talk &amp;ldquo;Concurrent and Asynchronous Programming : Loom&amp;rdquo; at the Geneva Java User Group.&lt;/p&gt;
&lt;p&gt;In his talk, he mentioned that the Spring team would need to completely redesign their approach to transactions: his reasoning was that the transactions are implemented on top of &lt;code&gt;ThreadLocal&lt;/code&gt; object and Loom&amp;rsquo;s virtual threads break this approach.&lt;/p&gt;
&lt;p&gt;I was intrigued because though I used Spring transactions a lot via the &lt;code&gt;@Transactional&lt;/code&gt; annotation, I never opened thought about looking at their implementation.&lt;/p&gt;</description></item><item><title>Foojay Podcast #80: AI4Devs Interviews - Part 2</title><link>https://foojayio.github.io/website/today/foojay-podcast-80/</link><pubDate>Mon, 20 Oct 2025 07:59:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-80/</guid><description>&lt;p&gt;This is part 2 of the interviews recorded on September 19th, 2025, at the first &lt;a href="https://amsterdam.ai4devs.io/" target="_blank" rel="noopener noreferrer"&gt;AI4Devs conference&lt;/a&gt;
 in Amsterdam. In Part 1, we explored many AI-related topics as libraries, security, infrastructure, use cases, and more. In this second part, we&amp;rsquo;ll dive into data science, tools for better AI development, Java in the cloud, and get a behind-the-scenes look at how the conference came together.&lt;/p&gt;
&lt;p&gt;I also asked these guests the same opening question: &amp;lsquo;What&amp;rsquo;s your name, and what brings you to this conference?&amp;rsquo;&lt;/p&gt;</description></item><item><title>Beyond Keywords: Implementing Semantic Search in Java With Spring Data (Part 1)</title><link>https://foojayio.github.io/website/today/beyond-keywords-implementing-semantic-search-in-java-with-spring-data-part-1/</link><pubDate>Thu, 16 Oct 2025 13:39:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/beyond-keywords-implementing-semantic-search-in-java-with-spring-data-part-1/</guid><description>&lt;p&gt;Building a semantic movie search app with embeddings and vector queries&lt;/p&gt;
&lt;p&gt;Have you ever tried to search for something such as a product, a song, or a movie but couldn&amp;rsquo;t quite remember its exact name? Maybe you recall only a clue&amp;mdash;a desert pyramid, a short melody, or &amp;ldquo;that ship that hit an iceberg.&amp;rdquo; Keyword search struggles with that. Vector search doesn&amp;rsquo;t: It lets you search by meaning.&lt;/p&gt;
&lt;p&gt;It works by turning text into embeddings, vectors (arrays of numbers) that capture semantic similarity, so results are ranked by what they mean, not just what they say.&lt;/p&gt;</description></item><item><title>How Chat Memory Manipulation Can Ruin Your AI System</title><link>https://foojayio.github.io/website/today/how-chat-memory-manipulation-can-ruin-your-ai-system/</link><pubDate>Thu, 16 Oct 2025 10:45:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-chat-memory-manipulation-can-ruin-your-ai-system/</guid><description>&lt;h2 id="h2-0-do-llms-have-any-conversational-memory"&gt;Do LLMs have any conversational memory?&lt;/h2&gt;
&lt;p&gt;With the use of ChatGPT, Claude, and Copilot, we are now quite used to chat-based AI assistants that can help us. We&amp;rsquo;ve all grown accustomed to chatbots that &amp;ldquo;remember&amp;rdquo; us and the conversation we had before.&lt;/p&gt;
&lt;p&gt;From virtual assistants that recall our preferences to support bots that track our past issues, chat memory feels like a natural part of interacting with digital agents. It&amp;rsquo;s easy to assume that modern AI models like ChatGPT or other LLM-powered bots possess similar built-in memory.&lt;/p&gt;</description></item><item><title>7 habits of Highly Effective Java Coding</title><link>https://foojayio.github.io/website/today/7-habits-of-highly-effective-java-coding/</link><pubDate>Wed, 15 Oct 2025 11:25:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/7-habits-of-highly-effective-java-coding/</guid><description>&lt;h3 id="h3-0-from-ai-user-to-ai-pro"&gt;&lt;strong&gt;From AI User to AI Pro&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s be real, AI coding tools are everywhere now. 🤖 They&amp;rsquo;re no longer some shiny new toy&amp;mdash;they&amp;rsquo;re a part of our daily grind as developers, just like our morning coffee. ☕&lt;/p&gt;
&lt;p&gt;For us Java devs, whether we&amp;rsquo;re wrestling with a giant legacy app or juggling a bunch of microservices, these tools look like a huge win for getting stuff done faster. 🚀&lt;/p&gt;
&lt;p&gt;But here&amp;rsquo;s the catch: just coding faster isn&amp;rsquo;t the whole story. If you&amp;rsquo;re not careful, it can actually lead to bigger problems down the road. 🤔&lt;/p&gt;</description></item><item><title>The Cost of Not Knowing MongoDB (Part 1)</title><link>https://foojayio.github.io/website/today/the-cost-of-not-knowing-mongodb-part-1-appv0-to-appv4/</link><pubDate>Tue, 14 Oct 2025 13:43:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-cost-of-not-knowing-mongodb-part-1-appv0-to-appv4/</guid><description>&lt;p&gt;The primary focus of this series is to show how much performance you can gain, and as a consequence, the cost you can save when using &lt;a href="https://www.mongodb.com/lp/cloud/atlas/try4-reg/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=cost-part1-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;
 properly, following the best practices, studying your application needs, and using it to model your data.&lt;/p&gt;
&lt;p&gt;To show these possible gains, a dummy application will be presented, and many possible implementations of it using MongoDB will be developed and load-tested. There will be implementations for all levels of MongoDB knowledge: beginner, intermediate, senior, and mind-blowing (🤯) .&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>What Happens When 10,000 JVMs Collaborate</title><link>https://foojayio.github.io/website/today/what-happens-when-10000-jvms-collaborate-in-one-production-environment/</link><pubDate>Mon, 13 Oct 2025 07:03:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-happens-when-10000-jvms-collaborate-in-one-production-environment/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;A large global enterprise achieved a performance and efficiency milestone, running 10,000 Java Virtual Machines (JVMs) that collaborate and share optimizations with one another, using Azul Platform Prime&amp;rsquo;s Optimizer Hub. The enterprise improved application responsiveness and stability at scale while reducing infrastructure costs, which has resulted in better user experiences and greater business efficiency.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In this post you will learn: how&lt;/em&gt;&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;A global enterprise sustained rising cloud costs to support the company&amp;rsquo;s ongoing success&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Azul Platform Prime with Optimizer Hub is delivering cloud cost savings of more than 20%&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Optimizer Hub is improving cloud-centric Java application startup, warmup and runtime performance by offloading optimization tasks from JVMs to a centralized set of services&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Earlier this year, an &lt;a href="https://www.azul.com/products/prime/" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Prime&lt;/a&gt;
 enterprise customer achieved something no other organization has ever accomplished: seamless collaboration between more than 10,000 JVMs across hundreds of applications using a single instance of Platform Prime&amp;rsquo;s Optimizer Hub. In case you&amp;rsquo;re wondering, here&amp;rsquo;s why that&amp;rsquo;s big news.&lt;/p&gt;</description></item><item><title>Keywords Meet Vectors: Hybrid Search on MongoDB</title><link>https://foojayio.github.io/website/today/keywords-meet-vectors-hybrid-search-on-mongodb/</link><pubDate>Thu, 09 Oct 2025 14:49:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/keywords-meet-vectors-hybrid-search-on-mongodb/</guid><description>&lt;p&gt;In the previous issues, I explained how to run a local &lt;a href="https://www.linkedin.com/company/mongodbinc/?lipi=urn%3Ali%3Apage%3Ad_flagship3_pulse_read%3BnV1cKI74RDKmiAI4lr1TaA%3D%3D" target="_blank" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;
 Atlas cluster using &lt;a href="https://www.linkedin.com/pulse/run-local-atlas-cluster-minutes-locally-arek-borucki-mmiqf/?trackingId=M71jHZpGSQCdFygE5EgAOw%3D%3D" target="_blank" rel="noopener noreferrer"&gt;Atlas CLI&lt;/a&gt;
, what &lt;a href="https://www.linkedin.com/pulse/power-your-ai-application-vector-search-arek-borucki-sjw0f/?trackingId=vjRobV3lSdy1nc4SIgjM%2Fg%3D%3D" target="_blank" rel="noopener noreferrer"&gt;vector search&lt;/a&gt;
 is, and &lt;a href="https://www.linkedin.com/pulse/from-zero-vector-hero-locally-arek-borucki-w5otf/?trackingId=S%2FClUOdjSMGzvkR2ZLIS9Q%3D%3D" target="_blank" rel="noopener noreferrer"&gt;how to use it&lt;/a&gt;
. Now, let&amp;rsquo;s take a closer look at hybrid search.&lt;/p&gt;
&lt;p&gt;Reading time: 4&amp;ndash;5 min&lt;/p&gt;
&lt;h2 id="h2-0-what-is-hybrid-search"&gt;What is hybrid search?&lt;/h2&gt;
&lt;p&gt;Hybrid search in MongoDB brings together &lt;strong&gt;two complementary search techniques&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Full text search&lt;/strong&gt; (&lt;a href="https://en.wikipedia.org/wiki/Okapi_BM25" target="_blank" rel="noopener noreferrer"&gt;BM25&lt;/a&gt;
 via &lt;a href="https://www.mongodb.com/docs/atlas/atlas-search/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=hybrid-search-foojay&amp;amp;utm_term=megan.grant" target="_blank" rel="noopener noreferrer"&gt;Atlas Search&lt;/a&gt;
)&amp;mdash;optimized for exact keyword matches, powered by Lucene inside mongot. Perfect when users expect documents that literally contain their query terms.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vector search&lt;/strong&gt; (&lt;a href="https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm" target="_blank" rel="noopener noreferrer"&gt;kNN&lt;/a&gt;
 via &lt;a href="https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-overview/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=hybrid-search-foojay&amp;amp;utm_term=megan.grant" target="_blank" rel="noopener noreferrer"&gt;Atlas Vector Search&lt;/a&gt;
)&amp;mdash;optimized for semantic similarity. It uses dense embeddings from ML models to find conceptually related content, even when no keywords match.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On their own, each method has advantages and limitations. Text search misses context (&amp;ldquo;non-linear crime story&amp;rdquo; won&amp;rsquo;t return Memento). Pure semantic search may return results that are semantically aligned but sometimes not practically useful. Hybrid search combines the strengths of both, ensuring results are contextually relevant and precise.&lt;/p&gt;</description></item><item><title>Working with Geo Location Data in MongoDB</title><link>https://foojayio.github.io/website/today/working-with-geo-location-data/</link><pubDate>Tue, 07 Oct 2025 14:01:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/working-with-geo-location-data/</guid><description>&lt;p&gt;&lt;a href="https://www.mongodb.com/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=geo-mongodb-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;
 makes it really easy to work with location data (sometimes called Geo Data) by simplifying how to store this type of data and streamlining how you query for it so you can easily create &amp;ldquo;find nearby&amp;rdquo; queries, or plot your location data with ease!&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s start with the basics: modeling your data, indexing it properly, running geo queries, and then displaying results on a map.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Model Your Data with GeoJSON&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Super Early Bird Tickets: Voxxed Days Amsterdam</title><link>https://foojayio.github.io/website/today/super-early-bird-tickets-voxxed-days-amsterdam/</link><pubDate>Mon, 06 Oct 2025 12:37:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/super-early-bird-tickets-voxxed-days-amsterdam/</guid><description>&lt;p&gt;After this year&amp;rsquo;s success, the Voxxed Amsterdam team is proud to announce that next year will be even bigger, with more speakers, breakouts, sponsors, and attendees. We warmly invite you to join and meet us at the &lt;strong&gt;JUG Square&lt;/strong&gt; on &lt;strong&gt;April 1&amp;ndash;2, 2026&lt;/strong&gt; in Amsterdam.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; April 1&amp;ndash;2, 2026&lt;br&gt;
&lt;strong&gt;Location:&lt;/strong&gt; Pathé Amsterdam (North)&lt;br&gt;
&lt;strong&gt;Details &amp;amp; tickets:&lt;/strong&gt; &lt;a href="http://amsterdam.voxxeddays.com" target="_blank" rel="noopener noreferrer"&gt;amsterdam.voxxeddays.com&lt;/a&gt;
&lt;/p&gt;
&lt;h3 id="h3-0-speaker-line-up"&gt;Speaker Line-up&lt;/h3&gt;
&lt;p&gt;These industry leaders will be sharing their unique insights at the conference:&lt;/p&gt;</description></item><item><title>Take the State of Java 2025 Survey</title><link>https://foojayio.github.io/website/today/take-the-state-of-java-2025-survey/</link><pubDate>Mon, 06 Oct 2025 12:23:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/take-the-state-of-java-2025-survey/</guid><description>&lt;p&gt;Do you want to know which Java JDK distribution is used where for what and when? The time has come again to take the State of Java Survey and share insights while gaining Java ecosystem knowledge.&lt;/p&gt;
&lt;p&gt;All those participating will get the complete research, which can be of great benefit in your technology choices in the Java ecosystem.&lt;/p&gt;
&lt;p&gt;Click the image below to get started:
&lt;a href="https://survey.alchemer.com/s3/8466906/Azul-State-of-Java-Survey" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/take-the-state-of-java-2025-survey/which-1024x387.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Or simply click this link:&lt;/p&gt;</description></item><item><title>Foojay Podcast #79: AI4Devs Interviews - Part 1</title><link>https://foojayio.github.io/website/today/foojay-podcast-79/</link><pubDate>Mon, 06 Oct 2025 07:59:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-79/</guid><description>&lt;p&gt;On September 19th, 2025, the first &lt;a href="https://amsterdam.ai4devs.io/" target="_blank" rel="noopener noreferrer"&gt;AI4Devs conference&lt;/a&gt;
 took place in Amsterdam. I grabbed my camera and microphone to talk with speakers and attendees about the revolution in AI-powered coding and application development. In this first part, we&amp;rsquo;ll explore Spring libraries, security, infrastructure and scaling, real-world use cases, event streaming, JetBrains tools, and more&amp;hellip;&lt;/p&gt;
&lt;p&gt;I asked all my guests the same opening question: &amp;lsquo;What&amp;rsquo;s your name, and what brings you to this conference?&amp;rsquo; Let&amp;rsquo;s get started!&lt;/p&gt;</description></item><item><title>Ai4Devs Amsterdam: Successful Inaugural Developer-Focused AI Conference</title><link>https://foojayio.github.io/website/today/ai4devs-amsterdam-successful-inaugural-developer-focused-ai-conference/</link><pubDate>Fri, 03 Oct 2025 09:37:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/ai4devs-amsterdam-successful-inaugural-developer-focused-ai-conference/</guid><description>&lt;p&gt;&lt;strong&gt;The &lt;a href="https://amsterdam.ai4devs.io/" target="_blank" rel="noopener noreferrer"&gt;inaugural AI4Devs conference in Amsterdam&lt;/a&gt;
, held recently Friday 19 September, a collaboration between Java Champion Jonathan Vila, &lt;a href="https://www.iodigital.com/en" target="_blank" rel="noopener noreferrer"&gt;local developer agency IO Digital&lt;/a&gt;
 (in particular Joost Kaan, Arno Koehler, and Michel Blankenstein), and the Friends of OpenJDK (Foojay.io), proved to be a resounding success, bringing together approximately 200 developers at Amsterdam&amp;rsquo;s iO Digital Campus.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ING, Azul, Qodo, and ContentStack&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Co-sponsored and co-organized with ING and Azul, together with Qodo and ContentStack, the event featured standout keynote sessions from Josh Long, of SpringBoot fame, and Pratik Patel, from Azul, who delivered insights on AI in the context of Spring and on increasing the speed of Java-based applications, especially in the context of AI-oriented applications.
&lt;img src="https://foojayio.github.io/website/today/ai4devs-amsterdam-successful-inaugural-developer-focused-ai-conference/IMG_6230-1024x683.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Agents Meet Databases: The Future of Agentic Architectures</title><link>https://foojayio.github.io/website/today/agents-meet-databases-the-future-of-agentic-architectures/</link><pubDate>Thu, 02 Oct 2025 15:01:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/agents-meet-databases-the-future-of-agentic-architectures/</guid><description>&lt;p&gt;With 2025 hailed as &amp;ldquo;the year of agents&amp;rdquo; by &lt;a href="https://www.barrons.com/articles/nvidia-stock-ceo-ai-agents-8c20ddfb" target="_blank" rel="noopener noreferrer"&gt;NVIDIA CEO Jensen Huang&lt;/a&gt;
 and &lt;a href="https://www.axios.com/2025/01/23/davos-2025-ai-agents" target="_blank" rel="noopener noreferrer"&gt;OpenAI CPO Kevin Weil&lt;/a&gt;
, AI agents are increasingly of interest to organizations across industries. These autonomous systems will often need to interact with databases, where much of the world&amp;rsquo;s valuable data resides. According to &lt;a href="https://www.seagate.com/files/www-content/our-story/trends/files/Seagate-WP-DataAge2025-March-2017.pdf" target="_blank" rel="noopener noreferrer"&gt;IDC&amp;rsquo;s Data Age 2025 report&lt;/a&gt;
, enterprises will manage nearly 60% of the world&amp;rsquo;s data by 2025, most of it organized in databases. As a result, databases will be central to agentic architectures, and the success of agent deployments will depend on how well they connect and interact with them.&lt;/p&gt;</description></item><item><title>Think in Graphs, Not Just Chains: JGraphlet for TaskPipelines</title><link>https://foojayio.github.io/website/today/think-in-graphs-not-just-chains-jgraphlet-for-taskpipelines/</link><pubDate>Thu, 02 Oct 2025 13:24:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/think-in-graphs-not-just-chains-jgraphlet-for-taskpipelines/</guid><description>&lt;h2 id="h2-0-let-s-dive-into-the-eight-core-principles-that-define-jgraphlet"&gt;&lt;strong&gt;&lt;strong&gt;JGraphlet is a tiny, zero-dependency Java library for building task pipelines. It uses a graph model where you define tasks as nodes and connect them to create simple or complex workflows (like fan-in/fan-out). It supports both asynchronous (default) and synchronous tasks, has a simple API, allows data sharing via a PipelineContext, and offers optional caching to avoid re-computing results.&lt;/strong&gt;&lt;/strong&gt;
**Its power comes not from a long list of features, but from a small set of core design principles that work together in harmony.
At the heart of JGraphlet is simplicity, backed by a Graph. Add Tasks to a pipeline and connect them to create your graph. Each &lt;code&gt;Task&lt;/code&gt; has an input and output. A &lt;code&gt;TaskPipeline&lt;/code&gt; builds and executes a pipeline while managing the I/O for each Task.
For example, a &lt;code&gt;Map&lt;/code&gt; for Fan-in, a &lt;code&gt;Record&lt;/code&gt; for your own data model, etc. A Task pipeline also has a way &lt;code&gt;PipelineContext&lt;/code&gt; to share data between Tasks, and Tasks can also be cached, so the computation doesn&amp;rsquo;t need to take place again and again.
You can choose how your Task pipeline flow should be, and you can decide whether it should be synchronous &lt;code&gt;SyncTask&lt;/code&gt; or asynchronous. By default, all Tasks are asynchronous.
Let&amp;rsquo;s dive into the eight core principles that define JGraphlet.&lt;/h2&gt;
&lt;h3 id="h3-1-1-a-graph-first-execution-model"&gt;1. A Graph-First Execution Model&lt;/h3&gt;
&lt;p&gt;JGraphlet treats your workflow as a Directed Acyclic Graph (DAG). You define tasks as nodes and explicitly draw the connections (edges) between them. This makes complex patterns like fan-out (one task feeding many) and fan-in (many tasks feeding one) natural.
&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #6</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-6/</link><pubDate>Wed, 01 Oct 2025 17:18:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-6/</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 opinion pieces and Java focused tutorials that can enhance your understanding of AI applications, this newsletter concentrates on Hallucination, Security, RAG 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>Building an AI Semantic Movie Recommender with Vector Search</title><link>https://foojayio.github.io/website/today/building-an-ai-semantic-movie-recommender-with-vector-search/</link><pubDate>Tue, 30 Sep 2025 13:23:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-an-ai-semantic-movie-recommender-with-vector-search/</guid><description>&lt;p&gt;Last time, we created a &lt;a href="https://www.linkedin.com/pulse/from-zero-vector-hero-locally-arek-borucki-w5otf/?trackingId=xNlcCImhQCC0HsnlThlQFg%3D%3D&amp;amp;lipi=urn%3Ali%3Apage%3Ad_flagship3_pulse_read%3B1MUlV%2B0kQm%2BvelL3UScxcA%3D%3D" target="_blank" rel="noopener noreferrer"&gt;vector search index&lt;/a&gt;
 in a &lt;a href="https://www.linkedin.com/pulse/run-local-atlas-cluster-minutes-locally-arek-borucki-mmiqf/?trackingId=ntYzEbTVSuauLVmp2Zbt4w%3D%3D&amp;amp;lipi=urn%3Ali%3Apage%3Ad_flagship3_pulse_read%3B1MUlV%2B0kQm%2BvelL3UScxcA%3D%3D" target="_blank" rel="noopener noreferrer"&gt;local MongoDB Atlas cluster&lt;/a&gt;
. Now, let&amp;rsquo;s put it to work with a real case: building an AI-powered movie recommender that suggests films similar to &lt;em&gt;The Matrix&lt;/em&gt;&amp;ndash;without any shared keywords.&lt;/p&gt;
&lt;p&gt;🕒 Reading time: 3-4 min&lt;/p&gt;
&lt;p&gt;🎯 The challenge&lt;/p&gt;
&lt;p&gt;This demo will be entirely based on the pre-generated vector embeddings already stored in the &lt;a href="https://www.mongodb.com/docs/atlas/sample-data/sample-mflix/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=semantic-foojay&amp;amp;utm_term=tony.kim#std-label-sample-mflix" target="_blank" rel="noopener noreferrer"&gt;sample_mflix&lt;/a&gt;
 dataset&amp;mdash;no API calls and no new model runs. Everything will remain local. If you haven&amp;rsquo;t done it yet, learn how in this article 👉 &lt;a href="https://www.linkedin.com/pulse/from-zero-vector-hero-locally-arek-borucki-w5otf/?trackingId=xNlcCImhQCC0HsnlThlQFg%3D%3D&amp;amp;lipi=urn%3Ali%3Apage%3Ad_flagship3_pulse_read%3B1MUlV%2B0kQm%2BvelL3UScxcA%3D%3D" target="_blank" rel="noopener noreferrer"&gt;Loading embeddings into MongoDB&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Payara Server Maven Plugin + AI Agent</title><link>https://foojayio.github.io/website/today/boost-developer-productivity-with-payara-server-maven-plugin-ai-agent/</link><pubDate>Tue, 30 Sep 2025 08:43:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/boost-developer-productivity-with-payara-server-maven-plugin-ai-agent/</guid><description>&lt;h2 id="h2-0-managing-payara-server-just-got-smarter"&gt;Managing Payara Server Just Got Smarter&lt;/h2&gt;
&lt;p&gt;Imagine managing your Jakarta EE applications not just with Maven goals, but by asking natural questions.&lt;/p&gt;
&lt;p&gt;With the &lt;a href="http:/https://docs.payara.fish/community/docs/6.2025.5/Technical%20Documentation/Ecosystem/Project%20Management%20Tools/Maven%20Plugin/Payara%20Server%20Maven%20Plugin.html#ai-agent/" title="experimental AI Agent"&gt;experimental AI Agent&lt;/a&gt;
 built into the Payara Server Community&amp;rsquo;s Maven Plugin, you can now query server internals and perform admin tasks using plain English &amp;mdash; directly from the same terminal where you build and deploy your applications.&lt;/p&gt;
&lt;p&gt;Thanks to this integration, developers can inspect, query and even execute server commands using natural language. It&amp;rsquo;s a powerful and intuitive way to interact with Payara Server &amp;mdash; no need to remember long command syntax or dig through documentation.&lt;/p&gt;</description></item><item><title>JavaFX Links of September 2025</title><link>https://foojayio.github.io/website/today/javafx-links-of-september-2025/</link><pubDate>Tue, 30 Sep 2025 06:08:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-september-2025/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of September 2025. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Java and JavaFX 25 are released! This new Long Term Support (LTS) will be maintained and updated for many more years, so we can expect a lot of production systems will be upgraded to this version&amp;hellip;
&lt;ul&gt;
&lt;li&gt;Important: JavaFX 25 Requires JDK 23 or later.&lt;/li&gt;
&lt;li&gt;You can download JavaFX 25 &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;from the Gluon website&lt;/a&gt;
 or download the Maven artifacts from Maven Central.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gluonhq.com/products/javafx/openjfx-25-release-notes/" target="_blank" rel="noopener noreferrer"&gt;JavaFX 25 release notes by Gluon&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openjfx.io/highlights/25/" target="_blank" rel="noopener noreferrer"&gt;JavaFX 25 Highlights on openjfx.io&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.azul.com/core/release-notes" target="_blank" rel="noopener noreferrer"&gt;Java 25 release notes by Azul&lt;/a&gt;
, including OpenJDK JEPs and the list with JavaFX fixes.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://inside.java/2025/09/23/javafx-25/" target="_blank" rel="noopener noreferrer"&gt;JavaFX 25 Highlights by &lt;strong&gt;Kevin Rushforth&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX 25 is here with several new features and improvements! JavaFX 25 is designed to work with JDK 25, and is known to work with JDK 23 and later versions. Here are the highlights of the JavaFX 25 release&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stefan Richthofer&lt;/strong&gt; published on APIdia the &lt;a href="https://apidia.net/mvn/org.openjfx/javafx/25/" target="_blank" rel="noopener noreferrer"&gt;documentation of the new JavaFX 25 release&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;This includes the incubating modules (input and richtext), however they are hidden by default. You can enable hidden modules via the menu in the top-right, see &lt;a href="https://bsky.app/profile/stewori.bsky.social/post/3lz6x4ha2uk24" target="_blank" rel="noopener noreferrer"&gt;the screenshot&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Gluon announced the &lt;a href="https://openjdk-mobile.github.io" target="_blank" rel="noopener noreferrer"&gt;new website for OpenJDK on Mobile&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;An initiative to collaborate on tools/expertise for real Java on Mobile, see &lt;a href="https://mail.openjdk.org/pipermail/mobile-dev/2025-August/000985.html" target="_blank" rel="noopener noreferrer"&gt;the &lt;code&gt;mobile-dev&lt;/code&gt; mailinglist&lt;/a&gt;
. Let&amp;rsquo;s leverage the power, beauty and maintainability of OpenJDK to run Java apps on mobile!&lt;/em&gt;&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;You can read more in the blog post: &lt;a href="https://gluonhq.com/bringing-openjdk-to-mobile-a-community-effort/" target="_blank" rel="noopener noreferrer"&gt;Bringing OpenJDK to Mobile: A Community Effort&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/gluonhq.com/post/3lyfu2mwbhs2u" target="_blank" rel="noopener noreferrer"&gt;Announcement by &lt;strong&gt;Gluon&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Another major milestone for JavaFX: the Metal pipeline is now enabled by default in 26-ea builds, which you can &lt;a href="https://gluonhq.com/products/javafx/#ea" target="_blank" rel="noopener noreferrer"&gt;download here&lt;/a&gt;
. Read more about it &lt;a href="https://mail.openjdk.org/pipermail/openjfx-dev/2025-August/055993.html" target="_blank" rel="noopener noreferrer"&gt;in the openjfx-dev mailinglist&lt;/a&gt;
. This is excellent work by the JavaFX team at Oracle. Feedback is greatly appreciated!&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;Followed by a &lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3lyfuw66pjs26" target="_blank" rel="noopener noreferrer"&gt;request from &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;_If you&amp;rsquo;re on mac, please try JavaFX 26-ea+6 and share feedback. Tip: add &lt;code&gt;MARKDOWN_HASH2ad2e7464c1b84e91dbe41e72ff65eecMARKDOWN&lt;/code&gt;&lt;em&gt;HASH&lt;/em&gt; which will confirm you&amp;rsquo;re really using metal, as shown below. Many thanks to Kevin, Ambarish, Ajit, Jayathirth and others for their great work.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3lywvyv4jz22a" target="_blank" rel="noopener noreferrer"&gt;Message by &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
 (inspired by the &lt;a href="https://blogs.oracle.com/java/post/detaching-graalvm-from-the-java-ecosystem-train" target="_blank" rel="noopener noreferrer"&gt;Graal-related announcement of Oracle&lt;/a&gt;
): &amp;ldquo;&lt;em&gt;To be very clear on the broader &lt;a href="https://openjdk-mobile.github.io/" target="_blank" rel="noopener noreferrer"&gt;OpenJDK-mobile initiative we announced last month with Gluon&lt;/a&gt;
: this is all based on &lt;a href="https://github.com/openjdk/mobile" target="_blank" rel="noopener noreferrer"&gt;open-source tech (github.com/openjdk/mobile)&lt;/a&gt;
. We deliberately avoided dependencies on company-owned products. We &lt;em&gt;very much&lt;/em&gt; depend on, and leverage the great technical work, including the open discussions in OpenJDK mailing lists, GitHub PR&amp;rsquo;s and JBS issues. Important to make the distinction between the top-quality work from engineers and the strategic decisions made by companies.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dean Courtney&lt;/strong&gt; shared the &lt;a href="https://github.com/dean-703/dietai" target="_blank" rel="noopener noreferrer"&gt;sources of DietAI&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;It&amp;rsquo;s a JavaFX application designed for diet analysis, allowing users to import CSV files from diet trackers. It displays entries in a table, summarizes nutritional data, and utilizes AI for personalized evaluations. Users can set profiles and goals and compare actual intake against targets.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Helal Anwar&lt;/strong&gt; shared the &lt;a href="https://github.com/Hilal-Anwar/GradedAttendance" target="_blank" rel="noopener noreferrer"&gt;sources, including a video demo, of GradedAttendance&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A comprehensive attendance management system with integrated grading capabilities, designed to streamline educational institution workflows and provide efficient student attendance tracking.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7375391855204696064/" target="_blank" rel="noopener noreferrer"&gt;And he shared a screenshot on LinkedIn&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A messaging app implemented in JavaFX. How does this look?&lt;/em&gt; &amp;quot; Sources are available &lt;a href="https://github.com/Hilal-Anwar/GradedAttendance" target="_blank" rel="noopener noreferrer"&gt;here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Helal&lt;/strong&gt; also created a Quiz app as part of an internship at Elevate Labs using JavaFX. Sources, screenshots and demo video are &lt;a href="https://github.com/Hilal-Anwar/QuizTime" target="_blank" rel="noopener noreferrer"&gt;available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@jabref/115117290929844138" target="_blank" rel="noopener noreferrer"&gt;Message from JabRef&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JabRef has so many features that it&amp;rsquo;s sometimes difficult to get started. This year&amp;rsquo;s completed GSOC project from our student Yubo changes this. He successfully implemented a Welcome Walkthrough that helps new users to set up JabRef. This also includes the revamped welcome tab with quick settings. For more details, see &lt;a href="https://blog.jabref.org/2025/08/14/walkthrough-and-welcome-tab/" target="_blank" rel="noopener noreferrer"&gt;our blog post&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/heyMadhur/ImageProcessorApp" target="_blank" rel="noopener noreferrer"&gt;Published by &lt;strong&gt;Madhur Gupta&lt;/strong&gt; on GitHub&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;ImageProcessorApp: Lightweight JavaFX demo that applies tile-based image filters synchronously or asynchronously.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Just like last week, a new &lt;a href="https://github.com/dean-703/aiassistant" target="_blank" rel="noopener noreferrer"&gt;AI project shared on GitHub by &lt;strong&gt;Dean Courtney&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;AI Assistant - OpenAI Desktop Client: a JavaFX client for ChatGPT, designed to be a useful and versatile interface to the OpenAI API.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Very nice application screenshots &lt;a href="https://www.reddit.com/r/java/comments/1na6zuf/with_all_the_ai_website_slop_going_around_here/" target="_blank" rel="noopener noreferrer"&gt;shared on Reddit by &lt;strong&gt;Gufran Thakur&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;With all the AI website slop going around, here are some Java desktop applications I created at work!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/logorrr.bsky.social/post/3lysnfnjgy226" target="_blank" rel="noopener noreferrer"&gt;LogoRRR shared a screenshot&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;After the release of 25.1.0, work is ongoing for the &amp;lsquo;NextRelease&amp;rsquo;! The searchterm toolbar gets a facelift - it looks far better, what do you think? &lt;a href="https://www.logorrr.app/" target="_blank" rel="noopener noreferrer"&gt;Download LogoRRR here&lt;/a&gt;
&lt;/em&gt;.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/cat-edelveis.bsky.social/post/3lynhk6wl5s2l" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Catherine Edelveis&lt;/strong&gt; refactored RaffleFX app&lt;/a&gt;
 &amp;ldquo;&lt;em&gt;which demonstrates the usage of GraalVM Native Image with desktop apps, to use Gradle, so if you&amp;rsquo;d like to create native images of Gradle-based JavaFX projects, &lt;a href="https://github.com/code-with-bellsoft/raffle-gradle" target="_blank" rel="noopener noreferrer"&gt;you can use it as a starting point&lt;/a&gt;
&lt;/em&gt;.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.jdeploy.com/docs/releases/5.0/release-notes.html" target="_blank" rel="noopener noreferrer"&gt;jDeploy 5.0&lt;/a&gt;
, the tool the to distribute your Java(FX) app as a native bundle, has been released. It now includes &lt;a href="https://jdeploy.substack.com/p/finally-arm64-support-for-windows" target="_blank" rel="noopener noreferrer"&gt;ARM64 support for Windows and Linux&lt;/a&gt;
 on both desktop and CLI apps.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is a fan of AtlantaFX: &amp;ldquo;&lt;em&gt;Our CRM system at Senapt / Tomato Energy has now been completely transitioned to the AtlantaFX theme / theming support. The result is a much more pleasant user experience. A clean, modern looking UI. The semantic colors give us multi-theme / dark-mode support for free.&lt;/em&gt; &amp;quot; Check the &lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3lxryso6uy223" target="_blank" rel="noopener noreferrer"&gt;screenshots in his Bluesky message&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3lyih22nzrk25" target="_blank" rel="noopener noreferrer"&gt;Announcement with screenshots by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;CalendarFX 12.0.1 has built-in support for AtlantaFX. Several themes and dark mode support for free.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/sosuisen.bsky.social/post/3lyimtmomzk2x" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hidekazu Kubota&lt;/strong&gt; announced on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;m releasing the results of my one month of effort. The &lt;a href="https://github.com/sosuisen/javafx-builder-api" target="_blank" rel="noopener noreferrer"&gt;JavaFX Builder API Project&lt;/a&gt;
 provides a builder pattern API for JavaFX UI components, enabling the creation of JavaFX applications through a fluent, strongly typed, and declarative approach. This adds flavors that fluent API enthusiasts will appreciate on top of the original JavaFX API. Currently, it is a SNAPSHOT version that can be tested by adding it as a Maven dependency. I plan to release an early access version next, but before that, I would like feedback from JavaFX developers.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/sosuisen.bsky.social/post/3lytxkzgwac2q" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hidekazu Kubota&lt;/strong&gt; on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I have been developing a VSCode extension to generate JavaFX builders, but I decided to &lt;a href="https://github.com/sosuisen/javafx-builder-api" target="_blank" rel="noopener noreferrer"&gt;rewrite it as a library&lt;/a&gt;
 for a better approach. Recognizing the library&amp;rsquo;s clear potential, I chose to halt the development of the extension.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;And a &lt;a href="https://bsky.app/profile/sosuisen.bsky.social/post/3lyyj2hqhus2x" target="_blank" rel="noopener noreferrer"&gt;follow-up message&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The JavaFX Builder API has been updated to support JavaFX 25. Since the JavaFX API is quite stable, I believe that supporting it through a code generator approach is straightforward.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;JPro (to run JavaFX in the browser) released version 2025.3.1: &amp;ldquo;&lt;em&gt;Now supports Java and JavaFX 25, and Gradle 9. The JPro Loadbalancer is now released together with the runtime, and we&amp;rsquo;ve made a lot of changes under the hood.&lt;/em&gt; &amp;quot; Check the &lt;a href="https://www.jpro.one/docs/jpro-webapi/changelog/1/1/2025.3.x" target="_blank" rel="noopener noreferrer"&gt;release notes here&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Short video: &lt;a href="https://www.youtube.com/shorts/Wrl1_NnruyI" target="_blank" rel="noopener noreferrer"&gt;JavaFX vs Electron, The Ultimate Performance Showdown!&lt;/a&gt;
 which is part of the &lt;a href="https://www.youtube.com/watch?v=Pg7vuclC3KI" target="_blank" rel="noopener noreferrer"&gt;Ben &amp;amp; Ryan Show - Episode 22 - BoxLang&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;In this episode, your hosts Ben Nadel and Ryan Brown sit down with Luis Majano and Daniel Garcia from Ortus Solutions to dive deep into BoxLang, the dynamic new language for the JVM. From modular design to multi-runtime capabilities and modern tooling, this conversation explores past, present, and future of BoxLang.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://genuinecoder.com/javafx-buttons-with-custom-shape/" target="_blank" rel="noopener noreferrer"&gt;JavaFX Custom Shaped Buttons&lt;/a&gt;
 with code examples and a video walk-through by &lt;strong&gt;Muhammed Afsal Villan&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A great article with a lot of code examples by &lt;strong&gt;Catherine Edelveis&lt;/strong&gt; on DZone: &lt;a href="https://dzone.com/articles/top-javafx-testing-mistakes" target="_blank" rel="noopener noreferrer"&gt;Top 7 Mistakes When Testing JavaFX Applications&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;Testing JavaFX programs may seem non-trivial at first. This article describes the most common mistakes when testing desktop apps, their causes, and solutions.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://bsky.app/profile/toddnotmitchell.com/post/3lxqm5io4322k" target="_blank" rel="noopener noreferrer"&gt;fun message by &lt;strong&gt;Todd Mitchell&lt;/strong&gt;&lt;/a&gt;
 about &amp;ldquo;abused JavaFX code&amp;rdquo;: &amp;ldquo;&lt;em&gt;Very distracting in the Unknown Number / High School Catfish doc that when the FBI guy starts talking about extracting phone data they show made up contact information for Charlie Brown, Ethan Hunt, and Kevin McCallister laid over a guy&amp;rsquo;s JavaFX game code I was able to find on Russian StackOverflow.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Last week we had a Mandelbrot example by &lt;strong&gt;A N M &amp;ldquo;Bazlur&amp;rdquo; Rahman&lt;/strong&gt; . This week, thanks to a &lt;a href="https://bsky.app/profile/maxandersen.xam.dk/post/3lxzl67e3222v" target="_blank" rel="noopener noreferrer"&gt;tip by &lt;strong&gt;Max Rydahl Andersen&lt;/strong&gt;&lt;/a&gt;
, we have another one. MandelbrotFx, a fractal (Mandelbrot, Julia, &amp;hellip;) explorer written with JavaFX, is a &lt;a href="https://github.com/CodeSimcoe/MandelbrotFx" target="_blank" rel="noopener noreferrer"&gt;project shared by &lt;strong&gt;Clément de Tastes&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3lxzbhapzn22w" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;There are so many cool performance tricks for JavaFX that I sometimes think I should write a book about it. But that takes a huge amount of time. I&amp;rsquo;ll think a bit more about how to deal with this.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3lyiiqznzls25" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; uses JavaFX styling in the best possible way&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;&amp;lsquo;Empathy driven development&amp;rsquo;&amp;rdquo;&amp;rsquo; means to consider that there are users out there with disabilities. One of them is &amp;lsquo;color vision deficiency&amp;rsquo; (CVD), and today I added a preferences pane that allows our users to pick their status colours based on their CVD.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;And &lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3lyl3wr3w4s2a" target="_blank" rel="noopener noreferrer"&gt;another message with screenshot by &lt;strong&gt;Dirk&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Once again amazed how well JavaFX runs inside browsers via &lt;a href="https://foojayio.github.io/website/www.jpro.one"&gt;JPRO&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/frankdelporte.be/post/3lz4fnslmus2c" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; bumped his Raspberry Pi&amp;rsquo;s to version 25&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Welcome to Java 25 on the Raspberry Pi! The install script in the &lt;a href="https://github.com/Pi4J/pi4j-os" target="_blank" rel="noopener noreferrer"&gt;Pi4J OS repository&lt;/a&gt;
 to configure a new Raspberry Pi has been updated to install Azul Zulu 25 with JavaFX. Or you can &lt;a href="https://www.pi4j.com/prepare/install-java/" target="_blank" rel="noopener noreferrer"&gt;follow the updated instructions on the Pi4J website&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.sciam.fr/2025/09/22/value-types-et-fractales.html" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Clément de Tastes&lt;/strong&gt; published &amp;ldquo;Valhalla &amp;amp; Value Types au pays des fractales&amp;rdquo;&lt;/a&gt;
 in French. Translated intro: &amp;ldquo;&lt;em&gt;We invite you to make a leap in the future of Java, especially through improvements that the Valhalla project prepares for us. We will take the opportunity to put them into practice on a talking example: the calculation and visualization of the whole of Mandelbrot.&lt;/em&gt;&amp;rdquo; In the article, JavaFX is used to generate beautiful fractals.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/showcases/defold" target="_blank" rel="noopener noreferrer"&gt;Defold, the game engine for high-performance cross-platform games&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The links of August got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-august-2025/"&gt;published on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Introduction to Data-Driven Testing with Java and MongoDB</title><link>https://foojayio.github.io/website/today/introduction-to-data-driven-testing-with-java-and-mongodb/</link><pubDate>Thu, 25 Sep 2025 13:53:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-to-data-driven-testing-with-java-and-mongodb/</guid><description>&lt;p&gt;As applications expand, the complexity of the rules they enforce also increases. In many systems, these rules are embedded within the data, primarily in database queries that filter, join, or compute based on real-world conditions. However, the tests for these queries are often shallow, repetitive, or, worse yet, completely absent. When there is an error in the database logic, the application may still compile successfully, but the business can suffer significant consequences.&lt;/p&gt;</description></item><item><title>Design Patterns Update to JDK25</title><link>https://foojayio.github.io/website/today/design-patterns-update-to-jdk25/</link><pubDate>Wed, 24 Sep 2025 11:29:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/design-patterns-update-to-jdk25/</guid><description>&lt;p&gt;&lt;strong&gt;T&lt;/strong&gt; he information technology landscape is changing rapidly. This is not only due to the utilization of AI and &lt;a href="https://foojayio.github.io/website/today/stochastic-ai-agility-breaking-cycles-of-debt/" title="new methodologies"&gt;new methodologies [8]&lt;/a&gt;
, or business requirements trying to keep up, but also because of the incremental complexity of expected solutions.&lt;/p&gt;
&lt;p&gt;Statistics and probability are slowly beginning to play a very important role in this evolution. The Java ecosystem has proven its maturity many times by delivering essential features that businesses require, although many may argue that these have been inspired by other existing solutions.&lt;/p&gt;</description></item><item><title>Power your AI application with Vector Search</title><link>https://foojayio.github.io/website/today/power-your-ai-application-with-vector-search/</link><pubDate>Tue, 23 Sep 2025 16:23:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/power-your-ai-application-with-vector-search/</guid><description>&lt;p&gt;Most major database vendors, like &lt;a href="https://www.mongodb.com/lp/cloud/atlas/try4-reg/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=foojay-vector-search&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;
 , are adding vector search capabilities to their products. It&amp;rsquo;s becoming a standard feature as demand for AI-powered applications grows.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🕒 Reading time: 3-4 min&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🧠 What is vector search needed for?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MongoDB Vector Search enables semantic queries. For example, finding support tickets with similar meanings even if they use different words. It also powers hybrid search by combining exact keyword matches like &amp;ldquo;error 500&amp;rdquo; with semantically similar phrases like &amp;ldquo;server failure&amp;rdquo;. Another use case is personalization, such as recommending articles similar to those a user has read.&lt;/p&gt;</description></item><item><title>How to Kickstart Your Jakarta EE 11 Projects with Payara Starter</title><link>https://foojayio.github.io/website/today/how-to-kickstart-your-jakarta-ee-11-projects-with-payara-starter/</link><pubDate>Tue, 23 Sep 2025 10:26:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-kickstart-your-jakarta-ee-11-projects-with-payara-starter/</guid><description>&lt;p&gt;&lt;strong&gt;Jakarta EE 11 is here, bringing powerful new capabilities for enterprise Java developers. But getting started quickly can be a challenge - that&amp;rsquo;s where the latest Payara Starter comes in. With full Jakarta EE 11 support, an updated ERD-based code generator, and a new Jakarta Faces project generator, it gives you everything you need to launch your next application with ease.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With Jakarta EE 11 now &lt;a href="https://blog.payara.fish/jakarta-ee-11-is-here-and-its-ready-for-the-cloud" title="officially released" target="_blank" rel="noopener noreferrer"&gt;officially released&lt;/a&gt;
, you are likely eager to explore its new capabilities but setting up your first application may take longer than you want. That&amp;rsquo;s where the latest version of Payara Starter steps in, giving you a fast, hassle-free way to get a fully functional Jakarta EE 11 project up and running. Read more to learn how!&lt;/p&gt;</description></item><item><title>From Zero to Vector Hero - Locally! (Vector Search)</title><link>https://foojayio.github.io/website/today/from-zero-to-vector-hero-locally/</link><pubDate>Thu, 18 Sep 2025 15:25:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/from-zero-to-vector-hero-locally/</guid><description>&lt;p&gt;In the previous issue, I explained how to run a local &lt;a href="https://www.mongodb.com/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=vector-search-3&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;
 Atlas cluster using Atlas CLI - no cloud account required. If you missed it, read it here 👉 Run an Atlas cluster locally in minutes. Now let&amp;rsquo;s see how to use Vector Search in that local environment.&lt;/p&gt;
&lt;p&gt;🕒 Reading time: 3-4 min&lt;/p&gt;
&lt;p&gt;🧠 Explaining the Embedding Workflow&lt;/p&gt;
&lt;p&gt;After launching your local MongoDB Atlas cluster and running the show dbs command in mongosh, you&amp;rsquo;ll see only the default system databases: admin, config, and local. These are used internally by MongoDB and contain no user data or vector embeddings at this point.&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>Azul’s High-Performance Java Platform Achieves Historic First</title><link>https://foojayio.github.io/website/today/azuls-high-performance-java-platform-achieves-historic-first-with-10000-customer-jvms-collaborating-and-sharing-performance-optimizations-cutting-cloud-costs-by-20/</link><pubDate>Wed, 17 Sep 2025 16:49:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/azuls-high-performance-java-platform-achieves-historic-first-with-10000-customer-jvms-collaborating-and-sharing-performance-optimizations-cutting-cloud-costs-by-20/</guid><description>&lt;p&gt;&lt;strong&gt;Azul Platform Prime Achieves Historic First with 10,000+ JVMs Collaborating and Sharing Performance Optimizations, Cutting Cloud Costs by More than 20%&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Fleet-level advantages achieved for cloud-native Java applications with faster warm-up, smoother scaling and reduced cost&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SUNNYVALE, Calif. &amp;mdash; September 17, 2025 &amp;mdash;&lt;/strong&gt; &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
, the only company 100% focused on Java, today announced a breakthrough in cloud deployment at scale with &lt;a href="https://www.azul.com/products/prime/" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Prime&lt;/a&gt;
, its high-performance Java platform. A leading global enterprise has deployed hundreds of applications and micro-services across more than 10,000 Java Virtual Machines (JVMs) using Platform Prime&amp;rsquo;s Optimizer Hub, a unique capability that allows JVMs to collaborate and share performance optimizations.&lt;/p&gt;</description></item><item><title>Best Practices for Deploying MongoDB in Kubernetes</title><link>https://foojayio.github.io/website/today/best-practices-for-deploying-mongodb-in-kubernetes/</link><pubDate>Tue, 16 Sep 2025 19:01:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/best-practices-for-deploying-mongodb-in-kubernetes/</guid><description>&lt;p&gt;&lt;a href="https://kubernetes.io/" target="_blank" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;
, also known as K8s, is an open-source system that simplifies the deployment, scaling, and management of containerized applications. You define your application&amp;rsquo;s desired state, such as the number of instances (&lt;a href="https://kubernetes.io/docs/concepts/workloads/pods/" target="_blank" rel="noopener noreferrer"&gt;pods&lt;/a&gt;
) or how they communicate, and Kubernetes works continuously to ensure that state is met. It excels at running stateless workloads, where pods can be replaced at any time without impacting application state or user data. Think of web servers or REST APIs: If a pod crashes, Kubernetes simply spins up a replacement and everything continues as expected.&lt;/p&gt;</description></item><item><title>Here's Java 25, Ready to Perform to the Limit</title><link>https://foojayio.github.io/website/today/heres-java-25-ready-to-perform-to-the-limit/</link><pubDate>Tue, 16 Sep 2025 06:05:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/heres-java-25-ready-to-perform-to-the-limit/</guid><description>&lt;p&gt;It&amp;rsquo;s been six months since Java 24 was released, so it&amp;rsquo;s time for a fresh set of new Java features.&lt;/p&gt;
&lt;p&gt;And the feature that immediately grabs the attention this time is &lt;em&gt;stable values&lt;/em&gt;, taking Java&amp;rsquo;s support of immutability to the next level. Also, Java&amp;rsquo;s focus on improving performance intensifies, as more JEPs emerge from Project Leyden. On top of that, the Java Flight Recorder is now more equipped than ever to tackle performance issues!&lt;/p&gt;</description></item><item><title>Foojay Podcast #78: Welcome to OpenJDK 25!</title><link>https://foojayio.github.io/website/today/foojay-podcast-78/</link><pubDate>Mon, 15 Sep 2025 10:22:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-78/</guid><description>&lt;p&gt;We&amp;rsquo;re excited to present the first episode of the Foojay Podcast&amp;rsquo;s fifth season, marking the release of OpenJDK 25!&lt;/p&gt;
&lt;p&gt;For the first time, an OpenJDK release is aligned with the year, and we can welcome release 25 in 2025. As usual in the release podcast, I have my regular guest, Simon Ritter. And in this episode, we are joined by Balkrishna Rawool to talk about all the new features in this new OpenJDK version.&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>MongoDB Schemas in Java</title><link>https://foojayio.github.io/website/today/mongodb-schemas-in-java/</link><pubDate>Thu, 11 Sep 2025 13:15:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-schemas-in-java/</guid><description>&lt;p&gt;If (like me!) you prefer to read code rather than a long and boring article, jump straight to the example! TLDR; here&amp;rsquo;s the &lt;a href="https://github.com/luketn/mongodb-schemas-in-java" target="_blank" rel="noopener noreferrer"&gt;code&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;You can clone and run the tests like this:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;git clone https://github.com/luketn/mongodb-schemas-in-java&amp;nbsp;
cd mongodb-schemas-in-java&amp;nbsp;
mvn test&lt;/pre&gt;
&lt;p&gt;And if you want to play with the example API visually (like I do!) and you have a local Mongo or an Atlas Cluster with the &lt;a href="https://www.mongodb.com/docs/guides/atlas/sample-data/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=mongodb-schemas-java&amp;amp;utm_term=megan.grant" target="_blank" rel="noopener noreferrer"&gt;Weather Sample&lt;/a&gt;
 data, run:&lt;/p&gt;</description></item><item><title>Stochastic AI Agility: Breaking Cycles of Debt</title><link>https://foojayio.github.io/website/today/stochastic-ai-agility-breaking-cycles-of-debt/</link><pubDate>Wed, 10 Sep 2025 11:27:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/stochastic-ai-agility-breaking-cycles-of-debt/</guid><description>&lt;p&gt;&lt;strong&gt;The launch of ChatGPT in November 2022 has significantly influenced and potentially transformed industry standards across multiple sectors. While my primary focus remains on the information technology sector, observations indicate that its impact extends across all industries and affects the daily lives of consumers and professionals alike.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article examines the observed changes in project management practices. These observations are govern by Role 17: Stochastic AI Agility. Over past two decades, the industry has actively pursued the implementation of agile methodologies to enable iterative product delivery.&lt;/p&gt;</description></item><item><title>JetBrains and Azul Collaborate on Kotlin Performance in Various JVMs</title><link>https://foojayio.github.io/website/today/jetbrains-and-azul-collaborate-on-kotlin-performance-in-various-jvms/</link><pubDate>Wed, 10 Sep 2025 07:11:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/jetbrains-and-azul-collaborate-on-kotlin-performance-in-various-jvms/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;JetBrains and Azul are collaborating on a shared vision of running Kotlin-generated bytecode on a high-performance &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Java platform&lt;/a&gt;
 to find new ways to enhance runtime performance. Benchmarks of Kotlin performance on Azul Platform Prime have yielded some eye-opening results.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;In this article you will learn:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Kotlin is a high-level programming language designed to interoperate fully with the JVM&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Runtime performance and scalability are derived predominantly from the JVM&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;JetBrains and Azul benchmarked Kotlin on both standard OpenJDK and on Azul Platform Prime, a high-performance &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Java platform&lt;/a&gt;
&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Platform Prime reduced latencies by 23.9% and improved throughput by as much as 30.5%&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As modern JVMs combine language features and runtime optimizations, they unlock new levels of performance.&lt;/p&gt;</description></item><item><title>Building REST APIs in Java with Spring Boot</title><link>https://foojayio.github.io/website/today/building-rest-apis-in-java-with-spring-boot/</link><pubDate>Tue, 09 Sep 2025 14:51:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-rest-apis-in-java-with-spring-boot/</guid><description>&lt;p&gt;REST has become the default choice for building web services, and for good reason. It&amp;rsquo;s straightforward to implement, easy for clients to consume, and built directly on top of the same principles of the web itself.&lt;/p&gt;
&lt;p&gt;HTTP already gives us well-defined methods (GET, POST, PUT, DELETE), built-in caching, redirect support, secure transport via TLS, and widespread tooling support across platforms. REST doesn&amp;rsquo;t reinvent the web&amp;mdash;it uses it.&lt;/p&gt;
&lt;p&gt;REST is not a protocol or a rigid standard. It&amp;rsquo;s a lightweight architectural approach that encourages scalable, evolvable, and interoperable services. Its creator, Roy Fielding, helped define many of the specs that underpin the web today.&lt;/p&gt;</description></item><item><title>Spec-Driven Development with AI: A New Approach and a Journey into the Past</title><link>https://foojayio.github.io/website/today/spec-driven-development-with-ai-a-new-approach-and-a-journey-into-the-past/</link><pubDate>Mon, 08 Sep 2025 07:35:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/spec-driven-development-with-ai-a-new-approach-and-a-journey-into-the-past/</guid><description>&lt;p&gt;The software development world is buzzing about AI-assisted coding. Tools like Claude Code, Windsurf, and JetBrains Junie promise to make us more productive. But most approaches focus on generating code faster &amp;ndash; they&amp;rsquo;re still &lt;strong&gt;code-centric&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;What if we took a different approach? What if we made &lt;strong&gt;requirements&lt;/strong&gt; the source of truth and let AI handle everything downstream?&lt;/p&gt;
&lt;p&gt;After years of building business applications, I began developing a methodology that combines ideas from the &lt;a href="https://en.wikipedia.org/wiki/Rational_unified_process" target="_blank" rel="noopener noreferrer"&gt;Rational Unified Process&lt;/a&gt;
 (RUP) with modern AI tooling: The &lt;a href="https://aiup.dev" target="_blank" rel="noopener noreferrer"&gt;AI Unified Process&lt;/a&gt;
. The results are remarkable: better business alignment, maintainable code, and complete traceability from business needs to implementation.&lt;/p&gt;</description></item><item><title>MongoDB Aggregations: Organizing Recipes by Meal Type with $group</title><link>https://foojayio.github.io/website/today/mongodb-aggregations-organizing-recipes-by-meal-type-with-group/</link><pubDate>Thu, 04 Sep 2025 05:31:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-aggregations-organizing-recipes-by-meal-type-with-group/</guid><description>&lt;p&gt;In this series, we&amp;rsquo;re exploring different &lt;a href="https://www.mongodb.com/docs/manual/aggregation/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=recipe-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;MongoDB aggregation operators&lt;/a&gt;
 by applying them to a recipe collection. I hope you&amp;rsquo;ll follow along with each post!&lt;/p&gt;
&lt;p&gt;MongoDB Aggregations Series&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learnmongo.com/mongodb-aggregations-finding-cooking-times-with-min-and-max/" target="_blank" rel="noopener noreferrer"&gt;MongoDB Aggregations: Finding Cooking Times with $min and $max&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MongoDB Aggregations: Organizing Recipes by Meal Type with $group&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As part of this series, we are imagining you&amp;rsquo;re building a recipe website. For this post, we are adding some new features to our site, including allowing users to browse recipes by meal type&amp;mdash;breakfast, lunch, dinner, etc.&lt;/p&gt;</description></item><item><title>KCDC 2025</title><link>https://foojayio.github.io/website/today/kcdc-2025/</link><pubDate>Wed, 03 Sep 2025 17:38:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/kcdc-2025/</guid><description>&lt;p&gt;When I first started attending conferences, I diligently tried to write down notes and publish them. It forced me to actively listen to the talks I was attending. With the number of conferences rising, I couldn&amp;rsquo;t keep the rhythm. When I switched my career path to Developer Advocate, I drastically diminished the number of talks I attended in favor of the hallway track. As a result, the last conference &amp;ldquo;report&amp;rdquo; I wrote was &lt;a href="https://blog.frankel.ch/jprime-2022/" target="_blank" rel="noopener noreferrer"&gt;JPrime&amp;rsquo;s&lt;/a&gt;
 in 2022.&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>Copy of Queryable Encryption with Spring Data MongoDB: How to Query Encrypted Fields</title><link>https://foojayio.github.io/website/today/queryable-encryption-with-spring-data-mongodb-how-to-query-encrypted-fields/</link><pubDate>Tue, 02 Sep 2025 19:00:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/queryable-encryption-with-spring-data-mongodb-how-to-query-encrypted-fields/</guid><description>&lt;p&gt;Information is one of the most valuable assets in computing and keeping it protected is even more critical. When we talk about data protection, it&amp;rsquo;s not just about preventing breaches or leaks; it&amp;rsquo;s also about complying with privacy regulations and protecting user data.&lt;/p&gt;
&lt;p&gt;MongoDB provides strong encryption capabilities, including in transit, at rest, and in use. The Queryable Encryption feature falls into the &lt;em&gt;in use&lt;/em&gt; category. It allows data to be encrypted on the client side, so that even with access to the database and its credentials, no one can read the protected fields without the proper encryption key. At the same time, it supports querying over encrypted fields, making it possible to filter, match, or retrieve data without compromising confidentiality.&lt;/p&gt;</description></item><item><title>AI4Devs - Schedule published</title><link>https://foojayio.github.io/website/today/ai4devs-schedule-published/</link><pubDate>Mon, 01 Sep 2025 20:05:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/ai4devs-schedule-published/</guid><description>&lt;p&gt;The wait is over&amp;mdash;&lt;strong&gt;AI4Devs Amsterdam has just published its official schedule&lt;/strong&gt;, and it&amp;rsquo;s packed with talks that every developer working with (or curious about) AI will want to catch.&lt;/p&gt;
&lt;p&gt;From live coding sessions to hands-on workshops, from security insights to multi-agent architectures&amp;mdash;the program is designed to keep things practical, technical, and deeply relevant.&lt;/p&gt;
&lt;p&gt;Whether you&amp;rsquo;re already building AI-powered systems or just starting to explore what&amp;rsquo;s possible, this year&amp;rsquo;s edition has something for you. Let&amp;rsquo;s take a look at the highlights.&lt;/p&gt;</description></item><item><title>JavaFX Links of August 2025</title><link>https://foojayio.github.io/website/today/javafx-links-of-august-2025/</link><pubDate>Sun, 31 Aug 2025 07:57:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-august-2025/</guid><description>&lt;p&gt;Here are the links shared on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 in the August summary.&lt;/p&gt;
&lt;p&gt;Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/did:plc:tysr26jaqf3moymuf7jc2uyr/post/3lv2hizyo6k25" target="_blank" rel="noopener noreferrer"&gt;Announced by &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX now has a Headless platform. &lt;a href="https://bugs.openjdk.org/browse/JDK-8324941" target="_blank" rel="noopener noreferrer"&gt;JDK-8324941&lt;/a&gt;
 is now Resolved! Pfew, that took me 1 year, 5 months and 29 days. Goodnight!&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;Read more in this blog post: &lt;a href="https://gluonhq.com/introducing-the-headless-platform-for-javafx/" target="_blank" rel="noopener noreferrer"&gt;Introducing the Headless Platform for JavaFX&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;And &lt;strong&gt;Johan&lt;/strong&gt; is also &lt;a href="https://mastodon.social/@johanvos/115105044172821272" target="_blank" rel="noopener noreferrer"&gt;making progress with Java on Mobile&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;OpenJDK on mobile developers should be excited: we&amp;rsquo;re very close to a full, transparent, open release of the status. Workflow is cool now: I made a simple change in OpenJDK, ran 2 scripts, clicked &amp;ldquo;cmd-R&amp;rdquo; in Xcode, and HelloWorld appeared again (with the changed JDK) on my iPhone.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Still using JavaFX 8 in production and need a solution to run it securely after Oracle stopped supporting it? Check out this blog post by &lt;strong&gt;Frank Delporte&lt;/strong&gt; about the solution provided by Azul: &lt;a href="https://www.azul.com/blog/keep-your-javafx-8-applications-secure-and-running/" target="_blank" rel="noopener noreferrer"&gt;Keep your JavaFX 8 Applications Secure and Running&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/hansolo.eu/post/3lwephwpids2i" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Last night I&amp;rsquo;ve &lt;a href="https://github.com/HanSolo/timebuddyfx" target="_blank" rel="noopener noreferrer"&gt;implemented TimeBuddy&lt;/a&gt;
 which is my favorite timezone app on iOS in #JavaFX might be time for another #FridayFunComponent 😁&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dotjava.bsky.social/post/3lvuy7zc4sk2a" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Michiel&lt;/strong&gt; on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;ve created a 100% #java open source mobile phone app (#android only for now): An Icelandic currency converter (IceCo). The project uses Java, Javafx with FXML only. &lt;a href="https://github.com/michiel-jfx/iceconverter" target="_blank" rel="noopener noreferrer"&gt;See GitHub&lt;/a&gt;
. Converts krónur to euro (vice versa)&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Konstantin Ryadov&lt;/strong&gt; is &lt;a href="https://github.com/kryadov/labyrinth7" target="_blank" rel="noopener noreferrer"&gt;experimenting with FXGL to build a labyrinth game&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A small first‑person labyrinth game built with Java 21, JavaFX 21 (3D) and FXGL. A randomized maze is generated each level; find the animated exit to advance. The game features textured 3D walls/floor/ceiling, ambient lighting, footstep sounds, and background music for the menu and in‑game.&lt;/em&gt; &amp;quot; He published two videos:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=NgOb9DGl8pA" target="_blank" rel="noopener noreferrer"&gt;Opensourced: Yet another labyrinth using JavaFX and FXGL&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=6qFd9VvMIec" target="_blank" rel="noopener noreferrer"&gt;1.0.1 - new updates&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gardensim/GardenSim" target="_blank" rel="noopener noreferrer"&gt;Computerized Garden, a.k.a. GardenSim&lt;/a&gt;
, is a Java 17 + JavaFX 22 project that simulates a small garden by &lt;strong&gt;Wineel Wilson Dasari&lt;/strong&gt;. You can plant (Rose, Tomato, Orange), simulate weather, spawn/control pests, and watch plants survive or die over days.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://store.steampowered.com/app/3739280/Nocturne_FX/" target="_blank" rel="noopener noreferrer"&gt;Released on Steam: Nocturne FX&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;Built entirely in JavaFX, Nocturne FX™ is a high-intensity arcade game where survival warps reality. Power-ups destabilize, patterns shift, and hidden systems awaken&amp;mdash;the longer you last, the more the world unravels.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; released &lt;a href="https://central.sonatype.com/artifact/eu.hansolo.fx/charts" target="_blank" rel="noopener noreferrer"&gt;version 21.0.27&lt;/a&gt;
 of his Charts library with a new SpiderChart &amp;ldquo;&lt;em&gt;just for the fun of it 🙂&lt;/em&gt;&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;During the &lt;a href="https://www.youtube.com/watch?v=axbx2kTuJf0" target="_blank" rel="noopener noreferrer"&gt;CyberJAR live stream &amp;ldquo;Chatting about Java, JavaFX, and Experiments on the Raspberry Pi&amp;rdquo;&lt;/a&gt;
 with &lt;strong&gt;Catherine Edelveis&lt;/strong&gt; and &lt;strong&gt;Frank Delporte&lt;/strong&gt;, several JavaFX applications where demonstrated running on Raspberry Pi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Video tutorials:
&lt;ul&gt;
&lt;li&gt;By &lt;strong&gt;Plant Fall&lt;/strong&gt; : &lt;a href="https://www.youtube.com/watch?v=_mmk_4Wvmkk" target="_blank" rel="noopener noreferrer"&gt;Creating a Desktop app rapidly with JavaFX and VsCode&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;By &lt;strong&gt;HTRP&lt;/strong&gt; : &lt;a href="https://www.youtube.com/watch?v=qiLj9-nh28k" target="_blank" rel="noopener noreferrer"&gt;Step-by-step guide to connect a javaFX project with Microsoft SQL Server using IntelliJ&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/bazlur_java-javafx-activity-7361613329703862272-Rl0h/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;A N M &amp;ldquo;Bazlur&amp;rdquo; Rahman&lt;/strong&gt; on LinkedIn&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;You can create incredible things with JavaFX. &lt;a href="https://github.com/rokon12/Mandelbrot" target="_blank" rel="noopener noreferrer"&gt;Here are some examples I made with it&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/william-ant%C3%B4nio-siqueira-968bba14_i-just-added-a-log-inspector-to-llm-fx-suggestion-activity-7359788094599966722-nMEu/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;William Antônio Siqueira&lt;/strong&gt; shared a screenshot on LinkedIn&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I just added a log inspector to LLM FX, suggestion from &lt;strong&gt;Max Rydahl Andersen&lt;/strong&gt; - thanks! This feature allow us to precisely see what Tools were called by the LLM Server and what messages were sent to it. This was possible because today was Day of Learning at Red Hat, so I invested some time learning more about Jupyter Lab extensions, LLM Tools Calling internally and then took some time to inspect some tools call.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3lweonfbbc22m" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;One of my favorite API&amp;rsquo;s for JavaFX testing is Scene.addPostLayoutPulseListener(). I often need to test a condition at the end of a Pulse, and with this API, I can do that.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/java/comments/1msmgve/my_experience_switching_from_java_swing_to_javafx/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;gufranthakur&lt;/strong&gt; on Reddit&lt;/a&gt;
 wrote a long post &amp;ldquo;My experience switching from Java swing to JavaFX&amp;rdquo;, with a nice conclusion, and a lot of comments: &amp;ldquo;&lt;em&gt;My Final verdict: JavaFX is better than Swing. There I said it. This does not mean Swing sucks, I will forever be grateful to Swing for getting me addicted and good at desktop application development.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/bentofx" target="_blank" rel="noopener noreferrer"&gt;BentoFX: A docking system for JavaFX.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/7ZJ6Mro1iAk" target="_blank" rel="noopener noreferrer"&gt;BentoFX - Demo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The overview of the Links Of The Week of July &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-july-2025/"&gt;got published on &lt;strong&gt;Foojay&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Boosting Kafka Latency Performance by 3x with Zing JVM and AutoMQ</title><link>https://foojayio.github.io/website/today/boosting-kafka-latency-performance-by-3x-with-zing-jvm-and-automq/</link><pubDate>Fri, 29 Aug 2025 12:57:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/boosting-kafka-latency-performance-by-3x-with-zing-jvm-and-automq/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boosting-kafka-latency-performance-by-3x-with-zing-jvm-and-automq/kafka-with-zing-and-automq.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-why-is-latency-so-important-to-kafka"&gt;Why is Latency so Important to Kafka?&lt;/h2&gt;
&lt;p&gt;The importance of low latency in Kafka stems from the use cases it enables. Many applications that rely on Kafka are time-sensitive.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Real-time applications&lt;/strong&gt;, such as financial trading platforms, fraud detection systems, and real-time monitoring services, depend on obtaining the most current information available. A delay of even a few seconds could mean the difference between a successful trade and a missed opportunity, or a prevented fraudulent transaction and a financial loss.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User experience&lt;/strong&gt; is another area where latency plays a significant role. Think about in-app notifications, live-updating dashboards, or multiplayer games. A snappy, responsive system feels good to use. Sluggishness, on the other hand, can be a significant turn-off for users.&lt;/li&gt;
&lt;li&gt;From an &lt;strong&gt;operational perspective&lt;/strong&gt;, latency is a key indicator of health for your Kafka cluster. A spike in latency can be an early warning sign of a problem, such as a network bottleneck or a slow consumer, which can lead to message backlogs and system instability if left unaddressed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Maintaining low latency in the cloud with traditional Kafka is challenging. Its architecture couples compute and storage, making scaling slow and expensive due to data rebalancing. This creates a complex trade-off between high costs from overprovisioning and poor performance during traffic spikes. To solve this, new cloud-native streaming systems have emerged with a different architectural approach.&lt;/p&gt;</description></item><item><title>Taking Java Arrays to Another Dimension</title><link>https://foojayio.github.io/website/today/taking-java-arrays-to-another-dimension/</link><pubDate>Fri, 29 Aug 2025 12:53:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/taking-java-arrays-to-another-dimension/</guid><description>&lt;p&gt;&lt;em&gt;Explore the intricacies of Java&amp;rsquo;s multidimensional arrays with this in-depth guide. Learn how to declare, initialize, and utilize arrays of Java arrays to manage complex data structures effectively. In this blog post, Azul Deputy CTO Simon Ritter explains how to leverage multidimensional arrays as a tool to do even more.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Java, along with many other programming languages, includes the concept of arrays. An array is an object that contains a number of variables. Since an array is itself an object, the variables in an array can also be arrays, which leads us to the idea of multidimensional arrays.&lt;/p&gt;</description></item><item><title>What happens when a Primary fails in a MongoDB replica set?</title><link>https://foojayio.github.io/website/today/what-happens-when-a-primary-fails-in-a-mongodb-replica-set-automatic-failovers/</link><pubDate>Tue, 26 Aug 2025 15:14:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-happens-when-a-primary-fails-in-a-mongodb-replica-set-automatic-failovers/</guid><description>&lt;p&gt;In distributed systems, high availability is not a luxury&amp;mdash;it&amp;rsquo;s a necessity. And one of the very important parts of that is automatic failovers. What are automatic failovers and how do they work? Let&amp;rsquo;s see today!&lt;/p&gt;
&lt;p&gt;These concepts are actually similar in every database, but as &lt;a href="https://www.mongodb.com/cloud/atlas/register/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=shrey-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;
 is natively built for replica-sets, we will talk about that here, whereas other DB systems need 3rd-party or managed systems to implement the same.&lt;/p&gt;</description></item><item><title>GitHub workflows tips and tricks</title><link>https://foojayio.github.io/website/today/github-workflows-tips-and-tricks/</link><pubDate>Tue, 26 Aug 2025 12:06:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/github-workflows-tips-and-tricks/</guid><description>&lt;p&gt;I&amp;rsquo;ve quite a lengthy experience with GitHub workflows, but not up to the point where I can claim I&amp;rsquo;m an expert. However, I recently developed a new workflow, and it prompted me to write this post. Feel free to add your own.&lt;/p&gt;
&lt;h2 id="h2-0-what-are-github-workflows"&gt;What are GitHub workflows?&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;A &lt;strong&gt;workflow&lt;/strong&gt; is a configurable automated process that will run one or more jobs. Workflows are defined by a YAML file checked in to your repository and will run when triggered by an event in your repository, or they can be triggered manually or at a defined schedule.&lt;/p&gt;</description></item><item><title>Git default options</title><link>https://foojayio.github.io/website/today/git-default-options/</link><pubDate>Tue, 26 Aug 2025 11:59:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/git-default-options/</guid><description>&lt;p&gt;Git has become a fundamental part of our developers&amp;rsquo; daily routine that it&amp;rsquo;s hard to remember our lives without it. And yet, most of us use a limited set of commands &lt;strong&gt;and&lt;/strong&gt; options. Today, I want to focus on two commands most developers probably use &lt;strong&gt;every&lt;/strong&gt; day and look at the defaults behind them.&lt;/p&gt;
&lt;h2 id="h2-0-git-push"&gt;git push&lt;/h2&gt;
&lt;p&gt;After &lt;code&gt;git commit&lt;/code&gt;, &lt;code&gt;git push&lt;/code&gt; is probably the second most used command. I don&amp;rsquo;t think I&amp;rsquo;ll teach you anything with this excerpt from the documentation:&lt;/p&gt;</description></item><item><title>AI Gives Time, Not Confidence: Developer Productivity Toolkit</title><link>https://foojayio.github.io/website/today/ai-gives-time-not-confidence-developer-productivity-toolkit/</link><pubDate>Mon, 25 Aug 2025 07:07:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/ai-gives-time-not-confidence-developer-productivity-toolkit/</guid><description>&lt;p&gt;Let&amp;rsquo;s be real &amp;ndash; keeping up with the pace of software development today is intense. New frameworks pop up and the push for faster, better, &lt;em&gt;and&lt;/em&gt; more secure code never stops.&lt;/p&gt;
&lt;p&gt;This article is all about cutting through the buzz and looking at how AI-powered tools can actually help you, the Java developer, day-to-day. We&amp;rsquo;ll dive into specific ways AI can help you through the whole SDLC:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Understanding Complex Tasks&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accelerating Code Creation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Streamlining Cloud Deployment&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Creating Effective Tests&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Increasing Code Quality and Security&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improving Code Review&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Okay, first up: wrapping your head around the job at hand. You know those moments where you need to implement a feature based on requirements that feel a bit&amp;hellip; fuzzy. Traditionally, this means lots of reading, maybe drawing diagrams, and asking clarifying questions.&lt;/p&gt;</description></item><item><title>Managing MongoDB Database Changes Using Liquibase Pro</title><link>https://foojayio.github.io/website/today/managing-mongodb-database-changes-using-liquibase-pro/</link><pubDate>Wed, 20 Aug 2025 14:21:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/managing-mongodb-database-changes-using-liquibase-pro/</guid><description>&lt;p&gt;This article explores how Liquibase and MongoDB can be integrated with Git actions to implement source control for database changes.&lt;/p&gt;
&lt;h2 id="h2-0-what-is-liquibase"&gt;What is Liquibase?&lt;/h2&gt;
&lt;p&gt;Liquibase is an open-source tool designed to manage version control for database schema changes. It allows developers to simplify and automate the process of applying database updates across various database platforms.&lt;/p&gt;
&lt;p&gt;By using database-independent formats like XML, YAML, or JSON, Liquibase enables teams to define changes in a consistent and structured way. In a Java project, these updates are organized into files containing &lt;em&gt;changesets&lt;/em&gt;, which outline the specific instructions needed to modify or refactor the database schema.&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>New Java Benchmark for Coding LLMs puts GPT-5 at the top</title><link>https://foojayio.github.io/website/today/new-java-benchmark-for-coding-llms-puts-gpt-5-at-the-top/</link><pubDate>Mon, 18 Aug 2025 08:06:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-java-benchmark-for-coding-llms-puts-gpt-5-at-the-top/</guid><description>&lt;p&gt;The Brokk Power Ranking is a &lt;a href="https://github.com/BrokkAi/powerrank" title="new open-source coding benchmark" target="_blank" rel="noopener noreferrer"&gt;new open-source coding benchmark&lt;/a&gt;
, featuring 93 tasks from large, real-world codebases. You can check out the current Power Ranking &lt;a href="https://brokk.ai/power-rankings?ref=blog.brokk.ai" title="here" target="_blank" rel="noopener noreferrer"&gt;here&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;SWE-bench is the closest thing we have to a standard, objective benchmark for LLM coding performance, but it has a bunch of issues, the largest of which are that it&amp;rsquo;s Python-only, and it&amp;rsquo;s old enough that almost certainly some labs are now training to the test. (Epoch AI has a great writeup on &lt;a href="https://epoch.ai/blog/what-skills-does-swe-bench-verified-evaluate?ref=blog.brokk.ai" title="the more subtle problems with SWE-bench" target="_blank" rel="noopener noreferrer"&gt;the more subtle problems with SWE-bench&lt;/a&gt;
 if you want to go deeper.)&lt;/p&gt;</description></item><item><title>OpenTelemetry configuration gotchas</title><link>https://foojayio.github.io/website/today/opentelemetry-configuration-gotchas/</link><pubDate>Sun, 17 Aug 2025 08:01:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/opentelemetry-configuration-gotchas/</guid><description>&lt;p&gt;Last week, I described &lt;a href="https://blog.frankel.ch/opentelemetry-tracing-jvm/" target="_blank" rel="noopener noreferrer"&gt;several approaches to OpenTelemetry on the JVM&lt;/a&gt;
, their requirements, and their different results. This week, I want to highlight several gotchas found across stacks in the zero-code instrumentation.&lt;/p&gt;
&lt;h2 id="h2-0-the-promise-of-opentelemetry"&gt;The promise of OpenTelemetry&lt;/h2&gt;
&lt;p&gt;Since its inception, OpenTelemetry has unified the 3 pillars of observability. In the distributed tracing space, it replaced proprietary protocols Zipkin and Jaeger. IMHO, it achieved such success for several reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First, a huge industry pressure to work across proprietary tools&lt;/li&gt;
&lt;li&gt;Zero-code instrumentation, allowing developers to be unconcerned by OpenTelemetry&lt;/li&gt;
&lt;li&gt;Easy and unified configuration mechanism via environment variables.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The latter is a boon for the Ops team, as they don&amp;rsquo;t have to know the underlying framework (or stack!) details. They only need to check the &lt;a href="https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/" target="_blank" rel="noopener noreferrer"&gt;Environment Variable Specification&lt;/a&gt;
 and they are done.&lt;/p&gt;</description></item><item><title>OpenTelemetry Tracing on the JVM</title><link>https://foojayio.github.io/website/today/opentelemetry-tracing-on-the-jvm/</link><pubDate>Sun, 17 Aug 2025 08:00:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/opentelemetry-tracing-on-the-jvm/</guid><description>&lt;p&gt;You may know I&amp;rsquo;m a big fan of OpenTelemetry. I recently finished developing a &lt;a href="https://yowcon.com/melbourne-2025/masterclasses/560/gain-practical-in-depth-experience-with-observability-using-opentelemetry" target="_blank" rel="noopener noreferrer"&gt;master class for the YOW! conference&lt;/a&gt;
 at the end of the year. During development, I noticed massive differences in configuration and results across programming languages. Even worse, differences exist across frameworks inside the same programming language.&lt;/p&gt;
&lt;p&gt;In this post, I want to compare the different zero-code OpenTelemetry approaches on the JVM, covering the most widespread:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spring Boot with Micrometer Tracing&lt;/li&gt;
&lt;li&gt;Spring Boot with the OpenTelemetry Agent&lt;/li&gt;
&lt;li&gt;OpenTelemetry Spring Boot Starter&lt;/li&gt;
&lt;li&gt;Quarkus&lt;/li&gt;
&lt;li&gt;Quarkus with the OpenTelemetry Agent&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-commonalities"&gt;Commonalities&lt;/h2&gt;
&lt;p&gt;I keep the architecture pretty simple:&lt;/p&gt;</description></item><item><title>Domain-Driven Design in Java: A Practical Guide</title><link>https://foojayio.github.io/website/today/domain-driven-design-in-java-a-practical-guide/</link><pubDate>Fri, 15 Aug 2025 09:30:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/domain-driven-design-in-java-a-practical-guide/</guid><description>&lt;p&gt;While waiting for your flight in an airport, have you ever wondered how much behind-the-scenes planning it takes to keep an airport running smoothly? Every day, thousands of flights take off and land, passengers rush through terminals, and staff work tirelessly to make sure everything unfolds without a hitch. What looks like chaos on the surface is actually the result of a highly coordinated system&amp;mdash;a kind of &amp;ldquo;brain&amp;rdquo; that&amp;rsquo;s always working in the background to manage logistics, adapt to surprises, and keep the airport humming along.&lt;/p&gt;</description></item><item><title>Enforcing Governance in MongoDB Atlas with Resource Policies</title><link>https://foojayio.github.io/website/today/enforcing-governance-in-mongodb-atlas-with-resource-policies/</link><pubDate>Wed, 13 Aug 2025 12:52:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/enforcing-governance-in-mongodb-atlas-with-resource-policies/</guid><description>&lt;p&gt;The growing adoption of &lt;a href="https://www.mongodb.com/lp/cloud/atlas/try4-reg/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=samuel-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;MongoDB Atlas&lt;/a&gt;
 as a managed database platform increasingly demands mechanisms that align security, compliance, and governance. In April 2025, MongoDB introduced a critical feature for this purpose: &lt;a href="https://www.mongodb.com/en-us/docs/atlas/atlas-resource-policies/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=samuel-foojay&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Resource Policies&lt;/strong&gt;&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This article presents the concept and capabilities of Resource Policies, highlights their importance in enterprise environments, and demonstrates how to use them effectively via Terraform &amp;mdash; ensuring that essential configurations rely not only on best practices but also on enforceable and auditable constraints.&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>Preparing for Spring Boot 4 and Spring Framework 7: What’s New?</title><link>https://foojayio.github.io/website/today/preparing-for-spring-framework-7-and-spring-boot-4/</link><pubDate>Mon, 11 Aug 2025 14:42:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/preparing-for-spring-framework-7-and-spring-boot-4/</guid><description>&lt;p&gt;&lt;strong&gt;I&amp;rsquo;m a passionate Spring Framework and Spring Boot enthusiast, and I always look forward to exploring and experimenting with the latest features and improvements they introduce. With Spring Boot 4 and Spring Boot Framework 7 right around the corner, now&amp;rsquo;s the perfect time to dive into the key enhancements that will shape the future of modern Java and enterprise application development.&lt;/strong&gt;
&lt;img src="https://foojayio.github.io/website/today/preparing-for-spring-framework-7-and-spring-boot-4/SpringImage.jpg" alt="Spring Boot 4" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In this blog post, we will discuss some key features enhanced as part of Spring Framework 7 and Spring Boot 4.&lt;/p&gt;</description></item><item><title>New Features in Jakarta EE 11, with Examples</title><link>https://foojayio.github.io/website/today/new-features-in-jakarta-ee-11-with-examples/</link><pubDate>Mon, 11 Aug 2025 06:40:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-features-in-jakarta-ee-11-with-examples/</guid><description>&lt;h2 id="h2-0-jakarta-ee-11-is-a-major-update-in-the-enterprise-java-world-it-offers-key-changes-that-enhance-developer-productivity-and-modernize-the-platform"&gt;Jakarta EE 11 is a major update in the enterprise Java world. It offers key changes that enhance developer productivity and modernize the platform.&lt;/h2&gt;
&lt;p&gt;This release introduces several new features and improvements. These streamline workflows and integrate the latest Java advancements.&lt;/p&gt;
&lt;h2 id="h2-1-key-features-of-jakarta-ee-11"&gt;&lt;strong&gt;Key Features of Jakarta EE 11&lt;/strong&gt;&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/TUc_oOJb2PA?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;ol&gt;
&lt;li&gt;&lt;strong&gt;Java 21 Virtual Threads&lt;/strong&gt; : This update introduces Virtual Threads from Java 21. They enable lightweight concurrency for handling thousands of simultaneous tasks. This improves performance and scalability. Learn more about &lt;a href="https://omnifish.ee/glassfish-now-runs-on-jdk-21/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Java 21 Virtual Threads&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jakarta Data&lt;/strong&gt; : This new specification simplifies database access with the repository pattern, which reduced a lot of boiler plate code. Explore more about &lt;a href="https://omnifish.ee/jakartaee_logo_compatible/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jakarta Data&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New features in existing APIs:&lt;/strong&gt; Several APIs were updated to enhance existing features or add new features. For example. Jakarta Persistence 3.2 saw a lot of improvements (see the &lt;a href="https://jakarta.ee/specifications/persistence/3.2/" target="_blank" rel="noopener noreferrer"&gt;long list here&lt;/a&gt;
 or an article &lt;a href="https://www.baeldung.com/jakarta-persistence-3-2" target="_blank" rel="noopener noreferrer"&gt;about most of them here&lt;/a&gt;
. Many other APIs like Concurrency, Security, Faces, Servlet, or CDI received many enhancements as well.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Java 17+ Compatibility&lt;/strong&gt;: This release aligns with Java 17 and 21. Besides virtual threads, it also supports Java Records introduced in Java 17. This ensures developers can leverage the latest Java features and run on up-to-date Java versions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modernized APIs&lt;/strong&gt;: Jakarta EE 11 also replaces outdated Managed Beans with CDI and removes SecurityManager references. This aligns the platform with current best practices and Java features.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These updates focus on streamlining workflows. They improve performance and integrate modern Java features. This makes Jakarta EE 11 a powerful choice for enterprise and cloud-native applications.&lt;/p&gt;</description></item><item><title>Semantic Caching with SpringBoot &amp; Redis</title><link>https://foojayio.github.io/website/today/semantic-caching-with-springboot-redis/</link><pubDate>Thu, 07 Aug 2025 06:58:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/semantic-caching-with-springboot-redis/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; You&amp;rsquo;re building a semantic caching system using Spring AI and Redis to improve LLM application performance.&lt;/p&gt;
&lt;p&gt;Unlike traditional caching that requires exact query matches, semantic caching understands the meaning behind queries and can return cached responses for semantically similar questions.&lt;/p&gt;
&lt;p&gt;It works by storing query-response pairs as vector embeddings in Redis, allowing your application to retrieve cached answers for similar questions without calling the expensive LLM, reducing both latency and costs.&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>Run an Atlas cluster locally in minutes</title><link>https://foojayio.github.io/website/today/run-an-atlas-cluster-locally-in-minutes/</link><pubDate>Tue, 05 Aug 2025 07:33:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/run-an-atlas-cluster-locally-in-minutes/</guid><description>&lt;p&gt;You no longer need a cloud account to try &lt;a href="https://www.mongodb.com/lp/cloud/atlas/try4-reg/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=foojay-blog-atlas&amp;amp;utm_term=tony.kim" target="_blank" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;
 Atlas features. Spin up a fully compatible local cluster in seconds, with no login, no credit card, and no friction.&lt;/p&gt;
&lt;p&gt;🕒 Reading time: 2-3 min&lt;/p&gt;
&lt;p&gt;🍃 What is the MongoDB Atlas Platform?&lt;/p&gt;
&lt;p&gt;MongoDB Atlas is a fully managed, multi-cloud data platform provided by MongoDB Inc. It allows you to deploy and run MongoDB clusters on Amazon Web Services (AWS), Google Cloud Platform (GCP), and Microsoft Azure, with full support for replica sets (for high availability), sharding (for horizontal scalability), and multi-cloud deployments. Atlas handles infrastructure, backups, security, scaling, and monitoring out of the box. It also extends the core MongoDB server capabilities with a set of integrated features.&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>Release V0.0.2 of Java DMX512 Library With Universes and USB-to-DMX support</title><link>https://foojayio.github.io/website/today/release-v0-0-2-of-java-dmx512-library-with-universes-and-usb-to-dmx-support/</link><pubDate>Mon, 04 Aug 2025 14:19:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/release-v0-0-2-of-java-dmx512-library-with-universes-and-usb-to-dmx-support/</guid><description>&lt;p&gt;Earlier this month, I &lt;a href="https://webtechie.be/post/2025-07-17-introducing-java-dmx512-library-with-demo-javafx-ui/" target="_blank" rel="noopener noreferrer"&gt;released V0.0.1 of my new Java library to interact with DMX512 devices using (optionally) the Open Fixture Library (OFL)&lt;/a&gt;
. After some more experimenting, I&amp;rsquo;m able to announce the next (beta) release V0.0.2 with the following major changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Code refactoring&lt;/strong&gt;: As this library is still in beta, major changes were expected and happened 😉 The video of V0.0.1 is still valid, but some of the demonstrated code has changed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved demos&lt;/strong&gt; : Demo code has been moved to the &lt;a href="https://github.com/codewriterbv/DMX512/tree/main/src/main/java/be/codewriter/dmx512/demo" target="_blank" rel="noopener noreferrer"&gt;&lt;code&gt;demo&lt;/code&gt; directory in the sources&lt;/a&gt;
 to make them easier to understand and reuse.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Introduction of DMX Universes&lt;/strong&gt;: to be able to control fixtures connected to the two ports of my IP-to-DMX controller, universes needed to be added. (more info below)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;USB-to-DMX Support&lt;/strong&gt;: First working protocol over serial communication to DMX512! (more info below)&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex"&gt;
 &lt;figure class="wp-block-image size-large"&gt;
 &lt;img fetchpriority="high" decoding="async" width="1024" height="637" data-id="117016" src="ip-to-dmx-universes-1024x637.jpg" alt="" class="wp-image-117016"&gt;
 &lt;/figure&gt;
 &lt;figure class="wp-block-image size-large"&gt;
 &lt;img decoding="async" width="1024" height="572" data-id="117015" src="usb-to-dmx-1024x572.jpg" alt="" class="wp-image-117015"&gt;
 &lt;/figure&gt;
&lt;/figure&gt;
&lt;h2 id="h2-0-introduction-of-dmx-universes"&gt;Introduction of DMX Universes&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/slC4niKWUq0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;For my tests, I&amp;rsquo;m using an &lt;a href="https://www.amazon.com.be/dp/B0CYPQ2Z4V" target="_blank" rel="noopener noreferrer"&gt;JUNELIONY ArtNet 1024 2-Port Sulite DMX LAN512 2-Port ArtNet Converter&lt;/a&gt;
 controller. It has two XLR-connectors, labeled as &lt;code&gt;DMX1&lt;/code&gt; and &lt;code&gt;DMX2&lt;/code&gt;, which can be controlled as universe ID 0 and 1.&lt;/p&gt;</description></item><item><title>Monolith vs Microservices in 2025</title><link>https://foojayio.github.io/website/today/monolith-vs-microservices-2025/</link><pubDate>Mon, 04 Aug 2025 13:45:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/monolith-vs-microservices-2025/</guid><description>&lt;p&gt;In recent years, the tech world has been buzzing with debates about architecture choices. However, 2025 offers a more balanced perspective.&lt;/p&gt;
&lt;p&gt;Simplicity, developer experience, and maintainability are reshaping how teams design software.&lt;/p&gt;
&lt;p&gt;From Infrastructure as Code (IaC) to &amp;ldquo;vibecoding&amp;rdquo; culture, and from startups to enterprises, many rethink their position on the monolith vs microservices 2025 spectrum.&lt;/p&gt;
&lt;p&gt;So, what has actually changed?&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;🔵⚪⚪⚪⚪⚪&lt;/p&gt;
&lt;h2 id="h2-0-terraform-and-iac-changing-architecture-with-confidence"&gt;🔁 Terraform and IaC: Changing Architecture with Confidence&lt;/h2&gt;
&lt;h3 id="h3-1-how-infrastructure-as-code-helps-teams-adapt-architecture-efficiently"&gt;How Infrastructure as Code helps teams adapt architecture efficiently&lt;/h3&gt;
&lt;p&gt;Infrastructure as Code tools like Terraform make architecture changes easier. Nevertheless, the process is not effortless.&lt;/p&gt;</description></item><item><title>Why Java is Still Worth Learning in 2025: A Developer's 25-Year Journey</title><link>https://foojayio.github.io/website/today/why-java-is-still-worth-learning-in-2025-a-developers-25-year-journey/</link><pubDate>Mon, 04 Aug 2025 06:32:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-java-is-still-worth-learning-in-2025-a-developers-25-year-journey/</guid><description>&lt;h3 id="h3-0-i-ll-be-honest-my-first-encounter-with-java-in-1999-wasn-t-love-at-first-sight-it-was-during-a-university-distributed-systems-course-and-coming-from-a-background-in-assembler-and-c-java-felt-bloated-slow-and-frankly-untrustworthy-that-automatic-memory-handling-seemed-like-dangerous-magic-i-couldn-t-control-after-years-of-meticulously-tracking-every-allocated-memory-block-the-idea-that-the-runtime-would-handle-memory-management-felt-like-giving-up-control-to-forces-i-didn-t-understand"&gt;I&amp;rsquo;ll be honest - my first encounter with Java in 1999 wasn&amp;rsquo;t love at first sight. It was during a university distributed systems course, and coming from a background in assembler and C, Java felt bloated, slow, and frankly untrustworthy. That &amp;ldquo;automatic memory handling&amp;rdquo; seemed like dangerous magic I couldn&amp;rsquo;t control. After years of meticulously tracking every allocated memory block, the idea that the runtime would handle memory management felt like giving up control to forces I didn&amp;rsquo;t understand.&lt;/h3&gt;
&lt;p&gt;For the first eight years of my career, I stubbornly stuck with C, convinced that Java was just a passing trend for developers who couldn&amp;rsquo;t handle &amp;ldquo;real&amp;rdquo; programming.&lt;/p&gt;</description></item><item><title>JavaFX Links of July 2025</title><link>https://foojayio.github.io/website/today/javafx-links-of-july-2025/</link><pubDate>Thu, 31 Jul 2025 06:25:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-july-2025/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of July 2025. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;We totally agree with the &lt;a href="https://mastodon.social/@johanvos/114784601278658229" target="_blank" rel="noopener noreferrer"&gt;message from &lt;strong&gt;Johan Vos&lt;/strong&gt; about Gluon&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Every now and then, it&amp;rsquo;s ok to be proud of yourself (I hope). The fact that we at Gluon, for so many years, are &lt;a href="https://gluonhq.com/products/javafx" target="_blank" rel="noopener noreferrer"&gt;delivering high-quality, secure, free and opensource builds of JavaFX&lt;/a&gt;
, for different OS&amp;rsquo;es, archs, providing 2 LTS trains, EA and other versions, as SDKs/jmods/maven artifacts,&amp;hellip; is actually pretty amazing. We have no devrel/marketing/sales, so I&amp;rsquo;ll say it myself: great job, Gluon!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kevin Rushforth&lt;/strong&gt; of Oracle announced on the mailinglist: &amp;ldquo;&lt;em&gt;JavaFX 25 Rampdown Phase 1 (RDP1) starts July 17th. I will fork the &amp;lsquo;jfx25&amp;rsquo;
branch at 16:00 UTC. During rampdown of JavaFX 25, the &amp;lsquo;master&amp;rsquo; branch of the jfx repo will be open for JavaFX 26 fixes.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techhub.social/@gluonhq/114861746224253592" target="_blank" rel="noopener noreferrer"&gt;Message from &lt;strong&gt;Gluon&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The July 20205 CPU releases for JavaFX are available! You can download SDKs with the latest fixes and security patches for JavaFX 24.0.2, 21.0.8, and 17.0.16 &lt;a href="https://gluonhq.com/products/javafx" target="_blank" rel="noopener noreferrer"&gt;from the Gluon website&lt;/a&gt;
. Also, artifacts are uploaded to Maven Central.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Expected in JavaFX 25: Custom title bars on Stage Windows
&lt;ul&gt;
&lt;li&gt;See &lt;a href="https://gist.github.com/mstr2/0befc541ee7297b6db2865cc5e4dbd09" target="_blank" rel="noopener noreferrer"&gt;more info and screenshots here&lt;/a&gt;
, and the &lt;a href="https://github.com/openjdk/jfx/pull/1605" target="_blank" rel="noopener noreferrer"&gt;pull request here&lt;/a&gt;
. Thanks &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7352755246223265792/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; for sharing&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;This new feature will &lt;a href="https://www.reddit.com/r/JavaFX/comments/1m3whc6/atlantafx_with_stagestyleextended/" target="_blank" rel="noopener noreferrer"&gt;also be available in AtlantaFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;To support this feature, AtlantaFX has introduced a new decorations module, which will be available in the next version along with 14 window buttons themes. Now, we&amp;rsquo;re no longer limited to native window decorations! Yay!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/114873558280486295" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; on Mastodon&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX very much needs a top-level headless platform (for testing, server-side rendering, and more). The &lt;a href="https://github.com/openjdk/jfx/pull/1836" target="_blank" rel="noopener noreferrer"&gt;pull request is currently in review&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;LogoRRR got a nice &lt;a href="https://linux.softpedia.com/get/Utilities/LogoRRR-104891.shtml" target="_blank" rel="noopener noreferrer"&gt;4.5/5 review on Softpedia&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;LogoRRR is a very simple yet very efficient, free, and open-source log viewer application.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;LeaderBoard by &lt;strong&gt;Helal Anwar&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;A Java-based application designed to manage and calculate student grades. It provides functionality to input student scores, calculate averages, and determine letter grades based on predefined thresholds. This project is ideal for educational institutions or instructors looking to automate grade calculations.&lt;/em&gt; &amp;quot; Sources and a video in the README-file are &lt;a href="https://github.com/Hilal-Anwar/LeaderBoard" target="_blank" rel="noopener noreferrer"&gt;available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frederik Handberg&lt;/strong&gt; is &amp;ldquo;&lt;em&gt;&lt;a href="https://bsky.app/profile/frederikhandberg.com/post/3lt7fmm4iwk2a" target="_blank" rel="noopener noreferrer"&gt;working on a JavaFX application as a portfolio project&lt;/a&gt;
. It&amp;rsquo;s an instant messaging app that I am building using RMI.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Found on GitHub: &lt;a href="https://github.com/arthurdeka/cedro-modern-dock" target="_blank" rel="noopener noreferrer"&gt;Cedro Modern Dock&lt;/a&gt;
, a free and open-source dock software for Windows. It&amp;rsquo;s created by &lt;a href="https://www.linkedin.com/in/arthur-wa-rodrigues/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Arthur Wagner A. Rodrigues&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A sleek, open-source dock to enhance your desktop experience. Quick access to your favorite apps and system modules on Windows with customization.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/seanmiphillips_release-a-glitch-in-the-matrix-trinity-xai-activity-7353598025946042368-Vts2/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; announced v2025.07.22, a new major release for the Trinity XAI analysis software&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Improved asynchronous startup, New COCO Annotation Visualizations with drag and drop, Near real time 3D Cluster projection injection into embedding space (AutoProjection), Interactive zoom and rotate on point selection, A bunch of cool Retrowave/Vaporwave inspired glitch special effects (a hidden easter egg!), and more. As always, &lt;a href="https://github.com/trinity-xai/Trinity/releases/tag/v2025.07.22" target="_blank" rel="noopener noreferrer"&gt;free and open source&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/bilaltariq01.bsky.social/post/3lufvpasekj2j" target="_blank" rel="noopener noreferrer"&gt;Shared on BlueSky by &lt;strong&gt;Bilal Tariq&lt;/strong&gt;&lt;/a&gt;
: &lt;strong&gt;Wessel Wessels&lt;/strong&gt; recreated a Vintage Casio Calculator. &amp;ldquo;&lt;em&gt;In this project, I rebuilt my original Casio Personal M-1 calculator in JavaFX &amp;mdash; not just the functionality, but the entire look and feel, down to the pixel. What started as a UI practice exercise turned into a full-blown retro replica.&lt;/em&gt; &amp;quot; &lt;a href="https://dev.to/asorepos/recreating-a-vintage-casio-calculator-with-java-javafx-5bed" target="_blank" rel="noopener noreferrer"&gt;Read more here&lt;/a&gt;
 and &lt;a href="https://github.com/aso-repos/CalculatorJavaFX" target="_blank" rel="noopener noreferrer"&gt;sources on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Found on GitHub: &lt;a href="https://github.com/yahayuta/draponquest" target="_blank" rel="noopener noreferrer"&gt;DraponQuest JavaFX by &lt;strong&gt;yahayuta&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A modern JavaFX port of the classic DoJa mobile game DraponQuest. This project preserves the original game logic while adapting it to run on modern desktop platforms using JavaFX.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Marc Victor Beshay&lt;/strong&gt; , &lt;strong&gt;Marwan Ahmed&lt;/strong&gt; , and &lt;strong&gt;Ramez Younes&lt;/strong&gt; &lt;a href="https://www.linkedin.com/posts/marcbeshay_2nd-place-winning-project-jackaroo-in-activity-7346316960076304384-ZraA" target="_blank" rel="noopener noreferrer"&gt;won a price&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;We&amp;rsquo;re excited to announce that our JavaFX-based Jackaroo game ranked 2nd in GUC&amp;rsquo;s Best Game Competition, competing among 360 teams in 61- Engineering and Business Informatics classes as part of the OOP course, supervised by Dr. Slim Abdennadher.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cljfx, created by &lt;a href="https://github.com/vlaaad" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;vlaaad&lt;/strong&gt;&lt;/a&gt;
, has reached &lt;a href="https://github.com/cljfx/cljfx" target="_blank" rel="noopener noreferrer"&gt;1k stars on GitHub&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;It&amp;rsquo;s a declarative, functional and extensible wrapper of JavaFX for Clojure inspired by better parts of react and re-frame.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Quarkus Insights: &lt;a href="https://www.youtube.com/live/voScZwDk56A" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;William Antônio Siqueira&lt;/strong&gt; presented LLM FX&lt;/a&gt;
, a desktop LLM client which provides Model Context Protocol (MCP) support and offers tools designed to facilitate work with local Large Language Models (LLMs). You can find &lt;a href="https://github.com/jesuino/LLMFX" target="_blank" rel="noopener noreferrer"&gt;the project on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; published the first version of a library to control DMX512 devices with Java, optionally loading fixture definitions in the Open Fixture Library (OFL) format. He uses a JavaFX application to &lt;a href="https://www.youtube.com/watch?v=ztrO3Crexmg" target="_blank" rel="noopener noreferrer"&gt;demonstrate it in this video&lt;/a&gt;
. More info in the blog post: &lt;a href="https://webtechie.be/post/2025-07-17-introducing-java-dmx512-library-with-demo-javafx-ui/" target="_blank" rel="noopener noreferrer"&gt;Introducing a New Java DMX512 Library With Demo JavaFX User Interface&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Part 5 of the &amp;ldquo;JavaFX In Action&amp;rdquo; interview overviews by &lt;strong&gt;Frank Delporte&lt;/strong&gt; got &lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-5/"&gt;published on Foojay&lt;/a&gt;
, with:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cormac Redmond&lt;/strong&gt;: KafkIO, the Kafka UI for Engineers and Admins&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Brian Schlining&lt;/strong&gt;: Annotating the Deep-Sea Wildlife&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;: Creator of Many Amazing JavaFX Libraries&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;: Creator of JavaFX Libraries and Applications&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-conferences-presentations"&gt;Conferences, Presentations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/ianbrandt.com" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Ian Brandt&lt;/strong&gt;&lt;/a&gt;
 gave a presentation &amp;ldquo;Building JavaFX Apps with Kotlin&amp;rdquo; for the San Diego Kotlin User Group. Sorry, no recording, but you can read more here:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://discuss.gradle.org/t/javafx-dependencies-via-a-componentmetadatarule-instead-of-the-javafx-gradle-plugin/44037" target="_blank" rel="noopener noreferrer"&gt;JavaFX dependencies via a ComponentMetadataRule instead of the JavaFX Gradle Plugin&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ianbrandt/javafx-gradle-configuration" target="_blank" rel="noopener noreferrer"&gt;JavaFX Gradle Configuration on GitHub&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A slightly different approach to that of the current 0.1.0 version of the JavaFX Gradle Plugin for handling JavaFX dependencies in a Gradle project.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The JPro talk by &lt;strong&gt;Florian Kirmaier&lt;/strong&gt; from JavaOne is now &lt;a href="https://www.youtube.com/watch?v=cxaOM1rkonA" target="_blank" rel="noopener noreferrer"&gt;available on YouTube&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;This session explores building JavaFX applications for both desktop and web, offering practical solutions to modern development challenges. Learn best practices for styling with CSSFX and how JPro enables Java&amp;rsquo;s &amp;ldquo;Write Once, Run Anywhere&amp;rdquo; (WORA) principle by running JavaFX applications in the browser.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A new tutorial is available here on JFX Central thanks to &lt;a href="https://www.jfx-central.com/people/h.kubota" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hidekazu Kubota&lt;/strong&gt;&lt;/a&gt;
: &lt;a href="https://www.jfx-central.com/learn-javafx/vscode" target="_blank" rel="noopener noreferrer"&gt;Guide for JavaFX Development on Visual Studio Code&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;This document serves as a development guide for beginners in Java and JavaFX using Visual Studio Code
(VSCode). There are still relatively few guides available for JavaFX development using VSCode because it previously lacked a well-established development environment for JavaFX. In 2025, extensions for JavaFX were added and organized, making it one of the most accessible IDEs for beginners to start with JavaFX.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Published by &lt;strong&gt;Eleftheria Drosopoulou&lt;/strong&gt; : &lt;a href="https://www.javacodegeeks.com/2025/07/migrating-legacy-java-swing-applications-to-modern-javafx.html" target="_blank" rel="noopener noreferrer"&gt;Migrating Legacy Java Swing Applications to Modern JavaFX&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Video tutorial by &lt;strong&gt;xemacscode&lt;/strong&gt; &lt;a href="https://www.youtube.com/watch?v=YBggVcv62OE" target="_blank" rel="noopener noreferrer"&gt;POS Project Setup in Netbeans IDE&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The goal of this course is to provide you with a working knowledge of JavaFx GUI applications. We&amp;rsquo;ll start with the basics, starting from installing JavaFx on variety of IDE&amp;rsquo;s e.g. Eclipse, IntelliJ Idea, Netbeans etc on different Operating Systems like Window, Mac and Linux. Next, We will learn how to create our first JavaFx project. Then we will Learn How to built-in use different JavaFX UI controls like Label, Button,&amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/hansolo.eu/post/3lu5cv2lkc225" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
 is &amp;ldquo;&lt;em&gt;analyzing my JavaFX glucose monitoring app using
Azul&amp;rsquo;s Code Inventory to find unused classes and methods in the codebase&amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-8-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New version of the JFX Central app and website! The release notes with a long list of changes is &lt;a href="https://github.com/dlsc-software-consulting-gmbh/jfxcentral2/releases/tag/v1.15.0" target="_blank" rel="noopener noreferrer"&gt;available here&lt;/a&gt;
. Some of the highlights:
&lt;ul&gt;
&lt;li&gt;Upgrade to Java 24 and the latest JPro release.&lt;/li&gt;
&lt;li&gt;Added share with and links to Bluesky and Mastodon.&lt;/li&gt;
&lt;li&gt;Removed share with and links to Twitter/X.&lt;/li&gt;
&lt;li&gt;Improved icon search.&lt;/li&gt;
&lt;li&gt;Contributors: &lt;a href="https://github.com/FlorianKirmaier" target="_blank" rel="noopener noreferrer"&gt;Florian Kirmaier&lt;/a&gt;
, &lt;a href="https://github.com/dlemmermann" target="_blank" rel="noopener noreferrer"&gt;Dirk Lemmermann&lt;/a&gt;
, &lt;a href="https://github.com/leewyatt" target="_blank" rel="noopener noreferrer"&gt;Lee Wyatt&lt;/a&gt;
, &lt;a href="https://github.com/FDelporte" target="_blank" rel="noopener noreferrer"&gt;Frank Delporte&lt;/a&gt;
, &lt;a href="https://github.com/dependabot" target="_blank" rel="noopener noreferrer"&gt;Dependabot&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;People: &lt;a href="https://www.jfx-central.com/people/h.kubota" target="_blank" rel="noopener noreferrer"&gt;Hidekazu Kubota&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Learn JavaFX: &lt;a href="https://www.jfx-central.com/learn-javafx/vscode" target="_blank" rel="noopener noreferrer"&gt;Guide for JavaFX Development on Visual Studio Code&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Company: &lt;a href="https://www.jfx-central.com/companies/codewriter" target="_blank" rel="noopener noreferrer"&gt;CodeWriter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/tabpanepro" target="_blank" rel="noopener noreferrer"&gt;TabPanePro&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Techsenger TabPanePro is a TabPane extension that adds dedicated control areas, support for custom tab shapes, tab drag-and-drop with edge scrolling, a tab scrollbar, and more.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The overview of the Links Of The Week of June &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-june-2025/"&gt;got published on &lt;strong&gt;Foojay&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Java, What's Old? Part II: Utils</title><link>https://foojayio.github.io/website/today/java-whats-old-part-ii-utils/</link><pubDate>Wed, 30 Jul 2025 08:48:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-whats-old-part-ii-utils/</guid><description>&lt;p&gt;After &lt;a href="https://foojayio.github.io/website/today/java-whats-old-part-i-collections/"&gt;Java, What&amp;rsquo;s Old? Part I - Collections&lt;/a&gt;
, let&amp;rsquo;s now have a look at less known old utility classes that can still be useful.&lt;/p&gt;
&lt;p&gt;Everything in this series will be in Java 8 and later, so after reading this article, you will be able to use it in your projects.&lt;/p&gt;
&lt;h2 id="h2-0-objects"&gt;Objects&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Objects.html" target="_blank" rel="noopener noreferrer"&gt;Objects&lt;/a&gt;
 (with a s) is a utility class from the &lt;code&gt;java.util&lt;/code&gt; package that contains static methods to make your code more readable. Do not confuse it with the &lt;code&gt;Object&lt;/code&gt; (without s) class of the &lt;code&gt;java.lang&lt;/code&gt; package.&lt;/p&gt;</description></item><item><title>AI Applications with LangChain4j Guardrails and Spring Boot</title><link>https://foojayio.github.io/website/today/building-robust-ai-applications-with-langchain4j-guardrails-and-spring-boot/</link><pubDate>Tue, 29 Jul 2025 11:16:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-robust-ai-applications-with-langchain4j-guardrails-and-spring-boot/</guid><description>&lt;p&gt;&lt;strong&gt;As AI applications become increasingly complex, ensuring that language models behave predictably and safely is paramount. LangChain4j&amp;rsquo;s guardrails feature provides a powerful framework for validating both the inputs and outputs of your AI services.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article demonstrates how to implement comprehensive guardrails in a Spring Boot application, with practical examples that you can adapt to your use cases.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📦 &lt;strong&gt;Complete source code available at&lt;/strong&gt; : &lt;a href="https://github.com/rokon12/guardrails-demo" target="_blank" rel="noopener noreferrer"&gt;github.com/rokon12/guardrails-demo&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h2-0-understanding-langchain4j-guardrails"&gt;Understanding LangChain4j Guardrails&lt;/h2&gt;
&lt;p&gt;In LangChain4j, guardrails are validation mechanisms that operate exclusively on AI Services, the framework&amp;rsquo;s high-level abstraction for interacting with language models. Unlike simple validators, guardrails provide sophisticated control over the entire AI interaction lifecycle.&lt;/p&gt;</description></item><item><title>Why Mirroring Production in Dev Helps You Avoid Costly Mistakes</title><link>https://foojayio.github.io/website/today/why-mirroring-production-in-dev-helps-you-avoid-costly-mistakes/</link><pubDate>Mon, 28 Jul 2025 13:31:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-mirroring-production-in-dev-helps-you-avoid-costly-mistakes/</guid><description>&lt;p&gt;&lt;strong&gt;Many developers start building their applications with MongoDB using a free M0 cluster or a local environment. While this is common and convenient, it can lead to issues that could easily be avoided by using a more robust setup, such as a development cluster that closely mirrors production. Problems like inefficient queries, missing indexes, or even costly mistakes often go unnoticed in limited environments like M0 or local setups.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll explore why your development environment should closely reflect your production environment, and how using an M10+ cluster with tools like Query Profiler and Performance Advisor can help you catch performance issues early and build with confidence.&lt;/p&gt;</description></item><item><title>CodeRabbit Tutorial for Java Developers</title><link>https://foojayio.github.io/website/today/coderabbit-tutorial-for-java-developers/</link><pubDate>Mon, 28 Jul 2025 12:43:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/coderabbit-tutorial-for-java-developers/</guid><description>&lt;p&gt;&lt;a href="https://www.coderabbit.ai/" title="CodeRabbit" target="_blank" rel="noopener noreferrer"&gt;CodeRabbit&lt;/a&gt;
 is an AI-powered code review tool that integrates seamlessly with your Git workflow to provide intelligent, automated code reviews.&lt;/p&gt;
&lt;p&gt;For Java developers, CodeRabbit offers specialized analysis that understands Java syntax, best practices, and common patterns.&lt;/p&gt;
&lt;h2 id="h2-0-getting-started"&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id="h3-1-prerequisites"&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A GitHub, GitLab, Azure DevOps, or Bitbucket repository.&lt;/li&gt;
&lt;li&gt;Java project with standard structure (Maven or Gradle).&lt;/li&gt;
&lt;li&gt;Admin access to your repository.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-2-setup-process"&gt;&lt;strong&gt;Setup Process&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Install CodeRabbit&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Visit &lt;a href="https://coderabbit.ai/" target="_blank" rel="noopener noreferrer"&gt;CodeRabbit.ai&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Sign up using your credentials, while noting that CodeRabbit is free for OSS, supports GitHub, GitLab, Azure DevOps, and Bitbucket.&lt;/li&gt;
&lt;li&gt;Grant necessary permissions to your repositories.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository Configuration&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Select the Java repositories you want CodeRabbit to review.&lt;/li&gt;
&lt;li&gt;CodeRabbit automatically detects Java projects and configures appropriate rules.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Initial Setup Verification&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Create a test pull request with a simple Java change.&lt;/li&gt;
&lt;li&gt;Verify CodeRabbit comments appear within minutes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="h2-3-core-features-for-java-development"&gt;&lt;strong&gt;Core Features for Java Development&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id="h3-4-1-code-quality-analysis"&gt;&lt;strong&gt;1. Code Quality Analysis&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;CodeRabbit analyzes your Java code for:&lt;/p&gt;</description></item><item><title>Foojay Podcast #77: DevBcn Report, Part 2 – Spanish Knowledge Sharing</title><link>https://foojayio.github.io/website/today/foojay-podcast-77/</link><pubDate>Mon, 28 Jul 2025 06:49:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-77/</guid><description>&lt;p&gt;This is the first Foojay podcast in Spanish. It&amp;rsquo;s also the shortest one and the final of season 4 😉 Jonathan Vila &amp;ldquo;highjacked&amp;rdquo; the microphone from Geertjan Wielenga (See &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-76-devbcn-report-part-1-learn-from-the-community/"&gt;episode 76&lt;/a&gt;
) during the DevBcn conference in Barcelona and interviewed a few of the participants for this first Spanish-only edition of the podcast.&lt;/p&gt;
&lt;p&gt;Stay tuned and subscribe to the podcast in your favorite app or on YouTube. We&amp;rsquo;re taking a short break and will be back in September with the launch of Java 25!&lt;/p&gt;</description></item><item><title>Introducing a New Java DMX512 Library With Demo JavaFX User Interface</title><link>https://foojayio.github.io/website/today/introducing-a-new-java-dmx512-library-with-demo-javafx-user-interface/</link><pubDate>Fri, 25 Jul 2025 06:17:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-a-new-java-dmx512-library-with-demo-javafx-user-interface/</guid><description>&lt;p&gt;In this post, I would like to inform you about a new Java library that is now available on Maven Central, allowing interaction with DMX512 devices using (optionally) the Open Fixture Library (OFL). I also published a video with a code walkthrough of my test setup and demo code.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ztrO3Crexmg?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;But first&amp;hellip;&lt;/p&gt;</description></item><item><title>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>Java 22 to 24: Level up your Java Code by embracing new features in a safe way</title><link>https://foojayio.github.io/website/today/java-22-to-24-level-up-your-java-code-by-embracing-new-features-in-a-safe-way/</link><pubDate>Wed, 23 Jul 2025 15:29:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-22-to-24-level-up-your-java-code-by-embracing-new-features-in-a-safe-way/</guid><description>&lt;h3 id="h3-0-java-introduces-several-new-language-features-in-the-22-to-24-versions-which-collectively-simplify-code-enhance-documentation-and-provide-powerful-tools-for-bytecode-manipulation-and-advanced-stream-processing-this-article-shows-you-how-to-leverage-these-new-features-with-simple-examples"&gt;Java introduces several new language features in the 22 to 24 versions which collectively simplify code, enhance documentation, and provide powerful tools for bytecode manipulation and advanced stream processing. This article shows you how to leverage these new features with simple examples.&lt;/h3&gt;
&lt;p&gt;Understanding these new features in Java is crucial for writing updated, efficient, and high quality code. To assist developers in adopting these changes correctly, SonarQube has introduced &lt;a href="https://rules.sonarsource.com/java/tag/java22" target="_blank" rel="noopener noreferrer"&gt;several new rules&lt;/a&gt;
 designed to check for the proper usage of unnamed variables and patterns, javadoc and markdown, Class-file new API and Stream gatherers, ensuring your code adheres to best practices and avoids common pitfalls.&lt;/p&gt;</description></item><item><title>MongoDB ACID Transactions With Java</title><link>https://foojayio.github.io/website/today/mongodb-acid-transactions-with-java/</link><pubDate>Wed, 23 Jul 2025 14:39:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-acid-transactions-with-java/</guid><description>&lt;p&gt;A database is constantly under pressure. Real-time applications, exponential growth of data, and multiple operations may hit the system at once. Without coordination, this can lead to race conditions, conflicts, and ultimately, the dreaded inconsistent data! To address this, MongoDB supports &lt;a href="https://learn.mongodb.com/courses/mongodb-transactions?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=java&amp;#43;acid&amp;amp;utm_term=tim.kelly" target="_blank" rel="noopener noreferrer"&gt;transactions&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Transactions let us group multiple operations together so they either all succeed or none take effect, a concept known as &lt;a href="https://www.mongodb.com/docs/manual/reference/glossary/#std-term-atomic-operation?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=java&amp;#43;acid&amp;amp;utm_term=tim.kelly" target="_blank" rel="noopener noreferrer"&gt;atomicity&lt;/a&gt;
. MongoDB&amp;rsquo;s document model already provides atomicity at the single-document level, which covers a lot of use cases. But when you need atomicity across multiple documents or collections, transactions are the answer.&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>Spring Cloud Stream for Real-Time Event-Driven Systems</title><link>https://foojayio.github.io/website/today/spring-cloud-stream-event-driven-architecture-part-1/</link><pubDate>Mon, 21 Jul 2025 13:33:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-cloud-stream-event-driven-architecture-part-1/</guid><description>&lt;p&gt;&lt;strong&gt;Envision operating a successful e-commerce platform where every moment is crucial. Customers make purchases, adjust inventory levels, process payments, and dispatch shipping alerts&amp;mdash;all in real time. In the background, microservices diligently function to guarantee seamless operations. However, how do these services interact effectively, particularly during peak traffic occurrences such as flash sales or holiday shopping events?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;An efficient method to execute this use case involves utilizing Spring Cloud Stream (SCS) as the messaging infrastructure. SCS facilitates seamless interaction among microservices, enhancing the system&amp;rsquo;s responsiveness and scalability. A significant benefit of SCS is that it provides an abstraction layer, allowing developers to transition between messaging technologies such as Kafka or RabbitMQ or Pulsar or Amazon Kinesis without altering their fundamental business logic.&lt;/p&gt;</description></item><item><title>Foojay Podcast #76: DevBcn Report, Part 1 – Learn from the Community</title><link>https://foojayio.github.io/website/today/foojay-podcast-76/</link><pubDate>Mon, 21 Jul 2025 06:41:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-76/</guid><description>&lt;p&gt;In early July, the DevBcn conference in Barcelona featured a diverse lineup of speakers, covering topics across multiple technology domains. Geertjan Wielenga took the camera and microphone with him to Spain. Together with Nacho Cougil and Jonathan Vila, two of the organizers, he spoke with many visitors about what they like most in Java, how AI influences their work, and what is important to them in the work they do.&lt;/p&gt;</description></item><item><title>Video series “JavaFX In Action”, Part 5 with Cormac Redmond (KafkIO), Brian Schlining (Annotating the Deep-Sea Wildlife), Gerrit Grunwald (JavaFX Libraries), Dirk Lemmermann (JavaFX Libraries and Applications, JFX Central)</title><link>https://foojayio.github.io/website/today/video-series-javafx-in-action-part-5/</link><pubDate>Fri, 18 Jul 2025 06:18:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/video-series-javafx-in-action-part-5/</guid><description>&lt;p&gt;This is the next part in the series of &amp;ldquo;JavaFX in Action&amp;rdquo; interviews. Are you working on a fantastic JavaFX application? Let me know, and let&amp;rsquo;s discuss it in the new year!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/new-video-series-javafx-in-action-part-1/"&gt;July &amp;lsquo;24: Pedro Duque Vieira, Daniel Zimmermann, Christopher Schnick, and Robert Ladstätter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-2/"&gt;November &amp;lsquo;24: Maciej Gorywoda, Ramiro Domínguez Ayub, Christoph Schwentker, Ulas Ergin&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-3/"&gt;December &amp;lsquo;24: Özkan Pakdil, Clément de Tastes, Almas Baim, Steve Hannah, Jago de Vreede&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-4/"&gt;March &amp;lsquo;25: Mike Hearn, Sven Reimers, Chris Newland&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-cormac-redmond-kafkio-the-kafka-ui-for-engineers-and-admins"&gt;Cormac Redmond: KafkIO, the Kafka UI for Engineers and Admins&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/cormacredmond/" target="_blank" rel="noopener noreferrer"&gt;Cormac Redmond&lt;/a&gt;
 is an &amp;ldquo;All-things Java / Spring / MicroServices&amp;rdquo; expert who has been computing and programming from a young age. He has 20 years of professional experience spanning several industries, building everything from complex distributed systems to bespoke intranets and mobile apps. He enjoys fully and deeply understanding any domain or technology and is happiest when working within cultures that value the importance of building clean, elegant, testable, self-documenting systems while adopting forward-thinking practices and techniques.&lt;/p&gt;</description></item><item><title>How to Make a RAG Application With LangChain4j</title><link>https://foojayio.github.io/website/today/how-to-make-a-rag-application-with-langchain4j/</link><pubDate>Thu, 17 Jul 2025 20:42:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-make-a-rag-application-with-langchain4j/</guid><description>&lt;p&gt;Retrieval-augmented generation, or RAG, introduces some serious capabilities to your large language models (LLMs). These applications can answer questions about your specific corpus of knowledge, while leveraging all the nuance and sophistication of a traditional LLM.&lt;/p&gt;
&lt;p&gt;This tutorial will take you through the ins and outs of creating a Q&amp;amp;A chatbot using RAG. The application will:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Retrieve data from a MongoDB Atlas database.&lt;/li&gt;
&lt;li&gt;Embed and store documents as vector embeddings.&lt;/li&gt;
&lt;li&gt;Use LangChain4J to query the database and augment LLM prompts with the retrieved data.&lt;/li&gt;
&lt;li&gt;Enable secure, scalable, and efficient AI-powered applications.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you want to see the completed application, it is available in the &lt;a href="https://github.com/mongodb-developer/langchainrag" target="_blank" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Understanding MCP Through Raw STDIO Communication</title><link>https://foojayio.github.io/website/today/understanding-mcp-through-raw-stdio-communication/</link><pubDate>Thu, 17 Jul 2025 15:57:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-mcp-through-raw-stdio-communication/</guid><description>&lt;h2 id="h2-0-deep-dive-into-the-model-context-protocol"&gt;Deep Dive into the Model Context Protocol&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Ever wondered how AI assistants like Claude actually communicate with external tools and services? While most tutorials focus on using pre-built SDKs and frameworks, this article takes a different approach&amp;mdash;we&amp;rsquo;ll dissect a production MCP server built from scratch using only Java&amp;rsquo;s standard libraries and raw STDIO communication.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;By stripping away all the abstractions and implementing the Model Context Protocol directly, we&amp;rsquo;ll uncover the surprisingly elegant mechanics that enable AI systems to discover, understand, and execute tools.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Spring Boot documentation with Redocusaurus</title><link>https://foojayio.github.io/website/today/spring-boot-api-documentation-redocusaurus/</link><pubDate>Wed, 16 Jul 2025 06:45:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-api-documentation-redocusaurus/</guid><description>&lt;h4 id="create-clear-and-interactive-api-documentation-quickly"&gt;&lt;em&gt;Create clear and interactive API documentation quickly.&lt;/em&gt;&lt;/h4&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/fs6wiUqJGo8?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;hr&gt;
&lt;h4 id="heading"&gt;🔵⚪⚪⚪⚪⚪⚪⚪&lt;/h4&gt;
&lt;h3 id="h3-0-introduction-why-use-redocusaurus-for-spring-boot"&gt;📘 Introduction: Why Use Redocusaurus for Spring Boot?&lt;/h3&gt;
&lt;h4 id="discover-why-clean-api-docs-matter-and-how-redocusaurus-makes-it-easy"&gt;&lt;em&gt;Discover why clean API docs matter and how Redocusaurus makes it easy.&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Firstly&lt;/strong&gt;, clear API documentation is very important.&lt;/p&gt;
&lt;p&gt;It helps users understand your API better. This is true whether your API is for coworkers or external users.&lt;/p&gt;</description></item><item><title>Getting Started With Scala</title><link>https://foojayio.github.io/website/today/getting-started-with-scala/</link><pubDate>Wed, 16 Jul 2025 06:41:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-scala/</guid><description>&lt;p&gt;&lt;strong&gt;Why Scala?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;At &lt;a href="https://www.quantexa.com/" target="_blank" rel="noopener noreferrer"&gt;Quantexa&lt;/a&gt;
, we love Scala. This may be the first dedicated article on Foojay.io about Scala. I hope my colleagues and I can add more in due course.&lt;/p&gt;
&lt;p&gt;Scala is built on the Java Virtual Machine (JVM). For foojay.io readers, this is &amp;ldquo;stating the bleeding obvious,&amp;rdquo; but it means it compiles to Java bytecode and runs on the same runtime environment as Java. This brings significant enterprise scalability, resilience and big data ecosystem benefits.&lt;/p&gt;</description></item><item><title>Sustainability Starts with Your Runtime: Meet a Green JVM</title><link>https://foojayio.github.io/website/today/sustainability-starts-with-your-runtime-meet-a-green-jvm/</link><pubDate>Tue, 15 Jul 2025 14:20:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/sustainability-starts-with-your-runtime-meet-a-green-jvm/</guid><description>&lt;p&gt;&lt;strong&gt;Reducing spend in the cloud is a top priority for many organizations, and a high-performance Java platform can help cloud cost reduction efforts. These same optimizations can help organizations achieve sustainability goals, including achieving carbon net-zero. And pursuing sustainability goals can also lead to financial advantages.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cloud costs are under the microscope, and reducing spend in the cloud is a top priority for many organizations. We&amp;rsquo;ve been helping customers on that journey with Azul Platform Prime, a &lt;a href="https://www.azul.com/blog/5-ways-to-reduce-cloud-waste/" target="_blank" rel="noopener noreferrer"&gt;high-performance Java platform that runs code faster, uses fewer compute resources, and helps cut your cloud bill&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>The Great Data Reimagination: From Static to Agile in the AI Era</title><link>https://foojayio.github.io/website/today/the-great-data-reimagination-from-static-to-agile-in-the-ai-era/</link><pubDate>Tue, 15 Jul 2025 13:44:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-great-data-reimagination-from-static-to-agile-in-the-ai-era/</guid><description>&lt;p&gt;&lt;strong&gt;We&amp;rsquo;re in the middle of a fundamental change in how enterprise software works. In the next decade, your database will become your AI.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Just five years ago, choosing the right kind of database to support their applications presented complexity for many developers: relational or NoSQL? Structured or unstructured? Flexible or predictable? They didn&amp;rsquo;t know exactly what their data would look like in six months, but what they did know was that it was certain to change. This led many to make a rebel&amp;rsquo;s choice to reject the rigid structure of &lt;a href="https://thenewstack.io/introduction-to-databases/" target="_blank" rel="noopener noreferrer"&gt;SQL databases&lt;/a&gt;
 for something more fluid and adaptable.&lt;/p&gt;</description></item><item><title>Testing an OpenRewrite Recipe</title><link>https://foojayio.github.io/website/today/testing-an-openrewrite-recipe/</link><pubDate>Mon, 14 Jul 2025 09:43:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/testing-an-openrewrite-recipe/</guid><description>&lt;p&gt;For the last two weeks, I&amp;rsquo;ve kicked the tires of OpenRewrite.&lt;/p&gt;
&lt;p&gt;At first, I created a &lt;a href="https://blog.frankel.ch/openrewrite-recipes/1/" target="_blank" rel="noopener noreferrer"&gt;recipe to move Kotlin source files&lt;/a&gt;
 as per the official recommendations with a set package name.&lt;/p&gt;
&lt;p&gt;I then improved the &lt;a href="https://blog.frankel.ch/openrewrite-recipes/2/" target="_blank" rel="noopener noreferrer"&gt;recipe to compute the root automatically&lt;/a&gt;
. In both versions, I thoroughly tested the recipe.&lt;/p&gt;
&lt;p&gt;However, my testing approach was wrong. In this post, I want to describe my mistakes, and how I fixed them.&lt;/p&gt;</description></item><item><title>Foojay Podcast #75: JCON Report, Part 4 - Tips and Tricks for Java Devs</title><link>https://foojayio.github.io/website/today/foojay-podcast-75/</link><pubDate>Mon, 14 Jul 2025 06:47:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-75/</guid><description>&lt;p&gt;&lt;strong&gt;This is the final part of the JCON 2025 interviews with a lot of tips and tricks!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the three previous podcasts, we featured interviews from the JCON conference on &amp;ldquo;&lt;a href="https://foojayio.github.io/website/today/foojay-podcast-72/"&gt;Being a better Java developer&lt;/a&gt;
,&amp;rdquo; &amp;ldquo;&lt;a href="https://foojayio.github.io/website/today/foojay-podcast-72/"&gt;Evolutions in Java&lt;/a&gt;
,&amp;rdquo; and &amp;ldquo;&lt;a href="https://foojayio.github.io/website/today/foojay-podcast-73/"&gt;How to use AI with Java&lt;/a&gt;
.&amp;rdquo; However, we talked to many more people during the conference, so this podcast focuses on tips and tricks. Let&amp;rsquo;s learn from the many other experienced visitors of JCON.&lt;/p&gt;</description></item><item><title>How I Improved Zero-Shot Classification in Deep Java Library (DJL) OSS: Enhancing Machine Learning Model Translators</title><link>https://foojayio.github.io/website/today/how-i-improved-zero-shot-classification-in-deep-java-library-djl-oss/</link><pubDate>Wed, 09 Jul 2025 10:51:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-i-improved-zero-shot-classification-in-deep-java-library-djl-oss/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Did you know the Deep Java Library (DJL) powers Spring AI and Redis OM Spring? DJL helps you run machine learning models right inside your Java applications.&lt;/p&gt;
&lt;p&gt;Check them out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spring AI with DJL: &lt;a href="https://docs.spring.io/spring-ai/reference/api/embeddings/onnx.html" target="_blank" rel="noopener noreferrer"&gt;https://docs.spring.io/spring-ai/reference/api/embeddings/onnx.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Semantic Search with SpringBoot &amp;amp; Redis: &lt;a href="https://foojayio.github.io/website/today/semantic-search-with-spring-boot-redis/"&gt;https://foojay.io/today/semantic-search-with-spring-boot-redis/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id="h2-0-tl-dr"&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You&amp;rsquo;re doing zero-shot classification in a Java app using DJL.&lt;/li&gt;
&lt;li&gt;DJL didn&amp;rsquo;t handle some models well &amp;mdash; like DeBERTa. It missed support for token_type_ids, assumed wrong label positions, and oversimplified the softmax implementation.&lt;/li&gt;
&lt;li&gt;It was fixed by reading the model config files and adjusting DJL&amp;rsquo;s translator logic.&lt;/li&gt;
&lt;li&gt;Now DJL gives correct results across different models &amp;mdash; just like the Transformers library does in Python.&lt;/li&gt;
&lt;li&gt;The fix is merged and will probably be released with version 0.34.0.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-what-s-zero-shot-classification-and-why-it-matters"&gt;What&amp;rsquo;s Zero-Shot Classification (and Why It Matters)&lt;/h2&gt;
&lt;p&gt;Zero-shot classification is a machine learning technique that allows models to classify text into categories they haven&amp;rsquo;t explicitly seen during training. Unlike traditional classification models that can only predict classes they were trained on, zero-shot classifiers can generalize to new, unseen categories.&lt;/p&gt;</description></item><item><title>Building a Spring Boot CRUD Application Using MongoDB’s Relational Migrator</title><link>https://foojayio.github.io/website/today/building-a-spring-boot-crud-application-using-mongodbs-relational-migrator/</link><pubDate>Tue, 08 Jul 2025 19:05:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-a-spring-boot-crud-application-using-mongodbs-relational-migrator/</guid><description>&lt;p&gt;Imagine this: You&amp;rsquo;re working with a relational database that&amp;rsquo;s served you well for years, but now your applications demand flexibility, scalability, and faster development cycles. Transitioning from structured tables to MongoDB&amp;rsquo;s dynamic, schema-less JSON documents might be daunting. That&amp;rsquo;s where MongoDB&amp;rsquo;s Relational Migrator becomes your secret weapon.&lt;/p&gt;
&lt;p&gt;The Relational Migrator tool built by MongoDB no longer only supports migrating data from relational databases to MongoDB. Rather, it supports features like code generation and also a query converter that converts a relational database, such as a Postgres query, or queries from views and stored procedures, into a MongoDB query.&lt;/p&gt;</description></item><item><title>Prime Time: The High Performance Java Event</title><link>https://foojayio.github.io/website/today/prime-time-the-high-performance-java-event/</link><pubDate>Tue, 08 Jul 2025 07:05:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/prime-time-the-high-performance-java-event/</guid><description>&lt;p&gt;&lt;strong&gt;Java is the engine behind mission-critical applications and end user experiences. From faster response times to consistent performance, Java can have a significant impact on business results and cloud costs.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Join Azul and leading voices from the Java community for Prime Time, a dynamic virtual event dedicated to innovations, strategies, and real-world insights that power high-performance Java estates. No matter where you&amp;rsquo;re running your apps &amp;ndash; on-prem or in the cloud, or if you&amp;rsquo;re looking to modernize legacy Java workloads &amp;ndash; when performance, elasticity, scale and cloud cost matter, &lt;strong&gt;Make It Prime&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>CAP in the Pocket</title><link>https://foojayio.github.io/website/today/cap-in-the-pocket-developing-java-applications-on-your-phone/</link><pubDate>Mon, 07 Jul 2025 15:27:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/cap-in-the-pocket-developing-java-applications-on-your-phone/</guid><description>&lt;p&gt;Smartphones are more powerful then ever, with processors rivaling old laptops. So let&amp;rsquo;s try to use them like a laptop to develop web-applications on the go.&lt;/p&gt;
&lt;p&gt;Below I&amp;rsquo;ll show you how to do use run and develop a &lt;a href="https://cap.cloud.sap/docs/java/" target="_blank" rel="noopener noreferrer"&gt;CAP Java&lt;/a&gt;
 &lt;a href="https://spring.io/projects/spring-boot" target="_blank" rel="noopener noreferrer"&gt;Spring Boot&lt;/a&gt;
 application on your smartphone and how to run &lt;a href="https://code.visualstudio.com/" target="_blank" rel="noopener noreferrer"&gt;VSCode&lt;/a&gt;
 locally to develop and modify it. This, of course, works only on Android phones, as they are a Linux at their core.
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2025/05/Screenshot-May-8-2025-1_28_58-PM-2000x900.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>New AI Conference For And By Developers</title><link>https://foojayio.github.io/website/today/new-ai-conference-for-and-by-developers/</link><pubDate>Mon, 07 Jul 2025 11:50:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-ai-conference-for-and-by-developers/</guid><description>&lt;p&gt;AI4DEVS, &lt;strong&gt;September 19, 2025&lt;/strong&gt; in Amsterdam, is created &lt;strong&gt;for and by developers working with AI technologies&lt;/strong&gt; . Our mission is simple: share practical, usable knowledge with real use cases and code. Whether you&amp;rsquo;re an experienced AI engineer or just starting to explore machine learning in your applications, AI4DEVS offers &lt;strong&gt;valuable knowledge for every level&lt;/strong&gt; . All the details are here: &lt;a href="https://amsterdam.ai4devs.io/" target="_blank" rel="noopener noreferrer"&gt;https://amsterdam.ai4devs.io/&lt;/a&gt;

&lt;a href="https://amsterdam.ai4devs.io/" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/new-ai-conference-for-and-by-developers/ai4devs0-1024x616.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
 &lt;a href="https://amsterdam.ai4devs.io/" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/new-ai-conference-for-and-by-developers/ai4devs-730x1024.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;All the details are here: &lt;a href="https://amsterdam.ai4devs.io/" target="_blank" rel="noopener noreferrer"&gt;https://amsterdam.ai4devs.io/&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Carbon Aware Job Processing With JobRunr v8</title><link>https://foojayio.github.io/website/today/carbon-aware-job-processing-with-jobrunr-v8/</link><pubDate>Mon, 07 Jul 2025 09:00:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/carbon-aware-job-processing-with-jobrunr-v8/</guid><description>&lt;p&gt;As we produce, mutate, configure, and consume more and more data in various shapes and forms, think: video on demand, AI ingestion and generation of content, Internet of Things always-on connectivity, and more.&lt;/p&gt;
&lt;p&gt;The energy consumption of our digital lives have gone up dramatically as well. We rarely notice this, and although multiple organisations put out &lt;a href="https://www.iea-4e.org/wp-content/uploads/2025/05/Data-Centre-Energy-Use-Critical-Review-of-Models-and-Results.pdf" target="_blank" rel="noopener noreferrer"&gt;alarming reports&lt;/a&gt;
 on energy use of data centres, policy makers seem reluctant to act fast.&lt;/p&gt;</description></item><item><title>When ReadyNow Can Only Compile on Traffic Loads</title><link>https://foojayio.github.io/website/today/when-readynow-can-only-compile-on-traffic-loads/</link><pubDate>Fri, 04 Jul 2025 19:36:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/when-readynow-can-only-compile-on-traffic-loads/</guid><description>&lt;p&gt;&lt;em&gt;This is the fifth and final blog post in a series on faster Java application warmup with ReadyNow. If you haven&amp;rsquo;t been following the series, go back to the first blog post, &lt;a href="https://foojayio.github.io/website/today/faster-java-warmup-crac-versus-readynow/"&gt;Faster Java Warmup: CRaC versus ReadyNow&lt;/a&gt;
, and catch up. This post examines how to resolve a situation when traffic loads and gets redirected to an application before ReadyNow has completed compiling and optimizing bytecode.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;ReadyNow enables applications to handle load optimally by compiling bytecode to native code shortly after startup. It also optimizes the compiled code by removing unused pathways, inlining, etc. But this compiling and optimizing can&amp;rsquo;t be fully executed in specific situations before traffic gets redirected to the application.&lt;/p&gt;</description></item><item><title>Data Modeling for Java Developers: Structuring With PostgreSQL and MongoDB</title><link>https://foojayio.github.io/website/today/data-modeling-for-java-developers-structuring-with-postgresql-and-mongodb/</link><pubDate>Thu, 03 Jul 2025 21:02:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/data-modeling-for-java-developers-structuring-with-postgresql-and-mongodb/</guid><description>&lt;p&gt;&lt;strong&gt;Application and system designs have always been considered the most essential step in application development. All the later steps and technologies to be used depend on how the system has been designed. If you are a Java developer, choosing the right approach can mean distinguishing between a rigid, complex schema and a nimble, scalable solution. If you are a Java developer who works with PostgreSQL or other relational databases, you understand the pain of representing the many-to-many relationships between the tables.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Java 21+ Not Working on the Raspberry Pi Zero 2</title><link>https://foojayio.github.io/website/today/java-21-not-working-on-the-raspberry-pi-zero-2/</link><pubDate>Wed, 02 Jul 2025 07:46:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-21-not-working-on-the-raspberry-pi-zero-2/</guid><description>&lt;p&gt;This story is about how &amp;ldquo;Write Once, Run Anywhere&amp;rdquo; got broken in a specific use case. It reveals the complexity of maintaining this &amp;ldquo;Run Anywhere&amp;rdquo; principle. At the same time, it shows how the OpenJDK community already detected this issue and has a fix available for the next update.&lt;/p&gt;
&lt;h2 id="h2-0-problem-on-raspberry-pi-zero-2"&gt;Problem on Raspberry Pi Zero 2&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pi4j.com/about/team/" target="_blank" rel="noopener noreferrer"&gt;Dieter Holz&lt;/a&gt;
&lt;/strong&gt; was experimenting with Pi4J V3 on a Raspberry Pi Zero 2. Because this version requires Java 21 or newer, he upgraded his OS to a newer Java version and found out that no Java code could be executed. He tried with Java 21 and 24, and neither worked correctly, although Java 17 runs without problems.&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>Java Virtual Threads in Action: Optimizing MongoDB Operation</title><link>https://foojayio.github.io/website/today/java-virtual-threads-in-action-optimizing-mongodb-operation/</link><pubDate>Tue, 01 Jul 2025 08:12:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-virtual-threads-in-action-optimizing-mongodb-operation/</guid><description>&lt;p&gt;Virtual threads have become one of the most popular resources in Java and are trending inside the language. Indeed, this resource introduced a cheap way to create threads inside the JVM. In this tutorial, we will explain how to use it with MongoDB.&lt;/p&gt;
&lt;p&gt;You can find all the code presented in this tutorial in the &lt;a href="https://github.com/soujava/mongodb-virtual-threads" target="_blank" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;
:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;git clone &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fe99978abe99978a968b9cd09d9193"&gt;[email&amp;nbsp;protected]&lt;/a&gt;:soujava/mongodb-virtual-threads.git
&lt;/pre&gt;
&lt;h2 id="h2-0-prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;For this tutorial, you&amp;rsquo;ll need:&lt;/p&gt;</description></item><item><title>Foojay Podcast #74: JCON Report, Part 3 – AI, ChatGPT, LLM, ML, RAG, MCP, GenAI, and more</title><link>https://foojayio.github.io/website/today/foojay-podcast-74/</link><pubDate>Mon, 30 Jun 2025 06:47:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-74/</guid><description>&lt;p&gt;&lt;strong&gt;Let&amp;rsquo;s have an AI Bingo and talk about ChatGPT, LLM, ML, RAG, MCP, GenAI, and more!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is part 3 of the interviews recorded at the JCON conference in May. In the previous parts, you learned more about how to be a better Java developer and how Java has evolved and continues to evolve. Of course, Artificial Intelligence and large language models were hot topics at the conference.&lt;/p&gt;
&lt;p&gt;This episode collects all the interviews on the AI topic. You will learn more about the different technologies we can use in our Java projects. We also checked with our guests to see how they compare Java to Python for AI-related development.&lt;/p&gt;</description></item><item><title>JavaFX Links of June 2025</title><link>https://foojayio.github.io/website/today/javafx-links-of-june-2025/</link><pubDate>Sun, 29 Jun 2025 08:16:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-june-2025/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of June 2025. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/114629445557232949" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; on Mastodon&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Headless JavaFX platform passes almost all tests, with remaining failures being understood. Time to bring this to the next step.&lt;/em&gt; &amp;quot; See &lt;a href="https://mail.openjdk.org/pipermail/openjfx-dev/2025-June/054648.html" target="_blank" rel="noopener noreferrer"&gt;this message&lt;/a&gt;
 on the openjfx-dev mailing list.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Catherine Edelveis&lt;/strong&gt; &lt;a href="https://bsky.app/profile/cat-edelveis.bsky.social/post/3lr6vzolv3k2x" target="_blank" rel="noopener noreferrer"&gt;struggled with a delay when starting sounds on macOS versus Linux&lt;/a&gt;
 and &lt;a href="https://bsky.app/profile/cat-edelveis.bsky.social/post/3lrffxcymos2h" target="_blank" rel="noopener noreferrer"&gt;shared the solution&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I found the culprit of sound latency with JavaFX on mac - the mp3 format! Converted to wav, and everything works as a charm now. Heads up to everyone: mp3 is evil even in such non-trivial cases.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;An &lt;a href="https://github.com/openjdk/jfx/pull/1824" target="_blank" rel="noopener noreferrer"&gt;interesting pull request by &lt;strong&gt;Ambarish Rapte&lt;/strong&gt;&lt;/a&gt;
 in the OpenJFX project: &amp;ldquo;_This is the implementation of new graphics rendering pipeline for JavaFX using Metal APIs on MacOS. We released two Early Access (EA) builds and have reached a stage where it is ready to be integrated. Default rendering pipeline on macOS has not been changed by this PR. OpenGL still stays as the default rendering pipeline and Metal rendering pipeline is optional to choose by providing &lt;code&gt;MARKDOWN_HASH6fb3dbf166122f8049d99bbd64d48707MARKDOWN&lt;/code&gt;&lt;em&gt;HASH&lt;/em&gt;.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openjdk/jfx/pull/1827" target="_blank" rel="noopener noreferrer"&gt;Pull request by &lt;strong&gt;Kevin Rushforth&lt;/strong&gt; &amp;ldquo;Bump minimum JDK version for JavaFX to JDK&amp;rdquo;&lt;/a&gt;
 mentioned on the &lt;a href="https://mail.openjdk.org/mailman/listinfo/openjfx-dev" target="_blank" rel="noopener noreferrer"&gt;openjfx-dev mailinglist&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;In order for JavaFX to be able to use more recent JDK features, we should increase the minimum version of the JDK that can run the latest JavaFX. Additionally, there is an ongoing cost to keeping JavaFX buildable and runnable on older versions of Java, and little reason to continue to do so. This continues our recent practice of setting the minimum JDK for JavaFX N to JDK N-2. JavaFX N is primarily intended for use with JDK N and we also build and test it against JDK N-1 (which is typically what we use as the boot JDK). Anything older than that, including the proposed minimum JDK N-2 (23 in this specific case), is untested. This PR targeted to JavaFX 25, and must not be backported to any earlier version.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/seanmiphillips_trinity-xai-auto-projecting-deep-fake-images-activity-7336811007543058433-Hmvl/" target="_blank" rel="noopener noreferrer"&gt;Long message by &lt;strong&gt;Sean Phillips&lt;/strong&gt; on LinkedIn&lt;/a&gt;
 with a &lt;a href="https://www.youtube.com/watch?v=7M3R9C3tiho" target="_blank" rel="noopener noreferrer"&gt;link to a video demonstrating near real-time 3D clustering of Deep Fake images in JavaFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;&amp;hellip; The video link above is an example of the Trinity XAI software demonstrating establishing a 3D clustering of Deep Fake imagery of human faces and automatically injecting new samples into the projection space (Auto-Projection). In this example the 3D clusters are established using a UMAP projection. The projection is frozen when auto projection is enabled so that new samples reuse the existing transform function achieved from the fit UMAP model. &amp;hellip; Trinity XAI has &lt;a href="https://github.com/trinity-xai/Trinity" target="_blank" rel="noopener noreferrer"&gt;cross platform binary builds here&lt;/a&gt;
, as always, free and open source.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://www.linkedin.com/posts/brunorozendo_family-has-grown-again-now-a-present-to-activity-7338551210796277761-jQk0" target="_blank" rel="noopener noreferrer"&gt;project by &lt;strong&gt;Bruno Rozendo&lt;/strong&gt; shared on LinkedIn&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A present to you: my own GUI to chat with Ollama,
using JavaFX. It provides custom mcp.json config file, chats are saved in sql lite, and works with local Ollama.&lt;/em&gt; &amp;quot; You can find the &lt;a href="https://github.com/brunorozendo/mcp-client-gui" target="_blank" rel="noopener noreferrer"&gt;sources on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Also &lt;a href="https://www.linkedin.com/posts/omarelfiki_im-excited-to-share-my-second-completed-activity-7338308176871632896-aeGY" target="_blank" rel="noopener noreferrer"&gt;found on LinkedIn&lt;/a&gt;
 by &lt;strong&gt;Omar Elfiki&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;I&amp;rsquo;m excited to share my second completed project at Maastricht University! A JavaFX-powered system to plan your journey across any public transportation network. Navigator transforms raw GTFS transit data into an intelligent routing engine with a graphical interface. Designed for public transit systems, it enables real-time route discovery using buses, trains, trams, and walking transfers.&lt;/em&gt; &amp;quot; &lt;a href="https://github.com/omarelfiki/navigator" target="_blank" rel="noopener noreferrer"&gt;Check it out here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Ir1tmdWEgD4" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;LogoRRR is now available on flathub! This makes it very easy to install and use it - download now!&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;And &lt;a href="https://bsky.app/profile/rladstaetter.bsky.social/post/3ls72togyk22c" target="_blank" rel="noopener noreferrer"&gt;he shared on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;m trying (again) to get LogoRRR to run with GraalVM&lt;/em&gt; &amp;quot; and managed to make progress thanks to to this article by &lt;strong&gt;Catherine Edelveis&lt;/strong&gt; : &lt;a href="https://bell-sw.com/blog/how-to-create-javafx-native-images/" target="_blank" rel="noopener noreferrer"&gt;How to Create JavaFX Native Images&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/crschnick_javafx-activity-7339359872884338689-yP1W/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A new animated JavaFX loading screen and an integration for the new Apple containers. Will be available in XPipe 17.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/showcase-some-new-features-recently-shipped-xpipe-16-schnick-7hxcf/" target="_blank" rel="noopener noreferrer"&gt;And he also shared multiple videos&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Showcase of some of new features recently shipped in XPipe 16.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cryptomator/cryptomator/releases/tag/1.17.0" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Cryptomator&lt;/strong&gt; released version 1.17.0, based on Java and JavaFX 24&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;With Cryptomator, the key to your data is in your hands. Cryptomator secures and encrypts your sensitive data in your favorite cloud service. So you can rest assured that only you can access your data.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/jabref_jabref-aarch64-arm64-activity-7340430313371688960-Hmqg/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;JabRef&lt;/strong&gt; has great news&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JabRef now offers Linux-aarch64/arm64 binaries as well in the latest development version. This means you can run JabRef now also on your Raspberry Pi or on other Arm64 Linux notebooks. Snaps and flatpak will follow soon.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/jeditermfx-doom-running-legendary-game-javafx-techsenger-xqiic/" target="_blank" rel="noopener noreferrer"&gt;JediTermFX and DOOM &amp;ndash; Running the Legendary Game in JavaFX&lt;/a&gt;
 by &lt;strong&gt;Pavel Castornii&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;About a year ago, we introduced our terminal emulator for JavaFX &amp;ndash; JediTermFX. One of its key features is that it uses a Canvas for rendering, which allows it to work with almost any terminal-based program. Recently, we decided to test how the emulator handles something a bit unusual &amp;ndash; the iconic game DOOM.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Relesed on Steam on May 30th by &lt;strong&gt;Gavin Lee Moutoux&lt;/strong&gt; : &lt;a href="https://store.steampowered.com/app/3739280/Nocturne_FX/" target="_blank" rel="noopener noreferrer"&gt;Nocturne FX&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;A high-intensity arcade game built entirely in JavaFX. Dodge pipes, harness unpredictable power-ups, and survive a world that unravels the longer you last&amp;mdash;including secrets no one prepared you for.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/did:plc:5bvlreuyymd7itwoucylq63e/post/3lrbnqeqkn22g" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I did not check for quite some time but SpaceFX runs superfast on my M4 MBP with #JDK24 #JavaFX #Java.&lt;/em&gt; &amp;quot; You can find it &lt;a href="https://github.com/hanSolo/spacefx" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/jpro.one/post/3lqp4eaixlk2i" target="_blank" rel="noopener noreferrer"&gt;Message from &lt;strong&gt;JPro&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;In JPro release 2025.2.1, we&amp;rsquo;ve updated how native keyboard shortcuts are handled, along with a number of small fixes &amp;amp; improvements. We&amp;rsquo;re hard at work behind the scenes, so keep an eye &lt;a href="https://www.jpro.one/docs/jpro-webapi/changelog/1/1/2025.2.x" target="_blank" rel="noopener noreferrer"&gt;on our changelog&lt;/a&gt;
 in the coming months.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/iamkonstantin.eu/post/3lrs2hurgw423" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Konstantin Gerry&lt;/strong&gt; announced Gadulka 1.7.0&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Gadulka is a minimalistic audio player library for Kotlin Multiplatform. Gadulka wraps the native player functionality from each target in &amp;ldquo;headless&amp;rdquo; mode. That is, the library does not provide any UI (this will be up to you). This version is mostly about updating dependencies like Kotlin 2.1.21, JavaFX and the minimum JDK is now 21. Gadulka links against but doesn&amp;rsquo;t bundle JavaFX.&lt;/em&gt; &amp;quot; You can find the &lt;a href="https://github.com/kkostov/gadulka/releases/tag/1.7.0" target="_blank" rel="noopener noreferrer"&gt;release and sources on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.github.almasb/fxgl-framework/21.1/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;APIdia&lt;/strong&gt; published the JavaDoc of FXGL&lt;/a&gt;
 &amp;ldquo;&lt;em&gt;BUT, FXGL is partly written in Kotlin, which is currently not supported yet. The docs only comprise data from Java sources.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/mattcoley.bsky.social/post/3ls33isgrsc2v" target="_blank" rel="noopener noreferrer"&gt;Update with screenshots by &lt;strong&gt;Matt Coley&lt;/strong&gt; on the progress of his new library BentoFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Alright, I rewrote my JavaFX docking framework, BentoFX, from scratch (again) after incorporating it into multiple projects and learning what the pain points were with the existing architecture.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://www.youtube.com/shorts/vwXOAa_KVKw" target="_blank" rel="noopener noreferrer"&gt;YouTube short by &lt;strong&gt;Kensoft PH&lt;/strong&gt;&lt;/a&gt;
 showing that ChatGPT can create a working minimal JavaFX application. Check his YouTube profile for more JavaFX videos.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/helal-anwar-94571016b/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Helal Anwar&lt;/strong&gt;&lt;/a&gt;
 pointed us at this video by Apple: &lt;a href="https://www.youtube.com/watch?v=QSHO-GUGidA" target="_blank" rel="noopener noreferrer"&gt;WWDC25: Explore Swift and Java interoperability&lt;/a&gt;
. It doesn&amp;rsquo;t mention JavaFX, but it would be nice to see if this can be extended to allow the same kind of integration with JavaFX. The sources of the project can be found &lt;a href="https://github.com/swiftlang/swift-java" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Recording of the live stream &lt;a href="https://www.youtube.com/watch?v=yP-8wXjB_Es" target="_blank" rel="noopener noreferrer"&gt;Quarkus Insights #210: Extension Spotlight on JavaFX&lt;/a&gt;
 is available on YouTube. &lt;strong&gt;Holly Cummins&lt;/strong&gt; and &lt;strong&gt;Max Rydahl Andersen&lt;/strong&gt; talked with &lt;strong&gt;Clément de Tastes&lt;/strong&gt; about the JavaFX Quarkus extension to bring a modern, efficient, and fully featured toolkit for developing rich client applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-conferences"&gt;Conferences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.devoxx.co.uk/talk/?id=17259" target="_blank" rel="noopener noreferrer"&gt;Recording of the talk &amp;ldquo;Building a native multiplatform SDKMAN in JavaFX&amp;rdquo;&lt;/a&gt;
 by &lt;strong&gt;Jago de Vreede&lt;/strong&gt; at Devoxx UK has been published.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Short &lt;a href="https://www.youtube.com/watch?v=NU2ntGrV-Yc" target="_blank" rel="noopener noreferrer"&gt;video tutorial by &lt;strong&gt;TechHiveHQ&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;How to Enable Dark Mode in JavaFX App&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hidekazu Kubota&lt;/strong&gt; shared a &amp;ldquo;&lt;em&gt;&lt;a href="https://www.docswell.com/s/sosuisen/56VX4X-2025-06-16-234846" target="_blank" rel="noopener noreferrer"&gt;guide for beginners in Java and JavaFX to help them get started with development using VSCode&lt;/a&gt;
. All 100 of my students have successfully learned JavaFX using this guide without any problems.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Video tutorial by &lt;strong&gt;TheCodeGenerator&lt;/strong&gt; : &lt;a href="https://www.youtube.com/watch?v=sXfOEJ4FY84" target="_blank" rel="noopener noreferrer"&gt;Build a Weather App That Looks INSANE in 2025 (JavaFX + REST API)&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;In this full tutorial, we&amp;rsquo;ll build a real-time weather app using JavaFX, WeatherAPI.com, and modern development tools &amp;mdash; from the user interface to the API layer, all wrapped in clean architecture. Whether you&amp;rsquo;re learning JavaFX or just want a project that actually looks good in 2025, this is for you.&lt;/em&gt; &amp;quot; Sources &lt;a href="https://github.com/TheCodeGen/weatherlyFX" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;More AI by &lt;strong&gt;Richard Baldwin&lt;/strong&gt; : &lt;a href="https://cloving.ai/tutorials/enhancing-javafx-applications-with-gpt-supported-code" target="_blank" rel="noopener noreferrer"&gt;Enhancing JavaFX Applications with GPT-Supported Code&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;APIdia&lt;/strong&gt; added API docs for the following JavaFX components, created by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;These controls are frequent and crucial building blocks of advanced JavaFX applications.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc.afterburner/afterburner.fx/" target="_blank" rel="noopener noreferrer"&gt;afterburner.fx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.calendarfx/view" target="_blank" rel="noopener noreferrer"&gt;CalendarFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc.formsfx/formsfx-core/" target="_blank" rel="noopener noreferrer"&gt;FormsFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc.gemsfx/gemsfx/" target="_blank" rel="noopener noreferrer"&gt;GemsFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc/GMapsFX/" target="_blank" rel="noopener noreferrer"&gt;GMapsFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc.keyboardfx/keyboardfx/" target="_blank" rel="noopener noreferrer"&gt;KeyboardFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc.pdfviewfx/pdfviewfx/" target="_blank" rel="noopener noreferrer"&gt;PDFViewFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc.phonenumberfx/phonenumberfx/" target="_blank" rel="noopener noreferrer"&gt;PhonenumberFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc.pickerfx/pickerfx/" target="_blank" rel="noopener noreferrer"&gt;PickerFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc.preferencesfx/preferencesfx-core/" target="_blank" rel="noopener noreferrer"&gt;PreferencesFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc.retrofitfx/retrofitfx/" target="_blank" rel="noopener noreferrer"&gt;RetrofitFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc.showcasefx/showcasefx/" target="_blank" rel="noopener noreferrer"&gt;ShowcaseFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc.unitfx/unitfx/" target="_blank" rel="noopener noreferrer"&gt;UnitFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/com.dlsc.workbenchfx/workbenchfx-core/" target="_blank" rel="noopener noreferrer"&gt;WorkbenchFX&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/crschnick_javafx-activity-7338178050095742976-TUCi" target="_blank" rel="noopener noreferrer"&gt;Video by &lt;strong&gt;Christopher Schnick&lt;/strong&gt; on LinkedIn&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Demo of the new macOS 26 liquid glass material with hashtag#JavaFX. This will be available in XPipe 17.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-8-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content:
&lt;ul&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/jeditermfx" target="_blank" rel="noopener noreferrer"&gt;JediTermFX&lt;/a&gt;
, a terminal emulator for JavaFX by &lt;strong&gt;Pavel Castornii&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;People: &lt;a href="https://www.jfx-central.com/people/c.edelveis" target="_blank" rel="noopener noreferrer"&gt;Catherine Edelveis&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Company: &lt;a href="https://www.jfx-central.com/companies/bellsoft" target="_blank" rel="noopener noreferrer"&gt;BellSoft&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/PKvuXsfWe_M" target="_blank" rel="noopener noreferrer"&gt;Use SceneBuilder to Create User Interfaces with JavaFX&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The overview of the Links Of The Week of May &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-may-2025/"&gt;got published on &lt;strong&gt;Foojay&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Improve Your Java Applications’ Startup and Compilation Speed with Optimizer Hub</title><link>https://foojayio.github.io/website/today/improve-your-java-applications-startup-and-compilation-speed-with-optimizer-hub/</link><pubDate>Fri, 27 Jun 2025 09:35:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/improve-your-java-applications-startup-and-compilation-speed-with-optimizer-hub/</guid><description>&lt;p&gt;&lt;em&gt;This is the fourth blog post in a series on faster Java application warmup with ReadyNow. If you haven&amp;rsquo;t been following the series, go back to the first blog post, &lt;a href="https://foojayio.github.io/website/today/faster-java-warmup-crac-versus-readynow/"&gt;Faster Java Warmup: CRaC versus ReadyNow&lt;/a&gt;
, and catch up. This post examines Optimizer Hub, a set of services external to the JVM within Azul Platform Prime that you can run in your cloud or on-premises environment&lt;/em&gt; to improve your applications&amp;rsquo; startup and compilation speed*.*&lt;/p&gt;</description></item><item><title>How to Identify the Underlying Causes of Connection Timeout Errors for MongoDB With Java</title><link>https://foojayio.github.io/website/today/how-to-identify-the-underlying-causes-of-connection-timeout-errors-for-mongodb-with-java/</link><pubDate>Thu, 26 Jun 2025 12:13:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-identify-the-underlying-causes-of-connection-timeout-errors-for-mongodb-with-java/</guid><description>&lt;p&gt;Java developers and &lt;a href="https://dzone.com/refcardz/mongodb" target="_blank" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;
 are like Aladdin and the Genie from Arabian Nights. Developers rub the lamp with their wildest NoSQL wishes, and MongoDB swoops in, granting &lt;a href="https://dzone.com/refcardz/getting-started-with-spring-boot-and-microservices" target="_blank" rel="noopener noreferrer"&gt;Spring Boot microservices&lt;/a&gt;
 and REST APIs the magic they need to soar. But every so often, a Jafar-like menace swoops in, forcing our Aladdin (Java devs) to wrestle with sleepless nights. One such villainous foe is the connection timeout, locking APIs in a cave of wonders with no escape, leaving developers yearning for a magic carpet fix.&lt;/p&gt;</description></item><item><title>Sentiment Analysis with Java, Quarkus, LangChain4j, and Local LLMs</title><link>https://foojayio.github.io/website/today/build-a-sentiment-analysis-api-in-java-with-quarkus-and-local-llms/</link><pubDate>Wed, 25 Jun 2025 12:20:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/build-a-sentiment-analysis-api-in-java-with-quarkus-and-local-llms/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/build-a-sentiment-analysis-api-in-java-with-quarkus-and-local-llms/49de875e-fe8c-40d2-9613-61a6c8270eb3_1536x1024-700x467.webp" alt="Abstract image" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In a world full of opinions, tweets, reviews, chats, emails, understanding the tone behind words is crucial. Whether you&amp;rsquo;re building a feedback system, monitoring brand reputation, or adding emotion detection to a chatbot, sentiment analysis plays a key role. It turns raw text into actionable signals: Is the customer happy? Frustrated? Neutral?&lt;/p&gt;
&lt;p&gt;Traditionally, this kind of natural language processing (NLP) required cloud APIs or heavyweight ML stacks. But now, thanks to modern Java frameworks like &lt;a href="https://quarkus.io/" target="_blank" rel="noopener noreferrer"&gt;Quarkus&lt;/a&gt;
, local Large Language Models (LLMs), and the &lt;a href="https://docs.quarkiverse.io/quarkus-langchain4j/dev/index.html" target="_blank" rel="noopener noreferrer"&gt;LangChain4j&lt;/a&gt;
 library, you can build a sentiment analyzer that runs entirely on your machine&amp;mdash;no cloud account, no API keys, no surprise billing.&lt;/p&gt;</description></item><item><title>Benchmark and profiling Java with JMH</title><link>https://foojayio.github.io/website/today/benchmarking-and-profiling-java-with-jmh/</link><pubDate>Tue, 24 Jun 2025 21:49:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/benchmarking-and-profiling-java-with-jmh/</guid><description>&lt;h2 id="h2-0-introduction-why-jmh"&gt;Introduction: Why JMH?&lt;/h2&gt;
&lt;p&gt;Performance matters in Java applications, but measuring it accurately is harder than you might think. I&amp;rsquo;ve seen countless developers try to measure performance by wrapping code in System.currentTimeMillis() calls or using simple timing loops, only to get misleading results due to JVM optimizations, garbage collection, or just mistakes during measurement.&lt;/p&gt;
&lt;p&gt;The JVM is incredibly good at optimizing code, sometimes so good that it optimizes away the very code you&amp;rsquo;re trying to benchmark. Dead code elimination, constant folding, and just-in-time compilation can all skew your measurements in ways that don&amp;rsquo;t reflect real-world performance.&lt;/p&gt;</description></item><item><title>Clean and Modular Java: A Hexagonal Architecture Approach</title><link>https://foojayio.github.io/website/today/clean-and-modular-java-a-hexagonal-architecture-approach/</link><pubDate>Tue, 24 Jun 2025 08:03:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/clean-and-modular-java-a-hexagonal-architecture-approach/</guid><description>&lt;p&gt;One of the discussions that always leaves me with both doubts and excitement is the one about system architecture. Ever since I started diving deeper into programming, I&amp;rsquo;ve encountered questions like how to separate packages and modules: is it really worth creating so many divisions? I must admit, it&amp;rsquo;s often complicated to understand or make decisions without being fully sure that I&amp;rsquo;m doing the right thing.&lt;/p&gt;
&lt;p&gt;Right from the start, I want to make it clear that this content will definitely spark a lot of discussion around best practices and whether what I&amp;rsquo;m doing is correct &amp;mdash; but, above all, I guarantee it will be fun!&lt;/p&gt;</description></item><item><title>Save Time and Money by Reducing False Positives</title><link>https://foojayio.github.io/website/today/save-time-and-money-by-reducing-false-positives/</link><pubDate>Mon, 23 Jun 2025 08:35:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/save-time-and-money-by-reducing-false-positives/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.azul.com/blog/how-azul-identifies-java-security-vulnerabilities-with-1000-times-greater-accuracy/" target="_blank" rel="noopener noreferrer"&gt;Recently Azul announced that AVD&lt;/a&gt;
 (Azul Vulnerability Detection), which is our solution to scan for security vulnerabilities in production, now comes with a new feature that only makes it possible to identify vulnerable components on a JAR file level but also on class file level.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="h3-0-the-production-scanning-challenge"&gt;The Production Scanning Challenge&lt;/h3&gt;
&lt;p&gt;So what does that mean? Usually, security scanners work in environments from development up to CI/CD, but not in production. The main reason for that is the fact that once you start scanning for vulnerabilities in production, the scanning process itself needs too many resources, which brings down the performance of the system. The performance decrease can be in the range of 10 to 30%, which explains why companies trust security scanners that scan in CI/CD and don&amp;rsquo;t add additional scans in production.&lt;/p&gt;</description></item><item><title>How to Train ReadyNow to Achieve Optimal Java Performance</title><link>https://foojayio.github.io/website/today/how-to-train-readynow-to-achieve-optimal-java-performance/</link><pubDate>Fri, 20 Jun 2025 19:31:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-train-readynow-to-achieve-optimal-java-performance/</guid><description>&lt;p&gt;&lt;em&gt;This is the third blog post in a series on faster Java application warmup with ReadyNow. If you haven&amp;rsquo;t been following the series, go back to the first blog post, &lt;a href="https://foojayio.github.io/website/today/faster-java-warmup-crac-versus-readynow/"&gt;Faster Java Warmup: CRaC versus ReadyNow&lt;/a&gt;
, and catch up. This post explains how you can train the ReadyNow feature in Azul Platform Prime to achieve optimal Java performance.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Using a profile log made from a single run is only a first step in Java warmup. ReadyNow learns from previous executions and incrementally improves the warmup time at every new invocation. By using several training runs, you can improve your application&amp;rsquo;s performance even further. ReadyNow gathers data from training runs and stores it in a profile log, which ensures better performance after the first and subsequent runs.&lt;/p&gt;</description></item><item><title>Multi-cloud Strategies With MongoDB Atlas</title><link>https://foojayio.github.io/website/today/multi-cloud-strategies-with-mongodb-atlas/</link><pubDate>Thu, 19 Jun 2025 11:49:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/multi-cloud-strategies-with-mongodb-atlas/</guid><description>&lt;p&gt;&lt;strong&gt;In the technological world, the cloud has become more prevalent. It brings many benefits, including flexibility, scalability, faster innovation, and collaboration. Plus, when it comes to data storage and access with databases, it allows data to be located closer to the user for lower latency and thus, faster performance.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most people have heard of the big cloud providers, such as Azure from Microsoft, Google Cloud, and Amazon Web Services (AWS). But when it comes to a business selecting a cloud provider, how do you choose?&lt;/p&gt;</description></item><item><title>SpringBoot and Kafka Streams – Event Routing &amp; Testing</title><link>https://foojayio.github.io/website/today/spring-boot-kafka-streams-event-routing-testing/</link><pubDate>Thu, 19 Jun 2025 08:37:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-kafka-streams-event-routing-testing/</guid><description>&lt;p&gt;Welcome to this hands-on guide to building a Spring Boot Kafka Streams application! (SpringBoot and Kafka Streams).&lt;/p&gt;
&lt;p&gt;In this article, I&amp;rsquo;ll walk you through a project I built during the first day of a three-day Kafka Streams training. The goal? Validate sightseeing events in Lille based on predefined timetables and route the data accordingly.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s explore how Kafka Streams powers a real-time city tour experience! 🧭&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/s07d3SmoBMI?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;hr&gt;
&lt;p&gt;🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪&lt;/p&gt;</description></item><item><title>Java, What's Old? Part I: Collections</title><link>https://foojayio.github.io/website/today/java-whats-old-part-i-collections/</link><pubDate>Thu, 19 Jun 2025 08:31:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-whats-old-part-i-collections/</guid><description>&lt;p&gt;A few weeks ago, I had the honor to present at the &lt;a href="https://www.meetup.com/nl-NL/arnhemjug/" target="_blank" rel="noopener noreferrer"&gt;Arnhem JUG&lt;/a&gt;
 in the Netherlands about &amp;ldquo;Java, What&amp;rsquo;s old?&amp;rdquo; In this series, I&amp;rsquo;m focusing on what&amp;rsquo;s old in the JDK, not that known, and can be useful. A few hidden gems in the JDK.&lt;/p&gt;
&lt;p&gt;Everything in this series is in Java 8 and earlier. So after reading this article, you will be able to use it in your projects.&lt;/p&gt;</description></item><item><title>Book Review: Writing for Developers</title><link>https://foojayio.github.io/website/today/book-review-writing-for-developers/</link><pubDate>Wed, 18 Jun 2025 10:58:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-writing-for-developers/</guid><description>&lt;p&gt;&lt;em&gt;Disclaimer&lt;/em&gt;: This post includes affiliate links; I may receive compensation if you purchase the book from the different links provided in this post.&lt;/p&gt;
&lt;p&gt;This review is about &lt;a href="https://www.manning.com/books/writing-for-developers?utm_source=frankel&amp;amp;amp;utm_medium=affiliate&amp;amp;amp;utm_campaign=affiliate&amp;amp;amp;a_aid=frankel" target="_blank" rel="noopener noreferrer"&gt;Writing for Developers&lt;/a&gt;
 by Piotr Sarna and Cynthia Dunlop from Manning.&lt;/p&gt;
&lt;p&gt;I started &lt;a href="https://blog.frankel.ch/" target="_blank" rel="noopener noreferrer"&gt;my blog&lt;/a&gt;
 as a hobby seventeen years ago, in April 2008. At the time, I had no clue about technical writing. I&amp;rsquo;m pretty sure it was not even a thing back then: the only content aimed at developers was technical documentation. Since then, the landscape has changed a lot, to the point that companies hire for technical writer positions.&lt;/p&gt;</description></item><item><title>Ensuring Safe and Reliable AI Interactions with LLM Guardrails</title><link>https://foojayio.github.io/website/today/ensuring-safe-and-reliable-ai-interactions-with-llm-guardrails/</link><pubDate>Tue, 17 Jun 2025 07:11:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/ensuring-safe-and-reliable-ai-interactions-with-llm-guardrails/</guid><description>&lt;p&gt;&lt;strong&gt;Integrating Large Language Models (LLMs) into our applications is becoming increasingly popular. These models are extremely useful for creating content, searching documentation, and solving more complex problems. However, with great power comes great responsibility.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We know that LLMs can and will make mistakes, and while enriching your prompts with the proper context can help align results with your documents and information, risks still remain. Along with the rise of LLMs, new attack vectors are surfacing. Clever prompt injections can lead to misinformation and‌ escalate privacy-sensitive information.&lt;/p&gt;</description></item><item><title>Your Complete Guide to Diagnose Slow Queries in MongoDB</title><link>https://foojayio.github.io/website/today/your-complete-guide-to-diagnose-slow-queries-in-mongodb/</link><pubDate>Tue, 17 Jun 2025 04:06:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/your-complete-guide-to-diagnose-slow-queries-in-mongodb/</guid><description>&lt;p&gt;MongoDB is built to be fast. The real win comes from knowing how to keep it that way, even as your app grows and your data gets more complex.&lt;/p&gt;
&lt;p&gt;This tutorial is for those developers and engineers who want to understand how MongoDB behaves when queries or writes slow down. We&amp;rsquo;re not here to hand you indexing tips or premature advice about schema design. We&amp;rsquo;re here to walk through the actual tools MongoDB gives you to observe, measure, and reason about query performance, before you start optimizing anything.&lt;/p&gt;</description></item><item><title>Sonar Connect Amsterdam 2025</title><link>https://foojayio.github.io/website/today/sonar-connect-amsterdam-2025/</link><pubDate>Mon, 16 Jun 2025 15:51:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/sonar-connect-amsterdam-2025/</guid><description>&lt;h3 id="h3-0-code-quality-code-security-for-open-source-ai-code"&gt;Code quality + Code security for Open Source &amp;amp; AI code&lt;/h3&gt;
&lt;p&gt;In the age of AI, ensuring code quality and code security is more critical than ever. Are you using the best methodologies to introduce GenAI in your company? do you know the risks? have you heard about AI MCP and the benefits ? what about using AI in the full SDLC? do you know the latest features of SonarQube regarding AI and SCA(dependencies vulnerabilities)?&lt;/p&gt;</description></item><item><title>Foojay Podcast #73: JCon Report, Part 2 – Evolutions in the Java language and runtime</title><link>https://foojayio.github.io/website/today/foojay-podcast-73/</link><pubDate>Mon, 16 Jun 2025 07:42:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-73/</guid><description>&lt;p&gt;In the second part of our JCON interviews, recorded at the conference in May, we focuses on general evolutions within the Java world and how they influence how we write code and develop applications. We take a look back at the history of Java, discuss new features in the latest release, how Java evolves with OpenJDK projects and JEPS, how Java is used in education, and much more&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/T9_5LYsFZn8?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>How ReadyNow Improves Java Warmup Time</title><link>https://foojayio.github.io/website/today/how-readynow-improves-java-warmup-time/</link><pubDate>Fri, 13 Jun 2025 07:55:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-readynow-improves-java-warmup-time/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;This is the second article in a series on faster Java application warmup. The first blog post, &lt;a href="https://foojayio.github.io/website/today/faster-java-warmup-crac-versus-readynow/"&gt;Faster Java Warmup: CRaC versus ReadyNow&lt;/a&gt;
, explained how CRaC and ReadyNow use different methods to achieve faster Java warmup. This post takes a deeper look into how ReadyNow improves Java warmup time and reduces latency.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;ReadyNow in Azul Zing Builds of OpenJDK (Zing) helps Java applications reach their optimal performance much faster after the startup of the JVM. Using a text file containing the history of compiler decisions from a previous run, it can reduce the application&amp;rsquo;s total Java warmup time.&lt;/p&gt;</description></item><item><title>Java Concurrency Best Practices for MongoDB</title><link>https://foojayio.github.io/website/today/java-concurrency-best-practices-for-mongodb/</link><pubDate>Thu, 12 Jun 2025 15:30:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-concurrency-best-practices-for-mongodb/</guid><description>&lt;p&gt;In a multi-threaded, distributed environment like MongoDB, when clients execute queries concurrently, operations interleave with one another if they are not isolated, whether those operations involve single-document or multi-document operations.&lt;/p&gt;
&lt;p&gt;For instance, Client C1&amp;rsquo;s read operation might observe the effects of a write performed by Client C2, even if that write has not yet been made durable. When at least one of the concurrent operations is a write and isolation is not enforced, this can lead to undesirable outcomes, such as:&lt;/p&gt;</description></item><item><title>Performance Best Practise No. 1: Optimize Database Operations</title><link>https://foojayio.github.io/website/today/performance-best-practise-no-1-optimize-database-operations/</link><pubDate>Wed, 11 Jun 2025 13:24:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/performance-best-practise-no-1-optimize-database-operations/</guid><description>&lt;p&gt;Database operations are a very critical part of most applications in regards of performance. There are multiple reasons why database operations can significantly contribute to lower performance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The database often runs on a remote server, slowing down communication with the database and the data transfer&lt;/li&gt;
&lt;li&gt;Establishing individual connections to a database can take a significant portion of time compared to running the whole database query&lt;/li&gt;
&lt;li&gt;Database queries can run for a long time&lt;/li&gt;
&lt;li&gt;Network communication is unstable and may required restarting queries in case of network failures&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can address the above issues and boost Jakarta EE database performance by leveraging the following best practices.&lt;/p&gt;</description></item><item><title>Intro to RAG: Foundations of Retrieval Augmented Generation, part 2</title><link>https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-2/</link><pubDate>Tue, 10 Jun 2025 21:54:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-2/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-1/"&gt;the last post&lt;/a&gt;
, we discussed the basics of Retrieval Augmented Generation (RAG) and how it enhances the capabilities of Large Language Models (LLMs) by integrating them with external knowledge sources. We also introduced the concept of vector embeddings and their role in semantic search.&lt;/p&gt;
&lt;p&gt;In this post, we&amp;rsquo;ll dive deeper into the different layers of RAG, including vector RAG, graph RAG, and agents. We&amp;rsquo;ll explore how these layers can be combined to create more powerful and effective AI systems.&lt;/p&gt;</description></item><item><title>Authoring an OpenRewrite Recipe</title><link>https://foojayio.github.io/website/today/authoring-an-openrewrite-recipe/</link><pubDate>Mon, 09 Jun 2025 17:22:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/authoring-an-openrewrite-recipe/</guid><description>&lt;p&gt;I&amp;rsquo;ve been eying OpenRewrite for some time, but I haven&amp;rsquo;t had time to play with it yet. In case you never heard about OpenRewrite, OpenRewrite takes care of refactoring your codebase to newer language, framework, and paradigm versions.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;OpenRewrite is an open-source automated refactoring ecosystem for source code, enabling developers to effectively eliminate technical debt within their repositories.&lt;/p&gt;
&lt;p&gt;It consists of an auto-refactoring engine that runs prepackaged, open-source refactoring recipes for common framework migrations, security fixes, and stylistic consistency tasks &amp;ndash; reducing your coding effort from hours or days to minutes. Build tool plugins like the OpenRewrite Gradle plugin and the OpenRewrite Maven plugin help you run these recipes on one repository at a time.&lt;/p&gt;</description></item><item><title>Faster Java Warmup: CRaC versus ReadyNow</title><link>https://foojayio.github.io/website/today/faster-java-warmup-crac-versus-readynow/</link><pubDate>Fri, 06 Jun 2025 17:23:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/faster-java-warmup-crac-versus-readynow/</guid><description>&lt;p&gt;&lt;em&gt;This is the first blog post in a series on faster Java application warmup with ReadyNow.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Azul has developed different solutions to help achieve faster Java application warmup, including Coordinated Restore at Checkpoint (CRaC) and ReadyNow. While CRaC and ReadyNow aim to solve the same challenge, they take different approaches. This post explains the differences.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;One of the challenges in a Java system is application warmup.&lt;/p&gt;
&lt;p&gt;Java is the beating heart of many applications. It powers countless applications, from small business processes on a single machine to massive clusters handling vast amounts of data and transactions. Azul optimizes performance, especially Java warmup in complex setups and time-sensitive use cases.&lt;/p&gt;</description></item><item><title>MongoDB Aggregation Framework: A Beginner’s Guide</title><link>https://foojayio.github.io/website/today/mongodb-aggregation-framework-a-beginners-guide/</link><pubDate>Thu, 05 Jun 2025 06:20:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-aggregation-framework-a-beginners-guide/</guid><description>&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/CbYitR4mR6I?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Finding exactly the data we need isn&amp;rsquo;t always a simple task.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ve probably faced situations where you needed to filter information, group it, and even perform calculations to produce a final result.&lt;/p&gt;
&lt;p&gt;And often, delivering this processed data to the client is essential for the application&amp;rsquo;s success. MongoDB offers two main ways to fetch data:&lt;/p&gt;</description></item><item><title>Java’s Structured Concurrency: Finally Finding Its Footing</title><link>https://foojayio.github.io/website/today/javas-structured-concurrency-finally-finding-its-footing/</link><pubDate>Wed, 04 Jun 2025 12:21:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/javas-structured-concurrency-finally-finding-its-footing/</guid><description>&lt;p&gt;The structured concurrency API changed again after two incubations and four rounds of previews.&lt;/p&gt;
&lt;p&gt;Ideally, this scenario is unexpected.&lt;/p&gt;
&lt;p&gt;However, given its status as a preview API, such changes can occur, as was the case here.&lt;/p&gt;
&lt;p&gt;These changes lend considerable maturity to the API, and I am hopeful it will now stabilize without requiring further modifications.&lt;/p&gt;
&lt;h3 id="h3-0-what-actually-changed-this-time"&gt;&lt;strong&gt;What Actually Changed This Time&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;When I first started working with structured concurrency back in its incubation phase, I was excited about the promise of cleaner concurrent code.&lt;/p&gt;</description></item><item><title>Cloudflare Tunnel for Home Assistant</title><link>https://foojayio.github.io/website/today/cloudflare-tunnel-for-home-assistant/</link><pubDate>Tue, 03 Jun 2025 11:29:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/cloudflare-tunnel-for-home-assistant/</guid><description>&lt;p&gt;I continue to take care of my Home Assistant. This week, I replaced my original setup with &lt;a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/" target="_blank" rel="noopener noreferrer"&gt;Cloudflare Tunnel&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This is the 6^th^ post in the My journey with Home Assistant focus series. Other posts include:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/home-assistant/1/" target="_blank" rel="noopener noreferrer"&gt;Why Home Assistant?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/home-assistant/2/" target="_blank" rel="noopener noreferrer"&gt;The Home Assistant model&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/home-assistant/3/" target="_blank" rel="noopener noreferrer"&gt;Replace Philips Hue automation with Home Assistant&amp;rsquo;s&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/home-assistant/4/" target="_blank" rel="noopener noreferrer"&gt;An example of HACS: Adaptive Lighting&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/home-assistant/5/" target="_blank" rel="noopener noreferrer"&gt;The Home Assistant companion app&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="h2-0-the-initial-setup"&gt;The initial setup&lt;/h2&gt;
&lt;p&gt;My usage of Home Assistant required external access from the beginning.&lt;/p&gt;</description></item><item><title>Foojay Podcast #72: JCon Report, Part 1 - Grow your career, public speaking, 30 years of Java, greener coding,...</title><link>https://foojayio.github.io/website/today/foojay-podcast-72/</link><pubDate>Mon, 02 Jun 2025 13:55:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-72/</guid><description>&lt;p&gt;On May 13th and 14th, Foojay attended the JCON conference in Köln, Germany, where we did over 30 live-stream interviews. In this episode, we present to you the first set of these interviews, in which we focus on celebrating 30 years of Java, how you can grow your career, become a public speaker and writer, make your code more green, a bit of AI (of course&amp;hellip;), and how the connections between open-source contributors can be visualized.&lt;/p&gt;</description></item><item><title>JavaFX Links of May 2025</title><link>https://foojayio.github.io/website/today/javafx-links-of-may-2025/</link><pubDate>Sun, 01 Jun 2025 05:51:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-may-2025/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of April 2025. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;From the &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
 mailing list: &amp;ldquo;&lt;em&gt;The first Early Access (EA) build of JavaFX with the Windows Direct3D 12 rendering pipeline is &lt;a href="https://jdk.java.net/javafxdirect3d12/" target="_blank" rel="noopener noreferrer"&gt;now available&lt;/a&gt;
. &amp;hellip; At this stage D3D12 backend is feature-complete, however optimization and performance have not been the focus yet. There?s still a number of improvements and adjustments that must be made in order to match/surpass D3D backend. Notable areas known to us which need improvements are the 3D pipeline and cases where color blending is used - they will work but they will be (much) slower than D3D. Please keep that in mind when testing. &amp;hellip; We look forward to your feedback.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/william-ant%C3%B4nio-siqueira-968bba14_ai-llm-java-activity-7323401118770741249-DOfQ/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;William Antônio Siqueira&lt;/strong&gt; extended LLM FX and shared a screenshot&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;It now supports Image Content! You can now interact with LLM not using only text, but also images. See this example using Gemma3:4b running locally.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@credmond/114452411842991361" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Cormac Redmond&lt;/strong&gt; announced version 1.2.1&lt;/a&gt;
 of &lt;a href="http://kafkio.com" target="_blank" rel="noopener noreferrer"&gt;KafkIO&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Better IPV6 support, better OAUTHBEARER support, improved error information, improved Hex viewer, and now with a Hex serde &amp;ndash; easily produce binary messages!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Javier Llorente&lt;/strong&gt; announced &lt;a href="https://github.com/javierllorente/obsfx" target="_blank" rel="noopener noreferrer"&gt;V1.0.0 of OBS FX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;OBS FX is a basic JavaFX-based Open Build Service client. It uses the the jOBS library to consume the OBS REST API.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/did:plc:sjb6gynmpo4rrf7akqedrkvo/post/3loynfomte22n" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; shared&lt;/a&gt;
 a link to the &lt;a href="https://github.com/trinity-xai/CocoAnnotationViewer" target="_blank" rel="noopener noreferrer"&gt;sources of CocoAnnotationViewer&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Standalone JavaFX viewer for COCO annotations. Supports Bounding Boxes and Segmentation Polygons. Includes drag and drop support for annotation JSON files with Jackson based Serialization support.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Andrea Vacondio&lt;/strong&gt; posted on Foojay &amp;ldquo;&lt;a href="https://foojayio.github.io/website/today/building-autopo-an-ai-powered-open-source-application-to-manage-po-files/"&gt;Building Autopo: An AI-powered Open Source Application to Manage .po Files&lt;/a&gt;
&amp;rdquo;: &amp;ldquo;&lt;em&gt;In this article , I&amp;rsquo;ll walk you through the journey that led me to create Autopo, a free and open source JavaFX desktop tool for managing .po files and with AI-powered features to translate and validate .po entries.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/carldea_health-informatics-hl7-activity-7329679218680754178-vH76/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; shared a video of Integrated Knowledge Management (IKM)&lt;/a&gt;
, an open source knowledge base platform as a cross platform installed application for MacOS, Windows, Linux, and Browser users: &amp;ldquo;&lt;em&gt;We&amp;rsquo;ve been busy developing our semantic authoring features. Testing our numerous ways to reference components (Concepts, Patterns, Semantics). When using concept oriented data the user will be able to drag and drop items from various UI controls. Also component fields provide a search suggestion popup.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@jabref/114519812378290849" target="_blank" rel="noopener noreferrer"&gt;JabRef can now be used from the command-line, thanks to JBang&lt;/a&gt;
: &amp;ldquo;_Ever wondered whether your bibliography is conistent? Ever wanted to create a focused BibTeX file based on your LaTeX aux file? These features were available in JabRef&amp;rsquo;s GUI. Now, they are available on command line with &lt;code&gt;MARKDOWN_HASH32c9f1c036adda0c8daa9ecbaa856766MARKDOWN&lt;/code&gt;&lt;em&gt;HASH&lt;/em&gt;. Powered by JavaFX&amp;rsquo;s observable lists 😅.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/trixon.se/post/3lptyfmefxs2g" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Patrik Karlström&lt;/strong&gt; is having a release day&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I have just published rebuilds with dependency updates such as JavaFX and NetBeans 26 of the following apps: CRIC (Custom runtime image creator), Mapollage
(Kml creator), nbRsync (rsync gui), Yaya (Dice game). [Source, binaries, appimages, and snaps are available}(&lt;a href="https://github.com/trixon?tab=repositories" target="_blank" rel="noopener noreferrer"&gt;https://github.com/trixon?tab=repositories&lt;/a&gt;
).&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New jDeploy blogpost by &lt;strong&gt;Steve Hannah&lt;/strong&gt; , &lt;a href="https://jdeploy.substack.com/p/starting-a-new-javafx-project" target="_blank" rel="noopener noreferrer"&gt;Starting a new JavaFX project&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;With jDeploy&amp;rsquo;s new desktop app comes some shiny new project templates to help get you started on the right foot. All project templates come pre-wired for manual deployment (e.g. you press &amp;ldquo;Publish&amp;rdquo; and it uploads directly to GitHub releases or npm), and automated deployment via GitHub workflows (e.g. when you create a new release, it adds your app bundles to the release).&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/mattcoley.bsky.social/post/3lnouqnq4ds2x" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Matt Coley&lt;/strong&gt; shared a video of work-in-progress for BentoFX, a Docking Framework for JavaFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Its very much a WIP, but if anyone has a use for such a thing and has feature requirements/ideas I&amp;rsquo;d love to hear them.&lt;/em&gt; &amp;quot; The &lt;a href="https://github.com/Col-E/BentoFX" target="_blank" rel="noopener noreferrer"&gt;repo is on GitHub&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Matt Coley&lt;/strong&gt; keeps working on BentoFX (Docking Framework for JavaFX) and releasing new versions. &lt;a href="https://github.com/Col-E/BentoFX/releases" target="_blank" rel="noopener noreferrer"&gt;Release 0.6.0&lt;/a&gt;
 is now available.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Screencast by JDeploy: &lt;a href="https://jdeploy.substack.com/p/screencast-using-new-javafx-project" target="_blank" rel="noopener noreferrer"&gt;Using new JavaFX Project Template&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;From Zero to a published JavaFX Desktop app in under 2 minutes.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;In Foojay Podcast #71, &lt;strong&gt;James Gosling&lt;/strong&gt; , the father of Java, has this message to share: &amp;ldquo;&lt;em&gt;&lt;a href="https://youtu.be/6iP376VwcjY?si=xeH6fqA-3BzCO2ea&amp;amp;t=1454" target="_blank" rel="noopener noreferrer"&gt;JavaFX is one of my favorite things of all time. That crew has done such a great work, even after Oracle basically disowned them&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Matt Coley&lt;/strong&gt; published &amp;ldquo;&lt;a href="https://www.youtube.com/watch?v=zf7g-EPNqdU" target="_blank" rel="noopener noreferrer"&gt;Drawing OpenGL to JavaFX&lt;/a&gt;
&amp;rdquo;: &amp;ldquo;&lt;em&gt;Ever try and put OpenGL stuff into a JavaFX scene? I have and was kinda disappointed by the built-in offerings, so I made a simple double-buffered canvas. I also recently saw a comment about Shaders in JavaFX and also demonstrated that at the end too 🎨.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Student management app by &lt;strong&gt;Flossing Q&lt;/strong&gt; : &lt;a href="https://www.youtube.com/watch?v=PoPmg20e-5Y" target="_blank" rel="noopener noreferrer"&gt;part 1&lt;/a&gt;
, &lt;a href="https://www.youtube.com/watch?v=OcngkenAP20" target="_blank" rel="noopener noreferrer"&gt;part 2&lt;/a&gt;
, and &lt;a href="https://www.youtube.com/watch?v=WqgInkEsCXQ" target="_blank" rel="noopener noreferrer"&gt;part 3&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;The 20th JavaFX In Action interview by &lt;strong&gt;Frank Delporte&lt;/strong&gt; is now available. In &lt;a href="https://webtechie.be/post/2025-05-29-jfxinaction-dirk-lemmermann-javafx-libraries-and-applications/" target="_blank" rel="noopener noreferrer"&gt;this video, he talked with &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
 about the many libraries and applications he has created. Of course, they also looked at JFX Central, one of his many creations.&lt;/li&gt;
&lt;li&gt;Recording of a &lt;a href="https://www.youtube.com/watch?v=MEFXO6ldxbY" target="_blank" rel="noopener noreferrer"&gt;2 hour live stream by &lt;strong&gt;Akash Chauhan&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Join this live session to master JavaFX from scratch! We&amp;rsquo;ll build a complete JavaFX application, explore UI design techniques, and dive into best practices for real-world projects. Whether you&amp;rsquo;re a beginner or brushing up your skills, bring your questions for the live Q&amp;amp;A at the end. Don&amp;rsquo;t miss out&amp;mdash;let&amp;rsquo;s build together!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-conferences"&gt;Conferences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=FxHbXY34iFQ" target="_blank" rel="noopener noreferrer"&gt;Video recording of &amp;ldquo;JavaFX 24 and Beyond&amp;rdquo; by &lt;strong&gt;Kevin Rushforth&lt;/strong&gt; at JavaOne&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX is a powerful graphical UI toolkit for building desktop and mobile applications. In this session, you will learn about the new and exciting features we have developed over the past couple of years, culminating with the release of JavaFX 24. You will learn about new features such as RichTextArea (incubator), CSS Transitions, Platform Preferences, and more. We&amp;rsquo;ll show plenty of demos and sample code. Stay tuned for a sneak peak at what&amp;rsquo;s coming next.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; presented at Devoxx UK 2025: &lt;a href="https://www.youtube.com/watch?v=kgBj8_J_rWA" target="_blank" rel="noopener noreferrer"&gt;Leveraging JavaFX for the UK Energy Market&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;This presentation showcases how Senapt harnessed JavaFX to develop powerful desktop and web clients for the UK energy market. We explore the benefits of JavaFX for building modern enterprise applications and discuss the challenges encountered during development. Additionally, we highlight the role of Senapt as a big contributor to the JavaFX community.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bell-sw.com/blog/creating-modern-desktop-apps-with-javafx-and-spring-boot/" target="_blank" rel="noopener noreferrer"&gt;Creating Modern Desktop Apps with JavaFX and Spring Boot&lt;/a&gt;
 by &lt;strong&gt;Catherine Edelveis&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;In this article, we will explore why JavaFX and Spring Boot combo is a perfect match for modern desktop development. Or, if you are eager to start coding, you can jump right to the practice section where I show how to integrate these two technologies!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;From &lt;strong&gt;Codez Up&lt;/strong&gt; : &lt;a href="https://codezup.com/building-scalable-desktop-applications-with-javafx-guide/" target="_blank" rel="noopener noreferrer"&gt;Building Scalable Desktop Applications with JavaFX: A Step-by-Step Guide&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/how-i-built-javafx-tic-tac-toe-game-from-scratch-simple-sahil-ali-pbnsf/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sahil A.&lt;/strong&gt; shared on LinkedIn&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;How I Built a JavaFX Tic Tac Toe Game from Scratch &amp;ndash; A Simple Yet Powerful Learning Experience.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.theserverside.com/tip/The-state-and-future-of-Java-desktop-application-development" target="_blank" rel="noopener noreferrer"&gt;The state and future of Java desktop application development&lt;/a&gt;
 by &lt;strong&gt;Lofi Dewanto&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;In today&amp;rsquo;s world of web application development and SaaS, what does the future hold for Java desktop applications? It&amp;rsquo;s brighter than you might think.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@michiel/114448405866930490" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Michiel&lt;/strong&gt; published&lt;/a&gt;
 his first two opensource simple JavaFX projects on GitHub:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.dotjava.nl/2025/05/03/example-javafx-mobile-app-with-and-without-gluon/" target="_blank" rel="noopener noreferrer"&gt;The NOP (no operation) Android app&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;It is a skeleton to use for new mobile applications and all those apps should have a proper exit function, so this Nop app does nothing but exit nicely.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/michiel-jfx/iceconverter" target="_blank" rel="noopener noreferrer"&gt;Simple Icelandic Euro to Krónas converter&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;This mobile phone application uses 100% Java and JavaFX with FXML to create a simple krónas to euro conversion app and vice versa.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/language-manager" target="_blank" rel="noopener noreferrer"&gt;Language Manager&lt;/a&gt;
, update your FX application locale at runtime without reloading the scene.&lt;/li&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/tabshell" target="_blank" rel="noopener noreferrer"&gt;TabShell&lt;/a&gt;
 for building tab-based applications providing customizable, ready-to-use components.&lt;/li&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/stagepro" target="_blank" rel="noopener noreferrer"&gt;StagePro&lt;/a&gt;
 for creating custom JavaFX stages with flexible configuration and full control over appearance and layout.&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/hY7RUN2hHJA" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Dirk Lemmermann: Creator of JavaFX Libraries and Apps&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The overview of the Links Of The Week of April was &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-april-2025/"&gt;published on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&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>Brokk: AI for Large (Java) Codebases</title><link>https://foojayio.github.io/website/today/brokk-for-java-developers/</link><pubDate>Fri, 30 May 2025 04:39:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/brokk-for-java-developers/</guid><description>&lt;p&gt;There are two reasons that AI makes mistakes writing code:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The LLM just isn&amp;rsquo;t smart enough to tackle the problem effectively, and it simply gets the answer wrong.&lt;/li&gt;
&lt;li&gt;The AI doesn&amp;rsquo;t know enough about the relationships and dependencies of the code it&amp;rsquo;s editing, so (best case) it hallucinates APIs that don&amp;rsquo;t exist or (worse, because more subtle) it solves the problem in an awkward way that increases technical debt.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The first category is small, but it does still exist; e.g., concurrent data structures remain challenging for today&amp;rsquo;s models to get right the first time. AI labs will continue to make progress on this.&lt;/p&gt;</description></item><item><title>Testing MongoDB Atlas Search Java Apps Using TestContainers</title><link>https://foojayio.github.io/website/today/testing-mongodb-atlas-search-java-apps-using-testcontainers/</link><pubDate>Thu, 29 May 2025 18:07:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/testing-mongodb-atlas-search-java-apps-using-testcontainers/</guid><description>&lt;p&gt;This will be an exploration of testing MongoDB Atlas Search solutions written in Java using TestContainers and JUnit5. We&amp;rsquo;ll start simple and build up to more advanced uses which load seed data and provide an environment for consistent and easy to maintain tests.&lt;/p&gt;
&lt;p&gt;TLDR; if (like me!) you want to get straight to the code rather than reading lots of tedious words:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;git clone https://github.com/luketn/mongodb-atlas-local-testcontainers.git
cd mongodb-atlas-local-testcontainers
mvn test&lt;/pre&gt;
&lt;h2 id="h2-0-what-is-mongodb-atlas-search-anyway"&gt;What is MongoDB Atlas Search, anyway?&lt;/h2&gt;
&lt;p&gt;MongoDB Atlas Search is an extension to the built-in indexing capabilities that are part of MongoDB itself, using the awesome open source indexing and query library &lt;a href="https://lucene.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Lucene&lt;/a&gt;
. MongoDB has built a wrapper around Lucene called &lt;a href="https://www.mongodb.com/docs/atlas/atlas-search/?utm_campaign=devrel&amp;amp;utm_source=third-party-content&amp;amp;utm_medium=cta&amp;amp;utm_content=Testing&amp;#43;MongoDB&amp;#43;Atlas&amp;#43;Search&amp;#43;Java&amp;#43;Apps&amp;#43;Using&amp;#43;TestContainers&amp;amp;utm_term=megan.grant#fts-architecture/" target="_blank" rel="noopener noreferrer"&gt;mongot&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>10 Best Practises For Jakarta EE Performance Optimization</title><link>https://foojayio.github.io/website/today/10-best-practises-for-jakarta-ee-performance-optimization/</link><pubDate>Thu, 29 May 2025 13:44:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/10-best-practises-for-jakarta-ee-performance-optimization/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;With this article, we start a series where we compiled 10 best practices for performance optimizations and suggestions how to implement them using &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 &amp;amp; &lt;a href="https://omnifish.ee/glassfish/" target="_blank" rel="noopener noreferrer"&gt;Eclipse GlassFish&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Enjoy reading this initial overview and watching the video about performance tuning Java applications, and stay tuned for upcoming articles from our &lt;a href="https://omnifish.ee/" target="_blank" rel="noopener noreferrer"&gt;OmniFish team&lt;/a&gt;
 that will go into details about each best practice.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To make your &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 applications faster and more efficient, here are &lt;strong&gt;10 proven best practices&lt;/strong&gt; you can easily implement:&lt;/p&gt;</description></item><item><title>Intro to RAG: Foundations of Retrieval Augmented Generation, part 1</title><link>https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-1/</link><pubDate>Tue, 27 May 2025 14:42:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-1/</guid><description>&lt;p&gt;Retrieval Augmented Generation (RAG) may sound complex, but it accurately represents the process of the system. RAG is a method that enhances the capabilities of Large Language Models (LLMs) by integrating them with external knowledge sources.&lt;/p&gt;
&lt;p&gt;Each term represents a piece of the puzzle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Retrieval - data retrieved from some external source outside the LLM (most often a database, but can include files, webpages, etc)&lt;/li&gt;
&lt;li&gt;Augmented - &amp;ldquo;augmenting&amp;rdquo; (or adding to) an LLM&amp;rsquo;s training data. This could include recent or private information that it did not have access to during its training period. Most often, this is done by adding the data to the prompt (or input) to the LLM.&lt;/li&gt;
&lt;li&gt;Generation - this is where LLMs are exceptional. They generate a response (text, image, video, etc) that is similar to the data being provided in the input. This is generated from probabilities, so cannot guarantee 100% consistency.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Instead of relying solely on the model&amp;rsquo;s internal training data, RAG retrieves relevant information from databases or document collections to ground its responses in factual and up-to-date content. This approach not only improves the accuracy and reliability of the generated outputs but also allows the system to adapt to specific contexts or domains, making it a powerful tool for many personal and professional applications.&lt;/p&gt;</description></item><item><title>Azul and JetBrains Collaborate to Enhance Runtime Performance for Kotlin Workloads</title><link>https://foojayio.github.io/website/today/azul-and-jetbrains-collaborate-to-enhance-runtime-performance-for-kotlin-workloads/</link><pubDate>Mon, 26 May 2025 08:23:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/azul-and-jetbrains-collaborate-to-enhance-runtime-performance-for-kotlin-workloads/</guid><description>&lt;p&gt;&lt;strong&gt;SUNNYVALE, Calif., &amp;mdash; May 20, 2025 &amp;mdash; &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
, the only company 100% focused on Java, and &lt;a href="https://www.jetbrains.com/" target="_blank" rel="noopener noreferrer"&gt;JetBrains&lt;/a&gt;
, the leading provider of professional software development tools and creator of the Kotlin programming language, today announced a strategic technical collaboration to enhance the runtime performance and scalability of web and server-side Kotlin applications. This strategic collaboration empowers Kotlin teams to accelerate development cycles and optimize application performance, helping them support their business priorities while driving greater operational efficiency.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>AI-Driven Testing Best Practices</title><link>https://foojayio.github.io/website/today/ai-driven-testing-best-practices/</link><pubDate>Mon, 26 May 2025 08:06:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/ai-driven-testing-best-practices/</guid><description>&lt;h2 id="h2-0-so-ai-can-write-tests-now-cool-but"&gt;&lt;strong&gt;So, AI Can Write Tests Now? Cool, But&amp;hellip;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;AI assisted coding tools are everywhere now, helping with autocomplete, suggesting fixes, and sometimes writing surprisingly large blocks of code. A hot topic is using generative AI to generate tests automatically &amp;ndash; unit, integration, e2e, etc.&lt;/p&gt;
&lt;p&gt;The idea&amp;rsquo;s definitely appealing. Who wouldn&amp;rsquo;t want an AI to help crank out tests, bump up those coverage numbers, and maybe save us from some of the testing grind? It sounds like a fast track to better feedback and tackling that mountain of untested code.&lt;/p&gt;</description></item><item><title>Understanding BSON: A Beginner’s Guide to MongoDB’s Data Format</title><link>https://foojayio.github.io/website/today/understanding-bson-a-beginners-guide-to-mongodbs-data-format/</link><pubDate>Thu, 22 May 2025 08:05:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-bson-a-beginners-guide-to-mongodbs-data-format/</guid><description>&lt;p&gt;&lt;strong&gt;When working with MongoDB, it&amp;rsquo;s easy to think you&amp;rsquo;re dealing with JSON. After all, the queries, documents, and API responses all look like JSON. But MongoDB is not storing JSON. It&amp;rsquo;s storing BSON&amp;mdash;a binary format designed for efficient storage and fast traversal.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;BSON (Binary JSON) is more than just a binary version of JSON. It introduces additional data types like ObjectId, Decimal128, and Timestamp, allowing MongoDB to handle more complex data structures and ensure data integrity. While we might rarely interact with raw BSON directly, understanding how MongoDB stores and processes BSON documents can help us write more efficient queries, handle data conversions properly, and debug unexpected behavior.&lt;/p&gt;</description></item><item><title>How to send prompts in bulk with Spring AI and Virtual Threads</title><link>https://foojayio.github.io/website/today/how-to-send-prompts-in-bulk-with-spring-ai-and-java-virtual-threads/</link><pubDate>Wed, 21 May 2025 09:18:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-send-prompts-in-bulk-with-spring-ai-and-java-virtual-threads/</guid><description>&lt;blockquote&gt;
&lt;p&gt;TL;DR: You&amp;rsquo;re building an AI-powered app that needs to send lots of prompts to OpenAI.&lt;/p&gt;
&lt;p&gt;Instead of sending them one by one, you want to do it in bulk &amp;mdash; efficiently and safely.&lt;/p&gt;
&lt;p&gt;This is how you can use Spring AI with Java Virtual Threads to process hundreds of prompts in parallel.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When calling LLM APIs like OpenAI, you&amp;rsquo;re dealing with a high-latency, network-bound task. Normally, doing that in a loop slows you down and blocks threads. But with Spring AI and Java 21 Virtual Threads, you can fire off hundreds of requests in parallel without killing your app.&lt;/p&gt;</description></item><item><title>How Deep Netts and Java AI Transformed Particle Physics</title><link>https://foojayio.github.io/website/today/how-deep-netts-and-java-ai-transformed-particle-physics-at-us-doe-jefferson-lab/</link><pubDate>Mon, 19 May 2025 10:58:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-deep-netts-and-java-ai-transformed-particle-physics-at-us-doe-jefferson-lab/</guid><description>&lt;p&gt;&lt;strong&gt;At the intersection of nuclear physics and artificial intelligence, Jefferson Lab is leveraging Java-based AI to overcome one of the most computationally intense challenges in modern science: reconstructing particle trajectories from high-frequency electron scattering experiments.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Each second, over 16,000 interactions are recorded as particles pass through a complex array of drift chambers. Traditional reconstruction methods&amp;mdash;based on mathematical likelihood calculations&amp;mdash;must sift through thousands of signal combinations to identify valid particle tracks. The result? Up to 300 milliseconds of processing per event on a single core, leading to massive compute demands.&lt;/p&gt;</description></item><item><title>Join the NLJUG JSpring Conference on Thursday, June 5</title><link>https://foojayio.github.io/website/today/join-the-nljug-jspring-conference-on-thursday-june-5/</link><pubDate>Mon, 19 May 2025 08:11:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/join-the-nljug-jspring-conference-on-thursday-june-5/</guid><description>&lt;p&gt;&lt;strong&gt;Join the Dutch Java community at &lt;a href="https://jspring.nl/" target="_blank" rel="noopener noreferrer"&gt;J-Spring 2025&lt;/a&gt;
, the premier Java conference in the Netherlands, taking place Thursday, June 5th at Jaarbeurs Utrecht.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This international event, organized by the NLJUG (Dutch Java User Group), will be bigger than ever before, offering attendees &lt;a href="https://jspring.nl/timetable-2025/" target="_blank" rel="noopener noreferrer"&gt;a comprehensive program&lt;/a&gt;
 featuring world-class speakers from across the globe. Dive deep into the world of Java with expert speakers from leading tech companies such as Uber, Spotify, Azul, Oracle and more, guaranteeing captivating talks and valuable industry insights.
&lt;a href="https://jspring.nl" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/join-the-nljug-jspring-conference-on-thursday-june-5/nljugjspring2025-1024x576.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>How to Deploy a Vaadin Application as a WAR on Tomcat 11</title><link>https://foojayio.github.io/website/today/how-to-deploy-a-vaadin-application-as-a-war-on-tomcat-11/</link><pubDate>Mon, 19 May 2025 07:40:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-deploy-a-vaadin-application-as-a-war-on-tomcat-11/</guid><description>&lt;p&gt;&lt;strong&gt;If you want to run a Vaadin application on an external servlet container like Apache Tomcat 11, you need to package your application as a WAR (Web Application Archive) instead of the usual executable JAR.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this post, I&amp;rsquo;ll show you step-by-step how I did it.&lt;/p&gt;
&lt;h2 id="h2-0-step-1-download-tomcat-11"&gt;Step 1: Download Tomcat 11&lt;/h2&gt;
&lt;p&gt;First, download Tomcat 11 from the &lt;a href="https://tomcat.apache.org/download-11.cgi" target="_blank" rel="noopener noreferrer"&gt;official Apache Tomcat website&lt;/a&gt;
. After extracting it to a local folder, you have a clean Tomcat installation ready to use.&lt;/p&gt;</description></item><item><title>What is RAG, and How to Secure It</title><link>https://foojayio.github.io/website/today/what-is-rag-and-how-to-secure-it/</link><pubDate>Fri, 16 May 2025 11:48:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-is-rag-and-how-to-secure-it/</guid><description>&lt;p&gt;Integrating large language models (LLMs) into your application is more accessible than ever. With a few API calls to OpenAI, Anthropic, or Cohere, you can instantly add &lt;a href="https://snyk.io/solutions/secure-ai-generated-code/" target="_blank" rel="noopener noreferrer"&gt;++AI capabilities++&lt;/a&gt;
 to your stack. Using frameworks and libraries that abstract this away for you makes it even easier to create your own LLM-powered assistant. However, if you&amp;rsquo;ve shipped any real-world LLM features, you&amp;rsquo;ve hit the wall where these powerful models confidently make up facts, reference outdated information, or deliver answers that don&amp;rsquo;t take your context into account.&lt;/p&gt;</description></item><item><title>Building a Real-Time AI Fraud Detection System with Spring Kafka and MongoDB</title><link>https://foojayio.github.io/website/today/building-a-real-time-ai-fraud-detection-system-with-spring-kafka-and-mongodb/</link><pubDate>Wed, 14 May 2025 14:30:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-a-real-time-ai-fraud-detection-system-with-spring-kafka-and-mongodb/</guid><description>&lt;p&gt;In this tutorial, we&amp;rsquo;ll build a real-time fraud detection system using MongoDB Atlas Vector Search, Apache Kafka, and AI-generated embeddings. We&amp;rsquo;ll demonstrate how MongoDB Atlas Vector Search can be used to detect anomalies in a stream of financial transactions by analyzing a user&amp;rsquo;s transaction history and identifying suspicious behavior based on LLM-generated embeddings.&lt;/p&gt;
&lt;p&gt;Our solution will monitor MongoDB Change Streams using the Java synchronous driver, triggering vector searches on each new transaction to detect potential fraud. While this approach works well for our demo, and for many use cases, we&amp;rsquo;ll also discuss its limitations. Throughout the tutorial, I&amp;rsquo;ll cover alternative strategies to optimize performance, whether you need higher transaction throughput, faster fraud detection, or a more scalable architecture.&lt;/p&gt;</description></item><item><title>Foojay Live @ JCON Köln</title><link>https://foojayio.github.io/website/today/foojay-live-jcon-koln/</link><pubDate>Tue, 13 May 2025 07:40:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-live-jcon-koln/</guid><description>&lt;p&gt;Today and tomorrow, we will be at the JCON Conference in Köln, Germany. We have set up an interview booth to talk to speakers and visitors about all things Java.&lt;/p&gt;
&lt;p&gt;Please follow us on &lt;a href="https://www.linkedin.com/company/foojayio/" target="_blank" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
 and/or &lt;a href="https://www.youtube.com/@foojayio" target="_blank" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;
 for the live interviews.&lt;/p&gt;
&lt;p&gt;Just like last year, these interviews will be grouped into podcast episodes, so stay tuned for more Java knowledge sharing!&lt;/p&gt;
&lt;figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex"&gt;
 &lt;figure class="wp-block-image size-large"&gt;
 &lt;img fetchpriority="high" decoding="async" width="1024" height="578" data-id="116206" src="foojay-at-jcon-booth-1-1024x578.jpg" alt="" class="wp-image-116206"&gt;
 &lt;/figure&gt;
 &lt;figure class="wp-block-image size-large"&gt;
 &lt;img decoding="async" width="1024" height="578" data-id="116205" src="foojay-at-jcon-booth-2-1024x578.jpg" alt="" class="wp-image-116205"&gt;
 &lt;/figure&gt;
 &lt;figure class="wp-block-image size-large"&gt;
 &lt;img decoding="async" width="1024" height="578" data-id="116207" src="foojay-at-jcon-booth-3-1024x578.jpg" alt="" class="wp-image-116207"&gt;
 &lt;/figure&gt;
&lt;/figure&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/videoseries?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;</description></item><item><title>Autopo: An open source tool to automate .po file translation with AI.</title><link>https://foojayio.github.io/website/today/building-autopo-an-ai-powered-open-source-application-to-manage-po-files/</link><pubDate>Mon, 12 May 2025 07:12:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-autopo-an-ai-powered-open-source-application-to-manage-po-files/</guid><description>&lt;p&gt;As a developer today, you&amp;rsquo;ve almost certainly encountered the need of localizing your application or website. While setting up your project for internationalization is usually straightforward, managing translations over time can become a complex, time consuming and costly task, especially for open source projects.&lt;/p&gt;
&lt;p&gt;Fortunately, machine translation have come a long way. It&amp;rsquo;s not perfect, but with the right context, modern AI can deliver surprisingly accurate results.&lt;/p&gt;
&lt;p&gt;In this article , I&amp;rsquo;ll walk you through the journey that led me to create &lt;a href="https://autopo.ooo" title="Autopo" target="_blank" rel="noopener noreferrer"&gt;Autopo&lt;/a&gt;
, a free and &lt;a href="https://github.com/soberlemur/autopo/" target="_blank" rel="noopener noreferrer"&gt;open source&lt;/a&gt;
 JavaFX desktop tool for managing &lt;code&gt;.po&lt;/code&gt; files and with AI-powered features to translate and validate &lt;code&gt;.po&lt;/code&gt; entries.&lt;/p&gt;</description></item><item><title>GenAI blood, sweat, and tears: Loading data to Pinecone</title><link>https://foojayio.github.io/website/today/genai-blood-sweat-and-tears-loading-data-to-pinecone/</link><pubDate>Wed, 07 May 2025 22:10:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/genai-blood-sweat-and-tears-loading-data-to-pinecone/</guid><description>&lt;p&gt;As someone who is pretty familiar with relational and graph databases, I wanted to dig a little deeper into vector databases and understand the strengths and quirks they bring to the database table. I put together a conference abstract on vector RAG versus GraphRAG which got picked up, so I went to work building a demo and learning all I could.&lt;/p&gt;
&lt;p&gt;I pivoted a few times along the way, but ended up with a Spring AI application that connects to both Pinecone (vector database) and Neo4j (graph database). There were a few surprises throughout, which I&amp;rsquo;ll be sure to mention. Let&amp;rsquo;s get started!&lt;/p&gt;</description></item><item><title>Book Review: Raising Young Coders</title><link>https://foojayio.github.io/website/today/book-review-raising-young-coders/</link><pubDate>Wed, 07 May 2025 07:04:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-raising-young-coders/</guid><description>&lt;p&gt;&amp;ldquo;&lt;a href="https://www.amazon.com/Raising-Young-Coders-Teaching-Programming/dp/B0DVBQZ483/" target="_blank" rel="noopener noreferrer"&gt;Raising Young Coders&lt;/a&gt;
&amp;rdquo; by Cassandra Chin: A Parent&amp;rsquo;s Guide to Inspiring the Next Generation of Technologists&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An Author Who Understands Both Sides&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Raising Young Coders: A Parent&amp;rsquo;s Guide to Teaching Programming at Home&amp;rdquo; by Cassandra Chin is an invaluable resource for parents seeking to introduce their children to the world of technology in a fun, accessible way.&lt;/p&gt;
&lt;p&gt;As a young computer science student who has been teaching kids&amp;rsquo; programming workshops since age 14, Chin brings both technical expertise and genuine understanding of children&amp;rsquo;s learning styles to this comprehensive guide.&lt;/p&gt;</description></item><item><title>Building FormPilot</title><link>https://foojayio.github.io/website/today/building-formpilot-my-journey-creating-an-ai-powered-form-filler-with-rag-langchain4j-and-ollama/</link><pubDate>Tue, 06 May 2025 10:00:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-formpilot-my-journey-creating-an-ai-powered-form-filler-with-rag-langchain4j-and-ollama/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer: This article details an experimental project built for learning and demonstration purposes. The implementation described is not intended as production-grade solution. Some parts of the code were generated using JetBrains&amp;rsquo; AI Agent, &lt;a href="https://www.jetbrains.com/junie/" target="_blank" rel="noopener noreferrer"&gt;Junie&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Have you ever found yourself filling out the same information on web forms over and over again? Name, email, address, phone number&amp;hellip; it&amp;rsquo;s tedious and time-consuming. As a developer who values efficiency, I decided to tackle this problem head-on by building FormPilot, an intelligent form filler that leverages the power of Large Language Models (LLMs) to fill out forms with contextually appropriate information automatically.&lt;/p&gt;</description></item><item><title>Local AI with Spring: Building Privacy-First Agents Using Ollama</title><link>https://foojayio.github.io/website/today/local-ai-with-spring-building-privacy-first-agents-using-ollama/</link><pubDate>Tue, 06 May 2025 06:44:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/local-ai-with-spring-building-privacy-first-agents-using-ollama/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Building local AI agents with Spring AI and Ollama has emerged as a game-changer for developers seeking to maintain complete control over their AI implementations and have access always at their fingertips, even offline.&lt;/p&gt;
&lt;p&gt;This powerful combination allows you to create sophisticated AI agents that run entirely on your own machine, are perfect for experimenting and learning concepts, while, more importantly, eliminating the need to share sensitive data with third-party services. While cloud-based AI services dominate headlines, they come with significant trade-offs: sending your data to third parties, paying per-token fees, and suffering latency penalties.&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>You’re Invited to IntelliJ IDEA Conf 2025!</title><link>https://foojayio.github.io/website/today/youre-invited-to-intellij-idea-conf-2025/</link><pubDate>Mon, 05 May 2025 10:20:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/youre-invited-to-intellij-idea-conf-2025/</guid><description>&lt;h2 id="h2-0-we-are-excited-to-invite-you-to-intellij-idea-conf-2025-a-free-virtual-event"&gt;We are excited to invite you to IntelliJ IDEA Conf 2025, a free virtual event.&lt;/h2&gt;
&lt;p&gt;IntelliJ IDEA Conf is a celebration of the developer community, bringing together professionals who strive for excellence in software development. Join us for this free, live online conference and learn from industry leaders and experts on June 3&amp;ndash;4, 2025.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll be able to learn about a variety of topics, including Core Java, Kotlin, Java and AI, Spring Boot, GraalVM, Gradle, Junit and Kafka. For more details, see the agenda below.
&lt;img src="https://foojayio.github.io/website/today/youre-invited-to-intellij-idea-conf-2025/IntelliJ-IDEA-Conf-2025.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Foojay Podcast #71: Celebrating 30 Years of Java with James Gosling</title><link>https://foojayio.github.io/website/today/foojay-podcast-71/</link><pubDate>Mon, 05 May 2025 06:55:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-71/</guid><description>&lt;p&gt;&lt;strong&gt;We are celebrating Java&amp;rsquo;s 30th anniversary this May!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is a very special anniversary episode of the Foojay Podcast! As we approach May 23rd, marking exactly 30 years since Java&amp;rsquo;s first beta release in 1995, we&amp;rsquo;re honored to present our first-ever single-guest podcast. But we have a very special guest for you: James Gosling, the creator of Java!&lt;/p&gt;
&lt;p&gt;Join us for this exclusive conversation as we explore Java&amp;rsquo;s beginnings, its revolutionary impact on the programming world, its continuous evolution over three decades, and James&amp;rsquo;s insights on where the language is heading. From that groundbreaking beta release over &amp;ldquo;Write Once, Run Anywhere&amp;rdquo; to powering billions of devices worldwide, this is the story of Java, told by the man who started it all, the father of Java.&lt;/p&gt;</description></item><item><title>Redis is now available under the AGPLv3 open source license</title><link>https://foojayio.github.io/website/today/redis-is-now-available-under-the-agplv3-open-source-license/</link><pubDate>Fri, 02 May 2025 12:15:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/redis-is-now-available-under-the-agplv3-open-source-license/</guid><description>&lt;p&gt;&lt;strong&gt;The rise of hyperscalers like AWS and GCP has unlocked incredible speed and scale for startups and enterprises alike. But for companies rooted in open source, it has posed a fundamental challenge: how do you keep innovating and investing in OSS projects when cloud providers reap the profits and control the infrastructure without proportional contributions back to the projects that they exploit?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To counter this, companies like MongoDB and Elastic adopted SSPL to protect their business from cloud providers extracting value without reinvesting. Redis initially took a different approach, creating Redis Stack as a separate distribution with a different license for advanced features. While this safeguarded innovation, it also split the developer experience and slowed progress on core Redis. What we really needed was a way to enhance Redis at its core without maintaining two separate tracks&amp;mdash;Redis Community Edition and Redis Stack.&lt;/p&gt;</description></item><item><title>Still Using JUnit Like It’s 2017? Learn What You’ve Missed—from the Team That Built It</title><link>https://foojayio.github.io/website/today/still-using-junit-like-its-2017-learn-what-youve-missed-from-the-team-that-built-it/</link><pubDate>Fri, 02 May 2025 08:11:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/still-using-junit-like-its-2017-learn-what-youve-missed-from-the-team-that-built-it/</guid><description>&lt;p&gt;(And finally catch up on 8 years of updates you might have missed)&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s be honest: When was the last time you really looked at what&amp;rsquo;s new in JUnit?&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re still using JUnit the way you did years ago, you&amp;rsquo;re not alone. But here&amp;rsquo;s the thing&amp;mdash;JUnit 5 has evolved massively since its first release. Over the last 8 years and 12 feature-packed updates, it&amp;rsquo;s become a powerful, expressive, and extensible platform&amp;hellip; if you know how to use it right.&lt;/p&gt;</description></item><item><title>JavaFX Links of April 2025</title><link>https://foojayio.github.io/website/today/javafx-links-of-april-2025/</link><pubDate>Wed, 30 Apr 2025 10:06:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-april-2025/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of April 2025. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cr.openjdk.org/~kcr/presentations/javaone-2025/JavaFX-24-Final.pdf" target="_blank" rel="noopener noreferrer"&gt;Slides from the presentation &amp;ldquo;JavaFX 24 and Beyond&amp;rdquo;&lt;/a&gt;
 by &lt;strong&gt;Kevin Rushforth&lt;/strong&gt; at JavaOne, March 18th, 2025.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidia.net/mvn/org.openjfx/javafx/24/" target="_blank" rel="noopener noreferrer"&gt;ApiDoc of JavaFX 24&lt;/a&gt;
 is available on &lt;a href="https://bsky.app/profile/apidia.net" target="_blank" rel="noopener noreferrer"&gt;APIdia&lt;/a&gt;
, a growing collection of high-quality APIdocs, interlinked, without tracking.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/stewori.bsky.social/post/3lloo6w6ixc25" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Stefan Richthofer&lt;/strong&gt; shares a screenshot&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;APIdia JavaFX 24 docs do now include the incubating modules, but you have to adjust visibility settings to see them.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/114239659224933655" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; on Mastodon&lt;/a&gt;
: &amp;ldquo;_I&amp;rsquo;m still working on consolidation of JDK build with OpenJFX sources. Here is a &lt;a href="https://johanvos.wordpress.com/2025/03/27/building-a-jdk-including-openjfx-part-2/" target="_blank" rel="noopener noreferrer"&gt;post describing my progress and a suggestion&lt;/a&gt;
. TLDR: I added a &lt;code&gt;MARKDOWN_HASH04d3b60467c08e78fba0bc4a87592b9fMARKDOWN&lt;/code&gt;&lt;em&gt;HASH&lt;/em&gt; configure option for the JDK. Key goal is not to make JDK build system harder to maintain. I&amp;rsquo;ll be honest about this. It&amp;rsquo;s hard work, requires diving into very different low-level things, and in the end, JavaFX developers won&amp;rsquo;t see anything from this work. But I believe I have to do this, as it is vital to JavaFX.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;And &lt;a href="https://mastodon.social/@johanvos/114269821014592304" target="_blank" rel="noopener noreferrer"&gt;continues&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;ve spent way too much time trying to find an elegant approach in generating the JavaFX shader files with the existing gradle build, and copy the results into the OpenJDK fork that can build OpenJFX. Unless someone else wants/can do this, I will move that part to the OpenJDK logic as well. Should be easier. &amp;hellip; I have to say that I&amp;rsquo;m slightly surprised that no other companies are helping me &lt;a href="https://johanvos.wordpress.com/2025/03/27/building-a-jdk-including-openjfx-part-2/" target="_blank" rel="noopener noreferrer"&gt;with this effort&lt;/a&gt;
. I know at least 2 companies that distribute a JDK including OpenJFX mods. You would think they&amp;rsquo;d love this, but it&amp;rsquo;s very silent.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The release notes for JavaFX 24.0.1 are &lt;a href="https://github.com/openjdk/jfx24u/pull/19/files" target="_blank" rel="noopener noreferrer"&gt;being prepared in this pull request&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/chadpreisler.bsky.social" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Chad Preisler&lt;/strong&gt; shared some tips to distribute JavaFX apps&lt;/a&gt;
:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;_One excellent way to distribute JavaFX applications is to use jlink to build custom images. You can build for Linux, Windows, and Mac all on one machine without having all the host operating systems. The package is small, and you don&amp;rsquo;t need to install the JDK on each client._3&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;My JavaFX application bundle, built for MacOS X with jlink is just 41MB. I built the and bundled the app on Linux and ran it on OS X. No need to install Java on every client with a jlink image. I used JDK 24 to build the application.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A tip by &lt;strong&gt;Wolfgang Weigend&lt;/strong&gt; related to &lt;a href="https://openjdk.org/jeps/493" target="_blank" rel="noopener noreferrer"&gt;JEP 493&lt;/a&gt;
: &amp;ldquo;_Add JavaFX 24 to your jdk-24.jdk image with cmd &lt;code&gt;jlink --add-modules javafx.base,javafx.controls,... --output image&lt;/code&gt; and verify file release and the directory &lt;code&gt;MARKDOWN_HASH456c8dcb2e4cb13faea8318519ab5263MARKDOWN&lt;/code&gt;&lt;em&gt;HASH&lt;/em&gt;.&amp;rdquo; (See &lt;a href="https://bsky.app/profile/wolfgangweigend.bsky.social/post/3llya7y6bfs23" target="_blank" rel="noopener noreferrer"&gt;the original message for the full command&lt;/a&gt;
).&lt;/li&gt;
&lt;li&gt;Message from &lt;strong&gt;Gluon&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;Another CPU release for JavaFX! Today, we released JavaFX 24.0.1, JavaFX 17.0.15 and JavaFX 21.0.7. &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;Get it from gluonhq.com&lt;/a&gt;
. Thanks to the fantastic JavaFX community for the combined work.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-scenebuilder"&gt;SceneBuilder&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gluonhq.com/scene-builder-24-0-0-ga-is-here/" target="_blank" rel="noopener noreferrer"&gt;SceneBuilder 24.0.0&lt;/a&gt;
 is available. Highlights:
&lt;ul&gt;
&lt;li&gt;Scene Builder Kit is now published to Maven Central, making it easier for developers to integrate it into their software.&lt;/li&gt;
&lt;li&gt;The Gluon controls, that are part of Scene Builder, were tightly coupled with Scene Builder Kit. Now those has been abstracted away into a pluggable component called Gluon Plugin.&lt;/li&gt;
&lt;li&gt;Scene Builder has been updated for full compatibility with the Java Platform Module System (JPMS).&lt;/li&gt;
&lt;li&gt;Logging to console is now enabled by default to make it easier to debug issues in Scene Builder.&lt;/li&gt;
&lt;li&gt;Multiple fixes went into Accordion, DialogPane, TextField etc. to make Scene Builder more robust.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/trixon.se/post/3lmcattkucc2w" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Patrik Karlström&lt;/strong&gt; released a new version of nbRsync&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A GUI for rsync, written in Java and JavaFX atop the netbeans platform. Available as &lt;a href="https://github.com/trixon/nbRsync/releases/tag/v25.04" target="_blank" rel="noopener noreferrer"&gt;appimage, snap, platform zips with and without a bundled JDK 24&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/serendigityinfo.bsky.social/post/3lma43kntls27" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Serendipity&lt;/strong&gt; released version 2 of SmartFinder&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Now with advanced filter building to create powerful, custom queries on file attributes and metadata. Stay tuned &amp;amp; level up your file search!&lt;/em&gt; &amp;quot; A &lt;a href="https://www.youtube.com/watch?v=Vsm3W5zeP2A" target="_blank" rel="noopener noreferrer"&gt;video demo is available on YouTube&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/jabref_jabref-dante-2025-activity-7315844222283116544-WNhx/" target="_blank" rel="noopener noreferrer"&gt;JabRef received many GSOC proposals&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The team is now busy reviewing them. Meanwhile, our maintainer Dr. Oliver Kopp did a talk at the DANTE2025 (a TeXLaTeX conference) presenting the development process of JabRef and how users can test, provide feedback and participate in the community.&lt;br&gt;
The &lt;a href="https://www.dante.de/wp-content/uploads/2025/04/Oliver_Kopp-JabRef.pdf" target="_blank" rel="noopener noreferrer"&gt;slides (German only) from the talk are available online&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;An impressive combination of JavaFX and AI by &lt;strong&gt;William Antônio Siqueira&lt;/strong&gt; : &lt;a href="https://github.com/jesuino/LLMFX" target="_blank" rel="noopener noreferrer"&gt;LLM FX, an LLM Desktop Client free for everyone&lt;/a&gt;
!
&lt;ul&gt;
&lt;li&gt;And he got some help: &amp;ldquo;&lt;em&gt;A single contribution by &lt;strong&gt;Max Rydahl Andersen&lt;/strong&gt; made LLM FX look much better and professional. Thank you so much, Max! &lt;a href="https://www.linkedin.com/posts/william-ant%C3%B4nio-siqueira-968bba14_ai-tools-llm-ugcPost-7321383037257039875-blf4/" target="_blank" rel="noopener noreferrer"&gt;In the video you can see it generating another report&lt;/a&gt;
. Notice that the report is not well formatted because of my layout (it is a grid based layout, there&amp;rsquo;s a lot of room for improvements&amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/seanmiphillips.bsky.social/post/3lneezgggrs27" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; shared&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I made a major revamp update to &lt;a href="https://github.com/trinity-xai/Trinity/blob/main/README.md" target="_blank" rel="noopener noreferrer"&gt;Trinity XAI&amp;rsquo;s Readme&lt;/a&gt;
. Added tons of content featuring the past year&amp;rsquo;s development of new tools with descriptions and images.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;And a &lt;a href="https://www.youtube.com/watch?v=3erhqAsC1Og" target="_blank" rel="noopener noreferrer"&gt;new video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Demonstrating Trinity XAI&amp;rsquo;s &amp;lsquo;Hyperdrive&amp;rsquo; importer to vectorize AI generated human faces using a locally hosted version of the CLIP multimodal embeddings model. Hyperdrive supports both images and text using a built in OpenAI API compatible REST client.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Announced they are running on the latest JavaFX:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/logorrr.bsky.social/post/3lmzqfzkjis2t" target="_blank" rel="noopener noreferrer"&gt;LogoRRR&lt;/a&gt;
. &amp;ldquo;&lt;em&gt;Did you know, LogoRRR runs with the latest JavaFX version on windows, mac and linux! 🤗&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/jpro.one/post/3lmzd4c6hmc2q" target="_blank" rel="noopener noreferrer"&gt;JPro&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;With JPro release 2025.2.0, we&amp;rsquo;ve added support for JavaFX 24 as well as improvements to Canvas shape clipping, instance startup timeout logging, and more.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/serendigityinfo.bsky.social/post/3ln6fezarnc2w" target="_blank" rel="noopener noreferrer"&gt;SmartFinder&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;SmartFinder runs on Java 24! Better performance and improved stability. Always one step ahead! SmartFiner is an alternative to MacOS Finder and Windows Search.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://open-vsx.org/?search=sosuisha&amp;amp;sortBy=relevance&amp;amp;sortOrder=desc" target="_blank" rel="noopener noreferrer"&gt;Here you can find a list of all the Visual Studio Code extensions&lt;/a&gt;
 created by &lt;a href="https://github.com/sosuisen/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hidekazu Kubota&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I have registered all the VSCode extensions I created for JavaFX in the Open VSX repository. Now, it&amp;rsquo;s possible to develop with JavaFX in VSCode-compatible editors like TheiaIDE.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;JDeploy, a tool that helps you to create installers/updaters, announced: &amp;ldquo;&lt;a href="https://jdeploy.substack.com/p/a-new-chapter-for-jdeploy-the-desktop" target="_blank" rel="noopener noreferrer"&gt;A New Chapter for jDeploy: The Desktop App is Here&lt;/a&gt;
&amp;rdquo; with:
&lt;ul&gt;
&lt;li&gt;From CLI to a First-Class Desktop Experience&lt;/li&gt;
&lt;li&gt;No Dependencies, No Confusion&lt;/li&gt;
&lt;li&gt;Deploy Direct to GitHub&lt;/li&gt;
&lt;li&gt;First-Class Project Templates for Swing and JavaFX&lt;/li&gt;
&lt;li&gt;And more&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A new library by &lt;strong&gt;Alan Decunto&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;&lt;a href="https://github.com/Snoopy137/language-manager" target="_blank" rel="noopener noreferrer"&gt;Language Manager&lt;/a&gt;
 is a JavaFX library that enables dynamic language switching at runtime, allowing you to update the application language without needing to refresh the scene.&lt;/em&gt; &amp;ldquo;:
&lt;ul&gt;
&lt;li&gt;🌍 Support for multiple languages using standard .properties files.&lt;/li&gt;
&lt;li&gt;🔄 Change language on the fly without reloading scenes.&lt;/li&gt;
&lt;li&gt;🔗 Automatic binding for Label, Button, TextField, and other controls using @FXML ids.&lt;/li&gt;
&lt;li&gt;⚙️ Custom annotations to ignore specific fields from auto-binding.&lt;/li&gt;
&lt;li&gt;📦 Lightweight and easy to integrate.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/techsenger/tabshell" target="_blank" rel="noopener noreferrer"&gt;TabShell is a lightweight platform for building tab-based applications&lt;/a&gt;
 in JavaFX using the MVVM pattern.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1k2rzze/custom_file_chooser/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Striking_Creme864&lt;/strong&gt; shared a video on Reddit&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;For our project we needed users to be able to use a file chooser for file storages that may exist in the application, but not in the OS, such as Google Drive, FTP, etc. As a solution, such a custom file chooser was created, which recognizes 4 types of storage (floppy, CD, network and base). The file path is represented as a URI. Both modes (list/details) use VirtualFlow. File sorting is done by the table from details, even for the list mode (the table is not on the Scene). Storage implementations will be wrappers for OpenDAL, Commons FVS, etc.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Live stream step-by-step in Korean - with CC 😉 - by &lt;strong&gt;알클 ALOHA CLASS&lt;/strong&gt; in which he creates an application with SceneBuilder and FXML: &lt;a href="https://www.youtube.com/watch?v=S01AemsDXew" target="_blank" rel="noopener noreferrer"&gt;JavaFX - Controller&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; &lt;a href="https://webtechie.be/post/2025-04-10-jfxinaction-gerrit-grunwald-amazing-javafx-libraries/" target="_blank" rel="noopener noreferrer"&gt;interviewed &lt;strong&gt;Gerrit Grunwald (aka hansolo)&lt;/strong&gt; for the JavaFX In Action series&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Gerrit created many JavaFX libraries and blog posts. I wanted to talk with him about his work with JavaFX, but I also learned more about SVGs and how the garbage collectors in the JVM are working, thanks to the amazing visualizations he creates with &amp;hellip; JavaFX of course.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Some feedback on this interview:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/mattcoley.bsky.social/post/3lmh3rnswp22n" target="_blank" rel="noopener noreferrer"&gt;By &lt;strong&gt;Matt Coley&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX has a perception problem. People will say &amp;lsquo;Why not Compose?&amp;rsquo; before &amp;lsquo;Why not FX?&amp;rsquo; even though Compose doesn&amp;rsquo;t have a functional context-menu component for desktop yet. Compose just has a much better PR department even though for desktop its a much lesser offering. FX needs a PR boost. To elaborate on the Compose remark, you can have a WindowScope MenuBar, but it&amp;rsquo;s only a wrapper that creates an un-styled Swing MenuBar. Additionally, generic compose context menus only allow text+onAction properties. For anything more the official docs tell you to use Swing&amp;rsquo;s JPopupMenu. The point being, an unfinished product for desktop application is given much more public praise over JavaFX due to the perceived &amp;lsquo;FX is dead&amp;rsquo; problem. That&amp;rsquo;s the sorry state of things at the moment. I love FX and this makes my soul hurt.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/cat-edelveis.bsky.social/post/3lmjapuqrdk2d" target="_blank" rel="noopener noreferrer"&gt;By &lt;strong&gt;Catherine Edelveis&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Gerrit proves that Java is by no means a stranger in the world of UIs. I mean, all the cool libraries he&amp;rsquo;s built make me even more enthusiastic about my aspirations with #JavaFX. And I can see that I&amp;rsquo;ve only touched a tip of the iceberg by now 😁.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;YouTube comment by &lt;strong&gt;Michel Antony Barros Barrios&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;Amazing, I remember have used several components of Gerrit&amp;rsquo;s libraries to show data analytics about billing behavior in a project I work some years ago. His libraries are wonderful.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=IxCfpxxS88w" target="_blank" rel="noopener noreferrer"&gt;Live stream with &lt;strong&gt;Dashaun Carter&lt;/strong&gt; and &lt;strong&gt;Catherine Edelveis&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Who said that desktop apps are dead? We prove them wrong! 🥊 We explore the world of rich and smart GUI apps that combine the powers of JavaFX and SpringBoot.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;By &lt;strong&gt;Codez Up&lt;/strong&gt; : &lt;a href="https://codezup.com/javafx-creating-modern-desktop-applications/" target="_blank" rel="noopener noreferrer"&gt;JavaFX: Build Modern Desktop Applications Easily&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;By &lt;strong&gt;Sounetra Ghosal&lt;/strong&gt; : &lt;a href="https://codingzap.com/javafx-for-gui-development/" target="_blank" rel="noopener noreferrer"&gt;How To Use JavaFX For GUI Development?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; always forgets &amp;ldquo;&lt;em&gt;how to create a JavaFX ComboBox and configure it to show a specific field of an object in the opened and closed state of the ComboBox&lt;/em&gt; &amp;quot; and &lt;a href="https://webtechie.be/post/2025-04-09-javafx-combobox-with-objects/" target="_blank" rel="noopener noreferrer"&gt;wrote a tutorial&lt;/a&gt;
 &amp;ldquo;&lt;em&gt;hoping I remember that I blogged about it, the next time I need this functionality&lt;/em&gt;&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/a-guide-to-creating-javafx-native-images/"&gt;Blog by &lt;strong&gt;Catherine Edelveis&lt;/strong&gt; on Foojay&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A Guide to Creating JavaFX Native Images&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Very short but &lt;a href="https://x.com/PIE_SPACE_12/status/1907782342326079866" target="_blank" rel="noopener noreferrer"&gt;impressive video by &lt;strong&gt;PIE SPACE&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Check out my custom GUI made using Processing and JavaFX&amp;mdash;specially designed to visualize real-time data from the Agni Flight Computer V2. You can find the full flight computer design along with the source code &lt;a href="https://github.com/PIEspace" target="_blank" rel="noopener noreferrer"&gt;on my GitHub page&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/cat-edelveis.bsky.social/post/3lmc6dschus2f" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Catherine Edelveis&lt;/strong&gt; asks your advise&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Friends, does anyone know what is the best way of adding image urls to JavaFX CSS file?&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content:
&lt;ul&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/6pgHlHLrX8c" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Gerrit Grunwald: Creator of Many Amazing JavaFX Libraries&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The overview of the JavaFX Links Of The Week published in March on JFX Central, got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-march-2025/"&gt;published on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Supercharge Your Jakarta EE Skills with These Must-Read Guides</title><link>https://foojayio.github.io/website/today/supercharge-your-jakarta-ee-skills-with-these-must-read-guides/</link><pubDate>Wed, 30 Apr 2025 09:49:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/supercharge-your-jakarta-ee-skills-with-these-must-read-guides/</guid><description>&lt;p&gt;If you&amp;rsquo;re working with Jakarta EE &amp;mdash; or just starting to explore the power of enterprise Java &amp;mdash; there&amp;rsquo;s never been a better time to level up your skills. Whether you&amp;rsquo;re building your first servlet, designing secure REST APIs, or diving deep into dependency injection, the Jakarta EE community has been busy crafting an outstanding collection of &lt;a href="https://jakarta.ee/learn/starter-guides/" target="_blank" rel="noopener noreferrer"&gt;starter&lt;/a&gt;
 and &lt;a href="https://jakarta.ee/learn/specification-guides/" target="_blank" rel="noopener noreferrer"&gt;specification&lt;/a&gt;
 guides to help you get up to speed.&lt;/p&gt;
&lt;p&gt;At &lt;strong&gt;Omnifish&lt;/strong&gt;, we&amp;rsquo;re proud supporters of the open-source enterprise Java ecosystem, and we&amp;rsquo;re constantly pointing developers toward the best resources. So we&amp;rsquo;ve gathered up some of the most practical and insightful Jakarta EE guides to help you go from &amp;ldquo;Hello, World&amp;rdquo; to production-ready applications with confidence.&lt;/p&gt;</description></item><item><title>IBM's Chief Java Architect Flies in from Canada to Share JVM Optimization Secrets—Will You Be There?</title><link>https://foojayio.github.io/website/today/ibms-chief-java-architect-flies-in-from-canada-to-share-jvm-optimization-secrets-will-you-be-there/</link><pubDate>Tue, 29 Apr 2025 10:14:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/ibms-chief-java-architect-flies-in-from-canada-to-share-jvm-optimization-secrets-will-you-be-there/</guid><description>&lt;p&gt;It&amp;rsquo;s not every day that &lt;strong&gt;Mark Stoodley&lt;/strong&gt; , IBM&amp;rsquo;s &lt;strong&gt;Chief Architect for Java&lt;/strong&gt; , flies from Canada to Europe to lead a hands-on workshop. At &lt;a href="https://europe.jcon.one/" title="JCON EUROPE 2025" target="_blank" rel="noopener noreferrer"&gt;JCON EUROPE 2025&lt;/a&gt;
, you have a rare opportunity to sit down, code, and ask your questions to one of the most influential technical leaders in the Java world.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/ibms-chief-java-architect-flies-in-from-canada-to-share-jvm-optimization-secrets-will-you-be-there/53725167482_02e2c3bafc_k-700x414.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;With over two decades of deep JVM experience, Mark has shaped the runtime used by thousands of enterprise applications worldwide. He led the transformation of IBM&amp;rsquo;s J9 JVM into the open-source OpenJ9 and OMR projects. This isn&amp;rsquo;t just a workshop&amp;mdash;it&amp;rsquo;s your chance to &lt;strong&gt;tap directly into the mind of the architect behind the tech that powers your Java workloads.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Foojay Webinar: Java's Place in the AI Revolution</title><link>https://foojayio.github.io/website/today/foojay-webinar-live-stream-javas-place-in-the-ai-revolution/</link><pubDate>Mon, 28 Apr 2025 15:53:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-webinar-live-stream-javas-place-in-the-ai-revolution/</guid><description>&lt;p&gt;This first online Foojay Webinar highlights Java&amp;rsquo;s place in the AI revolution, focusing on exploring AI/ML using pure Java tools.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ySMhUGTy5XY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;AI and Machine Learning (ML) are becoming essential in modern software development. For Java developers, there&amp;rsquo;s no need to switch technology stacks. It&amp;rsquo;s now possible to build, train, and deploy ML models using tools available directly within the Java ecosystem.&lt;/p&gt;</description></item><item><title>Improving Maven's dependency:analyze... or not</title><link>https://foojayio.github.io/website/today/improving-mavens-dependencyanalyze-or-not/</link><pubDate>Mon, 28 Apr 2025 08:28:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/improving-mavens-dependencyanalyze-or-not/</guid><description>&lt;p&gt;Recently, my good friend Richard Fichtner advised using the &lt;code&gt;mvn dependency:analyze&lt;/code&gt; command to get rid of declared but unused dependencies:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is another use case for&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mvn dependency:analyze&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It can show you the dependencies you use in your code but have not declared in your pom.xml. This works because you have a transitive dependency on your classpath. Either don&amp;rsquo;t use the dependency or declare it.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://bsky.app/profile/did:plc:cc2k5egfzqpf3nbjrs5xox4r/post/3lcxfnsc2h62m?ref_src=embed" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:cc2k5egfzqpf3nbjrs5xox4r/bafkreibztkdlkhrkyydfdntdkktrdw7qqr4t54mbwoazf6rkulcawhqkj4@jpeg" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&amp;mdash; &lt;a href="https://bsky.app/profile/did:plc:cc2k5egfzqpf3nbjrs5xox4r?ref_src=embed" target="_blank" rel="noopener noreferrer"&gt;Richard Fichtner 💻☕ @richard.fichtner.dev&lt;/a&gt;
&lt;br&gt;
&lt;a href="https://bsky.app/profile/did:plc:cc2k5egfzqpf3nbjrs5xox4r/post/3lcxfnsc2h62m?ref_src=embed" target="_blank" rel="noopener noreferrer"&gt;December 10, 2024 at 2:00 PM&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Free Foojay.io Tickets for JCON EUROPE 2025, Cologne!</title><link>https://foojayio.github.io/website/today/free-foojay-io-tickets-for-jcon-europe-2025-cologne/</link><pubDate>Sat, 26 Apr 2025 08:16:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/free-foojay-io-tickets-for-jcon-europe-2025-cologne/</guid><description>&lt;h2 id="h2-0-celebrating-30-years-of-java-10-years-of-jcon-with-the-global-java-community"&gt;🌍 Celebrating 30 Years of Java &amp;amp; 10 Years of JCON &amp;ndash; with the Global Java Community&lt;/h2&gt;
&lt;p&gt;Welcome to JCON EUROPE 2025, the international Java conference where the heart of the Java community beats loud and proud! Over 60 countries will be represented as Java developers from around the globe come together in Cologne to learn, connect, and celebrate three decades of Java innovation and a decade of JCON magic.&lt;/p&gt;</description></item><item><title>Foojay Podcast #70: Celebrating 5 Years of Foojay</title><link>https://foojayio.github.io/website/today/foojay-podcast-70/</link><pubDate>Fri, 25 Apr 2025 08:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-70/</guid><description>&lt;p&gt;On April 25, 2020, &lt;a href="https://foojayio.github.io/website/today/foojay-a-place-for-friends-of-openjdk/"&gt;Geertjan Wielenga published the first Foojay post&lt;/a&gt;
. Yes, we are celebrating 5 years since the Friends Of OpenJDK website launch! Today, more than 1,600 posts are on the site, written by over 250 authors. And there is much more to discover within the Foojay world&amp;hellip;&lt;/p&gt;
&lt;p&gt;In this podcast, we look at how Foojay started with founder Geertjan Wielenga. We&amp;rsquo;ll also hear from Gerrit Grunwald about how Foojay&amp;rsquo;s Disco API has become part of your daily work without you realizing it. We also have several of our regular authors and podcast guests who share how Foojay has influenced them (and vice versa).&lt;/p&gt;</description></item><item><title>Jakarta EE 11 Web Profile Released, Enabled by Eclipse GlassFish</title><link>https://foojayio.github.io/website/today/jakarta-ee-11-web-profile-released-enabled-by-eclipse-glassfish/</link><pubDate>Tue, 22 Apr 2025 11:06:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/jakarta-ee-11-web-profile-released-enabled-by-eclipse-glassfish/</guid><description>&lt;p&gt;The &lt;strong&gt;Jakarta EE 11 Web Profile&lt;/strong&gt; has &lt;a href="https://www.agilejava.eu/2025/04/06/hashtag-jakarta-ee-275/" target="_blank" rel="noopener noreferrer"&gt;officially been released&lt;/a&gt;
 on March 30, 2025 &amp;mdash; bringing a cleaner, more modern baseline to the Jakarta EE platform, with strong alignment to recent Java versions, improved modularity, and the removal of legacy specifications.&lt;/p&gt;
&lt;p&gt;Although it comes later than planned, due to unexpected challenges in refactoring the Jakarta EE TCK (compatibility kit), this release marks a key shift toward a more cloud-native, developer-focused platform &amp;mdash; and we&amp;rsquo;re proud to say that &lt;strong&gt;Eclipse GlassFish&lt;/strong&gt; was the &lt;strong&gt;first implementation to pass the Jakarta EE 11 Web Profile TCK&lt;/strong&gt; and enable the specification&amp;rsquo;s final approval.&lt;/p&gt;</description></item><item><title>Async file IO with Java and io_uring</title><link>https://foojayio.github.io/website/today/async-file-io-with-java-and-io_uring/</link><pubDate>Fri, 18 Apr 2025 09:28:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/async-file-io-with-java-and-io_uring/</guid><description>&lt;p&gt;When I first started exploring Virtual Threads in Java, I wanted to understand everything about them like, performance characteristics, when they yield, and limitations. This journey led me to an interesting challenge about file I/O operations. These operations cause Virtual Threads to become &amp;ldquo;pinned&amp;rdquo; to platform threads, limiting their effectiveness for I/O-heavy applications.&lt;/p&gt;
&lt;p&gt;This pinning issue has been widely acknowledged across the Java community. It&amp;rsquo;s mentioned in the Virtual Threads &lt;a href="https://openjdk.org/jeps/425" target="_blank" rel="noopener noreferrer"&gt;JEP&lt;/a&gt;
, discussed on &lt;a href="https://www.reddit.com/r/java/comments/1h0cr5g/comment/lz3lv11/" target="_blank" rel="noopener noreferrer"&gt;Reddit threads&lt;/a&gt;
, debated on &lt;a href="https://mail.openjdk.org/pipermail/loom-dev/2024-June/006638.html" target="_blank" rel="noopener noreferrer"&gt;mailing lists&lt;/a&gt;
, and highlighted in the &amp;ldquo;&lt;a href="https://cr.openjdk.org/~rpressler/loom/loom/sol1_part1.html" target="_blank" rel="noopener noreferrer"&gt;State of Loom&lt;/a&gt;
&amp;rdquo;. The consistent message: File I/O and Virtual Threads don&amp;rsquo;t play nicely together.&lt;/p&gt;</description></item><item><title>Optimizing the Garbage Collector when Migrating Cloud Workloads</title><link>https://foojayio.github.io/website/today/optimizing-the-garbage-collector-when-migrating-cloud-workloads/</link><pubDate>Wed, 16 Apr 2025 10:27:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/optimizing-the-garbage-collector-when-migrating-cloud-workloads/</guid><description>&lt;p&gt;&lt;strong&gt;You might associate Arm primarily with smartphones and the Java-based Android runtime. However, OpenJDK has supported AArch64 on Linux since 2014&amp;mdash; before Arm-based cloud instances were widely available.&lt;/strong&gt; &lt;strong&gt;Fast forward a decade and major cloud providers have their own Arm-based instances like AWS Graviton, Microsoft Azure Cobalt, and others, prompting many organizations to migrate Java workloads from x86 to multi-architecture environments.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A multi-architecture deployment shift allows an organization to be adaptable and choose the architecture with the ideal price to performance ratio. Large independent software vendors, such as Uber, are &lt;a href="https://www.uber.com/en-GB/blog/adopting-arm-at-scale-bootstrapping-infrastructure/" target="_blank" rel="noopener noreferrer"&gt;already making this transition&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Breaktime Tech Talks (Ep39): Why embedding models should match + Advice for starting a blog</title><link>https://foojayio.github.io/website/today/breaktime-tech-talks-ep39-why-embedding-models-should-match-advice-for-starting-a-blog/</link><pubDate>Wed, 16 Apr 2025 05:35:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/breaktime-tech-talks-ep39-why-embedding-models-should-match-advice-for-starting-a-blog/</guid><description>&lt;p&gt;This is episode 39 of the &lt;a href="https://www.youtube.com/playlist?list=PLzZ7iUdr2mwS6qexoz9dsI0NfnU614p1w" target="_blank" rel="noopener noreferrer"&gt;Breaktime Tech Talks podcast&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m at a conference this week presenting on a variety of different topics, but I stopped for just a few minutes to document some recent learnings while I was preparing the code projects for this week&amp;rsquo;s sessions.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll chat about a hands-on experience that helped me understand why embedding models for vectors and search should actually match. Then I came across an article with advice for creating a blog that outlines a lot of the practices I myself follow when I write tech blogs. I hope you enjoy it as well.&lt;/p&gt;</description></item><item><title>Building JavaFX Native Images</title><link>https://foojayio.github.io/website/today/a-guide-to-creating-javafx-native-images/</link><pubDate>Tue, 15 Apr 2025 09:57:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-guide-to-creating-javafx-native-images/</guid><description>&lt;p&gt;&lt;strong&gt;Combining JavaFX-based applications with GraalVM Native Image will enable you to create platform-specific executables that don&amp;rsquo;t require the JVM to run.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this article, we will look into two ways of turning JavaFX applications into native images: manually and with the Maven plugin. We will also learn to integrate this process into the CI/CD pipeline with GitHub Actions.&lt;/p&gt;
&lt;p&gt;This article was originally published &lt;a href="https://bell-sw.com/blog/how-to-create-javafx-native-images/" title="here" target="_blank" rel="noopener noreferrer"&gt;here&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The code for the project I use in this article is available &lt;a href="https://github.com/des-felins/raffle" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
. It was built using &lt;a href="https://bell-sw.com/pages/downloads/#jdk-21-lts" target="_blank" rel="noopener noreferrer"&gt;Liberica JDK Full&lt;/a&gt;
 that includes an OpenJFX bundle. It facilitates developing and building JavaFX applications as there&amp;rsquo;s no need to add separate dependencies for JavaFX.&lt;/p&gt;</description></item><item><title>Foojay Podcast #69: All Things Java at VoxxedDays Amsterdam</title><link>https://foojayio.github.io/website/today/foojay-podcast-69/</link><pubDate>Mon, 14 Apr 2025 11:23:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-69/</guid><description>&lt;p&gt;On April 3rd, the first &lt;a href="https://amsterdam.voxxeddays.com/" target="_blank" rel="noopener noreferrer"&gt;VoxxedDays event in Amsterdam&lt;/a&gt;
 took place. VoxxedDays are tech events organized by local community groups, with support from the Devoxx team. Geertjan Wielenga brought along a camera and microphone and spoke with many of the attendees.&lt;/p&gt;
&lt;p&gt;This is the first Foojay podcast ever to feature more than 20 guests! Geertjan asked the same two questions to many of conference visitors: &amp;ldquo;Tell us who you are and what excites you about the technology landscape?&amp;rdquo; and &amp;ldquo;What are two tips or insights you&amp;rsquo;d like to share?&amp;rdquo;&lt;/p&gt;</description></item><item><title>Time to panic? AI and Cybercrime legislation is on your doorstep now</title><link>https://foojayio.github.io/website/today/time-to-panic-ai-and-cybercrime-legislation-is-on-your-doorstep-now/</link><pubDate>Thu, 10 Apr 2025 07:25:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/time-to-panic-ai-and-cybercrime-legislation-is-on-your-doorstep-now/</guid><description>&lt;p&gt;&lt;strong&gt;As we settle into 2025, legislation around AI and cybercrime is no longer a distant threat or vague aspiration. It&amp;rsquo;s here, real, and it&amp;rsquo;s already changing how companies must build, deploy, and secure intelligent systems.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re a developer, security engineer, or anyone responsible for the software supply chain, it&amp;rsquo;s time to recalibrate. Here&amp;rsquo;s what&amp;rsquo;s coming, who&amp;rsquo;s shaping it, and what tools are emerging to help navigate the new landscape.&lt;/p&gt;</description></item><item><title>Register for Foojay Webinar: "Java's Place in the AI Revolution"</title><link>https://foojayio.github.io/website/today/webinar-java-ai/</link><pubDate>Wed, 09 Apr 2025 13:15:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/webinar-java-ai/</guid><description>&lt;p&gt;&lt;strong&gt;This first online Foojay Webinar will highlight Java&amp;rsquo;s place in the AI Revolution, focusing on Exploring AI/ML Using Pure Java Tools.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AI and Machine Learning (ML) are becoming essential in modern software development. For Java developers, there&amp;rsquo;s no need to switch technology stacks. It&amp;rsquo;s now possible to build, train, and deploy ML models using tools available directly within the Java ecosystem.&lt;/p&gt;
&lt;p&gt;This webinar focuses on practical predictive AI/ML approaches in pure Java. We&amp;rsquo;ll walk through key Java libraries, show how to structure and train models, and discuss how Java&amp;rsquo;s core strengths, ie, JVM performance, type safety, and enterprise integration, can be used to build scalable AI solutions.&lt;/p&gt;</description></item><item><title>Mutation Testing in Rust</title><link>https://foojayio.github.io/website/today/mutation-testing-in-rust/</link><pubDate>Wed, 09 Apr 2025 12:39:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/mutation-testing-in-rust/</guid><description>&lt;p&gt;I&amp;rsquo;ve been a big fan of &lt;a href="https://en.wikipedia.org/wiki/Mutation_testing" target="_blank" rel="noopener noreferrer"&gt;Mutation Testing&lt;/a&gt;
 since I discovered &lt;a href="https://pitest.org/" target="_blank" rel="noopener noreferrer"&gt;PIT&lt;/a&gt;
. As I dive deeper into Rust, I wanted to check the state of mutation testing in Rust.&lt;/p&gt;
&lt;h2 id="h2-0-starting-with-cargo-mutants"&gt;Starting with &lt;code&gt;cargo-mutants&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;I found two crates for mutation testing in Rust:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mutants.rs/" target="_blank" rel="noopener noreferrer"&gt;cargo-mutants&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;and &lt;a href="https://github.com/llogiq/mutagen" target="_blank" rel="noopener noreferrer"&gt;mutagen&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;mutagen&lt;/code&gt; hasn&amp;rsquo;t been maintained for three years, while &lt;a href="https://github.com/sourcefrog/cargo-mutants" target="_blank" rel="noopener noreferrer"&gt;cargo-mutants&lt;/a&gt;
 is still under active development.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve ported the sample code from my previous Java code to Rust:&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>From Reactive Streams to Virtual Threads</title><link>https://foojayio.github.io/website/today/javapro-shout-out-from-reactive-streams-to-virtual-threads/</link><pubDate>Mon, 07 Apr 2025 19:34:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/javapro-shout-out-from-reactive-streams-to-virtual-threads/</guid><description>&lt;p&gt;Virtual Threads deliver a fast, cheap (in terms of memory &amp;amp; switching speed) threading solution for the JVM.&lt;/p&gt;
&lt;p&gt;They promise the return of a direct-style, synchronous programming model.&lt;/p&gt;
&lt;p&gt;But is that enough to challenge the status quo regarding data streaming?&lt;/p&gt;
&lt;p&gt;Can we have the best of both worlds: the simplicity that Virtual Threads promise and the resilience and safety of Reactive Streams?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s find out, on JavaPro, here:&lt;/p&gt;
&lt;figure class="wp-block-embed is-type-wp-embed is-provider-javapro-international wp-block-embed-javapro-international"&gt;
 &lt;div class="wp-block-embed__wrapper"&gt;
 &lt;blockquote class="wp-embedded-content" data-secret="wPzWYKExuK"&gt;
 &lt;a target="_blank" href="https://javapro.io/2025/04/04/from-reactive-streams-to-virtual-threads/"&gt;From Reactive Streams to Virtual Threads&lt;/a&gt;
 &lt;/blockquote&gt;&lt;iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; visibility: hidden;" title="“From Reactive Streams to Virtual Threads” — JAVAPRO International" src="https://javapro.io/2025/04/04/from-reactive-streams-to-virtual-threads/embed/#?secret=SejceMHGCw#?secret=wPzWYKExuK" data-secret="wPzWYKExuK" width="500" height="282" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;
 &lt;/div&gt;
&lt;/figure&gt;</description></item><item><title>Six JDK 24 Features You Should Know About</title><link>https://foojayio.github.io/website/today/six-jdk-24-features-you-should-know-about/</link><pubDate>Thu, 03 Apr 2025 08:42:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/six-jdk-24-features-you-should-know-about/</guid><description>&lt;p&gt;&lt;em&gt;Since 2018, we&amp;rsquo;ve had a new release of the Java platform every six months. With Swiss watch-like regularity, the latest version of Java is upon us. This time it&amp;rsquo;s JDK 24. In an almost poetic way, it contains 24 JDK Enhancement Proposals (JEPs).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;JDK 24, which was released on March 18, 2025, has 24 JDK Enhancement Proposals (JEPs), the largest number of new features since the introduction of the time-based release schedule. While 10 of them are preview features, incubator modules, or experimental, that still leaves 14 new features.&lt;/p&gt;</description></item><item><title>Spring AI Debugging + How to Contribute to Open Source</title><link>https://foojayio.github.io/website/today/breaktime-tech-talks-ep38-spring-ai-debugging-how-to-contribute-to-open-source/</link><pubDate>Wed, 02 Apr 2025 05:56:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/breaktime-tech-talks-ep38-spring-ai-debugging-how-to-contribute-to-open-source/</guid><description>&lt;p&gt;In this episode, I continue my journey with vector databases, integrating &lt;a href="https://docs.spring.io/spring-ai/reference/api/vectordbs/pinecone.html" target="_blank" rel="noopener noreferrer"&gt;Pinecone&lt;/a&gt;
, &lt;a href="https://docs.spring.io/spring-ai/reference/api/vectordbs/neo4j.html" target="_blank" rel="noopener noreferrer"&gt;Neo4J&lt;/a&gt;
 , and &lt;a href="https://docs.spring.io/spring-ai/reference/index.html" target="_blank" rel="noopener noreferrer"&gt;Spring AI&lt;/a&gt;
. While making some progress, I also encountered hurdles, such as evolving APIs and the unique architecture of vector stores.&lt;/p&gt;
&lt;p&gt;Next, I share insights from &lt;a href="https://dzone.com/articles/why-and-how-to-participate-in-open-source-projects" target="_blank" rel="noopener noreferrer"&gt;an article on contributing to open-source source projects&lt;/a&gt;
, how it can accelerate your career and enhance both your technical and soft skills. From picking the right project to building credibility within the community, it&amp;rsquo;s a series of steps that gets better with time and practice!&lt;/p&gt;</description></item><item><title>Clean your Memory: From Finalize to Cleaner</title><link>https://foojayio.github.io/website/today/clean-memory-from-finalize-to-cleaner/</link><pubDate>Mon, 31 Mar 2025 12:30:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/clean-memory-from-finalize-to-cleaner/</guid><description>&lt;p&gt;Garbage collection in Java takes care of memory management, but it does not clean up non-memory resources like sockets or file handles.&lt;/p&gt;
&lt;p&gt;Resource leaks may occur without proper management, leading to performance degradation or crashes.&lt;/p&gt;
&lt;p&gt;Java&amp;rsquo;s &lt;a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/ref/Cleaner.html" target="_blank" rel="noopener noreferrer"&gt;Cleaner API&lt;/a&gt;
, introduced in Java 9, provides a modern and efficient mechanism for resource cleanup when objects are no longer reachable.&lt;/p&gt;
&lt;p&gt;It addresses the shortcomings of the deprecated finalize() method, offering a predictable and efficient way to manage non-memory resources: so let&amp;rsquo;s take a short trip on clean memory from finalize to Cleaner API.&lt;/p&gt;</description></item><item><title>JavaFX Links of March 2025</title><link>https://foojayio.github.io/website/today/javafx-links-of-march-2025/</link><pubDate>Fri, 28 Mar 2025 11:12:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-march-2025/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of March 2025. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;March 18th, OpenJDK and OpenJFX 24 were released! Check the &lt;a href="https://github.com/openjdk/jfx/blob/jfx24/doc-files/release-notes-24.md" target="_blank" rel="noopener noreferrer"&gt;release notes of FX 24 here&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;These release notes cover the standalone JavaFX 24 release. JavaFX 24 requires JDK 22 or later. JDK 24 is recommended.&lt;/em&gt; &amp;quot; Downloads are available on the &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;Gluon website&lt;/a&gt;
, or you can install bundles which include JavFX with &lt;a href="https://sdkman.io/" target="_blank" rel="noopener noreferrer"&gt;SDKMAN!&lt;/a&gt;
:&lt;/p&gt;</description></item><item><title>Video series “JavaFX In Action”, Part 4 with Mike Hearn (Conveyor), Sven Reimers (JTaccuino), and Chris Newland (DemoFX, JitWatch)</title><link>https://foojayio.github.io/website/today/video-series-javafx-in-action-part-4/</link><pubDate>Wed, 26 Mar 2025 06:51:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/video-series-javafx-in-action-part-4/</guid><description>&lt;p&gt;This is the next part in the series of &amp;ldquo;JavaFX in Action&amp;rdquo; interviews. Are you working on a fantastic JavaFX application? Let me know, and let&amp;rsquo;s talk!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/new-video-series-javafx-in-action-part-1/"&gt;July &amp;lsquo;24: Pedro Duque Vieira, Daniel Zimmermann, Christopher Schnick, and Robert Ladstätter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-2/"&gt;November &amp;lsquo;24: Maciej Gorywoda, Ramiro Domínguez Ayub, Christoph Schwentker, Ulas Ergin&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-3/"&gt;December &amp;lsquo;24: Özkan Pakdil, Clément de Tastes, Almas Baim, Steve Hannah, Jago de Vreede&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-mike-hearn-conveyor-build-self-updating-desktop-app-packages"&gt;Mike Hearn: Conveyor, build self-updating desktop app packages&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/mike-hearn-2523962/" target="_blank" rel="noopener noreferrer"&gt;Mike Hearn&lt;/a&gt;
 solves a problem many developers are struggling with: efficiently distributing your application and ensuring the users get the latest version. With Conveyor, he created a tool that can do that easily with JavaFX, Electron, and Flutter apps!&lt;/p&gt;</description></item><item><title>One giant Kubernetes cluster for everything</title><link>https://foojayio.github.io/website/today/one-giant-kubernetes-cluster-for-everything/</link><pubDate>Tue, 25 Mar 2025 10:33:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/one-giant-kubernetes-cluster-for-everything/</guid><description>&lt;p&gt;The ideal size of your Kubernetes clusters is a day 0 question and demands a definite answer.&lt;/p&gt;
&lt;p&gt;You find one giant cluster on one end of the spectrum and many small-sized ones on the other, with every combination in between. This decision will impact your organization for years to come. Worse, if you decide to change your topology, you&amp;rsquo;re in for a time-wasting and expensive ride.&lt;/p&gt;
&lt;p&gt;I want to list each approach&amp;rsquo;s pros and cons in this post. Then, I&amp;rsquo;ll settle the discussion once and for all and argue why selecting the giant cluster option is better.&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>Interview with Abdoulaye Wade Cissé: Using a JavaFX application as a virtual chemistry and biology lab</title><link>https://foojayio.github.io/website/today/interview-with-abdoulaye-wade-cisse-using-a-javafx-application-as-a-virtual-chemistry-and-biology-lab/</link><pubDate>Thu, 20 Mar 2025 13:46:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/interview-with-abdoulaye-wade-cisse-using-a-javafx-application-as-a-virtual-chemistry-and-biology-lab/</guid><description>&lt;p&gt;I continuously collect JavaFX-related content for the &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;JFX Central Links Of The Week&lt;/a&gt;
. Recently, I saw a &lt;a href="https://www.linkedin.com/posts/abdoulaye-wade-ciss%C3%A9-7892a621b_javafx-aezducation-laboratoirevirtuel-activity-7293250354949869568-yMOF" target="_blank" rel="noopener noreferrer"&gt;video on LinkedIn, shared by Abdoulaye Wade Cissé, of a JavaFX &amp;ldquo;virtual lab&amp;rdquo;&lt;/a&gt;
 and wanted to learn more about this project&amp;hellip; Turns out he is a 22-year-old student in Senegal, creating a fantastic project to provide a virtual laboratory as software where the resources are not available for a physical lab. With his project, he proved that Java and JavaFX are the ideal way to generate entirely free software with a lot of functionality.&lt;br&gt;
&lt;img src="https://foojayio.github.io/website/today/interview-with-abdoulaye-wade-cisse-using-a-javafx-application-as-a-virtual-chemistry-and-biology-lab/abdoulaye-896x1024.jpg" alt="" loading="lazy"&gt;
&lt;br&gt;
&lt;em&gt;&lt;strong&gt;What is your experience with Java development?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Introduction to intermediate operations modeler: Stream Gatherers</title><link>https://foojayio.github.io/website/today/introduction-to-intermediate-operations-modeler-stream-gatherers/</link><pubDate>Wed, 19 Mar 2025 13:04:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-to-intermediate-operations-modeler-stream-gatherers/</guid><description>&lt;p&gt;&lt;strong&gt;Java is a programming language with many language features, specifications, and APIs. Even among experienced Java developers, being aware of all of these is quite rare. If a study were conducted, we might come across Java developers who have never worked with Threads, never used JPA, or never developed custom annotations. However, is there a Java developer who has worked with Java 8 or later but has never used the Stream API? I highly doubt it.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Breaktime Tech Talks (Ep37): Vector Database Frustration + Microsoft LazyGraphRAG</title><link>https://foojayio.github.io/website/today/breaktime-tech-talks-ep37-vector-database-frustration-microsoft-lazygraphrag/</link><pubDate>Wed, 19 Mar 2025 12:54:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/breaktime-tech-talks-ep37-vector-database-frustration-microsoft-lazygraphrag/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This is episode 37 of the &lt;a href="https://www.youtube.com/playlist?list=PLzZ7iUdr2mwS6qexoz9dsI0NfnU614p1w" target="_blank" rel="noopener noreferrer"&gt;Breaktime Tech Talks&lt;/a&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/hv-FtjIHg_I?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;You are listening to the Breaktime Tech Talks podcast, a bite-sized tech podcast for busy developers, where we&amp;rsquo;ll briefly cover technical topics, new snippets, and more in short time blocks. I&amp;rsquo;m your host, Jennifer Reif, an avid developer and problem solver with special interest in data, learning, and all things technology.&lt;/p&gt;</description></item><item><title>Java 24 Rolls Out Today! Find Out Why It's Aptly Named</title><link>https://foojayio.github.io/website/today/java-24-rolls-out-today-find-out-why-its-aptly-named/</link><pubDate>Tue, 18 Mar 2025 07:36:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-24-rolls-out-today-find-out-why-its-aptly-named/</guid><description>&lt;p&gt;Java 24 rolls out today! It&amp;rsquo;s been six months since Java 23 was released, so it&amp;rsquo;s time for another helping of new features. And this particular release of Java is aptly named, because it contains exactly 24 JEPs. Coincidence? I think not. 🙂&lt;/p&gt;
&lt;p&gt;{#more-115735}&lt;/p&gt;
&lt;p&gt;Java 24 brings a diverse set of features, delivering performance improvements like compact object headers, garbage collection optimizations and the first JEP to come out of Project Leyden. On top of that, various security features related to the quantum computing field were added, and a solution to virtual thread pinning is now available!&lt;/p&gt;</description></item><item><title>Foojay Podcast #68: Welcome to OpenJDK (Java) 24</title><link>https://foojayio.github.io/website/today/foojay-podcast-68/</link><pubDate>Mon, 17 Mar 2025 06:44:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-68/</guid><description>&lt;p&gt;We serve you a podcast about the new Java version every six months.&lt;/p&gt;
&lt;p&gt;Our regular guest, Simon Ritter, Deputy CTO of Azul, is known on social media as &amp;ldquo;speakjava.&amp;rdquo; He is part of the OpenJDK vulnerability group, JCP executive committee, and expert group for the Java SE specification request so that he can share a lot of inside information with us.&lt;/p&gt;
&lt;p&gt;In this episode, we are joined by Hanno Embregts, a Java Developer by day and musician by night. He publishes a post on Foojay with all the details of every new Java release and prepared a long description of all the new features included in Java 24.&lt;/p&gt;</description></item><item><title>Pull request testing on Kubernetes: testing locally and on GitHub workflows</title><link>https://foojayio.github.io/website/today/pull-request-testing-on-kubernetes-testing-locally-and-on-github-workflows/</link><pubDate>Sun, 16 Mar 2025 17:32:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/pull-request-testing-on-kubernetes-testing-locally-and-on-github-workflows/</guid><description>&lt;p&gt;Imagine an organization with the following practices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Commits code on GitHub&lt;/li&gt;
&lt;li&gt;Runs its CI/CD pipelines with GitHub Actions&lt;/li&gt;
&lt;li&gt;Runs its production workload on Kubernetes&lt;/li&gt;
&lt;li&gt;Uses Google Cloud&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A new engineer manager arrives and asks for the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;On every PR, run integration tests in a Kubernetes cluster similar to the production one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It sounds reasonable.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Engineering manager: I want #integrationtests to run on the app deployed on #Cloud infra for each #GitHub PR ✅&lt;/p&gt;</description></item><item><title>Pull Request testing on Kubernetes: Working with GitHub Actions and GKE</title><link>https://foojayio.github.io/website/today/pull-request-testing-on-kubernetes-working-with-github-actions-and-gke/</link><pubDate>Sun, 16 Mar 2025 15:44:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/pull-request-testing-on-kubernetes-working-with-github-actions-and-gke/</guid><description>&lt;p&gt;I&amp;rsquo;m continuing my series on running the test suite for each Pull Request on Kubernetes. In the &lt;a href="https://blog.frankel.ch/pr-testing-kubernetes/1/" target="_blank" rel="noopener noreferrer"&gt;previous post&lt;/a&gt;
, I laid the groundwork for our learning journey: I developed a basic JVM-based CRUD app, tested it locally using Testcontainers, and tested it in a GitHub workflow with a GitHub service container.&lt;/p&gt;
&lt;p&gt;This week, I will raise the ante to run the end-to-end test in the target Kubernetes environment. For this, I&amp;rsquo;ve identified gaps that I&amp;rsquo;ll implement in this blog post:&lt;/p&gt;</description></item><item><title>Pull request testing on Kubernetes: vCluster for isolation and costs control</title><link>https://foojayio.github.io/website/today/pull-request-testing-on-kubernetes-vcluster-for-isolation-and-costs-control/</link><pubDate>Sun, 16 Mar 2025 11:47:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/pull-request-testing-on-kubernetes-vcluster-for-isolation-and-costs-control/</guid><description>&lt;p&gt;This week&amp;rsquo;s article is the third and final in my series about running tests on Kubernetes for each pull request. In the &lt;a href="https://blog.frankel.ch/pr-testing-kubernetes/1/" target="_blank" rel="noopener noreferrer"&gt;first post&lt;/a&gt;
, I described the app and how to test locally using Testcontainers and in a GitHub workflow. The &lt;a href="https://blog.frankel.ch/pr-testing-kubernetes/2/" target="_blank" rel="noopener noreferrer"&gt;second post&lt;/a&gt;
 focused on setting up the target environment and running end-to-end tests on Kubernetes.&lt;/p&gt;
&lt;p&gt;I concluded the latter by mentioning a significant quandary. Creating a dedicated cluster for each workflow significantly impacts the time it takes to run. On , it took between 5 and 7 minutes to spin off a new cluster. If you create a GKE instance upstream, you face two issues:&lt;/p&gt;</description></item><item><title>Demo Application with CRaC and Loading Data in Memory</title><link>https://foojayio.github.io/website/today/demo-application-with-crac-and-loading-data-in-memory/</link><pubDate>Thu, 13 Mar 2025 08:11:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/demo-application-with-crac-and-loading-data-in-memory/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://docs.azul.com/core/crac/crac-introduction" target="_blank" rel="noopener noreferrer"&gt;Coordinated Restore at Checkpoint (CRaC)&lt;/a&gt;
 is a JDK project initiated by Azul. With CRaC, you can start Java programs with a shorter time to the first transaction and less time and resources to achieve full code speed. This is achieved by taking a snapshot (checkpoint) of a fully warmed-up Java process and launching one or more new JVMs from that snapshot.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I have been experimenting with CRaC on a Raspberry Pi in 2023 and blogged about it, &lt;a href="https://webtechie.be/post/2023-06-15-crac-on-raspberry-pi/" target="_blank" rel="noopener noreferrer"&gt;first when it didn&amp;rsquo;t work yet&lt;/a&gt;
, and a &lt;a href="https://webtechie.be/post/2023-10-16-crac-on-raspberry-pi-update/" target="_blank" rel="noopener noreferrer"&gt;second time when it did work perfectly&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Path Traversal Vulnerability in Deep Java Library (DJL)</title><link>https://foojayio.github.io/website/today/path-traversal-vulnerability-in-deep-java-library-djl-and-its-impact-on-java-ai-development/</link><pubDate>Tue, 11 Mar 2025 12:21:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/path-traversal-vulnerability-in-deep-java-library-djl-and-its-impact-on-java-ai-development/</guid><description>&lt;p&gt;Deep Java Library (&lt;a href="https://djl.ai/" target="_blank" rel="noopener noreferrer"&gt;++DJL++&lt;/a&gt;
) is an open source deep learning framework that brings AI capabilities to Java developers without requiring a shift to Python.&lt;/p&gt;
&lt;p&gt;It provides an intuitive, high-level API for building, training, and deploying machine learning models, supporting deep learning engines like TensorFlow, PyTorch, and MXNet.&lt;/p&gt;
&lt;p&gt;While not as widely adopted as Python-based frameworks, DJL is gaining traction in Java-based AI applications, especially in enterprise software, cloud environments, and financial services.&lt;/p&gt;</description></item><item><title>Creating SBOMs with the Snyk CLI</title><link>https://foojayio.github.io/website/today/creating-sboms-with-the-snyk-cli/</link><pubDate>Fri, 07 Mar 2025 12:25:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-sboms-with-the-snyk-cli/</guid><description>&lt;p&gt;The software bill of materials (SBOM) is quickly becoming an essential aspect of open source security and compliance. In this post, we&amp;rsquo;ll delve into what SBOMs are, why they&amp;rsquo;re necessary, and their role in open source security.&lt;/p&gt;
&lt;h2 id="h2-0-what-are-sboms"&gt;What are SBOMs?&lt;/h2&gt;
&lt;p&gt;A software Bill of Materials (SBOM) is a comprehensive inventory of all components used in a software product. They include all the necessary details about each component, such as their names, versions, and licensing information. SBOMs can be seen as the ingredients list for software, providing complete transparency into what makes up a software product.&lt;/p&gt;</description></item><item><title>Code Reviews with AI a developer guide</title><link>https://foojayio.github.io/website/today/code-reviews-with-ai-a-developer-guide/</link><pubDate>Fri, 07 Mar 2025 12:10:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/code-reviews-with-ai-a-developer-guide/</guid><description>&lt;p&gt;Code reviews are a cornerstone of software development. They&amp;rsquo;re where we share knowledge, catch bugs early, and ensure our code meets the highest standards.&lt;/p&gt;
&lt;p&gt;But let&amp;rsquo;s be honest&amp;hellip;&lt;/p&gt;
&lt;p&gt;Traditional code reviews can be time-consuming and tedious and sometimes even miss subtle yet critical issues. Enter the age of AI-powered code review, a game-changer that addresses these challenges and elevates code quality to new heights.&lt;/p&gt;
&lt;p&gt;This article dives into the common pitfalls of code reviews and explores how AI tools can revolutionize each phase of the development lifecycle.&lt;/p&gt;</description></item><item><title>Extending Java APIs - Add Missing Features Without the Hassle</title><link>https://foojayio.github.io/website/today/extending-java-apis-add-missing-features-without-the-hassle/</link><pubDate>Fri, 07 Mar 2025 12:03:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/extending-java-apis-add-missing-features-without-the-hassle/</guid><description>&lt;p&gt;The Java API is vast. That&amp;rsquo;s great, but sometimes a missing method or capability can be frustrating. With Manifold, developers can solve this problem without having to wait for Java to add a feature in a later version. Even more importantly, Manifold provides many such extensions out of the box, making Java better for developers. In this post, we will discuss the extension capability. It lets us change classes in the Java API in a compatible way without risk. If Java adds these APIs later then we can seamlessly switch to them.&lt;/p&gt;</description></item><item><title>Book Review: DuckDB in Action</title><link>https://foojayio.github.io/website/today/book-review-duckdb-in-action/</link><pubDate>Wed, 05 Mar 2025 13:42:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-duckdb-in-action/</guid><description>&lt;p&gt;Disclaimer: this post includes affiliate links; I may receive compensation if you purchase the book from the different links provided in this post.&lt;/p&gt;
&lt;p&gt;This review is about &lt;a href="https://www.manning.com/books/duckdb-in-action?utm_source=frankel&amp;amp;amp;utm_medium=affiliate&amp;amp;amp;utm_campaign=affiliate&amp;amp;amp;a_aid=frankel" target="_blank" rel="noopener noreferrer"&gt;DuckDB in Action&lt;/a&gt;
 by JoMark Needham, Michael Hunger, and Michael Simons from Manning.&lt;/p&gt;
&lt;p&gt;The book was sent to me by &lt;a href="https://mastodon.social/@rotnroll666" target="_blank" rel="noopener noreferrer"&gt;Michael Simons&lt;/a&gt;
. He asked for my feedback: I changed my reading schedule, took a few months, and here it is.&lt;/p&gt;
&lt;h2 id="h2-0-facts"&gt;Facts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;10 chapters&lt;/li&gt;
&lt;li&gt;288 pages&lt;/li&gt;
&lt;li&gt;$33.59 (eBook)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that MotherDuck, the company behind DuckDB, offers a &lt;a href="https://motherduck.com/duckdb-book-brief/" target="_blank" rel="noopener noreferrer"&gt;free PDF copy&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Enhancing LLM’s Conversations with Efficient Summarization</title><link>https://foojayio.github.io/website/today/summarizingtokenwindowchatmemory-enhancing-llms-conversations-with-efficient-summarization/</link><pubDate>Mon, 03 Mar 2025 13:16:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/summarizingtokenwindowchatmemory-enhancing-llms-conversations-with-efficient-summarization/</guid><description>&lt;p&gt;&lt;strong&gt;LLM chat models have become an integral part of many applications today. We are all experimenting and exploring the best ways to utilize them effectively. For Java developers, LangChain4j has been an incredible tool in this journey.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;By design, most available APIs, such as ChatGPT and Gemini, operate in a &lt;strong&gt;fire-and-forget&lt;/strong&gt; mode. They don&amp;rsquo;t retain previous interactions, meaning every request is treated as a completely new one.&lt;/p&gt;
&lt;p&gt;However, for a smooth and engaging conversation, maintaining context is crucial&amp;mdash;otherwise, the interaction becomes disjointed and frustrating. The common solution is to pass previous messages along with each new prompt, allowing the LLM to infer context. This is where the &lt;strong&gt;chat memory&lt;/strong&gt; concept comes in.&lt;/p&gt;</description></item><item><title>JavaFX Links of February 2025</title><link>https://foojayio.github.io/website/today/javafx-links-of-february-2025/</link><pubDate>Sat, 01 Mar 2025 10:15:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-february-2025/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of February 2025. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Early access builds of JavaFX that implement the new macOS Metal graphics rendering pipeline are now available. &lt;a href="https://inside.java/2025/02/11/quality-heads-up/" target="_blank" rel="noopener noreferrer"&gt;More info and link on Inside Java&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;These EA builds are provided as a convenience, so users don&amp;rsquo;t have to build from the &amp;lsquo;metal&amp;rsquo; branch of the openjdk/jfx-sandbox repository. The goal of these early access builds is to gather feedback as the team works on incorporating this feature into JavaFX. Feedback can be reported to the openjfx-dev mailing list.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Two blog posts by &lt;strong&gt;Johan Vos&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;&lt;a href="https://johanvos.wordpress.com/2025/02/25/java-everywhere/" target="_blank" rel="noopener noreferrer"&gt;Java Everywhere&lt;/a&gt;
&amp;rdquo; about how he sees the future of Java(FX) Mobile and building a competitor for Android and iOS with YouStore: &amp;ldquo;&lt;em&gt;In this post, I&amp;rsquo;ll discuss my thoughts about a developer-driven approach to a store model, and since I am aware this is not a trivial thing to achieve, I lay out my second-best option, which is how to better support and maintain Java on mobile devices.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;a href="https://johanvos.wordpress.com/2025/02/27/building-openjfx-using-jdk/" target="_blank" rel="noopener noreferrer"&gt;Building OpenJFX using JDK&lt;/a&gt;
&amp;rdquo; about building different versions of OpenJDK for different platforms: &amp;ldquo;&lt;em&gt;OpenJFX and OpenJDK/Mobile use a different build system. In an effort to simplify build complexity, and focus more on code, I am experimenting with using a single build system for OpenJFX and OpenJDK/Mobile. It turns out that the build system used by the JDK project does a great job for this.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;22-year-old student &lt;strong&gt;Abdoulaye Wade Cissé&lt;/strong&gt; created a JavaFX application to provide a virtual chemistry and biology lab for students in Senegal, in schools where there is no budget for a real lab. &lt;a href="https://webtechie.be/post/2025-02-11-interview-abdoulaye-lab-app-in-javafx/" target="_blank" rel="noopener noreferrer"&gt;Read more about it in this interview&lt;/a&gt;
 by &lt;strong&gt;Frank Delporte&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techhub.social/@thejvmbender/114059508172968863" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Özkan Pakdil 🦖&lt;/strong&gt; did some &amp;ldquo;shop-coding&amp;rdquo;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I was in an Apple shop, took 30 minutes to install SDKMAN, GraalVM, Maven, and GNUtools to build &lt;a href="https://github.com/ozkanpakdil/swaggerific" target="_blank" rel="noopener noreferrer"&gt;Swaggerific&lt;/a&gt;
 and see it working. M3 16GB 16GB MacBook Air took 1 minute to compile the code 😄 latest graal 23.0.1 and it takes 4-5 minutes in my HP laptop, this apple tech is fast, I am intrigued.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gerrit Gruwald&lt;/strong&gt; used his time on a plane very well: &amp;ldquo;&lt;em&gt;&lt;a href="https://bsky.app/profile/hansolo.eu/post/3liyqdboyac2n" target="_blank" rel="noopener noreferrer"&gt;Here is a screenshot of my little JavaFX version of ConfiCheck&lt;/a&gt;
 that I created on the flight to the US. As mentioned before it&amp;rsquo;s still missing some things but already not too bad 😁&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/AlmasBaim/status/1886489259189920182" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; shared&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Another fantastic example from the community by &lt;strong&gt;SergBukreev&lt;/strong&gt; : &lt;a href="https://github.com/AlmasB/FXGL/discussions/1402" target="_blank" rel="noopener noreferrer"&gt;a racing game demo in JavaFX FXGL&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/hallvard.bsky.social/post/3lii7hgvemk2p" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hallvard Trætteberg&lt;/strong&gt; is having fun implementing a JavaFX version of the Sokoban game&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A goal is to play by moving using the Gluon attach position service on Android.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/sosuisen_net/status/1891948039587213643" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;sosuisen&lt;/strong&gt; released two JavaFX extensions for VS Code&lt;/a&gt;
:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sosuisen/javafx-controller-support" target="_blank" rel="noopener noreferrer"&gt;JavaFX Controller Support&lt;/a&gt;
: &amp;ldquo;_Provides support for FXML controllers in JavaFX projects. Detection and correction of &lt;code&gt;fx:id&lt;/code&gt; errors. Displays diagnostics for invalid &lt;code&gt;fx:controller&lt;/code&gt;. Offers a Code Lens option to add an &lt;code&gt;MARKDOWN_HASH30db597822c6e06c6737052260426f45MARKDOWN&lt;/code&gt;&lt;em&gt;HASH&lt;/em&gt; method if it is missing from the controller class.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sosuisen/javafx-builder-class-generator" target="_blank" rel="noopener noreferrer"&gt;JavaFX Builder Class Generator&lt;/a&gt;
: &amp;ldquo;_Provides a code generator for creating builder classes in JavaFX projects. You can generate builder classes for various types included in the &lt;code&gt;javafx.scene.*&lt;/code&gt; packages, such as &lt;code&gt;Button&lt;/code&gt; and &lt;code&gt;MARKDOWN_HASH5a53a8f009db36698b8e68ea1813563aMARKDOWN&lt;/code&gt;&lt;em&gt;HASH&lt;/em&gt;, allowing you to create complex instances more compactly.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New &amp;ldquo;JavaFX In Action&amp;rdquo; interviews by &lt;strong&gt;Frank Delporte&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=gkHgsamCoGc" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sven Reimers&lt;/strong&gt; about JTaccuino&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A JavaFX-based notebook application to make it easier to learn Java and experiment with notebooks that can visualize the variables in different ways, like tables and graphs.&lt;/em&gt; &amp;quot; &lt;a href="https://webtechie.be/post/2025-02-06-jfxinaction-sven-reimers-jtaccuino/" target="_blank" rel="noopener noreferrer"&gt;More info here&lt;/a&gt;
. And a &lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3lhiloggumk2g" target="_blank" rel="noopener noreferrer"&gt;reply by &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;This project is key to Java. We need a notebook to bring Java towards students, scientists,&amp;hellip; and help them doing research/POC&amp;rsquo;s in the same language that can later be used in production systems where performance/stability/scaling/security is key.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;&lt;strong&gt;Chris Newland&lt;/strong&gt; has a long history in Java and JavaFX development. He talks about two of his JavaFX projects: DemoFX and JITWatch. &lt;a href="https://www.youtube.com/watch?v=8s14hFLp7cI" target="_blank" rel="noopener noreferrer"&gt;While the demos are already impressive, Chris also gives a &amp;lsquo;crash course&amp;rsquo; in this video&lt;/a&gt;
 about Java and Byte code and how the Just-In-Time compiler converts these to native code in the Java Virtual Machine.&lt;/em&gt; &amp;quot; More info in &lt;a href="https://webtechie.be/post/2025-02-20-jfxinaction-chris-newland-demofx-jitwatch/" target="_blank" rel="noopener noreferrer"&gt;this blog post&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=4qkflNl1ivA" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Cormac Redmond&lt;/strong&gt; talks about KafkIO&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;It&amp;rsquo;s a beautiful user interface for interacting with Kafka clusters, reading and producing messages, and much more. Above all, it&amp;rsquo;s free and created with Java and JavaFX!&lt;/em&gt; &amp;quot; More info &lt;a href="https://webtechie.be/post/2025-02-27-jfxinaction-cormac-redmond-kafkio/" target="_blank" rel="noopener noreferrer"&gt;in this blog post&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://www.youtube.com/watch?v=m-4qf0zYRYg" target="_blank" rel="noopener noreferrer"&gt;new video by &lt;strong&gt;Sean Phillips&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX based Trinity XAI UMAP Automation For Deep Fake Detection. Interactive visualization tools for analyzing performance of Deep Fake detection AI models. Automatic for the people.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-conferences"&gt;Conferences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/jagovreede.bsky.social/post/3lhgrgloi5c23" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jago de Vreede&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;ve just got good news that &amp;lsquo;Building a native multiplatform SDKMAN in JavaFX&amp;rsquo; has been accepted for Devoxx UK 2025!&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;And he &lt;a href="https://bsky.app/profile/brabantjug.nl/post/3lhciadcdkk2g" target="_blank" rel="noopener noreferrer"&gt;presented at Brabant JUG&lt;/a&gt;
 in the Netherlands: &amp;ldquo;&lt;em&gt;Our next meetup will be on 25 February at the WAES office in Eindhoven.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.devgem.io/posts/integrating-material-design-icons-in-javafx-using-ikonli-for-seamless-css-styling" target="_blank" rel="noopener noreferrer"&gt;Integrating Material Design Icons in JavaFX Using Ikonli for Seamless CSS Styling&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;By embracing the Ikonli library, JavaFX developers can significantly streamline the process of integrating and managing Material Design Icons through CSS.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Lecture by &lt;strong&gt;Sergiy Tytenko&lt;/strong&gt; on YouTube: &amp;ldquo;&lt;a href="https://www.youtube.com/watch?v=_0SX4BXVUWY" target="_blank" rel="noopener noreferrer"&gt;GUI with JavaFX, I/O | OOP and Data Structures with Java&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CheerpJ is a WebAssembly-based Java Virtual Machine for the browser. &lt;a href="https://bsky.app/profile/leaningtech.bsky.social/post/3lhj4a3hlh222" target="_blank" rel="noopener noreferrer"&gt;It can run games like Minecraft right in your browser&lt;/a&gt;
. CheerpJ 3.1 got released and &lt;a href="https://bsky.app/profile/leaningtech.bsky.social/post/3lhj4axc3k222" target="_blank" rel="noopener noreferrer"&gt;4.0 is coming&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;It&amp;rsquo;s a game-changer: Java 11+ support, WebAssembly-powered JNI (run native code, think Minecraft!), Full JavaFX &amp;amp; SWT, Improved mobile support. No plugins, just Java!&lt;/em&gt;&amp;rdquo; Definitely an interesting project to keep an eye on!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/113957593797425638" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; shares his frustrations&amp;hellip;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The biggest obstacles for running JavaFX on iOS is that I have to deal with Apple stuff that really makes me angry. I would accept this from an underfunded open-source project, or from Windows 95. But from a company that gets applauded for how user friendly it is, this is unacceptable. Stuck for 30 minutes in &amp;lsquo;100% completed&amp;rsquo;. Seriously, that is what makes it hard. Not the Java or C code.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/mklestil.bsky.social/post/3lhoteypi5s26" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;@mklestil&lt;/strong&gt; is experimenting with JavaFX for 100DaysofCode&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Continued working on my Pomodoro app, SQLite is now running and storing Pomodoro sessions. Additionally, I have now learned how to use CSS in JavaFX, which makes the whole thing much more pleasant. Happy Coding.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://moldstud.com/articles/p-navigating-common-challenges-with-javafx-and-jar-files-for-developers" target="_blank" rel="noopener noreferrer"&gt;Navigating Common Challenges with JavaFX and JAR Files for Developers&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Discover essential tips to avoid common pitfalls when working with JavaFX and JAR files, ensuring a smoother development experience.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Finally some good results with LLM, by &lt;a href="https://x.com/capoolar/status/1892787422284427733" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;ppolis&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Thanks to grok i just learned that i can you css in javafx , live is good.&lt;/em&gt;&amp;rdquo; 😉&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/dlemmermann.bsky.social/post/3liofxmviyk2y" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared a screenshot&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Another nice example for a makeover of one of the GemFX components via AtlantaFX. &amp;hellip; If you are interested in AtlantaFX I would suggest to &lt;a href="https://downloads.hydraulic.dev/atlantafx/sampler/download.html" target="_blank" rel="noopener noreferrer"&gt;download the sampler desktop app installer&lt;/a&gt;
 that was created via the great Conveyor tool by Hydraulic.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;Check &lt;a href="https://bsky.app/profile/dlemmermann.bsky.social" target="_blank" rel="noopener noreferrer"&gt;Dirk&amp;rsquo;s timeline on Bluesky&lt;/a&gt;
 for more screenshots of the changes he is doing with AtlantaFX.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;a href="https://www.theserverside.com/tip/Why-use-JavaFX" target="_blank" rel="noopener noreferrer"&gt;Why use JavaFX in 2025?&lt;/a&gt;
&amp;rdquo; by &lt;strong&gt;Frank Delporte&lt;/strong&gt; on TheServerSide: &amp;ldquo;&lt;em&gt;As a modern GUI framework, JavaFX is alive and kicking with a very broad community and many active projects. Here are some resources to deepen your knowledge and spark inspiration.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/hallvard.bsky.social/post/3lizpb23qek2d" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hallvard Trætteberg&lt;/strong&gt; on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;In a recent post about my Sokoban, a JavaFX project on GitHub, I complained about build problems with Android. &lt;strong&gt;Frank Delporte&lt;/strong&gt; pointed me to &lt;a href="https://github.com/gluonhq/gluonfx-maven-plugin/issues/518" target="_blank" rel="noopener noreferrer"&gt;an issue on gluonfx-maven-plugin&lt;/a&gt;
 where &lt;strong&gt;Johan Vos&lt;/strong&gt; explained the situation about the archival of vmone. I&amp;rsquo;ve now moved back to v1.0.23 and the build works again!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;a href="https://bluelight.co/blog/best-java-gui-frameworks" target="_blank" rel="noopener noreferrer"&gt;8 Best Java GUI Frameworks for Modern Applications&lt;/a&gt;
&amp;rdquo; by &lt;strong&gt;Rodolfo Ortega&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Some JavaFX love&amp;hellip;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/legiayayana.bsky.zoner.work/post/3lig672ncqc24" target="_blank" rel="noopener noreferrer"&gt;*&lt;strong&gt;Ada, neptunyl⁷-hydroxide&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I hate how nobody is bothered by the fact that peak cross platform UI framework design is JavaFX.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/Wire_Daemon/status/1891174964801237139" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Kristin Rutenkolk&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;As strange as it sounds, JavaFX is still surprisingly solid. It&amp;rsquo;s its own open source library OpenJFX now and there is a GUI SceneBuilder tool. It has it&amp;rsquo;s own declarative format thing going on if you want that. It feels quite oldschool but it&amp;rsquo;s robust and i still quite like it.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/bmarwell.de/post/3licshuu5zs2i" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Benjamin Marwell ☕&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I feel that JavaFX is so underrated and Java should be coming back to desktops&amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-8-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content:
&lt;ul&gt;
&lt;li&gt;People: &lt;a href="https://www.jfx-central.com/people/s.reimers" target="_blank" rel="noopener noreferrer"&gt;Sven Reimers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;People: &lt;a href="https://www.jfx-central.com/people/c.newland" target="_blank" rel="noopener noreferrer"&gt;Chris Newland&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;People: &lt;a href="https://www.jfx-central.com/people/c.redmond" target="_blank" rel="noopener noreferrer"&gt;Cormac Redmond&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Company: &lt;a href="https://www.jfx-central.com/companies/certak" target="_blank" rel="noopener noreferrer"&gt;Certak&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Tools: &lt;a href="https://www.jfx-central.com/tools/demofx" target="_blank" rel="noopener noreferrer"&gt;DemoFX, performance test platform for JavaFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Showcase: &lt;a href="https://www.jfx-central.com/real_world/jtaccuino" target="_blank" rel="noopener noreferrer"&gt;JTaccuino, JavaFX based notebook application for Java developers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Showcase: &lt;a href="https://www.jfx-central.com/real_world/jitwatch" target="_blank" rel="noopener noreferrer"&gt;JitWatch, log analyser and visualiser for the HotSpot JIT compiler&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Showcase: &lt;a href="https://www.jfx-central.com/showcases/kafkio" target="_blank" rel="noopener noreferrer"&gt;KafkIO, A Fast, Intuitive and Free Kafka Client For Mac, Windows and Linux.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/gkHgsamCoGc" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Sven Reimers about JTaccuino&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/8s14hFLp7cI" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Chris Newland about DemoFX and JitWatch&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/4qkflNl1ivA" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Cormac Redmond about KafkIO&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The overview of the LinksOfTheWeek of January 2025 got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-january-2025/"&gt;published on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Spring Cloud Stream: Demystifying Event-Driven Architecture</title><link>https://foojayio.github.io/website/today/spring-cloud-stream-demystifying-event-driven-architecture/</link><pubDate>Fri, 28 Feb 2025 08:34:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-cloud-stream-demystifying-event-driven-architecture/</guid><description>&lt;p&gt;&lt;em&gt;Consider a bustling restaurant environment. The kitchen receives a flood of orders, waitstaff dart between tables, and patrons anxiously glance at their watches. Each time a waiter takes an order, he or she must verify it with the kitchen and wait for the kitchen to prepare the meal before attending to another table. This cumbersome method hampers efficiency, leaving the restaurant unable to meet customer demand.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Now envision an alternative situation. Instead of enduring delays, waitstaff enter orders into a centralized system, prompting the kitchen to begin meal preparation immediately upon receipt. As soon as the kitchen prepares the food, waiters receive instant notifications, enabling them to serve customers promptly without any delays. This exemplifies event-driven architecture: a fluid, real-time system where they exchange information asynchronously, promoting scalability and quick responsiveness.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Front End Debugging Part 3: Networking</title><link>https://foojayio.github.io/website/today/front-end-debugging-part-3-networking/</link><pubDate>Thu, 27 Feb 2025 16:34:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/front-end-debugging-part-3-networking/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#network-debugging-powerhouse"&gt;&lt;strong&gt;Network Debugging Powerhouse&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#reissuing-and-modifying-requests"&gt;&lt;strong&gt;Re-Issuing and Modifying Requests&lt;/strong&gt;&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#curl-and-postman"&gt;cURL and Postman&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#throttling-and-debugging-race-conditions"&gt;&lt;strong&gt;Throttling and Debugging Race Conditions&lt;/strong&gt;&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#why-throttling-matters"&gt;Why Throttling Matters:&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#how-to-use"&gt;How to Use&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#managing-state-with-storage-tools"&gt;&lt;strong&gt;Managing State with Storage Tools&lt;/strong&gt;&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#challenges-of-state-management"&gt;Challenges of State Management&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#analyzing-request-and-response-headers"&gt;&lt;strong&gt;Analyzing Request and Response Headers&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#debugging-in-incognito-mode-limitations-and-best-practices"&gt;&lt;strong&gt;Debugging in Incognito Mode: Limitations and Best Practices&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#connecting-the-frontend-to-the-database"&gt;&lt;strong&gt;Connecting the Front-End to the Database&lt;/strong&gt;&lt;/a&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;Debugging network communication issues is a critical skill for any front-end developer. While tools like &lt;a href="https://debugagent.com/wireshark-tcpdump-a-debugging-power-couple" target="_blank" rel="noopener noreferrer"&gt;Wireshark&lt;/a&gt;
 provide low-level insight into network traffic, modern browsers like Chrome and Firefox offer developer tools with powerful features tailored for web development. In this post we will discuss using browser-based tools to debug network communication issues effectively. This is a far better approach than using Wireshark for the vast majority of simple cases.&lt;/p&gt;</description></item><item><title>Build local LLM applications with Quarkus, Ollama, Testcontainers</title><link>https://foojayio.github.io/website/today/building-local-llm-ai-powered-applications-with-quarkus-ollama-and-testcontainers/</link><pubDate>Thu, 27 Feb 2025 10:13:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-local-llm-ai-powered-applications-with-quarkus-ollama-and-testcontainers/</guid><description>&lt;p&gt;Traditionally, many AI-powered applications rely on cloud-based APIs or centralized services for model hosting and execution. While this approach has its advantages, such as scalability and ease of use, it also introduces challenges around latency, data privacy, and dependency on third-party providers.&lt;/p&gt;
&lt;p&gt;This is where local AI models shine. By running models directly within your application&amp;rsquo;s infrastructure, you gain greater control over performance, data security, and deployment flexibility. However, building such systems requires the right tools and frameworks to bridge the gap between traditional software development and AI model integration.&lt;/p&gt;</description></item><item><title>Securing Vaadin Applications with Microsoft Entra</title><link>https://foojayio.github.io/website/today/securing-vaadin-applications-with-microsoft-entra/</link><pubDate>Wed, 26 Feb 2025 12:55:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/securing-vaadin-applications-with-microsoft-entra/</guid><description>&lt;p&gt;Many companies use Microsoft 365, so letting users log in with their Microsoft account is a good choice. This blog post shows how to secure your Vaadin applications using Microsoft Entra for authentication and authorization and explains how Karibu Testing must be configured.&lt;/p&gt;
&lt;h2 id="h2-0-step-1-create-an-application-in-entra"&gt;Step 1: Create an Application in Entra&lt;/h2&gt;
&lt;p&gt;The first step is to create an application, configure roles, assign users, and set the redirect URI.&lt;/p&gt;
&lt;p&gt;To create an application, log in to &lt;a href="http://entra.microsoft.com" target="_blank" rel="noopener noreferrer"&gt;http://entra.microsoft.com&lt;/a&gt;
 and select &amp;ldquo;Applications&amp;rdquo; -&amp;gt; &amp;ldquo;Enterprise applications.&amp;rdquo; There, you can create a new application. Select &amp;ldquo;Register an application to integrate with Microsoft Entra ID (App you&amp;rsquo;re developing).&amp;rdquo;&lt;/p&gt;</description></item><item><title>Java 24 : What's New?</title><link>https://foojayio.github.io/website/today/java-24-whats-new/</link><pubDate>Wed, 26 Feb 2025 09:58:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-24-whats-new/</guid><description>&lt;p&gt;&lt;strong&gt;Java 24 will be available soon, on March 18th. What are all the functionalities that this version brings to us as developers?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Java 24 contains not less than 24 JEPs, a record and above all an eponymous figure!&lt;/p&gt;
&lt;h2 id="h2-0-jep-404-generational-shenandoah-experimental"&gt;JEP 404: Generational Shenandoah (Experimental)&lt;/h2&gt;
&lt;p&gt;Shenandoah is a Garbage Collector (GC) originally developed by RedHat and included in OpenJDK. It reduces GC pause times by performing evacuation work concurrently to application threads.&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>Sliding Window Counter Rate Limiter (Redis &amp; Java)</title><link>https://foojayio.github.io/website/today/sliding-window-counter-rate-limiter-redis-java/</link><pubDate>Tue, 25 Feb 2025 21:21:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/sliding-window-counter-rate-limiter-redis-java/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This content is also available on YouTube. &lt;a href="https://youtu.be/Wvm_u0IR69M" target="_blank" rel="noopener noreferrer"&gt;Check it out!&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;The Sliding Window Counter offers a more efficient way to handle rate limiting compared to the Sliding Window Log. While the Sliding Window Log keeps an exact log of timestamps for each request, allowing precise tracking over a rolling time period, this precision comes at the cost of higher memory usage and computational overhead as the number of requests increases.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Foojay Podcast #67: Writing a book and fame and fortune!</title><link>https://foojayio.github.io/website/today/foojay-podcast-67/</link><pubDate>Mon, 24 Feb 2025 12:23:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-67/</guid><description>&lt;p&gt;Let me share a personal story. I started experimenting with Java on a Raspberry Pi about five years ago and blogged a few articles about it. But the more I experimented, the more I wrote down, and eventually, I had written a book&amp;hellip; I worked on it for six months in a row, every evening and a lot of weekends. But the moment I received the box with my author copies was an incredible feeling. Holding a paper book with your name is a special moment.&lt;/p&gt;</description></item><item><title>Pi4J Welcomes Java 21 on the Raspberry Pi</title><link>https://foojayio.github.io/website/today/pi4j-welcomes-java-21-on-the-raspberry-pi/</link><pubDate>Thu, 20 Feb 2025 10:49:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/pi4j-welcomes-java-21-on-the-raspberry-pi/</guid><description>&lt;p&gt;&lt;strong&gt;Pi4J provides a friendly object-oriented I/O API and implementation libraries for Java Programmers to access the full I/O capabilities of the Raspberry Pi platform.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The project &amp;ldquo;hides&amp;rdquo; the complexity to interact with electronic components through different ways of communication (SPI, I2C, PWM,&amp;hellip;) by providing Java interfaces on top of native libraries that can interact with the GPIO (General Purpose Input/Output) pins on the Raspberry Pi.
&lt;img src="https://foojayio.github.io/website/today/pi4j-welcomes-java-21-on-the-raspberry-pi/pi4j-overview-1024x427.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Recently, the development of the Pi4J library faced a decision point: &amp;ldquo;&lt;em&gt;Should we stick to Java 11 for existing projects and old Raspberry Pi&amp;rsquo;s (&lt;a href="https://www.pi4j.com/documentation/java-for-arm/" target="_blank" rel="noopener noreferrer"&gt;with ARMv6&lt;/a&gt;
), versus moving on and making use of better and more performant Java code with the latest Long Term Support (LTS) version?&lt;/em&gt;&amp;rdquo;&lt;/p&gt;</description></item><item><title>Event-Driven Architecture and Change Data Capture Made Easy</title><link>https://foojayio.github.io/website/today/event-driven-architecture-and-change-data-capture-made-easy/</link><pubDate>Tue, 18 Feb 2025 16:44:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/event-driven-architecture-and-change-data-capture-made-easy/</guid><description>&lt;p&gt;Hello again! In this article (Part 1), we will discuss two common ways to build modern &lt;a href="https://mezocode.com/microservice-journey-part-2-design-principles-for-well-crafted-architecture/" target="_blank" rel="noopener noreferrer"&gt;software systems&lt;/a&gt;
: &lt;strong&gt;Event-Driven Architecture (EDA) and Change Data Capture (CDC)&lt;/strong&gt;. They serve different purposes but can work well together in some situations.&lt;/p&gt;
&lt;p&gt;we&amp;rsquo;ll explain &lt;strong&gt;EDA&lt;/strong&gt; and &lt;strong&gt;CDC&lt;/strong&gt;, discuss their use cases, and explain when to use them and when not to. Using plain language and relatable examples, we&amp;rsquo;ll also explore how they work together.&lt;/p&gt;</description></item><item><title>Find Undead Code in Your Java Environments</title><link>https://foojayio.github.io/website/today/webinar-find-undead-code-in-your-java-environments/</link><pubDate>Mon, 17 Feb 2025 09:36:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/webinar-find-undead-code-in-your-java-environments/</guid><description>&lt;p&gt;&lt;strong&gt;10-30% of the custom code in applications is undead code and can just be deleted. Eliminating undead code can enhance the overall performance and maintainability of your applications. Time vampire (n) &amp;ndash; a service or application that is said to suck time from engineers by warming up and updating at preternaturally slow speeds.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;re on deadline to finish a project, and you open the application to do your work. The application informs you that it needs to update before it will open. Based on past experience, you have half an hour to burn before this time vampire is ready.&lt;/p&gt;</description></item><item><title>A Glance into JFR Class and Method Tagging</title><link>https://foojayio.github.io/website/today/a-glance-into-jfr-class-and-method-tagging/</link><pubDate>Mon, 17 Feb 2025 09:26:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-glance-into-jfr-class-and-method-tagging/</guid><description>&lt;p&gt;Ever wonder how the JDK Flight Recorder (JFR) keeps track of the classes and methods it has collected for stack traces and more?&lt;/p&gt;
&lt;p&gt;In this short article, I&amp;rsquo;ll explore JFR tagging and how it works in the OpenJDK.&lt;/p&gt;
&lt;h2 id="h2-0-tags"&gt;Tags&lt;/h2&gt;
&lt;p&gt;JFR files consist of self-contained chunks. Every chunk contains:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;metadata&lt;/li&gt;
&lt;li&gt;events&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mail.openjdk.org/pipermail/hotspot-jfr-dev/2020-February/001154.html" target="_blank" rel="noopener noreferrer"&gt;mappings of IDs to actual values&lt;/a&gt;
, the IDs are used in the events in place of stack traces, classes, methods, strings, &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The maximum chunk size is usually 12MB, but you can configure it:&lt;/p&gt;</description></item><item><title>Remote Development Made Simple with DevPod</title><link>https://foojayio.github.io/website/today/remote-development-made-simple-with-devpod/</link><pubDate>Thu, 13 Feb 2025 16:06:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/remote-development-made-simple-with-devpod/</guid><description>&lt;p&gt;&lt;strong&gt;I come relatively late to the subject of Remote Development Environments (also known as Cloud Development Environments).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The main reason is that I haven&amp;rsquo;t worked in a development team for over six years. However, I&amp;rsquo;m now working for Loft Labs, and we have a product: &lt;a href="https://devpod.sh/" target="_blank" rel="noopener noreferrer"&gt;DevPod&lt;/a&gt;
. I wanted to understand our value proposition as was on my way to &lt;a href="https://fosdem.org/" target="_blank" rel="noopener noreferrer"&gt;FOSDEM&lt;/a&gt;
 operating the &lt;a href="https://fosdem.org/2025/news/2024-11-16-stands-announced/" target="_blank" rel="noopener noreferrer"&gt;DevPod booth&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-the-problem"&gt;The problem&lt;/h2&gt;
&lt;p&gt;As a former developer, I vividly remember the pain of setting up each developer&amp;rsquo;s development environment. At the beginning of my career, the architect had to configure my development machine painfully, so it was similar to his setup. Later on, I did the same for my team members repeatedly. The scope of possible discrepancies impacting development is virtually endless: Operating System, of course, version &lt;strong&gt;and&lt;/strong&gt; flavour of the SDKs, &lt;em&gt;e.g.&lt;/em&gt;, Java&amp;rsquo;s Eclipse Temurin vs SapMachine, git hooks, etc. It was sweat, toil, and blood on every project.&lt;/p&gt;</description></item><item><title>Building a declarative API with Spring AOP and SpEL</title><link>https://foojayio.github.io/website/today/building-a-declarative-api-with-spring-aop-and-spel/</link><pubDate>Wed, 12 Feb 2025 15:57:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-a-declarative-api-with-spring-aop-and-spel/</guid><description>&lt;p&gt;&lt;strong&gt;In this article, we&amp;rsquo;ll implement a declarative API to perform tasks belonging to cross-cutting concerns, using auditing as an example. We&amp;rsquo;ll see how SpEL and Spring AOP allow us to easily intercept invocations throughout a code base and perform arbitrary logic in an expressive and non-invasive manner.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-a-story-about-legacy"&gt;A story about legacy&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s pretend that we inherited a legacy system. The system is in a dismal state, with every change always at risk of bringing the whole thing down. One day, there is a business requirement to audit a few dozen methods scattered throughout the code base. After every invocation of these methods, we should notify an external system by sending a client id and an operation (&lt;code&gt;1234&lt;/code&gt;, &lt;code&gt;&amp;quot;CREATE_USER&amp;quot;&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Foojay Podcast #66: Let's Talk About Java Code!</title><link>https://foojayio.github.io/website/today/foojay-podcast-66/</link><pubDate>Tue, 11 Feb 2025 08:24:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-66/</guid><description>&lt;p&gt;In this Foojay podcast, we dive into a few articles that were published recently and focus on code.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Igor Kulakov of JetBrains gives us his insights into the tool he created to find duplicate content in documentation.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --&gt;
&lt;ul&gt;
&lt;li&gt;Rijo Sam explains how you can generate real random values and how he created a train departure display.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --&gt;
&lt;ul&gt;
&lt;li&gt;Maxillian Arruda explains in a very detailed post the different ways to construct a complex Java object.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --&gt;
&lt;ul&gt;
&lt;li&gt;And we start with Wim De Troye about the code changes he had to do in a project that got upgraded from Spring Boot 2 to 3.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/IB7drozkKUk?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Spring Data Neo4j: How to update an entity</title><link>https://foojayio.github.io/website/today/spring-data-neo4j-how-to-update-an-entity/</link><pubDate>Wed, 05 Feb 2025 18:58:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-data-neo4j-how-to-update-an-entity/</guid><description>&lt;p&gt;&lt;strong&gt;After working on a new &lt;a href="https://graphacademy.neo4j.com/courses/app-spring-data/" target="_blank" rel="noopener noreferrer"&gt;online Spring Data Neo4j course&lt;/a&gt;
, I learned a couple more things about updating an entity.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The course required a different set of scenarios than outlined in my &lt;a href="https://jmhreif.com/blog/2023/sdn-cypher-update-entity/" target="_blank" rel="noopener noreferrer"&gt;previous SDN update blog post&lt;/a&gt;
, so I wanted to cover those scenarios, as well.&lt;/p&gt;
&lt;h2 id="_spring_save_method"&gt;Spring save() method&lt;/h2&gt;
&lt;p&gt;First up is the out-of-the-box &lt;code&gt;save()&lt;/code&gt; method that is provided by Spring as a default. This method takes an input of the entity object you want to save to the database.&lt;/p&gt;</description></item><item><title>Sliding Window Log Rate Limiter (Redis &amp; Java)</title><link>https://foojayio.github.io/website/today/sliding-window-log-rate-limiter-redis-java/</link><pubDate>Tue, 04 Feb 2025 12:21:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/sliding-window-log-rate-limiter-redis-java/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://youtu.be/bCYzRg0oQjY" target="_blank" rel="noopener noreferrer"&gt;This article is also available on YouTube. Check it out!&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;The Sliding Window Log is a &lt;em&gt;more precise&lt;/em&gt; way to handle rate limiting. Instead of splitting time into fixed intervals like the &lt;a href="https://foojayio.github.io/website/wp-admin/post.php?post=115337"&gt;Fixed Window Counter&lt;/a&gt;
 , it keeps a log of timestamps for each request. This allows it to track requests over a rolling time period, like the last second or minute, without abrupt resets at the end of an interval.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Join the Celebration of 30 Years of Java</title><link>https://foojayio.github.io/website/today/join-the-celebration-of-30-years-of-java/</link><pubDate>Mon, 03 Feb 2025 08:03:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/join-the-celebration-of-30-years-of-java/</guid><description>&lt;p&gt;&lt;strong&gt;On Thursday, March 13, Azul is hosting a virtual celebration of 30 years of Java, starting at 09:00 PST / 17:00 GMT / 18:00 CET.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In addition to discussion panels, including a Friends of OpenJDK Panel with Marit Van Dijk, Ondro Mihályi, and Simon Martinelli, the highlighted speakers and topics of the program are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;30 Years of Java&amp;rdquo; by Simon Ritter&lt;/li&gt;
&lt;li&gt;&amp;ldquo;AI for Busy Java Developers&amp;rdquo; by Frank Greco&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Behind-the-Scenes Innovations in Java&amp;rdquo; by Venkat Subramaniam&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Reading Code&amp;rdquo; by Marit van Dijk&lt;/li&gt;
&lt;li&gt;&amp;ldquo;We Hate Code - The Joy of Maintaining Dead and Unused Code&amp;rdquo; by Gerrit Grunwald&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://www.azul.com/duke-turns-30-celebrating-java/#agenda" target="_blank" rel="noopener noreferrer"&gt;The whole program is here.&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>JavaFX Links of January 2025</title><link>https://foojayio.github.io/website/today/javafx-links-of-january-2025/</link><pubDate>Sat, 01 Feb 2025 16:20:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-january-2025/</guid><description>&lt;p&gt;&lt;strong&gt;Here is the first overview of the JavaFX LinksOfTheMonth for 2025. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Did we miss anything? Is there anything you want to have included in one of the next overviews?&lt;/p&gt;
&lt;p&gt;Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CPU (security) releases for OpenJFX are available. Read more &lt;a href="https://gluonhq.com/announcing-the-availability-of-javafx-23-0-2-21-0-6-lts-and-17-0-14-lts/" target="_blank" rel="noopener noreferrer"&gt;on the Gluon website&lt;/a&gt;
. You can &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;get the SDKS here&lt;/a&gt;
 or use the Maven artifacts from Maven Central.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jdk.java.net/javafxmetal/" target="_blank" rel="noopener noreferrer"&gt;An early access build of the JavaFX from the &amp;ldquo;metal&amp;rdquo; branch of the openjdk/jfx-sandbox repository is available&lt;/a&gt;
, implementing the new Metal graphics renderning pipeline for macOS: &amp;ldquo;&lt;em&gt;The goal of this release is to solicit feedback as we work toward integrating this functionality into JavaFX. Binaries are provided as a convenience so that users do not need to build from the source code. Warning: This build is based on an incomplete version of JavaFX 25.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Still running JavaFX 8 apps? As Oracle will end support for JavaFX on Java 8 in March 2025, &lt;a href="https://www.azul.com/javafx-java8-oracle-end-of-support/" target="_blank" rel="noopener noreferrer"&gt;Azul has put up a page to inform you about your options&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3lgxb47ksvc2q" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;What if&amp;hellip; we could build a JDK including JavaFX, using the JDK build system? As a POC, I added 3 javafx modules to my fork of openjdk/jdk and built them on Linux. The openjdk/jdk build system is excellent, and it required only minimal changes to do this. See &lt;a href="https://github.com/johanvos/jdk/tree/openjfx" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.jabref.org/2024/12/23/JabRef6-0-alpha/" target="_blank" rel="noopener noreferrer"&gt;JabRef released the first 6.0 alpha version&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Packed with the cool features from GSOC and many other fixes: AI features, CSL Styles in LibreOffice, New search.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/maksik997/major-release-total-overhaul-javafx-renaissance-51m" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Maksymilian&lt;/strong&gt; announced the biggest update yet of his project Picture Comparer FX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;This application is designed to help you automatically find and manage redundant images in your collection. Whether you&amp;rsquo;re dealing with duplicate photos or just want a more organized image library, this tool simplifies the process.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/schlining.bsky.social/post/3lfjvdzhsnk2s" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Brian Schlining&lt;/strong&gt; shared a link to vars-annotation&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Video Annotation Application for MBARI&amp;rsquo;s Media Management (M3) software stack.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/zolbatar.bsky.social/post/3lgkt6i7bns2y" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Daryl&lt;/strong&gt; shared a screenshot&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I haven&amp;rsquo;t posted an update in a while, so a sneaky peek at the latest version of Daric in development. It might look a little familiar&amp;hellip; Why invent, when you can re-invent&amp;hellip;&lt;/em&gt;&amp;rdquo; Daric is a modern BASIC dialect. It has a clean syntax, strong data structures, good library support and compiles to fast JVM bytecode.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; is continuing his experiments with shaders in FXGL and shared a lot of the results. Here are just a few, check his Twitter/X timeline for more&amp;hellip;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/AlmasBaim/status/1871485496737821077" target="_blank" rel="noopener noreferrer"&gt;First public demo&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;If you are on Windows and feel bored, give this demo a try and play with different shaders. If anything fails / crashes / doesn&amp;rsquo;t work, please report an issue on the main FXGL repo.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;There are some really cool shaders available online. &lt;a href="https://shadertoy.com/view/XfyXRV" target="_blank" rel="noopener noreferrer"&gt;Here&amp;rsquo;s one from &lt;strong&gt;shadertoy&lt;/strong&gt;&lt;/a&gt;
. The demo shows a property bound to a shader variable, hence the ability to control the rotation speed. The glass effect and reflections are just 🤩&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;One of the use cases I envisaged for a &lt;a href="https://x.com/AlmasBaim/status/1872280066786476253" target="_blank" rel="noopener noreferrer"&gt;combined JavaFX scene graph and OpenGL context&lt;/a&gt;
. The majority of the game is rendered by JavaFX / FXGL, but some complex visual effects are done with OpenGL shaders. From performance point of view, this is also sensible.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://www.linkedin.com/posts/almasb_hand-tracking-via-mediapipe-in-fxgl-is-getting-activity-7288195001124098048-wgAc/" target="_blank" rel="noopener noreferrer"&gt;video on LinkedIn by &lt;strong&gt;Almas Baim&lt;/strong&gt;&lt;/a&gt;
 shows how he can move objects in an application with motion tracking: &amp;ldquo;&lt;em&gt;Hand tracking via MediaPipe in FXGL is getting an upgrade in the next version. The demo consumes raw tracking data with no fine-tuning. So improved user experience results are certainly possible.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/AlmasBaim/status/1882864344888922298" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Just a quick proof-of-concept demo running WebGL inside FXGL. Given native GLSL support is on its way, WebGL support is unlikely to reach production.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A new Steam game: &amp;ldquo;&lt;em&gt;&lt;a href="https://store.steampowered.com/app/3436980/" target="_blank" rel="noopener noreferrer"&gt;SuperCowBoy&lt;/a&gt;
 is a 2D side-scrolling game developed using JavaFX. There are three professions in the game. The game is divided into 8 levels with gradually increasing difficulty, and the total game time is 20 hours. The game map is full scene, with a bright pixel art style high frame rate display.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/markjkoch.bsky.social/post/3lghw3v5rb22l" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mark J. Koch&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Scene working! Going to call this a wrap for now. Check out that cameo! Lots of future work to do here but it&amp;rsquo;s roughed out. Will pick another scene to work on over the weekend.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/husker-dev/openglfx/tags" target="_blank" rel="noopener noreferrer"&gt;Version 4.1.17 of Openglfx got released&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;This library adds a new element to the JavaFX for rendering OpenGL graphics using LWJGL, JOGL, LWJGL2 or LibGDX. It is optimized for each platform and includes some auxiliary functions for working with OpenGL from JavaFX.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/HugoQuinn2/fxpopup/releases/tag/v1.0.0" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hugo Quinn&lt;/strong&gt; released v1.0.0 of FxPopup&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX library that simplifies the creation of automatic forms and popup messages with minimal effort. With just a single line of code, developers can generate dynamic forms or display messages, while maintaining the flexibility to use custom views for both functionalities.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/shannah78/status/1744059640231735638" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Steve Hannah&lt;/strong&gt; released jDeploy 4.0.34&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;It fixes &amp;lsquo;offline&amp;rsquo; support for apps. If you have an app deployed with &lt;a href="https://jdeploy.com" target="_blank" rel="noopener noreferrer"&gt;jDeploy&lt;/a&gt;
, all you need to do is re-install your app for it to work fully offline.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Part 3 of the overview of the &amp;ldquo;JavaFX In Action&amp;rdquo; interviews by &lt;strong&gt;Frank Delporte&lt;/strong&gt; got &lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-3/"&gt;published on Foojay&lt;/a&gt;
 with:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Özkan Pakdil&lt;/strong&gt;: Swaggerific, an open-source Postman alternative written in JavaFX&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clément de Tastes&lt;/strong&gt;: QuarkusFX, combining the strengths of Quarkus and JavaFX&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt;: FXGL, a multipurpose game library for JavaFX&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Steve Hannah&lt;/strong&gt;: jDeploy, to distribute your Java app as a native bundle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jago de Vreede&lt;/strong&gt;: SDKman UI, a user interface on top of SDKMAN for all platforms&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=k4h7EhCuoW8" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Roberto Marquez&lt;/strong&gt; published a video (with a link to the sources)&lt;/a&gt;
 &amp;ldquo;&lt;em&gt;demonstrating a JavaFX application that communicates with a temperature and humidity sensor and displays the values on screen. It uses software from &lt;strong&gt;Frank Delporte&lt;/strong&gt; (LED display) and jSerialComm, and hardware from Adafruit.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Not from last week, but just discovered these now: &lt;a href="https://www.youtube.com/watch?v=fBvcUJbCMXo" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Josh Long&lt;/strong&gt; and &lt;strong&gt;Max Rydahl Andersen&lt;/strong&gt; talk about JBang&lt;/a&gt;
 in a live stream and show how you can use it to run JavaFX code very easily.&lt;/li&gt;
&lt;li&gt;An &lt;a href="https://www.linkedin.com/posts/apress_featuredfriday-javafx-openjfx-activity-7283490269948178434-9jvg/" target="_blank" rel="noopener noreferrer"&gt;interview on LinkedIn with &lt;strong&gt;Stephen Chin&lt;/strong&gt;&lt;/a&gt;
, coauthor (along with &lt;strong&gt;James Weaver&lt;/strong&gt; and &lt;strong&gt;Johan Vos&lt;/strong&gt; ) of the Third Edition of &amp;ldquo;&lt;em&gt;The Definitive Guide to Modern Java Clients with JavaFX: Cross-Platform Mobile and Cloud Development Updated for JavaFX 21 and 23&lt;/em&gt;&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://www.youtube.com/watch?v=CuI7-PllJZQ" target="_blank" rel="noopener noreferrer"&gt;first &amp;ldquo;JavaFX In Action&amp;rdquo; interview of 2025 is live! With Hydraulic Software, &lt;strong&gt;Mike Hearn&lt;/strong&gt;&lt;/a&gt;
 solves a problem many developers struggle with: efficiently distributing your application and ensuring the users get the latest version. With Conveyor, he created a tool to easily create an installer for JavaFX, Electron, and Flutter apps! Check the &lt;a href="https://webtechie.be/post/2025-01-23-jfxinaction-mike-hearn-conveyor/" target="_blank" rel="noopener noreferrer"&gt;blog for more info&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-conferences"&gt;Conferences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The schedule has been published of JavaOne 2025 &amp;ldquo;&lt;em&gt;Where Java developers come to skill up&lt;/em&gt; &amp;ldquo;, March 18&amp;ndash;20, 2025, USA. It contains three JavaFX sessions:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://reg.rf.oracle.com/flow/oracle/javaone25/catalog/page/catalog/session/1734125339212001XwBE" target="_blank" rel="noopener noreferrer"&gt;JavaFX 24 and Beyond&lt;/a&gt;
 by &lt;strong&gt;Kevin Rushfort&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://reg.rf.oracle.com/flow/oracle/javaone25/catalog/page/catalog/session/1728506254826001MEHs" target="_blank" rel="noopener noreferrer"&gt;JavaFX in the web&lt;/a&gt;
 by &lt;strong&gt;Karl Berger&lt;/strong&gt; and &lt;strong&gt;Florian Kirmaier&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://reg.rf.oracle.com/flow/oracle/javaone25/catalog/page/catalog/session/1728227349663001Wod9" target="_blank" rel="noopener noreferrer"&gt;Building a Multiplatform SDKMAN in JavaFX&lt;/a&gt;
 by &lt;strong&gt;Jago de Vreede&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The live streams from the &lt;a href="https://jchampionsconf.com/schedule.html" target="_blank" rel="noopener noreferrer"&gt;JChampions Conference&lt;/a&gt;
 (January 23, 24, 27, and 28) are available on YouTube:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;&lt;a href="https://www.youtube.com/watch?v=R1gHQtBXfYk" target="_blank" rel="noopener noreferrer"&gt;JTaccuino - A better Jupyter Experience for Java Developers&amp;rdquo;&lt;/a&gt;
, presented by &lt;strong&gt;Sven Reimers&lt;/strong&gt; : &amp;ldquo;&lt;em&gt;This session shows a new tool for interactive computing for Java developers. It provides a seamless interactive experience to write Java code, interact with the results using a full graphical interface and all this without the tedious process of compiling and running every time you make a small change achieving a lightweight rapid development cycle.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;a href="https://www.youtube.com/watch?v=UW6fDQt-8BI" target="_blank" rel="noopener noreferrer"&gt;Looking at Music, an experiment with Kotlin, JavaFX, MIDI, and Virtual Threads&lt;/a&gt;
&amp;rdquo;, presented by &lt;strong&gt;Vik and Frank Delporte&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/twas-week-before-breakfun-javafx-project-end-year-furman-sheldon-fhvqc/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Crystal Furman Sheldon&lt;/strong&gt; published a challenge for students&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;&amp;lsquo;Twas the week before winter break when all through the school, the CS teachers wondered what interesting things they could do. The projects and exams were all set for the year, in the hopes of something fun to finish the year. JavaFX to the rescue a fun creative tool. Allow students to explore and learn something new&amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/polypragmatist.bsky.social/post/3lef6zcqez22t" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;polypragmatist&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I came up with an interesting approach to create &amp;lsquo;Layout-centric&amp;rsquo; styleable properties in JavaFX. Instead of creating a single-use named class, a small amount of setup makes it easy to create StyleableProperties on the fly for your layouts.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=VLMHkyRXjxI" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; published a video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;FXGL 25 Tutorial: Shaders. We go through a basic workflow related to using shaders in FXGL. As of December 2024, this only works on WIndows. Once the full release is ready, it will work on Mac/Linux.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codezup.com/kotlin-desktop-applications-jfx-swing/" target="_blank" rel="noopener noreferrer"&gt;Kotlin for Desktop Applications: Using JFX and Swing&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;In this comprehensive tutorial, we will explore the core concepts, implementation guide, and best practices for building desktop applications using Kotlin, JFX, and Swing.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ew1k9yr-LHk" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Webdox&lt;/strong&gt; published a YouTube tutorial&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX GUI Tutorial for Beginners. In this video, you&amp;rsquo;ll learn how to set up a basic JavaFX project, create a simple user interface, and understand how to use JavaFX components like Buttons, Labels, and Scenes. Whether you&amp;rsquo;re new to Java or just getting started with JavaFX, this guide will help you build a solid foundation.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Check the &lt;a href="https://x.com/DVyadav2307/status/1873136518807863599" target="_blank" rel="noopener noreferrer"&gt;Twitter/X timeline of &lt;strong&gt;Divyanshu Yadav&lt;/strong&gt;&lt;/a&gt;
 for more like this: &amp;ldquo;&lt;em&gt;I&amp;rsquo;ve been using charts and graphs in JavaFX as a fun way to visualize how data manipulation algorithms work esp. sorting algorithms. Check out this GIF to see how the BubbleSort algo works.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Some JavaFX love to start 2025:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/RLaborantin/status/1874026919014101011" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Rachid Laborantin&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;And I thought Java was old-fashioned, but it continues to work wonders with JavaFx. I&amp;rsquo;ve been using Swing for a long time and I think it&amp;rsquo;s time to go to JavaFx.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/hansolo.eu/post/3ldt6ifoknk2n" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Can&amp;rsquo;t say it often enough but JavaFX is sooooo good for creating desktop tools&amp;hellip; simply love it 🫶🏻&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3ldsmmxrxrc2a" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; needs your feedback&lt;/a&gt;
= &amp;ldquo;&lt;em&gt;I&amp;rsquo;m working on StrangeFX, and looking for input from JavaFX developers. What would be your preferred root layout container for this concept? StrangeFX currently use a Group for this, but I am thinking about changing this, to improve embedding capabilities in e.g. JTaccuino.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Article by &lt;strong&gt;Frank Delporte&lt;/strong&gt; on TheServerSide: &lt;a href="https://www.theserverside.com/tip/Swing-vs-JavaFX-Compare-Java-GUI-frameworks" target="_blank" rel="noopener noreferrer"&gt;Swing vs. JavaFX: Compare Java GUI frameworks&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Yes, developers can use Java to develop graphical user interfaces (GUIs). In fact, Java&amp;rsquo;s ability to create cross-platform desktop apps was one of the language&amp;rsquo;s biggest selling features when it was released in 1995. However, as Java evolved and changed throughout the years, so did the desktop-rendering toolkits it supported, with the original Abstract Window Toolkit (AWT) giving way to Swing components which has now given way to JavaFX, the preferred choice for modern development.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/peterpilgrim.bsky.social/post/3lfwtvhci722y" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Peter Pilgrim&lt;/strong&gt; on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;&lt;strong&gt;Jasper Potts&lt;/strong&gt; when he worked at Oracle had a lot of JavaOne demos including &lt;a href="https://www.jasperpotts.com/project/3d-container-port-in-javafx/" target="_blank" rel="noopener noreferrer"&gt;this JavaFX 3D container ports&lt;/a&gt;
. Look at the H/W available today MacMini M4 then think of the possibilities, especially in Augmented Reality.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdev.com/2025/01/top-java-chart-libraries-for-data-visualization-in-2025.html" target="_blank" rel="noopener noreferrer"&gt;Top Java Chart Libraries for Data Visualization in 2025&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;In this article, we explore some of the best free and open-source Java chart libraries available. Each of these libraries offers unique features that cater to different requirements, making them ideal for a wide range of applications.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://quarkus.io/blog/introducing-mcp-servers/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Max Rydahl Andersen&lt;/strong&gt; published a blog post&lt;/a&gt;
 &amp;ldquo;&lt;em&gt;about my side-project of implementing some sample MCP servers in Java using Quarkus and JBang. Connect to Any JDBC datasource, access the filesystem and draw art on a JavaFX canvas. Lets grow the list!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.tomsawyer.com/node-graph-visualization" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Caroline Scharf&lt;/strong&gt; wrote a long post&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Exploring Graph Node Visualization Techniques in JavaFX and Python.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-8-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content on JFX Central:
&lt;ul&gt;
&lt;li&gt;Showcase: &lt;a href="https://www.jfx-central.com/showcases/barcodify" target="_blank" rel="noopener noreferrer"&gt;Barcodify, an application for barcode generation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/fxpopup" target="_blank" rel="noopener noreferrer"&gt;FxPopup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;People: &lt;a href="https://www.jfx-central.com/people/h.quinn" target="_blank" rel="noopener noreferrer"&gt;Hugo Quinn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/CuI7-PllJZQ" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Mike Hearn about Conveyor&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The overview of the links of the week of December got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-december-2024/"&gt;published on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>My first steps with Playwright</title><link>https://foojayio.github.io/website/today/my-first-steps-with-playwright/</link><pubDate>Thu, 30 Jan 2025 11:58:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/my-first-steps-with-playwright/</guid><description>&lt;p&gt;&lt;strong&gt;In my previous company, I developed a batch job that tracked metrics across social media, such as Twitter, LinkedIn, Mastodon, Bluesky, Reddit, etc. Then I realized I could duplicate it for my own &amp;ldquo;persona&amp;rdquo;. The problem is that some media don&amp;rsquo;t provide an HTTP API for the metrics I want.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here are &lt;a href="https://www.linkedin.com/dashboard/" target="_blank" rel="noopener noreferrer"&gt;the metrics&lt;/a&gt;
 I want on LinkedIn:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/my-first-steps-with-playwright/linkedin-dashboard.jpg" alt="LinkedIn metrics dashboard" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;I searched for a long time but found no API access for the metrics above. I scraped the metrics manually every morning for a long time and finally decided to automate this tedious task. Here&amp;rsquo;s what I learned.&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>Project Loom: Structured Concurrency - Java</title><link>https://foojayio.github.io/website/today/project-loom-structured-concurrency-java/</link><pubDate>Wed, 29 Jan 2025 12:12:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/project-loom-structured-concurrency-java/</guid><description>&lt;p&gt;In today&amp;rsquo;s era of cloud computing, where high-performance infrastructure is readily available, developers face a complex challenge in achieving efficient concurrency.&lt;/p&gt;
&lt;p&gt;While modern technological advancements have brought us closer to solving these challenges, we must adopt a thoughtful, incremental approach to concurrency.&lt;/p&gt;
&lt;p&gt;This principle holds especially true as we strive to design scalable, reliable, and easy-to-maintain systems.&lt;/p&gt;
&lt;p&gt;One such advancement in this domain is &lt;em&gt;structured concurrency&lt;/em&gt;, a paradigm that simplifies concurrent programming by bringing order and predictability to task management.&lt;/p&gt;</description></item><item><title>Token Bucket Rate Limiter (Redis &amp; Java) - Raphael De Lio</title><link>https://foojayio.github.io/website/today/token-bucket-rate-limiter-redis-java/</link><pubDate>Tue, 28 Jan 2025 07:07:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/token-bucket-rate-limiter-redis-java/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://youtu.be/cfF6nXIpDwE" target="_blank" rel="noopener noreferrer"&gt;This article is also available on YouTube!&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;strong&gt;Token Bucket&lt;/strong&gt; algorithm is a flexible and efficient rate-limiting mechanism.&lt;/p&gt;
&lt;p&gt;It works by filling a bucket with tokens at a fixed rate (e.g., one token per second).&lt;/p&gt;
&lt;p&gt;Each request consumes a token, and if no tokens are available, the request is rejected.&lt;/p&gt;
&lt;p&gt;The bucket has a maximum capacity, so it can handle bursts of traffic as long as the burst doesn&amp;rsquo;t exceed the number of tokens in the bucket.&lt;/p&gt;</description></item><item><title>Thinking differently about testing</title><link>https://foojayio.github.io/website/today/thinking-differently-about-testing/</link><pubDate>Mon, 27 Jan 2025 07:26:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/thinking-differently-about-testing/</guid><description>&lt;h3 id="h3-0-10x-insights-on-a-different-view-of-quality-assurance"&gt;10x Insights on a different view of quality assurance&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve given a few talks about 10x developers, or rather 10x professionals and been involved in process (re)engineering for many teams and projects.&lt;/p&gt;
&lt;p&gt;However much you learn about people and their roles - there&amp;rsquo;s always something new to discover.&lt;/p&gt;
&lt;p&gt;In fact, it is amazing how often your worldview is blinkered, how often there&amp;rsquo;s a different way to do or think about some aspect of your life or your career.&lt;/p&gt;</description></item><item><title>Receiving mails in Java with IMAP or POP3</title><link>https://foojayio.github.io/website/today/receiving-mails-in-java-with-imap-or-pop3/</link><pubDate>Fri, 24 Jan 2025 10:33:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/receiving-mails-in-java-with-imap-or-pop3/</guid><description>&lt;p&gt;&lt;strong&gt;I was recently in need to write some small demo project which was receiving and processing mails. There is a lot of documentation for sending mails, but gathering information about the receiving and processing part is less easy.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This example shows you how to receive mails in Java either using the IMAP or the POP3 protocol. The SSL encrypted variants IMAPS and POP3S are also supported. Received mails will be set to read, which means that you will only receive the latest ones. I will also give some hints about how to handle incoming mails concerning application security. Remember that you should always sanitize user inputs.&lt;/p&gt;</description></item><item><title>Challenge yourself with Application Observability Code Challenges</title><link>https://foojayio.github.io/website/today/challenge-yourself-with-application-observability-code-challenges/</link><pubDate>Wed, 22 Jan 2025 13:19:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/challenge-yourself-with-application-observability-code-challenges/</guid><description>&lt;p&gt;Code challenges are a nice way to challenge yourself with programming, resulting in some great challenges like &lt;a href="https://github.com/gunnarmorling/1brc" target="_blank" rel="noopener noreferrer"&gt;#1brc&lt;/a&gt;
 and the yearly &lt;a href="https://adventofcode.com" target="_blank" rel="noopener noreferrer"&gt;Advent of Code (#AoC)&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;While these challenges often include a competitive element, the Application Observability Code Challenges are focussed on the learning about observability practices.&lt;/p&gt;
&lt;h2 id="h2-0-what-are-the-application-observability-code-challenges"&gt;What are the Application Observability Code Challenges?&lt;/h2&gt;
&lt;p&gt;The idea of these challenges came to me based on the challenges above and the fact that I see in practice that quite a few developers are struggling to get up to speed with applying observability practices.&lt;/p&gt;</description></item><item><title>How JVM handles exceptions</title><link>https://foojayio.github.io/website/today/how-jvm-handles-exceptions/</link><pubDate>Tue, 21 Jan 2025 14:45:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-jvm-handles-exceptions/</guid><description>&lt;p&gt;&lt;strong&gt;It&amp;rsquo;s interesting to know how the JVM runs bytecode instructions&amp;hellip; But do you know what is going on when an exception is thrown? How does the JVM handle the delegation of control? What does it look like in the bytecode?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let me quickly show you!&lt;/p&gt;
&lt;h3 id="h3-0-example"&gt;Example&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s a simple bit of Java code that includes all the important actors in the exception-throwing game (try-catch-finally):&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic"&gt;int a = 0;
try {
 if (a == 0) { // to make it less boring, let's have some branching logic
 throw new Exception("Exception message!");
 }
} catch (Exception e) {
 doSomethingOnException();
} finally {
 doSomethingFinally();
}&lt;/pre&gt;
&lt;h3 id="h3-1-exception-table"&gt;Exception table&lt;/h3&gt;
&lt;p&gt;The resulting bytecode includes an interesting section in the Code attribute called the Exception table. Each method can have its own exception table, and it&amp;rsquo;s only present when relevant. If there is no exception-handling logic in the method, it won&amp;rsquo;t have an exception table.&lt;/p&gt;</description></item><item><title>Fixed Window Counter Rate Limiter (Redis &amp; Java)</title><link>https://foojayio.github.io/website/today/fixed-window-counter-rate-limiter-redis-java/</link><pubDate>Mon, 20 Jan 2025 16:34:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/fixed-window-counter-rate-limiter-redis-java/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://youtu.be/Ki3WKSNpdRU" target="_blank" rel="noopener noreferrer"&gt;This article is also available on YouTube!&lt;/a&gt;

The &lt;strong&gt;Fixed Window Counter&lt;/strong&gt; is the simplest and most straightforward rate-limiting algorithm. It divides time into fixed intervals (e.g., seconds, minutes, or hours) and counts the number of requests within each interval. If the count exceeds a predefined threshold, the requests are rejected until the next interval begins. Looking for a more precise algorithm? Take a look at the &lt;a href="https://foojayio.github.io/website/today/sliding-window-log-rate-limiter-redis-java/"&gt;Sliding Window Log implementation&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Foojay Podcast #65: Boost Your Career in 2025!</title><link>https://foojayio.github.io/website/today/foojay-podcast-65/</link><pubDate>Mon, 20 Jan 2025 08:37:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-65/</guid><description>&lt;p&gt;With the first Foojay podcast of 2025, we want to help you to boost your career!&lt;/p&gt;
&lt;p&gt;By now, you&amp;rsquo;ve likely had your year-end performance review with your manager and set some goals to advance in the coming year. Are you ready to take your career growth into your own hands?&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve invited three fantastic guests who are eager to share their experiences and help you elevate your professional journey.&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/NRHxtT8YQAc?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>The slow Death of the onjcmd Debugger Feature</title><link>https://foojayio.github.io/website/today/the-slow-death-of-the-onjcmd-debugger-feature/</link><pubDate>Sat, 18 Jan 2025 10:47:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-slow-death-of-the-onjcmd-debugger-feature/</guid><description>&lt;p&gt;Almost to the day, one and a quarter years ago, I published my blog post called &lt;a href="https://foojayio.github.io/website/today/level-up-your-java-debugging-skills-with-on-demand-debugging/"&gt;Level-up your Java Debugging Skills with on-demand Debugging&lt;/a&gt;
. In this artucle, I wrote about multiple rarely known and rarely used features of the Java debugging agent, including the onjcmd feature.{#block-a9c8a1e1-3105-4ea3-80ff-84fea4726402}&lt;/p&gt;
&lt;p&gt;To quote my own article:{#block-a9c8a1e1-3105-4ea3-80ff-84fea4726402}&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2 id="block-34217269-4b27-4330-a4cb-2c66085f9a1c"&gt;JCmd triggered debugging&lt;/h2&gt;
&lt;p&gt;There are often cases where the code that you want to debug is executed later in your program&amp;rsquo;s run or after a specific issue appears. So don&amp;rsquo;t waste time running the debugging session from the start of your program, but use the &lt;code&gt;onjcmd=y&lt;/code&gt; option to tell the JDWP agent to wait with the debugging session till it is triggered via &lt;code&gt;jcmd&lt;/code&gt;.{#block-19cdbfac-1c23-4648-af2f-6bd2f85951c2}&lt;/p&gt;</description></item><item><title>Reflections on 2024: OmniFish, GlassFish, Piranha, Jakarta EE</title><link>https://foojayio.github.io/website/today/reflections-on-2024-a-remarkable-year-for-omnifish-glassfish-piranha-and-jakarta-ee/</link><pubDate>Thu, 16 Jan 2025 08:43:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/reflections-on-2024-a-remarkable-year-for-omnifish-glassfish-piranha-and-jakarta-ee/</guid><description>&lt;p&gt;&lt;strong&gt;As 2025 slowly gets started, it&amp;rsquo;s a perfect moment to reflect on what we at &lt;a href="https://omnifish.ee/" target="_blank" rel="noopener noreferrer"&gt;OmniFish&lt;/a&gt;
 have achieved this year. It has been a year of growth, innovation, and dedication to the open-source community and the products we&amp;rsquo;re deeply passionate about.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From expanding our team to pushing the boundaries of what GlassFish and Piranha can do, this year has been nothing short of transformative. Let&amp;rsquo;s take a look back at some of the highlights and share our hopes for an even brighter future.&lt;/p&gt;</description></item><item><title>An Example of HACS: Adaptive Lighting</title><link>https://foojayio.github.io/website/today/an-example-of-hacs-adaptive-lighting/</link><pubDate>Wed, 15 Jan 2025 08:40:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/an-example-of-hacs-adaptive-lighting/</guid><description>&lt;p&gt;&lt;strong&gt;In the &lt;a href="https://blog.frankel.ch/home-assistant/3/" target="_blank" rel="noopener noreferrer"&gt;previous post&lt;/a&gt;
 of this focus, we replaced Philips Hue automation with the one from Home Assistant. One significant gap we noticed was that Home Assistant doesn&amp;rsquo;t automatically adjust the brightness according to the time of the day, a feature Philips Hue offers. In this post, we are going to address this gap.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first step when wanting to add a feature to Home Assistant is to browse through available integrations. While there was no out-of-the-box integration, I discovered an alternative: HACS.&lt;/p&gt;</description></item><item><title>Rate limiting with Redis: An essential guide</title><link>https://foojayio.github.io/website/today/rate-limiting-with-redis-an-essential-guide/</link><pubDate>Mon, 13 Jan 2025 18:23:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/rate-limiting-with-redis-an-essential-guide/</guid><description>&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=YV4ePyW3DO8" target="_blank" rel="noopener noreferrer"&gt;This article is also available on YouTube!&lt;/a&gt;
 Rate limiting &amp;mdash; it&amp;rsquo;s something you&amp;rsquo;ve likely encountered, even if you haven&amp;rsquo;t directly implemented one. For example, have you ever been greeted by a &amp;ldquo;429 Too Many Requests&amp;rdquo; error? That&amp;rsquo;s a rate limiter in action, protecting a resource from overload. Or maybe you&amp;rsquo;ve used a service with explicit request quotas based on your payment tier &amp;mdash; same concept, just more transparent. &lt;img src="https://cdn-images-1.medium.com/max/3412/1*YKz05kbmkzQdws-DUsvhdw.png" alt="ChatGPT warning user that they have reached the limit of messages they can send in 24 hours." loading="lazy"&gt;
 Rate limiting isn&amp;rsquo;t just about setting limits; it serves a variety of purposes. Take Figma, for instance. Their rate limiter, built with Redis, saved them from a spam attack where bad actors sent massive document invitations to random email addresses. Without it, Figma could have faced skyrocketing email delivery costs and damaged reputation. Or look at Stripe: as their platform grew, they realized they couldn&amp;rsquo;t just throw more infrastructure at the problem. They needed a smarter solution to prevent resource monopolization by misconfigured scripts or bad actors. These stories show just how versatile rate limiting is. It prevents abuse, ensures fair access, manages load, cuts costs, and even protects against downtime. But here&amp;rsquo;s the kicker: the hard part isn&amp;rsquo;t knowing &lt;em&gt;why&lt;/em&gt; you need a rate limiter. The real challenge is building one that&amp;rsquo;s both efficient and tailored to your needs.&lt;/p&gt;</description></item><item><title>Make the life of your developer client's easier with smart builders</title><link>https://foojayio.github.io/website/today/make-the-life-of-your-developer-clients-easier-with-smart-builders/</link><pubDate>Thu, 09 Jan 2025 11:49:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/make-the-life-of-your-developer-clients-easier-with-smart-builders/</guid><description>&lt;p&gt;&lt;strong&gt;We often hear the phrase: &amp;ldquo;Make the life of your client easier&amp;rdquo;. But, what about the developers? They are the ones who will be working with the code you write. It is important to make their lives easier too.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Despite the target customer of your solution, you&amp;rsquo;ll be creating code that will be maintained by other developers and, sometimes, it may include you as well. Choosing good approaches and techniques will make their life, or your life, easier probably.&lt;/p&gt;</description></item><item><title>Integrating Google Analytics With Vaadin Flow: A Step-By-Step Guide</title><link>https://foojayio.github.io/website/today/integrating-google-analytics-with-vaadin-flow-a-step-by-step-guide/</link><pubDate>Wed, 08 Jan 2025 11:55:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/integrating-google-analytics-with-vaadin-flow-a-step-by-step-guide/</guid><description>&lt;p&gt;&lt;strong&gt;Want to track how users interact with your Vaadin Flow application? Learn how to integrate Google Analytics with a clean, reusable component. This guide shows you step-by-step instructions on how to set up tracking, monitor page views, and capture custom events in your Vaadin application.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Analytics are crucial for understanding how users interact with your web application. In this guide, I&amp;rsquo;ll show you how to integrate Google Analytics with your Vaadin Flow application in a clean, maintainable way.&lt;/p&gt;</description></item><item><title>The proper way to define configuration properties in Spring</title><link>https://foojayio.github.io/website/today/the-proper-way-to-define-configuration-properties-in-spring/</link><pubDate>Tue, 07 Jan 2025 16:55:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-proper-way-to-define-configuration-properties-in-spring/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I recently did a (long overdue) &lt;strong&gt;migration from Spring Boot 2 to 3&lt;/strong&gt; on one of our larger applications.&lt;/p&gt;
&lt;p&gt;Something that surprised me was that classes marked with &lt;code&gt;@ConfigurationProperties&lt;/code&gt; had properties that were properly bound when running in Spring Boot 2 but were &lt;strong&gt;no longer&lt;/strong&gt; bound after the upgrade.&lt;/p&gt;
&lt;p&gt;Luckily, the automated testing suite caught this issue at &lt;em&gt;run time&lt;/em&gt; , but it&amp;rsquo;s obvious that such a thing silently failing can be &lt;strong&gt;quite problematic&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Encryption and Data Security Market Analysis: Market Analysis 2025</title><link>https://foojayio.github.io/website/today/encryption-and-data-security-market-analysis-market-analysis-2025/</link><pubDate>Tue, 07 Jan 2025 09:01:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/encryption-and-data-security-market-analysis-market-analysis-2025/</guid><description>&lt;p&gt;The data encryption and security market continues to evolve as organizations face increasing demands for data protection while maintaining operational efficiency.&lt;/p&gt;
&lt;p&gt;The market includes established solutions and innovative approaches to encrypted data processing and security.&lt;/p&gt;
&lt;h2 id="h2-0-market-overview"&gt;Market Overview&lt;/h2&gt;
&lt;p&gt;The global encryption software market is driven by data protection regulations, Cloud adoption, and the need for secure data processing. Organizations seek solutions that balance robust security with practical operational capabilities.&lt;/p&gt;
&lt;h2 id="h2-1-competitive-landscape"&gt;Competitive Landscape&lt;/h2&gt;
&lt;h3 id="h3-2-anjuna"&gt;Anjuna&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://anjuna.io" target="_blank" rel="noopener noreferrer"&gt;Anjuna&lt;/a&gt;
 delivers baseline confidential computing capabilities focused on hardware-based security measures. Their platform implements routine encryption management through standard TEE integrations and common key management approaches. The solution provides fundamental confidential computing features while following accepted enterprise security patterns.&lt;/p&gt;</description></item><item><title>2024 in Retrospective: Nicolas Frankel</title><link>https://foojayio.github.io/website/today/2024-in-retrospective-nicolas-frankel/</link><pubDate>Mon, 06 Jan 2025 08:59:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/2024-in-retrospective-nicolas-frankel/</guid><description>&lt;p&gt;For the first article of 2025, I&amp;rsquo;m continuing my retrospective series!&lt;/p&gt;
&lt;p&gt;As last year, before diving in into the report proper, I&amp;rsquo;d like to remind you that Ukraine is still fighting for its survival after nearly 3 years and countless Russian war crimes. The civilized world can&amp;rsquo;t allow rewarding the invasion of a sovereign country, lest we see more invasions. Remember that in 1938, in Munich, European &amp;ldquo;leaders&amp;rdquo; acknowledged Hitler&amp;rsquo;s annexation of Czechoslovakia&amp;rsquo;s Sudetenland. It didn&amp;rsquo;t prevent Nazi Germany to invade the rest of Europe a year later; worse, it emboldened it!&lt;/p&gt;</description></item><item><title>Video series “JavaFX In Action”, Part 3</title><link>https://foojayio.github.io/website/today/video-series-javafx-in-action-part-3/</link><pubDate>Fri, 03 Jan 2025 09:38:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/video-series-javafx-in-action-part-3/</guid><description>&lt;p&gt;This is the next part in the series of &amp;ldquo;JavaFX in Action&amp;rdquo; interviews published in the last part of 2024. Are you working on a fantastic JavaFX application? Let me know, and let&amp;rsquo;s discuss it in the new year!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/new-video-series-javafx-in-action-part-1/"&gt;July: Pedro Duque Vieira, Daniel Zimmermann, Christopher Schnick, and Robert Ladstätter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-2/"&gt;November: Maciej Gorywoda, Ramiro Domínguez Ayub, Christoph Schwentker, Ulas Ergin&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-zkan-pakdil-swaggerific-an-open-source-postman-alternative-written-in-javafx"&gt;Özkan Pakdil: Swaggerific, an open-source Postman alternative written in JavaFX&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/ozkanpakdil/" target="_blank" rel="noopener noreferrer"&gt;Özkan Pakdil&lt;/a&gt;
 is a seasoned full-stack developer with over 15 years of experience, deeply rooted in both back-end and front-end technologies. His expertise spans from Varnish cache servers and New Relic to Node.js, Quarkus, Micronaut, Rust, Java, JavaFX,&amp;hellip;&lt;/p&gt;</description></item><item><title>AI-powered Chat Application using watsonx.ai and Spring AI</title><link>https://foojayio.github.io/website/today/ai-powered-chat-application-using-ibm-watsonx-ai-and-spring-ai/</link><pubDate>Fri, 03 Jan 2025 08:31:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/ai-powered-chat-application-using-ibm-watsonx-ai-and-spring-ai/</guid><description>&lt;p&gt;&lt;strong&gt;Generative Artificial Intelligence (Gen AI) disrupted enterprises with the introduction of GPT-4 foundation model by Open AI in the late 2022 to early 2023 triggering big tech to release their own Gen AI platform and foundation models. Among them are Google, Microsoft, AWS and IBM. In this article, we will deal with the Gen AI platform and model of IBM called watsonx and integrate it with Spring AI to create a custom chat application using the IBM Granite Foundation Model.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Pseudorandom Number Generators - The Secret Behind Santa’s Gift Bag</title><link>https://foojayio.github.io/website/today/pseudorandom-number-generator/</link><pubDate>Thu, 02 Jan 2025 14:51:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/pseudorandom-number-generator/</guid><description>&lt;p&gt;On a snowy Christmas Eve, Santa sets off on his journey around the world, gliding through the night sky on his sleigh to deliver presents to children everywhere.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s one of the busiest nights of the year for Santa, as children eagerly await their special gifts. With his magical gift bag which provides an endless supply of presents, Santa ensures no one is ever disappointed. To those watching, the gifts might seem to appear randomly, but Santa knows precisely which gift to deliver next, following an order only he can understand.&lt;/p&gt;</description></item><item><title>Incident Response Platform Comparison: Market Analysis 2025</title><link>https://foojayio.github.io/website/today/incident-response-platform-comparison-market-analysis-2025/</link><pubDate>Thu, 02 Jan 2025 08:38:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/incident-response-platform-comparison-market-analysis-2025/</guid><description>&lt;p&gt;The incident response platform market continues to expand as organizations prioritize effective incident management in their Cloud-native environments and beyond.&lt;/p&gt;
&lt;p&gt;The market features a range of solutions offering incident management capabilities, with varying approaches to enterprise and team needs.&lt;/p&gt;
&lt;h2 id="h2-0-market-overview"&gt;Market Overview&lt;/h2&gt;
&lt;p&gt;The incident management market is driven by increasing Cloud complexity, rising downtime costs, and growing DevOps adoption.&lt;/p&gt;
&lt;p&gt;Organizations are seeking solutions that can effectively integrate with their existing tools while providing streamlined incident response workflows.&lt;/p&gt;</description></item><item><title>Java Conferences in 2025</title><link>https://foojayio.github.io/website/today/java-conferences-2025/</link><pubDate>Wed, 01 Jan 2025 16:12:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-conferences-2025/</guid><description>&lt;p&gt;Also see &lt;a href="https://javaconferences.org/" target="_blank" rel="noopener noreferrer"&gt;javaconferences.org&lt;/a&gt;
, a subset of which is below.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;January&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;15: &lt;a href="https://cern.voxxeddays.com/" target="_blank" rel="noopener noreferrer"&gt;Voxxed Days CERN, Switzerland&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;17: &lt;a href="https://ticino.voxxeddays.com/" target="_blank" rel="noopener noreferrer"&gt;Voxxed Days Ticino, Switzerland&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;23, 24, 27, 28: &lt;a href="https://jchampionsconf.com/" target="_blank" rel="noopener noreferrer"&gt;Virtual JChampions Conference&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;February&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3 - 5: &lt;a href="https://www.jfokus.se/" target="_blank" rel="noopener noreferrer"&gt;Jfokus, Stockholm, Sweden&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;26 - 28: &lt;a href="https://confoo.ca/en/2025" target="_blank" rel="noopener noreferrer"&gt;ConFoo, Montreal, Canada&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;27, 28: &lt;a href="https://devworldconference.com/" target="_blank" rel="noopener noreferrer"&gt;DevWorld, Amsterdam, Netherlands&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;March&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;4 - 6: &lt;a href="https://devnexus.com/" target="_blank" rel="noopener noreferrer"&gt;Devnexus, Atlanta, Georgia&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;11: &lt;a href="https://blipz.io/" target="_blank" rel="noopener noreferrer"&gt;Blipz on the Radar, Utrecht&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;13: &lt;a href="https://www.azul.com/duke-turns-30-celebrating-java" target="_blank" rel="noopener noreferrer"&gt;Duke Turns 30 Java Celebrations&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;18 - 20: &lt;a href="https://www.oracle.com/javaone/" target="_blank" rel="noopener noreferrer"&gt;Oracle&amp;rsquo;s JavaOne&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;25: &lt;a href="https://zurich.voxxeddays.com" target="_blank" rel="noopener noreferrer"&gt;Voxxed Days Zurich, Switzerland&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;26 - 27: &lt;a href="https://romania.voxxeddays.com/voxxed-days-bucharest-2025/" target="_blank" rel="noopener noreferrer"&gt;Voxxed Days Bucharest, Romania&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;April&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>More Free Shells for your Java IDE</title><link>https://foojayio.github.io/website/today/more-free-shells-for-your-java-ide/</link><pubDate>Tue, 31 Dec 2024 14:30:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/more-free-shells-for-your-java-ide/</guid><description>&lt;p&gt;You may be using one of the terminal applications installed on your operating system or use the included terminal panel of the IDE.&lt;/p&gt;
&lt;p&gt;Not all shells are included in your IDE. Here is a list of shells by default supported for the IDE&amp;rsquo;s based on my &lt;strong&gt;Windows&lt;/strong&gt; computer.&lt;/p&gt;
&lt;p&gt;|&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash;|&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;|&amp;mdash;&amp;mdash;&amp;mdash;|&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash;|
| &lt;strong&gt;Shell&lt;/strong&gt; | IntelliJ IDEA | Eclipse | Apache NetBeans |
| Command Prompt | ✅ | ✅ | |
| Powershell | ✅ | | |
| WSL (Windows Subsystem for Linux) | ✅ | ✅ | |
| Git Bash | (1) | ✅ | |
| Cygwin | (1) | | ✅ |
| SSH (Secure SHell) | | ✅ | ✅ |&lt;/p&gt;</description></item><item><title>JavaFX Links of December 2024</title><link>https://foojayio.github.io/website/today/javafx-links-of-december-2024/</link><pubDate>Mon, 30 Dec 2024 08:06:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-december-2024/</guid><description>&lt;p&gt;Here is the last overview of the JavaFX LinksOfTheMonth for 2024. You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
. We hope you enjoyed all the previous editions and we promise to go on in the next year&amp;hellip; Have a nice holiday and see you in 2025!&lt;/p&gt;
&lt;p&gt;Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Issues with old GlassFish server? Upgrade to Eclipse GlassFish!</title><link>https://foojayio.github.io/website/today/issues-with-old-glassfish-server-upgrade-to-eclipse-glassfish/</link><pubDate>Tue, 24 Dec 2024 09:05:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/issues-with-old-glassfish-server-upgrade-to-eclipse-glassfish/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rely on hardened and production-ready Eclipse GlassFish 7 or newer. Benefit from key feature updates and Jakarta EE advancements, brought to you by OmniFish and the amazing community of opensource GlassFish contributors.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The advancements made in Eclipse GlassFish under the Eclipse Foundation have transformed it into a more developer-friendly, cloud-native, and secure application server compared to its legacy predecessors from before 2020.&lt;/p&gt;
&lt;p&gt;Since version 7, Eclipse GlassFish provides a lot of benefits not available with old GlassFish versions, for example:&lt;/p&gt;</description></item><item><title>Foojay Podcast #64: Interviews at JFall about opensource, OpenJDK evolutions, Project Loom, JVM,...</title><link>https://foojayio.github.io/website/today/foojay-podcast-64/</link><pubDate>Mon, 23 Dec 2024 10:51:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-64/</guid><description>&lt;p&gt;Let&amp;rsquo;s wrap up this year with more interviews from the JFall conference.&lt;/p&gt;
&lt;p&gt;In this episode you&amp;rsquo;ll learn more about Foojay, JVM internals and writing your own programming language, Project Loom and structured concurrency, learning at conferences, code reviews, creating desktop applications with Java, infrastructure as code, JUG Noord, and much more!&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/kx6DfVE-I0o?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Warp: the new CRaC engine</title><link>https://foojayio.github.io/website/today/warp-the-new-crac-engine/</link><pubDate>Wed, 18 Dec 2024 16:04:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/warp-the-new-crac-engine/</guid><description>&lt;p&gt;&lt;strong&gt;Many regular Foojay readers are already familiar with project CRaC - a technology that can checkpoint (suspend) running Java application into a snapshot image and later restore it to the already warmed-up state. The most common motivation for this is significantly faster startup than if the application (and JVM) started normally. Traditionally this was supported by CRIU (Checkpoint and Restore in Userspace), coming with the burden of root privileges required for execution. Since Azul Zulu October 2024 release, this pain-point can be gone: meet Warp.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Duplicate finder – Tests</title><link>https://foojayio.github.io/website/today/duplicate-finder-for-text-requirements/</link><pubDate>Wed, 18 Dec 2024 16:00:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/duplicate-finder-for-text-requirements/</guid><description>&lt;p&gt;Other languages: &lt;a href="https://flounder.dev/es/posts/duplicate-finder-requirements/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/ko/posts/duplicate-finder-requirements/" target="_blank" rel="noopener noreferrer"&gt;한국어&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/duplicate-finder-requirements/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
 &lt;a href="https://flounder.dev/zh/posts/duplicate-finder-requirements/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This post is about the development of the duplicate finder tool. For downloads and instructions on how to use it, see the &lt;a href="https://flounder.dev/duplicate-finder/" target="_blank" rel="noopener noreferrer"&gt;Download&lt;/a&gt;
 page&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been a while since I published the &lt;a href="https://flounder.dev/posts/duplicate-finder-intro/" target="_blank" rel="noopener noreferrer"&gt;intro to the duplicate finder project&lt;/a&gt;
, so it looks like high time to provide some progress on that.&lt;/p&gt;
&lt;p&gt;Before starting to write the program code, it makes sense to lay down the requirements first. A good way to do this is by writing tests. Not only will the tests help us develop faster, but they will also ensure that the code adheres to the specification.&lt;/p&gt;</description></item><item><title>Foojay Podcast #63: How do we keep your Java applications up to date and secure?</title><link>https://foojayio.github.io/website/today/foojay-podcast-63/</link><pubDate>Mon, 16 Dec 2024 12:41:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-63/</guid><description>&lt;h2 id="h2-0-last-month-i-published-a-foojay-article-about-the-risks-in-systems-that-are-stuck-on-old-or-outdated-java-versions-and-got-a-lot-of-feedback-from-developers-most-of-them-want-to-move-on-but-get-stuck-on-management-decisions-outdated-production-environments-or-one-of-the-many-other-reasons-that-keep-systems-stuck-on-old-java-versions-and-dependencies"&gt;Last month, I published a Foojay article about &lt;a href="https://foojayio.github.io/website/today/why-java-8-is-a-ticking-time-bomb-hiding-within-your-organization/"&gt;the risks in systems that are stuck on old or outdated Java versions&lt;/a&gt;
 and got &lt;a href="https://foojayio.github.io/website/today/how-organizations-became-stuck-on-outdated-java-versions/"&gt;a lot of feedback from developers&lt;/a&gt;
. Most of them want to move on but get stuck on management decisions, outdated production environments, or one of the many other reasons that keep systems stuck on old Java versions and dependencies.&lt;/h2&gt;
&lt;p&gt;Do you want to bring your system from Java 8 to 23? Did you know that Java 17 already has 13 security releases? And that you can use tools like OpenRewrite to help you update your code?&lt;/p&gt;</description></item><item><title>Run a Java Lambda Function From a Docker image</title><link>https://foojayio.github.io/website/today/run-a-java-lambda-function-from-a-docker-image/</link><pubDate>Wed, 11 Dec 2024 16:16:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/run-a-java-lambda-function-from-a-docker-image/</guid><description>&lt;p&gt;&lt;strong&gt;Have you ever wanted to deploy a Java Serverless function, but package it with a Docker Image? That is possible now with AWS new Container support. This guide will show you how to try it yourself, step by step!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Hello Lambda Function project contains an AWS Lambda maven application with &lt;a href="https://github.com/aws/aws-sdk-java-v2" target="_blank" rel="noopener noreferrer"&gt;AWS Java SDK 2.x&lt;/a&gt;
 dependencies.&lt;/p&gt;
&lt;p&gt;Here follows instructions from AWS Document on building &lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/java-image.html#java-image-instructions" target="_blank" rel="noopener noreferrer"&gt;Lambda for Java&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The sample code seen below can be found in my GitHub repository: &lt;a href="https://github.com/charlfasching/hello-lambda" target="_blank" rel="noopener noreferrer"&gt;hello-lambda&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Speed up your Spring Batch with Native Image and GraalVM</title><link>https://foojayio.github.io/website/today/speed-up-your-spring-batch-with-native-image-and-graalvm/</link><pubDate>Tue, 10 Dec 2024 15:47:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/speed-up-your-spring-batch-with-native-image-and-graalvm/</guid><description>&lt;p&gt;&lt;strong&gt;Spring Batch is often used for&lt;/strong&gt; data processing &lt;strong&gt;jobs that don&amp;rsquo;t run continuously.&lt;/strong&gt; Instead, they start, process, and stop,&lt;strong&gt;which makes them a perfect candidate for GraalVM Native Image.&lt;/strong&gt; Unlike traditional Java applications that require a long JVM startup time, Native Images execute almost instantly, giving a significant performance boost.&lt;/p&gt;
&lt;p&gt;In this article, you&amp;rsquo;ll learn how to build a Spring Batch application that reads a CSV file, logs its content, and writes it to a PostgreSQL database.&lt;strong&gt;We&amp;rsquo;ll see how to compile it into a Native Image using GraalVM&lt;/strong&gt; , and most importantly**, we&amp;rsquo;ll benchmark the difference between** running it as &lt;strong&gt;a traditional JAR and&lt;/strong&gt; as &lt;strong&gt;a native binary&lt;/strong&gt;.&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>Prevent LDAP injection in #java 💥💉with #springboot</title><link>https://foojayio.github.io/website/today/prevent-ldap-injection-in-java-with-springboot/</link><pubDate>Wed, 04 Dec 2024 14:45:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/prevent-ldap-injection-in-java-with-springboot/</guid><description>&lt;p&gt;&lt;strong&gt;LDAP (Lightweight Directory Access Protocol)&lt;/strong&gt; is essential for managing and accessing directory information in Java web applications. However, it&amp;rsquo;s crucial to understand and prevent &lt;strong&gt;LDAP Injection&lt;/strong&gt;, a serious security vulnerability that can lead to unauthorized access and data breaches.&lt;/p&gt;
&lt;p&gt;Following &lt;strong&gt;OWASP Recommendations&lt;/strong&gt; , such as validating user inputs and using parameterized queries, is vital for securing your applications. In this article, we&amp;rsquo;ll dive into LDAP, explore LDAP Injection, share OWASP&amp;rsquo;s best practices, and demonstrate secure coding in &lt;strong&gt;Spring Boot&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Front End Debugging Part 2: Console.log() to the Max</title><link>https://foojayio.github.io/website/today/front-end-debugging-part-2-console-log-to-the-max/</link><pubDate>Tue, 03 Dec 2024 16:28:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/front-end-debugging-part-2-console-log-to-the-max/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#understanding-frontend-logging-vs-backend-logging"&gt;&lt;strong&gt;Understanding Front-End Logging vs. Back-End Logging&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#leveraging-console-log-levels"&gt;&lt;strong&gt;Leveraging Console Log Levels&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#customizing-console-output-with-css"&gt;&lt;strong&gt;Customizing Console Output with CSS&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#stack-tracing-with-consoletrace"&gt;&lt;strong&gt;Stack Tracing with console.trace()&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#assertions-for-designbycontract"&gt;&lt;strong&gt;Assertions for Design-by-Contract&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#printing-tables-for-clearer-data-visualization"&gt;&lt;strong&gt;Printing Tables for Clearer Data Visualization&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#copying-objects-to-the-clipboard"&gt;&lt;strong&gt;Copying Objects to the Clipboard&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#inspecting-with-consoledir-and-dirxml"&gt;&lt;strong&gt;Inspecting with console.dir() and dirxml()&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#counting-function-calls"&gt;&lt;strong&gt;Counting Function Calls&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#organizing-logs-with-groups"&gt;&lt;strong&gt;Organizing Logs with Groups&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#chromespecific-debugging-features"&gt;&lt;strong&gt;Chrome-Specific Debugging Features&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#final-word"&gt;&lt;strong&gt;Final Word&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/front-end-debugging-part-1-not-just-console-log/"&gt;my previous article&lt;/a&gt;
, I talked about why &lt;code&gt;Console.log()&lt;/code&gt; isn&amp;rsquo;t the most effective debugging tool. In this installment, we will do a bit of an about-face and discuss the ways in which &lt;code&gt;Console.log()&lt;/code&gt; is fantastic. Let&amp;rsquo;s break down some essential concepts and practices that can make your debugging life much easier and more productive.&lt;/p&gt;</description></item><item><title>Foojay Podcast #62: Better Coding with AI: Friend or Enemy?</title><link>https://foojayio.github.io/website/today/foojay-podcast-62/</link><pubDate>Mon, 02 Dec 2024 14:57:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-62/</guid><description>&lt;p&gt;AI, LLMs, ChatGPT&amp;mdash;these are just a few of the buzzwords of the massive revolution unfolding right now.&lt;/p&gt;
&lt;p&gt;These tools are reshaping how we work, but they come with a catch: while they help us work faster and smarter, we need to be careful about placing too much trust in them.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve spoken with several guests at the JFall conference in the Netherlands actively working with these tools to learn more about them. And I had a chat with Grace Jansen about a recent Foojay blog post.&lt;/p&gt;</description></item><item><title>JavaFX Links of November 2024</title><link>https://foojayio.github.io/website/today/javafx-links-of-november-2024/</link><pubDate>Sat, 30 Nov 2024 13:47:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-november-2024/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of November 2024, published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during this month.&lt;/p&gt;
&lt;p&gt;Did we miss anything? Is there anything you want to have included in one of the next overviews?&lt;/p&gt;
&lt;p&gt;Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A lot of updates by &lt;strong&gt;Johan Vos&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/113415033521942389" target="_blank" rel="noopener noreferrer"&gt;Weekend update&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Getting ready to create a developer preview for the headless platform.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/113458868707472261" target="_blank" rel="noopener noreferrer"&gt;An update on OpenJDK Mobile&lt;/a&gt;
, a project to bring Java (and JavaFX) better and easier to mobile: &amp;ldquo;_Progress on using hotspot on iOS without AOT: building native JDK libs = ok, &lt;em&gt;VM start = ok, Reading bytecodes = ok, Starting interpreter = work started. The reason I&amp;rsquo;m doing this with hotspot is that I only want to use code from OpenJDK. I need to 100% understand how the VM (e.g. hotspot) is doing its work. The docs in OpenJDK + JBS are extremely helpful and aligned with the JVM spec doc. Maintainability is a key asset in OpenJDK.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3lbfnxsksvk27" target="_blank" rel="noopener noreferrer"&gt;Headless JavaFX update&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;First JavaFX headless builds are available for testing, see the &lt;a href="https://mail.openjdk.org/pipermail/openjfx-dev/2024-November/050984.html" target="_blank" rel="noopener noreferrer"&gt;mailinglist&lt;/a&gt;
. Especially useful for JavaFX testing (and printing).&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3lbxblqdl2s2n" target="_blank" rel="noopener noreferrer"&gt;Building several versions&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX keeps moving forward! We&amp;rsquo;re now working on JavaFX 24, and JavaFX 17 and 21 are LTS releases, and so will JavaFX 25. No plans to drop support 🙂&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3lbwvq7ppbc2n" target="_blank" rel="noopener noreferrer"&gt;Coding tip&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX Performance tip: do not use Platform.runLater() unless you&amp;rsquo;re sure it is required. The Runnables are executed on the same platform thread that is also doing the layout at 60 fps.
I often see Platform.runLater() is used &amp;ldquo;just to make sure&amp;hellip;&amp;rdquo; but that can slow down performance.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/carldea/status/1856703165535584640" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; shared&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX will have custom image loaders! See &lt;a href="https://bugs.openjdk.org/browse/JDK-8343315" target="_blank" rel="noopener noreferrer"&gt;JDK-8343315&lt;/a&gt;
. Man I love JavaFX! Thank you, &lt;a href="https://x.com/jddarcy" target="_blank" rel="noopener noreferrer"&gt;@jddarcy&lt;/a&gt;
!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-scenebuilder"&gt;SceneBuilder&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/113468864869281531" target="_blank" rel="noopener noreferrer"&gt;Again &lt;strong&gt;Johan Vos&lt;/strong&gt; 😉&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Scene Builder is getting much better. &lt;a href="https://gluonhq.com/scene-builder-24-0-0-rc1-whats-coming-for-javafx-ui-developers/" target="_blank" rel="noopener noreferrer"&gt;Major changes in 24 are coming&lt;/a&gt;
: A major technical debt has been addressed: the whole structure, including Scene Builder Kit, is now modular. I highly recommend creating your JavaFX interfaces with this RC release!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://graz.social/@rladstaetter/113380976846373387" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt; announced LogoRRR 24.5.1&lt;/a&gt;
 for Windows, Mac, and Linux: &amp;ldquo;&lt;em&gt;More information about the included features and bugfixes is &lt;a href="https://github.com/rladstaetter/LogoRRR/releases/tag/24.5.1" target="_blank" rel="noopener noreferrer"&gt;available here&lt;/a&gt;
&lt;/em&gt;.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/bluerai1n/status/1855383577199775882" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Bluerain&lt;/strong&gt; announced Mago&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A JavaFX-based shell generator tool that creates payloads for Linux, Windows, and web systems. Generate payloads for various operating systems, Supports Base64 and URL encoding for generated commands, 110+ Payload.&lt;/em&gt; &amp;quot; You can &lt;a href="https://github.com/blue0x1/Mago" target="_blank" rel="noopener noreferrer"&gt;find it on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;v3.20.1 of binjr, a standalone time series browser, is now available: &amp;ldquo;&lt;em&gt;This is an interim release which fixes a regression introduced in v3.20.0 that severely impacts the performances of the CSV and Log files adapters. Read the &lt;a href="https://binjr.eu" target="_blank" rel="noopener noreferrer"&gt;full changelog and download it here&lt;/a&gt;
.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;Related to this release, &lt;a href="https://mastodon.social/@fthevenet/113469334194641331" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frederic Thevenet&lt;/strong&gt; shared&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;ve been pretty pleased with my custom &amp;lsquo;flickering neon sign&amp;rsquo; effect in JavaFX for the binjr logo, until the moment I realized my 12 y/o had no idea what that flickering was supposed to be! A very &amp;lsquo;what&amp;rsquo;s the color of a TV tuned to a dead channel?&amp;rsquo; moment&amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;If you want to stay informed about new binjr releases: &lt;a href="https://binjr.eu/feed_rss_updated.xml" target="_blank" rel="noopener noreferrer"&gt;subscribe to their RSS&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/hansolo.eu/post/3lb2eehtyu22q" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;And here you go&amp;hellip; my JavaFX-based QlockTwo with support for swipinp, on a Raspberry Pi.&lt;/em&gt;&amp;rdquo; He isn&amp;rsquo;t allowed to share the code because the design is copyrighted, but it is a piece of art to look at and a nice challenge to recreate it by yourself 😉&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/JagoVreede/status/1857082809355002346" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jago de Vreede&lt;/strong&gt; is looking for help&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;ve created an early-access build for aarch64 binary for Mac of SKDman-UI. Unfortunately, I can&amp;rsquo;t test that one because I don&amp;rsquo;t have an M-MacBook. Does anyone with an M MacBook want to see if it works?&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;The &lt;a href="https://github.com/jagodevreede/sdkman-ui/releases" target="_blank" rel="noopener noreferrer"&gt;(early-access) releases are on GitHub&lt;/a&gt;
, including a version for x86 macOS.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/bj-delacruz_javafx-java-javaprogramming-activity-7262307662577520640-8mcI/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;BJ Dela Cruz&lt;/strong&gt; shared a screenshot of his &amp;ldquo;Wordle&amp;rdquo; application&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Finally, it will be able to generate an image that the player can keep to remember what moves he or she performed to win the game.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/markjkoch.bsky.social/post/3lbutov6xp22o" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mark J. Koch&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;One of my bucket list game projects has reached Alpha. I&amp;rsquo;m looking for enthusiasts to try it. I ported/re-engineered Neuromancer PC to JavaFX. Original content, all new engine. For now requires NetBeans IDE to run.&lt;/em&gt; &amp;quot; You can &lt;a href="https://github.com/maehem/javamancer" target="_blank" rel="noopener noreferrer"&gt;find it on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/carldea/status/1851983577321255003" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; published Cognitive 1.5.0&lt;/a&gt;
, a JavaFX MVVM forms library.&lt;br&gt;
Check the &lt;a href="https://github.com/carldea/cognitive/wiki#new-features" target="_blank" rel="noopener noreferrer"&gt;wiki for new features&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pedro Duke&lt;/strong&gt; continues with his work in progress on the next release of Transit Theme and shared more screenshots:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1850541268331360395" target="_blank" rel="noopener noreferrer"&gt;Part 9&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;New LIGHT and DARK styles for Spinner and ChoiceBox&lt;/em&gt;.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1852713716531314778" target="_blank" rel="noopener noreferrer"&gt;Part 10&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;New LIGHT and DARK styles for MenuButton and SplitMenuButton&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1855617371186020476" target="_blank" rel="noopener noreferrer"&gt;Part 11&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;New LIGHT and DARK styles for Editable ComboBox, Pill Buttons and Pill Toggle Buttons.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1855617371186020476" target="_blank" rel="noopener noreferrer"&gt;Part 12&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;New LIGHT and DARK styles for Editable ComboBox, Pill Buttons and Pill Toggle Buttons.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Not new, but just discovered: &lt;a href="https://bsky.app/profile/chadpreisler.bsky.social/post/3l3vjfi4z742r" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Chad Preisler&lt;/strong&gt; uses a JavaFX UI to demo Kafka Outer Joins&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Make sure to stick around for the &lt;a href="https://www.youtube.com/watch?v=bGffINGD9KQ" target="_blank" rel="noopener noreferrer"&gt;demo right around four and half minutes into the video&lt;/a&gt;
. Happy coding!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;New &amp;ldquo;JFX In Action&amp;rdquo; interviews by &lt;strong&gt;Frank Delporte&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;Insights into a new open-source JavaFX project: Swaggerific. It&amp;rsquo;s created by &lt;a href="https://techhub.social/@thejvmbender" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Özkan Pakdil&lt;/strong&gt;&lt;/a&gt;
, who tells us more about this Postman alternative to interact with REST endpoints documented with a Swagger JSON. The &lt;a href="https://www.youtube.com/watch?v=3_T0LDZ-Wt4" target="_blank" rel="noopener noreferrer"&gt;video is on YouTube&lt;/a&gt;
, and more info is provided in &lt;a href="https://webtechie.be/post/2024-11-05-jfxinaction-ozkan-pakdil/" target="_blank" rel="noopener noreferrer"&gt;this blog post&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2024-11-19-jfxinaction-clement-de-tastes/" target="_blank" rel="noopener noreferrer"&gt;Interview with &lt;strong&gt;Clément de Tastes&lt;/strong&gt;&lt;/a&gt;
 : &amp;ldquo;&lt;em&gt;In this episode, we take a look at the combination of JavaFX and Quarkus. Thanks to &lt;a href="https://www.jfx-central.com/libraries/quarkusfx" target="_blank" rel="noopener noreferrer"&gt;QuarkusFX&lt;/a&gt;
, we can make use of the many advantages of the Quarkus system to create a desktop application.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Video #5 till #8 of these interviews got published in a summary on Foojay: &lt;a href="https://foojayio.github.io/website/today/video-series-javafx-in-action-part-2/"&gt;Video series &amp;ldquo;JavaFX In Action&amp;rdquo;, Part 2&lt;/a&gt;
 with &lt;strong&gt;Maciej Gorywoda&lt;/strong&gt; about FxCalculator, &lt;strong&gt;Ramiro Domínguez Ayub&lt;/strong&gt; about the Televic Generic Update Tool, &lt;strong&gt;Christoph Schwentker&lt;/strong&gt; about JabRef, and &lt;strong&gt;Ulas Ergin&lt;/strong&gt; about migrating from Swing to React UIs, all combined in one Java(FX) app.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/antonarhipov.bsky.social/post/3lbjqjdtf2s2c" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Anton Arhipov&lt;/strong&gt; has a box with books to review&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I was helping with technical reviews of this edition. The author &lt;strong&gt;Faisal Islam&lt;/strong&gt; teaches Kotlin by explaining and visualizing various algorithms. They used JavaFX for visualization though and I&amp;rsquo;d love to see another edition of this book using Compose instead.&lt;/em&gt;&amp;rdquo; Let&amp;rsquo;s conclude the Faisal made the right choice and Anton is wrong 😉&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/AlexOmegapy/status/1855082449589748028" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Alexander S. Ricciardi&lt;/strong&gt; shared a tutorial about JavaFX Layout Managers&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;This article explores how Layout Managers provide an abstraction that streamlines the development of Graphical User Interfaces (GUIs) in JavaFX by automating component sizing and positioning. Using predefined layouts like HBox, VBox, and GridPane, developers can create organized and responsive interfaces.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/polypragmatist.bsky.social/post/3lbabzug2bk2j" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;polypragmatist&lt;/strong&gt; shared on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Looking to learn JavaFX? Take a look at my &lt;a href="https://www.pragmaticcoding.ca/beginners/intro" target="_blank" rel="noopener noreferrer"&gt;Beginners&amp;rsquo; Guide to JavaFX&lt;/a&gt;
. It&amp;rsquo;s a 13-part tutorial that takes you from &amp;lsquo;Hello World&amp;rsquo; to building an Reactive GUI with a framework. No FXML, all the layouts are done in code.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Tutorial by Codez Up:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;&lt;a href="https://codezup.com/building-a-social-media-dashboard-with-java-fx/" target="_blank" rel="noopener noreferrer"&gt;Building a Social Media Dashboard with JavaFX&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;&lt;a href="https://codezup.com/cloud-edge-computing-javafx-websocket-services/" target="_blank" rel="noopener noreferrer"&gt;Unlock Efficient Cloud and Edge Computing with JavaFX Websocket Services&lt;/a&gt;
&lt;/em&gt;&amp;rdquo;, to create a JavaFX application that uses Websocket Services to communicate with a server.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/hansolo.bsky.social/post/3l6c24vt4222g" target="_blank" rel="noopener noreferrer"&gt;On Bluesky, &lt;strong&gt;Gerrit Gruwald&lt;/strong&gt; explains&lt;/a&gt;
 that the &lt;a href="https://www.youtube.com/watch?v=Jh79ojcror0" target="_blank" rel="noopener noreferrer"&gt;visuals of his Devoxx presentation&lt;/a&gt;
 are created with JavaFX.&lt;/li&gt;
&lt;li&gt;You can read more about JavaFX Nodes versus Canvas experiments by &lt;strong&gt;Frank Delporte&lt;/strong&gt; in the &lt;a href="https://entwickler.de/java/javafx-nodes-versus-canvas" target="_blank" rel="noopener noreferrer"&gt;German JavaMagazin edition 12.2024&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/seanmiphillips_projected-volumetric-detection-method-applied-activity-7256695177157689345-2Okp/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; shared on LinkedIn&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Applying 3D Projected Volumetric Detection method to the Biden Robocall Deep Fake. &amp;hellip; Caveats to this demonstration are that this was clearly a controlled experiment and importantly is a qualitative manual process. However it is clear the potential of the method and with sufficient further development could be largely automated.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/microprofile-ai-jakarta-ee-12-data-whats-new-java-jvm-skowro%C5%84ski-ihd2f/" target="_blank" rel="noopener noreferrer"&gt;JVM Weekly vol. 106 by Artur Skowroński&lt;/a&gt;
 has a section &amp;ldquo;What Does Java UI Development Look Like in 2024?&amp;rdquo; which includes, of course, JavaFX:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;How could we skip JavaFX, especially with a new and interesting application in this technology?&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;&lt;a href="https://github.com/jtaccuino/jtaccuino" target="_blank" rel="noopener noreferrer"&gt;JTaccuino&lt;/a&gt;
 is a notebook developed for Java programmers, allowing users to interactively experiment with code.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;The DeepNets project, which is a reference implementation of JSR 381, recently &lt;a href="https://x.com/DeepNetts/status/1835292030315995390" target="_blank" rel="noopener noreferrer"&gt;boasted new tooling enhancements&lt;/a&gt;
.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/catgirlin.space/post/3l7u33iijn42k" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;saige!&lt;/strong&gt; shared on Bluesky&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I made a little animation in JavaFX. Gonna try and convince my group that we should use it for our project as a loading screen.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/Anthony_Goubard/status/1853791630815277332" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Anthony Goubard&lt;/strong&gt; shared a screenshot&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;New in the IDE plugin &amp;lsquo;Applet Runner&amp;rsquo;: JavaFXApplet and SceneApplet classes to run a JavaFX application (or scene) embedded in your IDE. See the demo of TilesFX from &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; running in IntelliJ IDEA.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;You want to find even more &amp;ldquo;JavaFX Goodies&amp;rdquo; than you can find on JFX Central? Head over to the &lt;a href="https://github.com/mhrimaz/AwesomeJavaFX" target="_blank" rel="noopener noreferrer"&gt;AwesomeJavaFX repository on GitHub&lt;/a&gt;
, started by &lt;a href="https://x.com/mhrimaz" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hossein Rimaz&lt;/strong&gt;&lt;/a&gt;
 and &lt;a href="https://github.com/mhrimaz/AwesomeJavaFX/graphs/contributors" target="_blank" rel="noopener noreferrer"&gt;extended by many others&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/jpro_one/status/1859539536524578973" target="_blank" rel="noopener noreferrer"&gt;JPro, bringing Java to the browser&lt;/a&gt;
, is following the Java &amp;ldquo;release train&amp;rdquo;: &amp;ldquo;&lt;em&gt;As of JPro 2024.4, JavaFX 23 is now supported and set as the default version. Browser tabs now reflect the JavaFX stage&amp;rsquo;s title and favicon, and more! Catch up on the &lt;a href="https://www.jpro.one/docs/current/3.1/2024.4.X" target="_blank" rel="noopener noreferrer"&gt;latest updates here&lt;/a&gt;
&lt;/em&gt;.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/orango_mango/status/1857923838195151223" target="_blank" rel="noopener noreferrer"&gt;A video by &lt;strong&gt;OrangoMango&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;The start of a new project: Mandelbrot set visualization. Still not perfect, it has some small issues. 🙂&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/mwigojm/status/1858842708611125690" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jonathan Mark Mwigo&lt;/strong&gt; shared a screenshot&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JavaFX Modern Sales ERP Dashboard. Excited to see it go live! 🚀💻&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/polypragmatist.bsky.social/post/3lbte3cvxvs2p" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;polypragmatist&lt;/strong&gt; is very active promoting JavaFX on Bluesky&lt;/a&gt;
, for instance: &amp;ldquo;&lt;em&gt;JavaFX is 100% a reactive declarative UI development library. No FXML required. The Observables facility is tightly integrated into the UI components and makes React look clunky in comparison. Last I looked, Java supported loops and conditionals. JavaFX works great with Kotlin too.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/johanvos.bsky.social/post/3lbr6rz6qoc2v" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; is testing bld to replace Maven&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Did a first project using bld. Works great, and I love the &amp;rsquo;no auto-magical behavior&amp;rsquo;. I need a deeper look to see how to deal with platform-specific jars at runtime, e.g. JavaFX, where we currently use a maven plugin to deal with this.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-8-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;JFX Central is now also on Bluesky: &lt;a href="https://bsky.app/profile/jfxcentral.com" target="_blank" rel="noopener noreferrer"&gt;@jfxcentral.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/dlemmermann/status/1853719535901122837" target="_blank" rel="noopener noreferrer"&gt;Message from &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;JFX Central is now available as a web app, a desktop app, and an iOS application (via Gluon). We still need to get it into the Google Play Store. Anyone up for the job? If any code changes are required I could work on that. I just need somebody to take over the deployment part to the Play Store. I do not feel at home at all in the Android space 🙂&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;The overview of the September Links Of The Week is &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-october-2024/"&gt;published on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;New content:
&lt;ul&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/3_T0LDZ-Wt4" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Özkan Pakdil about Swaggerific&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/Vw9S9uuPTlQ" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Clément de Tastes about QuarkusFX&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Task schedulers in Java: modern alternatives to Quartz Scheduler</title><link>https://foojayio.github.io/website/today/task-schedulers-in-java-modern-alternatives-to-quartz-scheduler/</link><pubDate>Thu, 28 Nov 2024 18:04:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/task-schedulers-in-java-modern-alternatives-to-quartz-scheduler/</guid><description>&lt;h3 id="h3-0-quartz-is-often-considered-the-standard-job-scheduling-library-in-java-which-can-lead-developers-to-overlook-more-modern-alternatives"&gt;Quartz is often considered the standard job scheduling library in Java, which can lead developers to overlook more modern alternatives.&lt;/h3&gt;
&lt;p&gt;For a long time, Quartz, also known as Quartz Scheduler, was the only viable open-source task scheduler in Java. In fact, the official Quartz documentation still suggests that there is &lt;a href="https://www.quartz-scheduler.org/documentation/2.3.1-SNAPSHOT/faq.html" title="no real alternative" target="_blank" rel="noopener noreferrer"&gt;no real alternative&lt;/a&gt;
. In this article, we will list a few different &lt;strong&gt;Quartz alternatives that offer a similar set of features while being easier and more enjoyable to use.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>How Organizations Became Stuck on Outdated Java Versions</title><link>https://foojayio.github.io/website/today/how-organizations-became-stuck-on-outdated-java-versions/</link><pubDate>Wed, 27 Nov 2024 15:46:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-organizations-became-stuck-on-outdated-java-versions/</guid><description>&lt;p&gt;My recent article &lt;a href="https://foojayio.github.io/website/today/why-java-8-is-a-ticking-time-bomb-hiding-within-your-organization/"&gt;&amp;ldquo;Why Java 8 is a Ticking Time Bomb Hiding Within Your Organization&amp;rdquo;&lt;/a&gt;
 triggered quit some reactions&amp;hellip; and so I went a step further and asked on social media: &amp;ldquo;&lt;em&gt;Why is your company still on Java 8 (or older)? And why did you never move to 9, 10,&amp;hellip; and got stuck on this outdated version?&lt;/em&gt;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Here is a summary of what I learned from the reactions!&lt;/p&gt;
&lt;h2 id="h2-0-reasons-to-stick-to-8"&gt;Reasons to Stick to 8&lt;/h2&gt;
&lt;p&gt;Of course, there are many reasons why some projects deliberately are kept on Java 8 or don&amp;rsquo;t succeed on moving to a newer version.&lt;/p&gt;</description></item><item><title>GlassFish is rolling forward. What’s New?</title><link>https://foojayio.github.io/website/today/glassfish-is-rolling-forward-whats-new/</link><pubDate>Tue, 26 Nov 2024 15:11:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/glassfish-is-rolling-forward-whats-new/</guid><description>&lt;p&gt;&lt;strong&gt;The Evolution Continues. GlassFish, which used to be a popular application server, free to use and reliable, is evolving again. If you&amp;rsquo;ve been holding onto your old GlassFish instances, there&amp;rsquo;s good news&amp;mdash;things have gotten a lot more exciting recently.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since we created the OmniFish company and started improving GlassFish in 2022 (read about that story in &lt;a href="https://omnifish.ee/2022/06/28/oh-what-did-you-do-to-glassfish/" target="_blank" rel="noopener noreferrer"&gt;Oh, What Did You Do to GlassFish?!&lt;/a&gt;
), a lot has happened around GlassFish. We joined the Eclipse GlassFish project and &lt;a href="https://blogs.eclipse.org/post/tanja-obradovic/welcome-omnifish-jakarta-ee-working-group" target="_blank" rel="noopener noreferrer"&gt;joined the Jakarta EE Working Group&lt;/a&gt;
 as well.&lt;/p&gt;</description></item><item><title>strace Revisited: Simple is Beautiful</title><link>https://foojayio.github.io/website/today/strace-revisited-simple-is-beautiful/</link><pubDate>Tue, 26 Nov 2024 14:58:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/strace-revisited-simple-is-beautiful/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#understanding-strace-and-its-origins"&gt;Understanding strace and its Origins&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#a-look-back-strace-and-dtrace"&gt;&lt;strong&gt;A Look Back: strace and dtrace&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#originating-from-sun-microsystems"&gt;&lt;strong&gt;Originating from Sun Microsystems&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#technical-functioning-of-strace"&gt;Technical Functioning of strace&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-role-of-ptrace-in-strace"&gt;&lt;strong&gt;The Role of ptrace in strace&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#comparing-with-dtrace"&gt;&lt;strong&gt;Comparing with DTrace&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#practical-usage-and-advantages"&gt;Practical Usage and Advantages&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#ease-of-use-and-accessibility"&gt;&lt;strong&gt;Ease of Use and Accessibility&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#favored-in-linux-environments"&gt;&lt;strong&gt;Favored in Linux Environments&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#strace-in-action-a-closer-look-at-system-calls"&gt;strace in Action: A Closer Look at System Calls&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#basic-usage-and-output-analysis"&gt;&lt;strong&gt;Basic Usage and Output Analysis&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#interpreting-system-calls-for-debugging"&gt;&lt;strong&gt;Interpreting System Calls for Debugging&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#advanced-features-and-tips"&gt;Advanced Features and Tips&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#filtering-system-calls-for-efficiency"&gt;&lt;strong&gt;Filtering System Calls for Efficiency&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#exploring-a-variety-of-system-calls"&gt;&lt;strong&gt;Exploring a Variety of System Calls&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#strace-and-java-a-special-case"&gt;strace and Java: A Special Case&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#strace-with-the-jvm"&gt;&lt;strong&gt;strace with the JVM&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#allocations-and-threading-in-java"&gt;&lt;strong&gt;Allocations and Threading in Java&lt;/strong&gt;&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;h3 id="h3-0-in-the-realm-of-system-debugging-particularly-on-linux-platforms-strace-stands-out-as-a-powerful-and-indispensable-tool-its-simplicity-and-efficacy-make-it-the-go-to-solution-for-diagnosing-and-understanding-system-level-operations-especially-when-working-with-servers-and-containers"&gt;In the realm of system debugging, particularly on Linux platforms, strace stands out as a powerful and indispensable tool. Its simplicity and efficacy make it the go-to solution for diagnosing and understanding system-level operations, especially when working with servers and containers.&lt;/h3&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll delve into the nuances of strace, from its history and technical functioning to practical applications and advanced features. Whether you&amp;rsquo;re a seasoned developer or just starting out, this exploration will enhance your diagnostic toolkit and provide deeper insights into the workings of Linux systems.&lt;/p&gt;</description></item><item><title>Langchain4J Musings</title><link>https://foojayio.github.io/website/today/langchain4j-musings/</link><pubDate>Sat, 23 Nov 2024 13:57:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/langchain4j-musings/</guid><description>&lt;p&gt;I&amp;rsquo;m coming relatively late to the LLM party, but I rarely come very early in the hype cycle.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/9/94/Gartner_Hype_Cycle.svg" alt="Gartner hype cycle" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;For example, I never bought into blockchain, the solution still searching for problems to solve, nor in microservices, the latest in the cargo cult IT trends. Despite my late arrival at the LLM party, I have been a regular user of LLMs. I use OpenAI for non-controversial questions outside my cone of knowledge, &lt;em&gt;e.g&lt;/em&gt;., linguistics or legal; I use GitHub Copilot in my IDE to improve my code.&lt;/p&gt;</description></item><item><title>Video series “JavaFX In Action”, Part 2</title><link>https://foojayio.github.io/website/today/video-series-javafx-in-action-part-2/</link><pubDate>Fri, 22 Nov 2024 14:31:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/video-series-javafx-in-action-part-2/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/new-video-series-javafx-in-action-part-1/"&gt;July, we published the first part, which included four interviews&lt;/a&gt;
 with Pedro Duque Vieira, Daniel Zimmermann, Christopher Schnick, and Robert Ladstätter.&lt;/p&gt;
&lt;p&gt;In this part, we have four new interviews for you! Learn more about JavaFX combined with Scala, Swing, React, trains, scientific research, banking, and more&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-maciej-gorywoda-about-fxcalculator"&gt;Maciej Gorywoda about FxCalculator&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/mgorywoda/" target="_blank" rel="noopener noreferrer"&gt;Maciej Gorywoda&lt;/a&gt;
 is the product marketing manager for the IntelliJ Scala team at JetBrains. As a Scala Ambassador, he teaches Scala and makes its community more beginner-friendly. He is also self-publishing a fantasy novel.&lt;/p&gt;</description></item><item><title>Build and Run TornadoVM with IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/build-and-run-tornadovm-with-intellij-idea/</link><pubDate>Wed, 20 Nov 2024 19:08:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/build-and-run-tornadovm-with-intellij-idea/</guid><description>&lt;p&gt;&lt;a href="https://www.tornadovm.org/" target="_blank" rel="noopener noreferrer"&gt;TornadoVM&lt;/a&gt;
 is an open-source Java technology that is developed to aid Java programmers in adapting their code bases for hardware acceleration.&lt;/p&gt;
&lt;p&gt;This blog aims to explain how Java programmers can build TornadoVM with IntelliJ IDEA, and how they can run TornadoVM unit-tests or other Java programs.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="h2-0-prerequisites"&gt;&lt;em&gt;Prerequisites&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;This blog uses IntelliJ IDEA 2024.2.4 version and the list of required plugins are as follows:{#r55ph1440}&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python &lt;a href="https://plugins.jetbrains.com/plugin/631-python" target="_blank" rel="noopener noreferrer"&gt;++plugin++&lt;/a&gt;
 to be installed in IntelliJ. This plugin allows python scripting from the IDE.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;{#x95ro33520}&lt;/p&gt;</description></item><item><title>Hot Class Reload in Java: A Webpack HMR-Like Experience</title><link>https://foojayio.github.io/website/today/hot-class-reload-in-java-a-webpack-hmr-like-experience-for-java-developers/</link><pubDate>Tue, 19 Nov 2024 15:57:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/hot-class-reload-in-java-a-webpack-hmr-like-experience-for-java-developers/</guid><description>&lt;p&gt;&lt;strong&gt;In the world of software development, time is everything. Every developer knows the frustration of waiting for a full application restart just to see a small change take effect.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Java developers, in particular, have long dealt with this issue. But what if you didn&amp;rsquo;t have to stop and restart every time you updated a class? Enter &lt;strong&gt;Hot Class Reload (HCR)&lt;/strong&gt; in Java&amp;mdash;a technique that can keep you in the flow, reloading classes on the fly, much like &lt;strong&gt;Hot Module Reload (HMR)&lt;/strong&gt; does in JavaScript.&lt;/p&gt;</description></item><item><title>Crafting Your Own Railway Display with Java!</title><link>https://foojayio.github.io/website/today/crafting-your-own-railway-display-with-java/</link><pubDate>Mon, 18 Nov 2024 08:46:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/crafting-your-own-railway-display-with-java/</guid><description>&lt;p&gt;&lt;strong&gt;Have you fancied to have your own railway display at home? If you love traveling by public transport and always jump on the train just before the door closes like us, it&amp;rsquo;s really cool and highly efficient to have your own personalized display.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/crafting-your-own-railway-display-with-java/NS_display_2-scaled.jpg" alt="custom railway display showing the train timings" loading="lazy"&gt;
&lt;/p&gt;
&lt;h3 id="h3-0-background"&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Without live data, this project could not work. Luckily, all the data we needed was publicly and freely available with Nederlandse Spoorwegen (NS) APIs. To access them, you only need to create an account in the &lt;a href="https://apiportal.ns.nl/" target="_blank" rel="noopener noreferrer"&gt;NS API Portal and subscribe to the APIs&lt;/a&gt;
 you want to use.&lt;/p&gt;</description></item><item><title>Foojay Podcast #61: Keep Your Body And Mind Healthy</title><link>https://foojayio.github.io/website/today/foojay-podcast-61/</link><pubDate>Mon, 18 Nov 2024 08:03:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-61/</guid><description>&lt;p&gt;At Devoxx and JFall, we talked with Georgios Diamantopoulos, Lutske de Leeuw, Tom Cools, Jessica Siewert, and Rijo Sam about staying physically and mentally healthy as software developers.&lt;/p&gt;
&lt;p&gt;There are many topics to handle, like the impact of AI on how valuable we feel, how COVID-19 impacted careers, how we work in and with remote teams, how to get to know new colleagues and much more. Yes, there is even a sidestep where we compared the Java and .NET communities.&lt;/p&gt;</description></item><item><title>Why Java 8 is a Ticking Time Bomb Hiding Within Your Organization</title><link>https://foojayio.github.io/website/today/why-java-8-is-a-ticking-time-bomb-hiding-within-your-organization/</link><pubDate>Fri, 15 Nov 2024 11:16:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-java-8-is-a-ticking-time-bomb-hiding-within-your-organization/</guid><description>&lt;p&gt;When I spoke to developers at Devoxx in Belgium in October, I was surprised to learn how many of them are maintaining systems that are still running on Java 8 (released in 2014). One of them even still has a Java 5 application in production, with a runtime of 20 years old!&lt;/p&gt;
&lt;p&gt;I know I&amp;rsquo;m biased, as I experiment extensively with the latest Java versions to learn what improvements they bring. But it hurts my heart to think of all those developers maintaining old systems, missing out on all the coding and performance improvements that newer versions offer. In this post, I want to highlight some of the many reasons why staying on Java 8 is a ticking time bomb&amp;hellip;&lt;/p&gt;</description></item><item><title>Summary of the AJAX Frameworks Comparison</title><link>https://foojayio.github.io/website/today/summary-of-the-ajax-frameworks-comparison/</link><pubDate>Thu, 14 Nov 2024 11:35:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/summary-of-the-ajax-frameworks-comparison/</guid><description>&lt;p&gt;In previous weeks, I&amp;rsquo;ve analyzed several libraries and frameworks that augment the client with AJAX capabilities.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/ajax-ssr/3/" target="_blank" rel="noopener noreferrer"&gt;Vue.js&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/ajax-ssr/4/" target="_blank" rel="noopener noreferrer"&gt;Alpine.js&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/ajax-ssr/5/" target="_blank" rel="noopener noreferrer"&gt;HTMX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/ajax-ssr/6/" target="_blank" rel="noopener noreferrer"&gt;Vaadin&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this post, I&amp;rsquo;ll compare them across several axes.&lt;/p&gt;
&lt;h2 id="h2-0-analysis"&gt;Analysis&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Frontend skills:Remember that I started this series from the point of view of a backend developer. In this section, I grade how much you need to know about client technologies to complete the job.&lt;/li&gt;
&lt;li&gt;Team organization:In the introduction, I hinted that the decoupling of frontend and backend teams profoundly impacted projects. Each team is fast on its own, and they can parallelize their work, but integrating the two can double the initial development time. Here, I grade how easy it is to integrate frontend and backend.&lt;/li&gt;
&lt;li&gt;Ease of setup:How easy it is to set up the tool from the backend.&lt;/li&gt;
&lt;li&gt;Ease of styling:Backend developers are not designers by default. Does the tool offer a default, at least average-looking style? How hard is it to create one?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For all intents and purposes, Vue.js and Alpine.js are similar; I&amp;rsquo;ll refer to them as JavaScript frameworks.&lt;/p&gt;</description></item><item><title>Spring Boot: Java Template Engine (JTE)</title><link>https://foojayio.github.io/website/today/spring-boot-java-template-engine-jte/</link><pubDate>Wed, 13 Nov 2024 09:03:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-java-template-engine-jte/</guid><description>&lt;h3 id="h3-0-hello-to-all-java-and-spring-enthusiasts-i-am-the-java-template-engine-a-fresh-newcomer-to-the-spring-initializer-ecosystem"&gt;Hello to all Java and Spring enthusiasts. I am the Java Template Engine, a fresh newcomer to the Spring Initializer Ecosystem.&lt;/h3&gt;
&lt;p&gt;I have gained popularity as a template engine for developing user interface applications that use Java syntax within Spring Boot applications, alongside other engines such as Freemarker, Thymeleaf, Mustache, and Velocity. Many developers widely use Spring Boot, a framework that simplifies Java application development, and incorporating a template engine like mine streamlines the process of creating dynamic and responsive user interfaces.&lt;/p&gt;</description></item><item><title>Foojay.io At JFall 2024 (And The Winner Is...)</title><link>https://foojayio.github.io/website/today/foojay-io-at-jfall-2024-and-the-winner-is/</link><pubDate>Tue, 12 Nov 2024 08:47:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-io-at-jfall-2024-and-the-winner-is/</guid><description>&lt;p&gt;Last week &lt;a href="https://jfall.nl/" target="_blank" rel="noopener noreferrer"&gt;JFall&lt;/a&gt;
&amp;mdash;the &amp;ldquo;Biggest Java Conference of the Netherlands&amp;rdquo;&amp;mdash;took place. Foojay.io, the Friends of OpenJDK, were there in full force, including a booth with stickers and other swag, as well as Frank Delporte with his popular Foojay.io Podcast, doing live interviews with attendees.
&lt;img src="https://foojayio.github.io/website/today/foojay-io-at-jfall-2024-and-the-winner-is/IMG_8957-1024x768.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Not only Frank was present throughout the day, doing interviews for upcoming podcast episodes, but so was his 14-year-old son Vik (in yellow sweater in the pic above), handling the technical side and directing the interviews like a true and enthusiastic professional.&lt;/p&gt;</description></item><item><title>Front End Debugging Part 1: Not just Console Log</title><link>https://foojayio.github.io/website/today/front-end-debugging-part-1-not-just-console-log/</link><pubDate>Tue, 05 Nov 2024 14:01:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/front-end-debugging-part-1-not-just-console-log/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#instant-debugging-with-the-raw-debugger-endraw-keyword"&gt;&lt;strong&gt;Instant Debugging with the&lt;/strong&gt; &lt;code&gt;debugger&lt;/code&gt; Keyword&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#triggering-debugging-from-the-console"&gt;&lt;strong&gt;Triggering Debugging from the Console&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#dom-breakpoints-monitoring-dom-changes"&gt;&lt;strong&gt;DOM Breakpoints: Monitoring DOM Changes&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#xhr-breakpoints-uncovering-hidden-network-calls"&gt;&lt;strong&gt;XHR Breakpoints: Uncovering Hidden Network Calls&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#simulating-environments-for-debugging"&gt;&lt;strong&gt;Simulating Environments for Debugging&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#debugging-layout-and-style-issues"&gt;&lt;strong&gt;Debugging Layout and Style Issues&lt;/strong&gt;&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#final-word"&gt;Final Word&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;As a Java developer, most of my focus is on the backend side of debugging. Front-end debugging poses different challenges and has sophisticated tools of its own. Unfortunately, print-based debugging has become the norm in front-end. To be fair, it makes more sense there as the cycles are different and the problem is always a single user problem. But even if you choose to use &lt;code&gt;Console.log&lt;/code&gt;, there&amp;rsquo;s a lot of nuance to pick up there.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Effortless updates requires a zero-migration policy</title><link>https://foojayio.github.io/website/today/effortless-updates-zero-migration/</link><pubDate>Tue, 05 Nov 2024 12:19:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/effortless-updates-zero-migration/</guid><description>&lt;p&gt;&lt;strong&gt;In today&amp;rsquo;s production environments, it is not only expected, but critical to keep your technology stack as up-to-date as possible.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Staying current helps to mitigate security risks, while also benefiting from bug fixes, performance improvements, and new features and function that can help drive your business&amp;rsquo;s success.&lt;/p&gt;
&lt;p&gt;This is true whether you&amp;rsquo;re deploying to a cloud or locally, and applies regardless of the deployment type, whether container images, VMs, or bare metal.&lt;/p&gt;</description></item><item><title>Foojay Podcast #60: Proud Of Belgium - Devoxx, JobRunr, Timefold, OpenJDK Mobile, OpenJFX, Thymeleaf, htmx,...</title><link>https://foojayio.github.io/website/today/foojay-podcast-60/</link><pubDate>Mon, 04 Nov 2024 14:29:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-60/</guid><description>&lt;p&gt;Belgium might be tiny, but we have a strong Java Community!&lt;/p&gt;
&lt;p&gt;As I was doing interviews at Devoxx in October, I met several of these people, and we talked about their projects, how you can get involved in OpenJDK, and maybe even start a company out of it.&lt;/p&gt;
&lt;p&gt;This podcast will teach you more about Devoxx, VoxxedDays, Devoxx4Kids, JobRunr, Timefold, OpenJDK Mobile, OpenJFX, Thymelead, htmx, and more!&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/zWs35DyF8sE?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>How we almost missed a plane, but OpenJDK could have saved us.</title><link>https://foojayio.github.io/website/today/how-we-almost-missed-a-plane-in-kazakhstan-but-openjdk-could-have-saved-us/</link><pubDate>Sun, 03 Nov 2024 08:01:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-we-almost-missed-a-plane-in-kazakhstan-but-openjdk-could-have-saved-us/</guid><description>&lt;p&gt;&lt;strong&gt;A family vacation as a topic for a Foojay blog post? Really? Yes, because, very unexpectedly, it was influenced by a change in the OpenJDK project&amp;hellip;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-traveling-to-kazakhstan"&gt;Traveling to Kazakhstan&lt;/h2&gt;
&lt;p&gt;In August, our family vacation brought us to Kazakhstan. An important trip, as it is the birth country of our (now) 14 year old son. It was over 13 years that we had been there, and we planned to go back earlier, but some stupid virus messed up everyone&amp;rsquo;s life a few years ago&amp;hellip;&lt;/p&gt;</description></item><item><title>JDK 23: Module Design Pattern with JEP-476</title><link>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-module-design-pattern-with-jep-476/</link><pubDate>Thu, 31 Oct 2024 09:41:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-module-design-pattern-with-jep-476/</guid><description>&lt;p&gt;Although the module design pattern can be implemented in many different ways, the main motivation behind using it remains the same. This is the isolation of a specific section into small building blocks, which are the so-called modules. Therefore, the module design pattern belongs to the structural design pattern family.&lt;/p&gt;
&lt;p&gt;Before Java 9, each project using the module design pattern at any level was a bit difficult and many times broken. Such a situation had a direct impact on source code maintainability and event extensibility, as it was very easy to break module boundaries. Many times this state has been called a bit like &amp;ldquo;classpath hell&amp;rdquo;. In order to avoid such a situation, it was necessary to preserve the coding discipline.&lt;/p&gt;</description></item><item><title>Java Tips # 01 -  Writing Shebang Scripts in Pure Java</title><link>https://foojayio.github.io/website/today/java-tips-01-writing-shebang-scripts-in-pure-java/</link><pubDate>Tue, 29 Oct 2024 17:06:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-tips-01-writing-shebang-scripts-in-pure-java/</guid><description>&lt;p&gt;&lt;strong&gt;Did you know you can write a CLI script in Java just as easily as you would in a bash script, and run it directly from the shell?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is commonly called a shebang script, though we are mostly familiar with writing them in bash. Bash scripts are great, but they can be obscure to developers who aren&amp;rsquo;t familiar with the syntax. As a Java developer, you&amp;rsquo;d likely prefer to get things done the Java way. Well, since Java 11, you can do exactly that!&lt;/p&gt;</description></item><item><title>JavaFX Links of October 2024</title><link>https://foojayio.github.io/website/today/javafx-links-of-october-2024/</link><pubDate>Mon, 28 Oct 2024 18:19:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-october-2024/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of October 2024, published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during this month. With some very nice new content for JFX Central itself, see at end of the list&amp;hellip;&lt;/p&gt;
&lt;p&gt;Did we miss anything? Is there anything you want to have included in one of the next overviews?&lt;/p&gt;
&lt;p&gt;Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-1-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Message from &lt;strong&gt;Kevin Rushforth&lt;/strong&gt; in the &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
 mailing list that shows how OpenJDK and OpenJFX keep being aligned thanks to the 6-months release cycle: &amp;ldquo;&lt;em&gt;I propose to remove support for running JavaFX applications with a security manager in JavaFX 24. Any JavaFX application that uses a security manager will necessarily need to use JDK 21.x LTS going forward, and thus can similarly use JavaFX 21.x LTS.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;See &lt;a href="https://bugs.openjdk.org/browse/JDK-8341090" target="_blank" rel="noopener noreferrer"&gt;JDK-8341090&lt;/a&gt;
: &amp;ldquo;The Java Security Manager was deprecated for removal in JDK 17 by &lt;a href="https://openjdk.org/jeps/411" target="_blank" rel="noopener noreferrer"&gt;JEP 411&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Artur Skowronski&lt;/strong&gt; highlights in his &lt;a href="https://www.jvm-weekly.com/p/what-will-jdk-24-bring-jvm-weekly" target="_blank" rel="noopener noreferrer"&gt;JVM Weekly newsletter&lt;/a&gt;
 some JavaFX facts:
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://github.com/openjdk/jfx/blob/master/doc-files/release-notes-23.md" target="_blank" rel="noopener noreferrer"&gt;JavaFX 23 announced by Kevin Rushforth&lt;/a&gt;
 has hit the scene and brought with it a warning: &amp;ldquo;It&amp;rsquo;s time to update.&amp;rdquo; JavaFX has dropped support for older versions and will now require JDK 21.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Oracle has &lt;a href="https://www.oracle.com/java/technologies/java-se-support-roadmap.html" target="_blank" rel="noopener noreferrer"&gt;announced that support for JavaFX in JDK 8&lt;/a&gt;
, the last version they released, will end in March next year.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/SamNaFX/status/1817528341194252682" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;SamFx&lt;/strong&gt; happily announced the merge of his first pull request into the OpenJFX code&lt;/a&gt;
 to fix &amp;ldquo;&lt;em&gt;Push Notification fails on Android when app closed&lt;/em&gt;.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Just a tip: keep an eye on &lt;a href="https://github.com/openjdk/mobile" target="_blank" rel="noopener noreferrer"&gt;github.com/openjdk/mobile&lt;/a&gt;
. It&amp;rsquo;s a project to bring more mobile support to the OpenJDK. This will, once integrated, make it easier to support JavaFX on even more (mobile) platforms.&lt;/li&gt;
&lt;li&gt;In an article on The New Stack, &lt;a href="https://thenewstack.io/end-of-the-road-for-javafx-in-jdk-8-keeping-your-apps-alive/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;End of the Road for JavaFX in JDK 8: Keeping Your Apps Alive&amp;rdquo;&lt;/a&gt;
, &lt;strong&gt;Frank Delporte&lt;/strong&gt; alerts users of Oracle Java 8 builds with OpenJFX: &amp;ldquo;&lt;em&gt;From April 2025 and onward, if you are using JavaFX, you need to find an alternative distribution if you&amp;rsquo;d like to continue to receive security updates.&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;The same message on the &lt;a href="https://www.azul.com/blog/azul-is-here-to-help-you-with-javafx-8-changes-in-2025/" target="_blank" rel="noopener noreferrer"&gt;Azul Blog&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-scenebuilder"&gt;SceneBuilder&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://techhub.social/@gluonhq/113236888001051050" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gluon&lt;/strong&gt; shared a screenshot&lt;/a&gt;
 of the number of downloads of Scene Builder: &amp;ldquo;&lt;em&gt;Note how fast the adoption of Scene Builder 23 is! Work on 24 is in full-speed now.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/i_am_arkutu/status/1841480908492128687" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Arkutu&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Progress so far building my healthcare desktop application using JavaFX, Spring Boot, and MySQL! So far, I&amp;rsquo;ve completed the login and main home page. Now, I&amp;rsquo;m diving into creating and fetching patient data from the database. Stay tuned for more updates.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/DeepNetts/status/1842186222241825212" target="_blank" rel="noopener noreferrer"&gt;Message from &lt;strong&gt;Deep Netts - AI Java library&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Download the Java Deep Learning Library now and start building intelligent applications today. Get started quickly with powerful tools for machine learning and neural networks!&lt;/em&gt; &amp;quot;
&lt;ul&gt;
&lt;li&gt;Extract from the &lt;a href="https://www.deepnetts.com/deep-netts-3-1-1-has-been-released/" target="_blank" rel="noopener noreferrer"&gt;News Release&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;We&amp;rsquo;ve enhanced the debugging experience with new visualization tools that allow you to analyze weight statistics and explore network architectures in 3D space using JavaFX. These tools provide deeper insights into model behavior, helping you diagnose issues and optimize performance more effectively.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Two releases by &lt;strong&gt;Patrik Karlström&lt;/strong&gt; written in Java with JavaFX on the NetBeans Platform:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/PatrikKarlstrom/status/1843362252004700202" target="_blank" rel="noopener noreferrer"&gt;CRIC 24.10&lt;/a&gt;
, the Custom Runtime Image Creator (with cross-targeting) for JDK jlink. &lt;a href="https://github.com/trixon/cric/releases/tag/v24.10" target="_blank" rel="noopener noreferrer"&gt;Get your copy at GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/PatrikKarlstrom/status/1842812263310205019" target="_blank" rel="noopener noreferrer"&gt;Mapollage 24.10.06&lt;/a&gt;
, the photo kml generator for Google Earth. &lt;a href="https://github.com/trixon/mapollage/releases/tag/v24.10.06" target="_blank" rel="noopener noreferrer"&gt;Get your copy at GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/crschnick/status/1843960201688371493" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; shared a screenshot&lt;/a&gt;
 of the new icon chooser for selfhosted service icons in XPipe 12.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/thejvmbender/status/1845012826827456523" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Özkan Pakdil&lt;/strong&gt; shared&lt;/a&gt;
 a link to the &lt;a href="https://github.com/ozkanpakdil/swaggerific" target="_blank" rel="noopener noreferrer"&gt;sources of swaggerific&lt;/a&gt;
 a Postman alternative, written in JavaFX and built with GraalVM.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/stefanofago/status/1845178676477821298" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Stefano Fago&lt;/strong&gt; shared&lt;/a&gt;
 links to &lt;a href="https://github.com/jtaccuino/jtaccuino" target="_blank" rel="noopener noreferrer"&gt;the sources&lt;/a&gt;
 and &lt;a href="https://youtu.be/SMD5g0Fqn34" target="_blank" rel="noopener noreferrer"&gt;Devoxx presentation&lt;/a&gt;
 of JTaccuino: &amp;ldquo;&lt;em&gt;a JavaFX based notebook application for Java developers. It&amp;rsquo;s built for usages in education, interactive experimentation with algorithms &amp;amp; possible more advanced use cases&amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/bj-delacruz_seattle-tacoma-international-airport-departures-activity-7254534029104844801-gJCx/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;BJ Dela Cruz&lt;/strong&gt; shared screenshots of his Flight Display application&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;It can generate a list of arriving or departing flights for an airport you choose.&lt;/em&gt; &amp;quot; You can find the &lt;a href="https://bitbucket.org/bjpeterdelacruz/flight-display/src/main/" target="_blank" rel="noopener noreferrer"&gt;sources here&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/MarinoDev/status/1839806509254881340" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Marino&lt;/strong&gt; released a tiny unorthodox project&lt;/a&gt;
 from a year ago &lt;a href="https://marinodev.itch.io/wander-javafx" target="_blank" rel="noopener noreferrer"&gt;on itch&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;A dungeon crawler made in JavaFX, also featuring 1-bit pixelart. Based on Miziziziz&amp;rsquo;s &amp;lsquo;Roguelike in a day&amp;rsquo; video.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Shared by &lt;strong&gt;Pedro Duke&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1841874974702776404" target="_blank" rel="noopener noreferrer"&gt;A video of part 6 of work in progress on Transit Theme&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;New LIGHT and DARK styles for TabPane and TextArea.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1844476360598991091" target="_blank" rel="noopener noreferrer"&gt;Part 7&lt;/a&gt;
 of the work in progress for the next release of the Transit Theme: &amp;ldquo;&lt;em&gt;New LIGHT and DARK styles for Menus, ContextMenu and Tooltip&lt;/em&gt;.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;em&gt;Transit Theme next release, &lt;a href="https://x.com/P_Duke/status/1847993884355277286" target="_blank" rel="noopener noreferrer"&gt;PART 8&lt;/a&gt;
: New LIGHT and DARK styles for Color Picker, Titled Pane and Accordion.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/carldea/status/1843165765446627745" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; published&lt;/a&gt;
 a simple finite state machine library called &lt;a href="https://github.com/carldea/axonic" target="_blank" rel="noopener noreferrer"&gt;Axonic version 0.0.2&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I plan to use it in complex UI/UX scenarios&lt;/em&gt;&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1g12cz6/announcing_devtoolsfx/" target="_blank" rel="noopener noreferrer"&gt;Announced on Reddit: DevToolsFX&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Originally intended to fix long-standing bugs in Scenic View, it has been completely rewritten from scratch. Modern Java, reduced and more maintainable codebase with clear model/UI separation, only depends on javafx.controls,&amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1845793655056920772" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared a screenshot&lt;/a&gt;
= &amp;ldquo;&lt;em&gt;The email field in GemsFX now comes with an optional auto-completion feature for the domain part of the address.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/shannah78/status/1849566060644872258" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Steve Hannah&lt;/strong&gt;, the creator of jDeploy&lt;/a&gt;
 published a &lt;a href="https://jdeploy.substack.com/p/now-you-can-deploy-your-app-as-a" target="_blank" rel="noopener noreferrer"&gt;blog post&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Now you can deploy your app as a DMG. The codesign process is painful, but if you really want to deploy your app as a DMG, you can do that now. &amp;hellip; some developers have expressed interest being able to deploy their apps as a .dmg, since this would be more familiar to users. Some developers also have their own Apple developer account, and would prefer to sign the app themselves rather than deploy using the jDeploy certificate. &amp;hellip;&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; published two new &amp;ldquo;JavaFX In Action&amp;rdquo; interviews:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2024-10-01-jfxinaction-christoph-schwentker/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christoph Schwentker&lt;/strong&gt; about JabRef&lt;/a&gt;
, a tool written in Java and JavaFX to collect, organize, and discover literature for research projects.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2024-10-22-jfxinaction-ulas-ergin/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Ulas Ergin&lt;/strong&gt; explains how his team at Credit Europe Bank uses JavaFX for two internal applications&lt;/a&gt;
. The first one is a developer tool. Based on the experience of building this first tool, they decided to use JavaFX to migrate an old Swing-based application. The new Java application combines the old Swing screens with new React user interfaces, all nicely styled and integrated thanks to JavaFX.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Two recordings from Devoxx Belgium talks:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/JPeredaDnr" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jose Pereda&lt;/strong&gt;&lt;/a&gt;
 and &lt;a href="https://x.com/SvenNB" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sven Reimers&lt;/strong&gt;&lt;/a&gt;
 launched &lt;a href="https://www.youtube.com/watch?v=SMD5g0Fqn34" target="_blank" rel="noopener noreferrer"&gt;JTaccuino, a better Jupyter Experience for Java Developers&lt;/a&gt;
. You can find the &lt;a href="https://github.com/jtaccuino/jtaccuino" target="_blank" rel="noopener noreferrer"&gt;GitHub project here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vik and Frank Delporte&lt;/strong&gt; demonstrated &lt;a href="https://www.youtube.com/watch?v=xbaLjoTU49I" target="_blank" rel="noopener noreferrer"&gt;MelodyMatrix: Looking at Music, an experiment with Kotlin, JavaFX, MIDI, and Virtual Threads&lt;/a&gt;
. You can find the &lt;a href="https://melodymatrix.rocks/" target="_blank" rel="noopener noreferrer"&gt;application website here&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/shorts/5LhUtEDPf5E" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Adam Bien&lt;/strong&gt; had a short talk with &lt;strong&gt;Johan Vos&lt;/strong&gt; at Devoxx&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; published a new tutorial &lt;a href="https://webtechie.be/post/2024-10-02-javafx-maven-jar-template/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Template project to build a JavaFX application as a JAR with dependencies with Maven&amp;rdquo;&lt;/a&gt;
 with the source code on GitHub, full explanation in the blog, and a video walk-through on YouTube.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/Loic__Lefevre/status/1848390393252987106" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Loïc Lefèvre&lt;/strong&gt; hopes we like&lt;/a&gt;
 this post, and sure we do ;-): &amp;ldquo;&lt;em&gt;Finally finished &lt;a href="https://medium.com/db-one/building-javafx-app-native-image-with-graalvm-new-achievement-unlocked-c5e236ecf11d" target="_blank" rel="noopener noreferrer"&gt;this post about creating native images for JavaFX applications using GraalVM&lt;/a&gt;
. There is a &lt;a href="https://github.com/loiclefevre/javafx-native" target="_blank" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;
 at the end.&lt;/em&gt; &amp;quot; Intro from the blog post: &amp;ldquo;&lt;em&gt;TL;DR &amp;mdash; Building JavaFX application native image used to require GluonFX plugins and GluonHQ substrate VM. In this post, I show it is possible to rely on the latest GraalVM distribution only. This simplifies greatly the process but requires some challenges to be solved first&amp;hellip; are you ready to read my journey?&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-8-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Some JavaFX love on Twitter:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/im_saichowdary/status/1842032245277696306" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;SAI CHOWDARY&lt;/strong&gt; shared some key aspects of Java in front-end development&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Reaction by &lt;a href="https://x.com/ABprakash01/status/1842069633542848813" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Bhanu&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;That&amp;rsquo;s great info! JavaFX is indeed a powerful tool for creating dynamic desktop applications with impressive UI features like graphics and animations. It&amp;rsquo;s a game-changer for front-end development!&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;In a long thread, &lt;a href="https://x.com/21stCompTech/status/1839657037896056852" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;21st Computer Tech&lt;/strong&gt;&lt;/a&gt;
 compares Java and Python GUIs with this nice remark about Community &amp;amp; Support: &amp;ldquo;&lt;em&gt;Java has a large and active community for both Swing and JavaFX, with extensive documentation and examples available online.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Blog post by &lt;strong&gt;Frank Delporte&lt;/strong&gt; : &lt;a href="https://thenewstack.io/end-of-the-road-for-javafx-in-jdk-8-keeping-your-apps-alive/" target="_blank" rel="noopener noreferrer"&gt;End of the Road for JavaFX in JDK 8: Keeping Your Apps Alive&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;Oracle will end support for JavaFX in JDK 8 next March and will stop providing Java 8 builds with OpenJFX included, as explained in the Oracle Java SE Support Roadmap. This means that from April 2025 and onward, if you are using JavaFX, you need to find an alternative distribution if you&amp;rsquo;d like to continue to receive security updates.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Heimbuchner_J/status/1845451366484914516" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Homebookner&lt;/strong&gt; is looking for help&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;I&amp;rsquo;am currently implementing a simple workspace control. I&amp;rsquo;m using splitpanes for the content, but when hiding and showing content in the splitpane, the divider jumps around. It seems not to happen, if the system setting for screen zoom is at 100%. Ideas?&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/Stephan007/status/1848775499578794017" target="_blank" rel="noopener noreferrer"&gt;AI is coding and controlling the computer for &lt;strong&gt;Stephan Janssen&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;An experimental AnthropicAI Claude agent takes control of my screen, autonomously doing whatever is needed to get the job done. &amp;hellip; Now develops the same but using JavaFX (which it needs to install) and run 🔥🧠.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-9-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The overview of the links of September got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-september-2024/"&gt;published on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;New content:
&lt;ul&gt;
&lt;li&gt;People: &lt;a href="https://www.jfx-central.com/people/c.detastes" target="_blank" rel="noopener noreferrer"&gt;Clément de Tastes&lt;/a&gt;
, Java &amp;amp; JavaFX enthusiast, Quarkus FX contributor, Tech writer and speaker.&lt;/li&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/quarkusfx" target="_blank" rel="noopener noreferrer"&gt;QuarkusFX&lt;/a&gt;
, a Quarkus extension that allows you to use JavaFX in your Quarkus application.&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/-ddFxwh2U6E" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Christoph Schwentker about JabRef&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video: &lt;a href="https://www.jfx-central.com/videos/djbC7zWc-2w" target="_blank" rel="noopener noreferrer"&gt;JavaFX In Action with Ulas Ergin about internal banking apps&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Learn: &lt;a href="https://www.jfx-central.com/learn-javafx/fat-jar" target="_blank" rel="noopener noreferrer"&gt;Template project to build a JAR with dependencies with Maven&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Learn: &lt;a href="https://www.jfx-central.com/learn-javafx/quarkusfx" target="_blank" rel="noopener noreferrer"&gt;Using JavaFX in your Quarkus application&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>The Art of Full Stack Debugging</title><link>https://foojayio.github.io/website/today/the-art-of-full-stack-debugging/</link><pubDate>Fri, 25 Oct 2024 07:24:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-art-of-full-stack-debugging/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#full-stack-development-a-shifting-definition"&gt;Full Stack Development, A Shifting Definition&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-full-stack-debugging-approach"&gt;The Full Stack Debugging Approach&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#frontend-debugging-tools-and-techniques"&gt;Frontend Debugging: Tools and Techniques&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#it-isnt-just-consolelog"&gt;It isn&amp;rsquo;t &amp;ldquo;Just Console.log&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-power-of-developer-tools"&gt;The Power of Developer Tools&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#tackling-code-obfuscation"&gt;Tackling Code Obfuscation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#debugging-across-layers"&gt;Debugging Across Layers&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#isolating-issues-across-the-stack"&gt;Isolating Issues Across the Stack&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-importance-of-systemlevel-debugging"&gt;The Importance of System-Level Debugging&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#embracing-complexity"&gt;Embracing Complexity&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#conclusion"&gt;Conclusion&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-0-full-stack-development-is-often-likened-to-an-intricate-balancing-act-where-developers-are-expected-to-juggle-multiple-responsibilities-across-the-frontend-backend-database-and-beyond-as-the-definition-of-full-stack-development-continues-to-evolve-so-too-does-the-approach-to-debugging"&gt;Full stack development is often likened to an intricate balancing act, where developers are expected to juggle multiple responsibilities across the frontend, backend, database, and beyond. As the definition of full stack development continues to evolve, so too does the approach to debugging.&lt;/h3&gt;
&lt;p&gt;Full stack debugging is an essential skill for developers, as it involves tracking issues through multiple layers of an application, often navigating domains where one&amp;rsquo;s knowledge may only be cursory. In this blog post I aim to explore the nuances of full stack debugging, offering practical tips and insights for developers navigating the complex web of modern software development.&lt;/p&gt;</description></item><item><title>Learn About How Your Peers Use Java!</title><link>https://foojayio.github.io/website/today/learn-about-how-your-peers-use-java/</link><pubDate>Thu, 24 Oct 2024 12:44:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/learn-about-how-your-peers-use-java/</guid><description>&lt;p&gt;&lt;strong&gt;Do you ever wonder what OpenJDK distributions and what Java versions your peers are using? Java-based infrastructures and languages? How many are using Java to code AI functionality? How Java workloads are affecting cloud compute costs?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
 has been gathering all that data from a survey of Java users, running until 6:30pm CT on October 31, 2024. If you want to participate, the survey is short, and we&amp;rsquo;ll hook you up with the report after the survey is complete in January 2025.
&lt;a href="https://survey.alchemer.com/s3/8032225/Foo" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/learn-about-how-your-peers-use-java/dimresearch-1024x557.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Just-Write-And-Run prototyping with JEP-477</title><link>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-just-write-and-run-prototyping-with-jep-477-not-only-for-beginners/</link><pubDate>Wed, 23 Oct 2024 09:37:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-just-write-and-run-prototyping-with-jep-477-not-only-for-beginners/</guid><description>&lt;h3 id="h3-0-it-seems-like-it-s-never-been-easier-to-start-writing-a-simple-program-that-can-be-turned-into-a-more-advanced-one-as-development-progresses-let-s-explore-possibilities-delivered-by-jdk-23-release"&gt;It seems like it&amp;rsquo;s never been easier to start writing a simple program that can be turned into a more advanced one as development progresses. Let&amp;rsquo;s explore possibilities delivered by JDK 23 release.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;From the early days, Java may have struggled with a relatively verbose and sometimes strikingly complicated process of creating a small program. A small program just to validate an idea or assumption. Let&amp;rsquo;s call that Just-Write-And-Run feature. For example, it&amp;rsquo;s required to create a trivial solution for reading and parsing data, Oh now what&amp;hellip;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Vaadin: Battery-Included Server-Side AJAX Framework</title><link>https://foojayio.github.io/website/today/vaadin-battery-included-server-side-ajax-framework/</link><pubDate>Tue, 22 Oct 2024 09:39:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/vaadin-battery-included-server-side-ajax-framework/</guid><description>&lt;p&gt;&lt;strong&gt;I&amp;rsquo;ve written a lot about &lt;a href="https://vaadin.com/" target="_blank" rel="noopener noreferrer"&gt;Vaadin&lt;/a&gt;
. I was so enthusiastic that I wrote the &lt;a href="https://www.amazon.fr/Learning-Vaadin-Nicolas-Frankel/dp/1849515220" target="_blank" rel="noopener noreferrer"&gt;first book&lt;/a&gt;
 about it (besides the Book of Vaadin), its &lt;a href="https://www.amazon.fr/Learning-Vaadin-Second-Nicolas-Frankel/dp/1782169776" target="_blank" rel="noopener noreferrer"&gt;updated edition&lt;/a&gt;
 for Vaadin 7, and a &lt;a href="https://morevaadin.com/" target="_blank" rel="noopener noreferrer"&gt;companion website&lt;/a&gt;
. Still, I&amp;rsquo;m amazed that so many people in the JVM world never heard of it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this article, I&amp;rsquo;d like to introduce Vaadin in the context of AJAX and SSR.&lt;/p&gt;
&lt;h2 id="h2-0-short-introduction-to-vaadin"&gt;Short introduction to Vaadin&lt;/h2&gt;
&lt;p&gt;The beauty of Vaadin lies in its simplicity - &lt;strong&gt;you only write backend code&lt;/strong&gt; . You read that well. A Vaadin developer only needs to know Java, or any JVM language, and the Vaadin API. At runtime, Vaadin will create the client-side code, &lt;em&gt;i.e.&lt;/em&gt;, HTML, JavaScript and CSS. This approach empowers developers to focus on the application&amp;rsquo;s core functionality, making the development process more productive.&lt;/p&gt;</description></item><item><title>Foojay Podcast #59: DevRel Explained!</title><link>https://foojayio.github.io/website/today/foojay-podcast-59/</link><pubDate>Mon, 21 Oct 2024 10:42:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-59/</guid><description>&lt;p&gt;&lt;strong&gt;What do people who have Developer Relations as their job description do? And how do you become a conference speaker? You&amp;rsquo;ll learn in this Foojay podcast!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;At Devoxx in Belgium, I got to talk to Josh Long, Baruch, Pratik Patel, and Roni Dover, who were on the stage because it was part of their job. They shared many tips about being a DevRel and the many tasks involved in such a job.&lt;/p&gt;</description></item><item><title>Book Review: Mastering the Java Virtual Machine</title><link>https://foojayio.github.io/website/today/book-review-mastering-the-java-virtual-machine/</link><pubDate>Fri, 18 Oct 2024 13:54:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-mastering-the-java-virtual-machine/</guid><description>&lt;p&gt;&lt;strong&gt;Otávio Santana&amp;rsquo;s&lt;/strong&gt; &lt;strong&gt;&amp;ldquo;Mastering the Java Virtual Machine&amp;rdquo;&lt;/strong&gt; takes readers on an insightful journey through the inner workings of the JVM. As I read this book, I found myself reconnecting with the fundamentals of Java programming while also discovering new depths of understanding.&lt;/p&gt;
&lt;p&gt;The book strikes a perfect balance between nostalgia and innovation. It reminded me of my early programming days, while also introducing cutting-edge concepts that are crucial for modern Java development. Santana uses clever technical metaphors to make complex JVM internals more accessible, bridging the gap between theory and practical application.&lt;/p&gt;</description></item><item><title>Deep dive into bits, bytes, shorts, ints, longs, signed, and unsigned with Java</title><link>https://foojayio.github.io/website/today/deep-dive-into-bits-bytes-shorts-ints-longs-signed-and-unsigned-with-java/</link><pubDate>Fri, 18 Oct 2024 13:54:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/deep-dive-into-bits-bytes-shorts-ints-longs-signed-and-unsigned-with-java/</guid><description>&lt;p&gt;On the Pi4J discussion list, someone recently asked what the &lt;a href="https://github.com/Pi4J/pi4j-v2/discussions/379" target="_blank" rel="noopener noreferrer"&gt;best and easiest way is in Java to convert a byte value&lt;/a&gt;
. In Java, there is no distinction between signed and unsigned bytes, which can be confusing. My book &lt;a href="https://webtechie.be/books/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Getting Started with Java on the Raspberry Pi&amp;rdquo;&lt;/a&gt;
 contains an explanation about this, and I am happy to share it in this post with some more info and code examples&amp;hellip;&lt;/p&gt;</description></item><item><title>Changes Included in Release 24.08 of Azul Zing Builds of OpenJDK</title><link>https://foojayio.github.io/website/today/changes-included-in-release-24-08-of-azul-zing-builds-of-openjdk/</link><pubDate>Fri, 18 Oct 2024 13:53:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/changes-included-in-release-24-08-of-azul-zing-builds-of-openjdk/</guid><description>&lt;p&gt;Azul Zing Builds of OpenJDK, the optimized Java runtime within &lt;a href="https://www.azul.com/products/prime" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Prime&lt;/a&gt;
, has reached the release of the 24.08 Stable Release line. Zing builds are available in two versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stream Builds&lt;/strong&gt; : Fast-moving monthly releases (end of the month) that include the latest features and changes in PSU releases. These are &lt;strong&gt;free for development and evaluation&lt;/strong&gt;. Using Stream Builds in production requires an active subscription. Their version number is based on year and month. For instance, &amp;ldquo;24.07.0.0&amp;rdquo; is the July Stream Build of 2024.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stable Builds&lt;/strong&gt; : Builds that incorporate only CPUs, PSUs, and Azul Zing critical fixes and do not uptake new features and non-critical enhancements from Stream Builds. Stable Builds are our primary vehicle for delivering time-sensitive bug fixes to customers and are &lt;strong&gt;only available to Azul customers&lt;/strong&gt;. Their version number is based on the Stream Build they originated from. For instance, &amp;ldquo;23.08.500.0&amp;rdquo; was derived from the August Stream Build of 2023 but already had multiple updates, as the 500 number indicates.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As stream builds happen in a fixed schedule, all changes are included in the &lt;a href="https://docs.azul.com/prime/release-notes" target="_blank" rel="noopener noreferrer"&gt;release notes&lt;/a&gt;
. Twice a year (in February and August), a Stream build becomes the new Stable build, providing a new version with many more improvements. In this post, we want to give you an overview of all the combined improvements in the 24.08 Stable Line.
&lt;img src="https://foojayio.github.io/website/today/changes-included-in-release-24-08-of-azul-zing-builds-of-openjdk/Azul-Prime-Stable-2308-1024x400.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Profile IntelliJ IDEA with its own profiler</title><link>https://foojayio.github.io/website/today/profile-intellij-idea-with-its-own-profiler/</link><pubDate>Wed, 16 Oct 2024 15:49:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/profile-intellij-idea-with-its-own-profiler/</guid><description>&lt;p&gt;Other languages: &lt;a href="https://flounder.dev/es/posts/profile-idea-with-idea/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/ko/posts/profile-idea-with-idea/" target="_blank" rel="noopener noreferrer"&gt;한국어&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/profile-idea-with-idea/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
 &lt;a href="https://flounder.dev/zh/posts/profile-idea-with-idea/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Just like my &lt;a href="https://foojayio.github.io/website/today/debugger-godmode-hacking-a-jvm-application-with-the-debugger/"&gt;previous post&lt;/a&gt;
, this one is going to be slightly meta. Obviously, you can use IntelliJ IDEA &lt;a href="https://flounder.dev/posts/get-started-with-profiling/" target="_blank" rel="noopener noreferrer"&gt;to profile another process&lt;/a&gt;
, but did you know IntelliJ IDEA can profile itself?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This might be useful if you are writing an &lt;a href="https://plugins.jetbrains.com/docs/intellij/sdk.html" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA plugin&lt;/a&gt;
 and need to address issues related to your plugin&amp;rsquo;s performance.&lt;/p&gt;
&lt;p&gt;Also, regardless of whether you are a plugin author, the described case might be interesting to you because the profiling strategy that I&amp;rsquo;ll cover is not exclusive to IntelliJ IDEA &amp;ndash; you can use it to troubleshoot similar bottlenecks in other types of projects and using other tools.&lt;/p&gt;</description></item><item><title>Gatherers upgrades pipeline design pattern JEP-461</title><link>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-gatherers-upgrades-pipeline-design-pattern-jep-461/</link><pubDate>Tue, 15 Oct 2024 06:18:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-gatherers-upgrades-pipeline-design-pattern-jep-461/</guid><description>&lt;p&gt;Source-code flexibility goes hand in hand with maintainability and testability. The Java language benefits not only from its maturity but also from the fact that it is strongly typed. This may initiate possible discussion topics, as each defined variable requires its type to be known, which can lead to unnecessary verbosity in the source code (reduced by JEP-286: local variable type inference[4]).&lt;/p&gt;
&lt;p&gt;Since the introduction of the Stream API in Java 8, developers have benefited from the ability to create complex transformations inside pipelines. The Stream API allows a lazily evaluated definition of how a pipeline (Example 1.- 1) should be transformed through one or multiple intermediate functions (Example 1.- 2). The sequence of intermediate functions must be terminated by a terminal function that materializes the output (Example 1.- 3).&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>Augmenting the client with Alpine.js</title><link>https://foojayio.github.io/website/today/augmenting-the-client-with-alpine-js/</link><pubDate>Mon, 14 Oct 2024 10:59:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/augmenting-the-client-with-alpine-js/</guid><description>&lt;p&gt;This article is part of a series comparing different ways to implement asynchronous requests on the client, which is colloquially known as AJAX. I dedicated the &lt;a href="https://foojayio.github.io/website/today/augmenting-the-client-with-vue-js/"&gt;previous post&lt;/a&gt;
 to Vue.js; I&amp;rsquo;ll dedicate this one to &lt;a href="https://alpinejs.dev/" target="_blank" rel="noopener noreferrer"&gt;Alpine.js&lt;/a&gt;
 - not to be confused with Alpine Linux.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll follow the same structure as previously.&lt;/p&gt;
&lt;h2 id="h2-0-laying-out-the-work"&gt;Laying out the work&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s the setup, server- and client-side.&lt;/p&gt;
&lt;h3 id="h3-1-server-side"&gt;Server-side&lt;/h3&gt;
&lt;p&gt;Here is how I integrate Thymeleaf and Alpine.js in the POM:&lt;/p&gt;</description></item><item><title>Augmenting the client with Vue.js</title><link>https://foojayio.github.io/website/today/augmenting-the-client-with-vue-js/</link><pubDate>Mon, 14 Oct 2024 10:53:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/augmenting-the-client-with-vue-js/</guid><description>&lt;p&gt;In my &lt;a href="https://foojayio.github.io/website/today/a-short-history-of-ajax-and-ssr/"&gt;previous article&lt;/a&gt;
, I laid the ground to build upon; now is the time to start &amp;ldquo;for real&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I heard a lot of &lt;a href="https://vuejs.org/" target="_blank" rel="noopener noreferrer"&gt;Vue.js&lt;/a&gt;
. Additionally, a friend who transitioned from developer to manager told me good things about Vue, which further piqued my interest. I decided to have a look at it: it will be the first &amp;ldquo;lightweight&amp;rdquo; JavaScript framework I&amp;rsquo;ll study - from the point of view of a newbie, which I am.&lt;/p&gt;</description></item><item><title>Builder Pattern Simplicity with JEP-455 Primitive Types</title><link>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-builder-pattern-simplicity-with-jep-455-primitive-types-in-patterns-instanceof-and-switch-preview/</link><pubDate>Thu, 10 Oct 2024 10:54:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-builder-pattern-simplicity-with-jep-455-primitive-types-in-patterns-instanceof-and-switch-preview/</guid><description>&lt;p&gt;&lt;strong&gt;The runtime initiation of any program requires allocating a given memory and after many additional steps the first object could be created.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In a &lt;a href="https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-factory-pattern-with-flexible-constructor-bodies-with-jep-482/"&gt;previous post&lt;/a&gt;
, we explored how to improve maintainability of complex creation processes by using the factory creational pattern[4] and JEP-482, flexible constructor bodies.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The factory design may be a good fit for many cases but it may also create obstacles due to the pattern code centralized nature.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Unleashing the Power of Git Bisect</title><link>https://foojayio.github.io/website/today/unleashing-the-power-of-git-bisect/</link><pubDate>Tue, 08 Oct 2024 08:15:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/unleashing-the-power-of-git-bisect/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-essence-of-debugging-with-git"&gt;The Essence of Debugging with Git&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#setting-the-stage-for-debugging"&gt;Setting the Stage for Debugging&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#initiating-bisect-mode"&gt;Initiating Bisect Mode&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#marking-the-known-good-revision"&gt;Marking the Known Good Revision&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#marking-the-known-bad-revision"&gt;Marking the Known Bad Revision&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#bisecting-to-find-the-culprit"&gt;Bisecting to Find the Culprit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#expected-output"&gt;Expected Output&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#reset-and-analysis"&gt;Reset and Analysis&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#advanced-usage-and-tips"&gt;Advanced Usage and Tips&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#script-automation-for-precision-and-efficiency"&gt;Script Automation for Precision and Efficiency&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#handling-flaky-tests-with-strategy"&gt;Handling Flaky Tests with Strategy&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#skipping-commits-with-care"&gt;Skipping Commits with Care&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#unraveling-a-regression-mystery"&gt;Unraveling a Regression Mystery&lt;/a&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;We don&amp;rsquo;t usually think of Git as a debugging tool. Surprisingly, Git shines not just as a version control system but also as a potent debugging ally when dealing with the tricky matter of regressions.&lt;/p&gt;</description></item><item><title>Easily containerize Java applications with cloud native buildpacks</title><link>https://foojayio.github.io/website/today/easily-containerize-java-applications-with-cloud-native-buildpacks/</link><pubDate>Mon, 07 Oct 2024 09:15:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/easily-containerize-java-applications-with-cloud-native-buildpacks/</guid><description>&lt;p&gt;&lt;strong&gt;The concept of containers has helped to bring Java developers closer than ever to the cloud-native idiom of &amp;lsquo;write once, run anywhere.&amp;rsquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Effectively and efficiently containerizing your Java application can be much more of a challenge than you might originally expect, especially when you might not be a container expert. Having to write and maintain a dockerfile, run a Docker daemon as root, wait for all the builds to complete, and then finally push the image to a remote registry can be complex, time-consuming, and frustrating!&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>Null object pattern to avoid null pointer exception with JEP-455</title><link>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-null-object-pattern-to-avoid-null-pointer-exception-with-jep-455/</link><pubDate>Fri, 04 Oct 2024 06:19:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-null-object-pattern-to-avoid-null-pointer-exception-with-jep-455/</guid><description>&lt;p&gt;&lt;strong&gt;The newest release JDK 23 [2] comes with a neat extension to pattern matching for switch and instanceof statements, JEP-455: Primitive Types in Patterns, instanceof and switch [1]. While the introduction of pattern matching can be considered a crucial element in moving the Java platform into a functional paradigm, it introduced several limitations.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Using reference object types or objects only for switch and instanceof statements slightly reduced the possibilities of its utilization. This has had an impact on its use in building code based on design patterns, including refactoring.&lt;/p&gt;</description></item><item><title>Gear Up for NODES 2024: What to Know</title><link>https://foojayio.github.io/website/today/gear-up-for-nodes-2024-what-to-know/</link><pubDate>Thu, 03 Oct 2024 17:00:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/gear-up-for-nodes-2024-what-to-know/</guid><description>&lt;h3 id="h3-0-nodes-is-a-free-virtual-conference-run-by-neo4j-for-developers-data-scientists-and-other-technical-roles-who-want-to-learn-more-about-graph-databases-and-how-they-can-be-used-to-solve-complex-problems-join-us-online-november-7"&gt;NODES is a free, virtual conference run by Neo4j for developers, data scientists, and other technical roles who want to learn more about graph databases and how they can be used to solve complex problems. Join us online November 7!&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The NODES 2024 conference is approaching fast, and we have a lot of exciting activities, including talks, workshops, and more. Here&amp;rsquo;s what you need to know to get ready for NODES 2024.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>SQL Best Practices Every Java Engineer Must Know</title><link>https://foojayio.github.io/website/today/sql-best-practices-every-java-engineer-must-know/</link><pubDate>Tue, 01 Oct 2024 17:52:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/sql-best-practices-every-java-engineer-must-know/</guid><description>&lt;p&gt;In the world of software development, best practices for SQL optimization are a critical skill that every Java engineer must master. Efficient database interactions can significantly enhance the performance of your applications, leading to faster response times and a better user experience.&lt;/p&gt;
&lt;p&gt;This comprehensive guide dives into the best practices for SQL query optimization, tailored specifically for Java engineers. From understanding the importance of indexes to mastering joins and leveraging connection pooling, this article covers all the essential techniques you need to write efficient and performant SQL queries and best practices for SQL.&lt;/p&gt;</description></item><item><title>Foojay Podcast #58: How Java Developers Can Secure Their Code</title><link>https://foojayio.github.io/website/today/foojay-podcast-58/</link><pubDate>Mon, 30 Sep 2024 07:43:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-58/</guid><description>&lt;p&gt;Three years after Log4Shell caused a significant security issue, we still struggle with insecure dependencies and injection problems.&lt;/p&gt;
&lt;p&gt;In this podcast, we&amp;rsquo;ll discuss how developers can secure their code.&lt;/p&gt;
&lt;p&gt;I talked with three authors who posted a security and code quality post on Foojay.io.&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/sRVcqILDuSo?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>JavaFX Links of September 2024</title><link>https://foojayio.github.io/website/today/javafx-links-of-september-2024/</link><pubDate>Mon, 30 Sep 2024 02:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-september-2024/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of September 2024, published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during this month.&lt;/p&gt;
&lt;p&gt;Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;A lot of milestones this month&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Java and JavaFX 23&lt;/strong&gt;&lt;/em&gt; were released!&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;&lt;strong&gt;100th JavaFX Links Of The Week&lt;/strong&gt;&lt;/em&gt; was published on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com/links&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;&lt;strong&gt;release of the iOS JFX Central App&lt;/strong&gt;&lt;/em&gt;!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;More info and links below in this overview&amp;hellip;&lt;/p&gt;</description></item><item><title>Azul Brings Java from Edge to Cloud</title><link>https://foojayio.github.io/website/today/azul-brings-java-from-edge-to-cloud/</link><pubDate>Fri, 27 Sep 2024 11:30:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/azul-brings-java-from-edge-to-cloud/</guid><description>&lt;p&gt;In Part 1 of this series, &amp;ldquo;&lt;a href="https://foojayio.github.io/website/today/a-fresh-look-at-embedded-java/"&gt;A Fresh Look at Embedded Java&lt;/a&gt;
,&amp;rdquo; we explored the use of Java for embedded use cases.&lt;/p&gt;
&lt;p&gt;Azul and its Zulu Build of OpenJDK (Zulu) are the ideal partners in this part of the software world.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s expand and look at the cloud part of a typical end-to-end solution with sensors, edge devices, client applications, and cloud services.
&lt;img src="https://foojayio.github.io/website/today/azul-brings-java-from-edge-to-cloud/edge-diagram.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="Azul-Platform-Core-for-Edge-Devices-and-Client-Applications"&gt;Azul Platform Core for edge devices and client applications&lt;/h2&gt;
&lt;p&gt;Because Java delivers fast development speed thanks to its amazing methods and tools and its impressive performance in handling massive amounts of data, it&amp;rsquo;s the ideal programming language for building applications for edge devices that collect data from various sensors.&lt;/p&gt;</description></item><item><title>JDK 23: Factory Pattern with Flexible Constructor Bodies</title><link>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-factory-pattern-with-flexible-constructor-bodies-with-jep-482/</link><pubDate>Wed, 25 Sep 2024 11:14:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-factory-pattern-with-flexible-constructor-bodies-with-jep-482/</guid><description>&lt;p&gt;Since the introduction of the new JDK release cadence, we have seen an incredible amount of new enhancements added to each JDK cycle, kicking the Java platform back on track compared to other languages.&lt;/p&gt;
&lt;p&gt;Source code maintainability plays a very important role as complexity of nowadays projects increases. Yes, design patterns, spelled forward and backward many times, but forgotten at the same time due to various reasons.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take a look at one particular brand new preview feature added to the latest JDK release 23 [2], JEP-482: Flexible Constructor Bodies [1] in its second iteration.&lt;/p&gt;</description></item><item><title>Run true-to-production tests on your Java applications</title><link>https://foojayio.github.io/website/today/true-to-production-testing-java-apps/</link><pubDate>Tue, 24 Sep 2024 11:48:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/true-to-production-testing-java-apps/</guid><description>&lt;p&gt;As supported by the &lt;a href="https://foojayio.github.io/website/today/creating-cloud-native-java-applications-with-the-12-factor-app-methodology/" title="12 factor"&gt;12 factor&lt;/a&gt;
 and &lt;a href="https://developer.ibm.com/articles/creating-a-12-factor-application-with-open-liberty/" title="15 factor app" target="_blank" rel="noopener noreferrer"&gt;15 factor app&lt;/a&gt;
 methodologies, in application development, we&amp;rsquo;ve come to realize just how important it is to test our applications in a true-to-production environment before releasing them to consumers. This helps us to mitigate potential failures and spot bugs that could appear in production but be missed in testing due to environmental differences and ensure we have high confidence in our applications being deployed to production environments. But, traditionally, developers have struggled with replicating an application&amp;rsquo;s production environment locally.&lt;/p&gt;</description></item><item><title>Server-Side Rendering with Spring Boot</title><link>https://foojayio.github.io/website/today/server-side-rendering-with-spring-boot/</link><pubDate>Mon, 23 Sep 2024 06:58:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/server-side-rendering-with-spring-boot/</guid><description>&lt;p&gt;Understanding the shared steps in the project setup is crucial before delving into the specifics of each client-augmenting technology. My requirements &lt;a href="https://blog.frankel.ch/ajax-ssr/1/" target="_blank" rel="noopener noreferrer"&gt;from the last post&lt;/a&gt;
 where quite straightforward:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;I&amp;rsquo;ll assume the viewpoint of a backend developer&lt;/li&gt;
&lt;li&gt;No front-end build step: no TypeScript, no minification, etc.&lt;/li&gt;
&lt;li&gt;All dependencies are managed from the backend app, &lt;em&gt;i.e.&lt;/em&gt;, Maven&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&amp;rsquo;s important to note that the technology I&amp;rsquo;ll be detailing, except Vaadin, follows a similar approach. Vaadin, with its unique paradigm, really stands out among the approaches.&lt;/p&gt;</description></item><item><title>A Short History of AJAX and SSR</title><link>https://foojayio.github.io/website/today/a-short-history-of-ajax-and-ssr/</link><pubDate>Mon, 23 Sep 2024 06:57:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-short-history-of-ajax-and-ssr/</guid><description>&lt;p&gt;&lt;strong&gt;My journey in programming began over two decades ago, a time when JavaScript was a far cry from its current state, and developers were primarily focused on Microsoft Internet Explorer. One of my proudest achievements back then was writing a few lines of code that allowed users to add and remove table rows entirely on the client side. We called it . Many developers today have forgotten about it&amp;mdash;or never knew it existed.&lt;/strong&gt;&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>The Persistent Threat: Why Major Vulnerabilities Like Log4Shell and Spring4Shell Remain Significant</title><link>https://foojayio.github.io/website/today/the-persistent-threat-why-major-vulnerabilities-like-log4shell-and-spring4shell-remain-significant/</link><pubDate>Tue, 17 Sep 2024 16:17:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-persistent-threat-why-major-vulnerabilities-like-log4shell-and-spring4shell-remain-significant/</guid><description>&lt;p&gt;&lt;em&gt;This article was originally published at &lt;a href="https://snyk.io/blog/log4shell-spring4shell-threat/" target="_blank" rel="noopener noreferrer"&gt;Snyk.io&lt;/a&gt;
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As developers, we&amp;rsquo;re constantly juggling features, fixes, and deadlines. Yet, a lurking issue has been surprisingly overlooked: the continued use of vulnerable Log4j and Spring Framework versions in many projects.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Despite the high-profile exposure of Log4Shell and Spring4Shell vulnerabilities, a shocking number of applications are still running on these ticking time bombs. This isn&amp;rsquo;t just a minor oversight &amp;mdash; it&amp;rsquo;s a major risk. We&amp;rsquo;re builders at heart, but part of building is ensuring our structures are safe.&lt;/p&gt;</description></item><item><title>Java: Where the Wild Code Isn't (On Security and Modularity)</title><link>https://foojayio.github.io/website/today/java-where-the-wild-code-isnt/</link><pubDate>Tue, 17 Sep 2024 08:41:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-where-the-wild-code-isnt/</guid><description>&lt;p&gt;In the last several years, the OpenJDK community has made Java significantly safer for users and developers while at the same time making it easier to design, build, and run applications quickly.&lt;/p&gt;
&lt;p&gt;There are two core aspects that have led to this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;A secure JDK, where vulnerabilities are dealt with and patched.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A modular JDK, where different types or risk can be clearly delineated.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A Secure JDK {#h2-0-1-a-secure-jdk}&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;The core Java platform underlies all Java applications and is kept secure by a special OpenJDK Vulnerability Group. This group helps to perform different actions and security regression tests like fuzzing and ensuring old vulnerabilities do not recur.&lt;/p&gt;</description></item><item><title>Java 23 Has Arrived, And It Brings a Truckload of Changes</title><link>https://foojayio.github.io/website/today/java-23-has-arrived-and-it-brings-a-truckload-of-changes/</link><pubDate>Tue, 17 Sep 2024 06:45:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-23-has-arrived-and-it-brings-a-truckload-of-changes/</guid><description>&lt;p&gt;Java 23 has arrived! It&amp;rsquo;s been six months since Java 22 was released, so it&amp;rsquo;s time for a fresh truckload of JEPs.&lt;/p&gt;
&lt;p&gt;In this article, we take you on a tour of everything that is part of this release, giving you a brief introduction to each of them.&lt;/p&gt;
&lt;p&gt;Where applicable the differences with Java 22 are highlighted and a few typical use cases are provided, so that you&amp;rsquo;ll be more than ready to start using these features after reading this.&lt;/p&gt;</description></item><item><title>Foojay Podcast #57: Welcome to OpenJDK 23</title><link>https://foojayio.github.io/website/today/foojay-podcast-57/</link><pubDate>Mon, 16 Sep 2024 11:34:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-57/</guid><description>&lt;p&gt;OpenJDK (Java) 23 is (almost) here!&lt;/p&gt;
&lt;p&gt;OpenJDK 23 introduces three new features to the language and runtime and many bug fixes, small improvements, and a longer list of preview features.&lt;/p&gt;
&lt;p&gt;What are the most important facts about this release? Let&amp;rsquo;s find out&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/7PGOhbiPoRY?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Health Check Response Format for HTTP APIs</title><link>https://foojayio.github.io/website/today/health-check-response-format-for-http-apis/</link><pubDate>Thu, 12 Sep 2024 10:02:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/health-check-response-format-for-http-apis/</guid><description>&lt;p&gt;I&amp;rsquo;m continuing my journey on getting more familiar with HTTP APIs by reading related . This time, I read the &lt;a href="https://datatracker.ietf.org/doc/html/draft-inadarei-api-health-check" target="_blank" rel="noopener noreferrer"&gt;Health Check Response Format for HTTP APIs&lt;/a&gt;
 on the suggestion of &lt;a href="https://twitter.com/stefanofago/" target="_blank" rel="noopener noreferrer"&gt;Stefano Fago&lt;/a&gt;
. In this article, I&amp;rsquo;d like to summarize my reading.&lt;/p&gt;
&lt;p&gt;Note that it&amp;rsquo;s a draft. Moreover, it has been dormant for nearly two years and, thus, has been automatically expired. However, it&amp;rsquo;s the closest to a specification on health checks and thus deserves some love.&lt;/p&gt;</description></item><item><title>DRY your Apache APISIX config</title><link>https://foojayio.github.io/website/today/dry-your-apache-apisix-config/</link><pubDate>Thu, 12 Sep 2024 09:59:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/dry-your-apache-apisix-config/</guid><description>&lt;p&gt;is an important principle in software development. In this article, you learn how to apply it to Apache APISIX configuration.&lt;/p&gt;
&lt;h2 id="h2-0-the-dry-principle"&gt;The DRY principle&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Don&amp;rsquo;t repeat yourself&amp;rdquo; (DRY) is a principle of software development aimed at reducing repetition of information which is likely to change, replacing it with abstractions that are less likely to change, or using data normalization which avoids redundancy in the first place.&lt;/p&gt;
&lt;p&gt;&amp;ndash; &lt;a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" target="_blank" rel="noopener noreferrer"&gt;Wikipedia - Don&amp;rsquo;t repeat yourself&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>A Fresh Look at Embedded Java</title><link>https://foojayio.github.io/website/today/a-fresh-look-at-embedded-java/</link><pubDate>Wed, 11 Sep 2024 07:37:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-fresh-look-at-embedded-java/</guid><description>&lt;p&gt;&lt;strong&gt;Since its inception, Java has promised to &amp;ldquo;Write Once, Run Anywhere.&amp;rdquo; In its early days, the main focus of Java was embedded devices, such as set-top boxes and televisions.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;But soon, it became one of the leading programming languages powering high-scale business applications that can handle massive amounts of transactions with high throughput.&lt;/p&gt;
&lt;p&gt;Because those use cases are very visible and there are a lot of job opportunities within that area, we tend to forget that Java on embedded is also still very much alive and kicking!
&lt;img src="https://foojayio.github.io/website/today/a-fresh-look-at-embedded-java/fresh-look-embedded-java-1024x400.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Press the Easy Button: Organize a Virtual Conference Schedule with a Graph Database</title><link>https://foojayio.github.io/website/today/press-the-easy-button-organize-a-virtual-conference-schedule-with-a-graph-database/</link><pubDate>Tue, 10 Sep 2024 06:17:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/press-the-easy-button-organize-a-virtual-conference-schedule-with-a-graph-database/</guid><description>&lt;p&gt;&lt;strong&gt;Putting together a conference schedule for NODES 2024 (one of my favorite events of the year) is a massive undertaking, but my colleague and I used technologies and tools at our disposal to make this process a little more efficient and greatly reduce opportunities for mistakes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every year, Neo4j hosts the virtual event NODES 2024 - a free, technical event spanning global timezones and a variety of graph-related topics. This is one of my favorite events of the year, but it doesn&amp;rsquo;t happen without countless hours of planning and work to make it valuable to the graph community.&lt;/p&gt;</description></item><item><title>Browserless Testing of Vaadin Applications with Karibu Testing</title><link>https://foojayio.github.io/website/today/browserless-testing-of-vaadin-applications-with-karibu-testing/</link><pubDate>Mon, 09 Sep 2024 06:27:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/browserless-testing-of-vaadin-applications-with-karibu-testing/</guid><description>&lt;p&gt;I&lt;strong&gt;n modern web development, testing is essential for ensuring the reliability and performance of applications. For developers working with Vaadin, one of the best testing tools is Karibu Testing. This testing framework stands out for its ability to run browserless testing, offering several advantages over traditional end-to-end testing approaches, such as Selenium, Playwright, or Cypress.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This article will highlight the benefits of browserless testing with Karibu Testing and how it compares to the end-to-end testing approach (E2E).&lt;/p&gt;</description></item><item><title>Top Security Flaws hiding in your code right now</title><link>https://foojayio.github.io/website/today/top-security-flaws-hiding-in-your-code-right-now-and-how-to-fix-them/</link><pubDate>Thu, 05 Sep 2024 16:41:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/top-security-flaws-hiding-in-your-code-right-now-and-how-to-fix-them/</guid><description>&lt;h3 id="h3-0-recent-years-have-seen-numerous-injection-attacks-causing-significant-damage-including-a-2019-sql-injection-breach-in-the-fortnite-video-game-and-a-2018-attack-on-tesla-s-systems"&gt;Recent years have seen numerous injection attacks causing significant damage, including a 2019 SQL injection breach in the Fortnite video game and a 2018 attack on Tesla&amp;rsquo;s systems.&lt;/h3&gt;
&lt;p&gt;Other serious incidents involve the Log4Shell logging injection and a deserialization attack on Atlassian Jira. These examples show that various code vulnerabilities can affect any organization. This article will examine the three most common attack types&amp;mdash;SQL injection, Deserialization Injection, and Logging Injection&amp;mdash;and discuss ways to prevent them.&lt;/p&gt;</description></item><item><title>Help update the Twelve-Factor app methodology</title><link>https://foojayio.github.io/website/today/updating-the-twelve-factor-app-methodology-a-call-for-participation/</link><pubDate>Thu, 05 Sep 2024 07:44:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/updating-the-twelve-factor-app-methodology-a-call-for-participation/</guid><description>&lt;p&gt;&lt;strong&gt;The 12 factor application methodology is being updated and we need your help with it! Be a part of this project helping to update and modernize the original methodology to enable it to be even more effective for modern cloud-native applications.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/updating-the-twelve-factor-app-methodology-a-call-for-participation/Screenshot-2024-08-29-at-13.07.44-700x441.png" alt="We Need Your Help image" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-what-is-the-12-factor-app-methdology"&gt;What is the 12 factor app methdology?&lt;/h2&gt;
&lt;p&gt;Originally created back in 2012, the &lt;a href="https://12factor.net/" title="12-factor app methodology" target="_blank" rel="noopener noreferrer"&gt;12-factor app methodology&lt;/a&gt;
 was designed to provide a set of guidelines for helping developers and organizations to design and build cloud-native applications. This methodology was defined by the developers at Heroku, but has been adopted and even in some cases extended by the community since then.&lt;/p&gt;</description></item><item><title>Java 23: What’s New? | Foojay.io today</title><link>https://foojayio.github.io/website/today/java-23-whats-new/</link><pubDate>Wed, 04 Sep 2024 09:19:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-23-whats-new/</guid><description>&lt;p&gt;&lt;strong&gt;As soon as Java 23 is out, it&amp;rsquo;ll be time to walk through all the functionalities that this version bring to us as developers.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;First of all, something has happened that, to my knowledge, has never happened before in a Java release: a preview feature has been removed! The String Templates feature, which appeared as a preview feature in Java 21, has been removed. A global redesign of this feature will be carried out, as it had given rise to much debate and didn&amp;rsquo;t seem to meet the community&amp;rsquo;s expectations.&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>When (not) to write an Apache APISIX plugin</title><link>https://foojayio.github.io/website/today/when-not-to-write-an-apache-apisix-plugin/</link><pubDate>Mon, 02 Sep 2024 20:50:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/when-not-to-write-an-apache-apisix-plugin/</guid><description>&lt;p&gt;&lt;strong&gt;When I introduce Apache APISIX in my talks, I mention the &lt;a href="https://apisix.apache.org/plugins/" target="_blank" rel="noopener noreferrer"&gt;massive number of existing plugins&lt;/a&gt;
, and that each of them implements a specific feature.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One of the key features of Apache APISIX is its flexibility. If a feature is missing, you can create your own plugin in Lua or a language compiled into Wasm, showcasing the platform&amp;rsquo;s adaptability to your specific needs.&lt;/p&gt;
&lt;p&gt;In this article, I aim to provide practical alternatives to writing a custom plugin, offering solutions you can quickly implement in your projects.&lt;/p&gt;</description></item><item><title>How to profile a performance issue using Spring Boot profiling tools</title><link>https://foojayio.github.io/website/today/how-to-profile-a-performance-issue-using-spring-boot-profiling-tools/</link><pubDate>Mon, 02 Sep 2024 09:56:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-profile-a-performance-issue-using-spring-boot-profiling-tools/</guid><description>&lt;p&gt;&lt;strong&gt;In today&amp;rsquo;s fast-paced development environment, ensuring the performance and reliability of your services is critical. Imagine you are part of a team responsible for several services essential to both internal teams and external customers. These services are the backbone of various business operations, and any downtime or performance degradation can have significant repercussions.&lt;/strong&gt;{#c79c}&lt;/p&gt;
&lt;p&gt;Now, picture this scenario: your team has not yet implemented a robust monitoring and observability system. One day, you start receiving emails and messages from frustrated clients reporting that your service is down. Panic sets in as your team tries to figure out what went wrong. Without proper monitoring tools, finding the root cause of issues in production is challenging. Persistent downtime increases pressure, affecting business operations and customer satisfaction.{#acf3}&lt;/p&gt;</description></item><item><title>JavaFX Links of August 2024</title><link>https://foojayio.github.io/website/today/javafx-links-of-august-2024/</link><pubDate>Mon, 02 Sep 2024 08:22:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-august-2024/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of August 2024, published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during this month. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1818672219419025743" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duke shared&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;RichTextArea control is now available for testing &lt;a href="https://github.com/andy-goryachev-oracle/Test/blob/main/doc/RichTextArea/RichTextArea.md" target="_blank" rel="noopener noreferrer"&gt;in the JavaFX incubator module&lt;/a&gt;
. Also includes CodeArea control. You can find the &lt;a href="https://cr.openjdk.org/~angorya/RichTextArea/javadoc/jfx.incubator.richtext/module-summary.html" target="_blank" rel="noopener noreferrer"&gt;JavaDoc here&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/112887802923547314" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; shared a screenshot&lt;/a&gt;
: &amp;ldquo;Making progress. Running Java 23 and JavaFX 24-ea on an iPhone. Thanks to OpenJDK/mobile and Gluon tools.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://gist.github.com/mstr2/f416996caf48e11193f0b6a5883a3926" target="_blank" rel="noopener noreferrer"&gt;proposal is available on GitHub for a new JavaFX CSS parser&lt;/a&gt;
. It got &lt;a href="https://mail.openjdk.org/pipermail/openjfx-dev/2024-August/048789.html" target="_blank" rel="noopener noreferrer"&gt;discussed on the openjfx-dev mailing list&lt;/a&gt;
, check it out if you want to share your ideas.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; got challenged by his 14-year-old son &lt;strong&gt;Vik&lt;/strong&gt; to create an app to &lt;em&gt;look at music&lt;/em&gt; : &amp;ldquo;Vik hopes to become rich, while I took it as a challenge to learn more about MIDI and make my first Kotlin application. There is still much work to do, but I just &lt;a href="https://www.youtube.com/watch?v=tR4PL8ufiDw" target="_blank" rel="noopener noreferrer"&gt;published this video with a status update&lt;/a&gt;
. More info is on &lt;a href="https://melodymatrix.rocks/" target="_blank" rel="noopener noreferrer"&gt;melodymatrix.rocks&lt;/a&gt;
.&amp;rdquo; Some parts of the code is &lt;a href="https://github.com/codewriterbv/melodymatrix-app-views" target="_blank" rel="noopener noreferrer"&gt;opensource on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/crschnick/status/1816788292563616004" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; announced&lt;/a&gt;
: &amp;ldquo;Native window themes on macOS with JavaFX. Now finally released in XPipe 10.2!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.jabref.org/2024/08/21/AI-chatting/" target="_blank" rel="noopener noreferrer"&gt;JabRef is introducing AI features&lt;/a&gt;
: &amp;ldquo;Tired of reading through all the papers? Let AI generate a summary for you, or use it to &amp;lsquo;chat&amp;rsquo; with your papers! Either connect with existing AI providers or use a local LLM installation. Check out the new feature, one of our GSOC contributors is currently working on. We use jvm-openai &amp;amp; Deep Java Library (DJL).&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/makingthematrix/status/1818604980372226292" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Maciek Gorywoda&lt;/strong&gt;&lt;/a&gt;
 wrote a &lt;a href="https://play.google.com/store/apps/details?id=scalaonandroid.fxcalculator&amp;amp;hl=en" target="_blank" rel="noopener noreferrer"&gt;calculator app for Android&lt;/a&gt;
: &amp;ldquo;It&amp;rsquo;s GraalVM NI + Scala 3 + JavaFX. The &lt;a href="https://github.com/makingthematrix/scalaonandroid/tree/main/fxcalculator" target="_blank" rel="noopener noreferrer"&gt;sources are here&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/orango_mango/status/1817680477370876020" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;Minesweeper in Java with the JavaFX framework. A small prototype, I will add very soon some new small features and minor stuff.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;And another one: &amp;ldquo;Image Builder Puzzle Game&amp;rdquo;, with a &lt;a href="https://youtube.com/shorts/orP_T_OnBR4?feature=share" target="_blank" rel="noopener noreferrer"&gt;YouTube shorts video&lt;/a&gt;
 and the &lt;a href="https://github.com/OrangoMango/ImageBuilder" target="_blank" rel="noopener noreferrer"&gt;GitHub sources&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/SeanMiPhillips/status/1823006985341555178" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; shared screenshots of Hedgemony AI Strategy and Policy&lt;/a&gt;
: &amp;ldquo;Strategy and Policy development game using Large Language Models for event generation and table top adjudication. The future of AI Wargaming coming soon. :-)&amp;rdquo; Check out &lt;a href="https://x.com/SeanMiPhillips" target="_blank" rel="noopener noreferrer"&gt;his feed&lt;/a&gt;
 for more screenshots and info about it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/dlemmermann/status/1825877587077345548" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared&lt;/a&gt;
: &amp;ldquo;The new TextView control in &lt;a href="https://github.com/dlsc-software-consulting-gmbh/GemsFX" target="_blank" rel="noopener noreferrer"&gt;GemsFX&lt;/a&gt;
 now supports proper text selection equivalent to the way users can select text in the TextArea control. Big shout out to the AtlantaFX developer for providing me with the crucial bits and pieces to make it work.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1819356682457137601" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duke&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;Working on the next release of Transit Theme. Created a new sampler app (using FXComponents NavigationPane), and changed Button appearance along with extra Button styles.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/java/status/1828069916760498257" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Java&lt;/strong&gt; on Twitter&lt;/a&gt;
 shared: &amp;ldquo;Check out this &lt;a href="https://dev.java/learn/javafx-animations/" target="_blank" rel="noopener noreferrer"&gt;intro to JavaFX animations&lt;/a&gt;
 by &lt;a href="https://twitter.com/SquidXTV" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Connor Schweighöfer&lt;/strong&gt;&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Posts by &lt;strong&gt;Frank Delporte&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;On the Azul blog: &lt;a href="https://www.azul.com/blog/running-javafx-applications-on-arm-with-azul-zulu/" target="_blank" rel="noopener noreferrer"&gt;Running JavaFX applications on ARM with Azul Zulu&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;On Foojay, the website for the Friends Of OpenJDK: &lt;a href="https://foojayio.github.io/website/today/javafx-nodes-versus-canvas/"&gt;JavaFX Nodes versus Canvas&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/Igfasouza/status/1816817407857479692" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Igor De Souza&lt;/strong&gt; created a simple JavaFX Hello-world drawing the Olympic Game logo&lt;/a&gt;
. Sources on &lt;a href="https://github.com/igfasouza/JavaFx-olympic-games-" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/Igfasouza/status/1818609277969272873" target="_blank" rel="noopener noreferrer"&gt;And &lt;strong&gt;Igor&lt;/strong&gt; also shared a video&lt;/a&gt;
 : &amp;ldquo;Did you know that you can run JavaFX with Quarkus? A simple Quarkus-fx demo. Running on Raspberry Pi a JavaFX Quarkus traffic light demo.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/konczdev/status/1804591278073532624" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;@konczdev&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;A little fun with Java 22, JavaFX and Project Panama. Modified JavaFX window with a custom JavaFX title bar without any refection, JNI, JNA or native code.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/Zayyad_MS" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Zayyad Muhammad Sani&lt;/strong&gt;&lt;/a&gt;
 shared a &lt;a href="https://www.youtube.com/watch?v=iME6boIrT4A" target="_blank" rel="noopener noreferrer"&gt;video of DSAViz&lt;/a&gt;
, an algorithm visualiser built for his final undergraduate project, with JavaFX, SceneBuilder, and FXML. The sources are &lt;a href="https://github.com/Z-MS/DSAViz-Java" target="_blank" rel="noopener noreferrer"&gt;available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/tbeernot/status/1822536096158265392" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tom Eugelink&lt;/strong&gt; shared on Twitter&lt;/a&gt;
: &amp;ldquo;I&amp;rsquo;ve been doing some JavaFX development again, writing a small application - just controls, no fancy visuals. And I have to say that the development experience is nice; FXML, controllers, IDE support. JavaFX is very under appreciated by the java community.&amp;rdquo; Check the full thread for more info about combining Quarkus and JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/orango_mango/status/1819694644612972606" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;Solar system simulation made in Java with the JavaFX framework. Still a prototype for now, finally got Newton&amp;rsquo;s gravitational law working 😄. The sun is not a planet, I know, it&amp;rsquo;s just an instance of the Planet class.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/rumbletumblekid/status/1828092214096089550" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Rumble Tumble Kid&lt;/strong&gt; is experimenting with JavaFX + Scala&lt;/a&gt;
: &amp;ldquo;Scala is the only JVM language that lets you easily build a working fat jar without having to deal with stupid plugins that break or do not work half the time. To my surprise, it even works with JavaFX applications. jlink and jpackage should be next 😃&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New library: &lt;a href="https://jfx-central.com/libraries/autumoui" target="_blank" rel="noopener noreferrer"&gt;autumo UI&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/dlemmermann/status/1828805263144390931" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared screenshots&lt;/a&gt;
: &amp;ldquo;The mobile version of JFX Central is on the finish line.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Four Easy Ways to Analyze your Java and Kotlin Code for Security Problems</title><link>https://foojayio.github.io/website/today/four-easy-ways-to-analyze-your-java-and-kotlin-code-for-security-problems/</link><pubDate>Fri, 30 Aug 2024 09:07:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/four-easy-ways-to-analyze-your-java-and-kotlin-code-for-security-problems/</guid><description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://snyk.io/blog/analyze-java-kotlin-code/" target="_blank" rel="noopener noreferrer"&gt;Snyk.io&lt;/a&gt;
&lt;/em&gt; .&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nowadays, the security of your applications is just as important as the functionality they provide. Therefore, analyzing your code for security vulnerabilities is a vital part of maintaining the integrity of your applications and protecting your users&amp;rsquo; data. As developers, we are at the front lines of this battle. It&amp;rsquo;s our responsibility to ensure that the code we write is not just functional and efficient but also secure.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Get recognized for your cloud-native Java development skills</title><link>https://foojayio.github.io/website/today/get-recognized-for-your-cloud-native-java-development-skills-with-this-new-badge/</link><pubDate>Thu, 29 Aug 2024 16:08:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/get-recognized-for-your-cloud-native-java-development-skills-with-this-new-badge/</guid><description>&lt;p&gt;&lt;strong&gt;In a world where in-demand skills are critical for job success, security, and progression, it&amp;rsquo;s vital that we, as developers, ensure we are showcasing our skills to the wider world. This can include qualifications, courses, and badges, all of which help us to advertise our skills and highlight our professional experiences and expertise.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So, to help make this easier (and free!) for Java developers, the Open Liberty team created the first-ever Liberty badge: &lt;a href="https://ibm.biz/FooJayLibertyDeveloperEssentialsBadge" title="Liberty Developer Essentials" target="_blank" rel="noopener noreferrer"&gt;Liberty Developer Essentials&lt;/a&gt;
!&lt;/p&gt;</description></item><item><title>IBM Semeru Runtimes for Java includes FIPS 140-3 certified cryptography</title><link>https://foojayio.github.io/website/today/ibm-semeru-java-fips140-3-cryptographic-standard/</link><pubDate>Tue, 27 Aug 2024 08:55:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/ibm-semeru-java-fips140-3-cryptographic-standard/</guid><description>&lt;p&gt;&lt;strong&gt;IBM® Semeru Runtimes™ for Java™ 11, 17, 21+ now includes FIPS 140-3 cryptography (&lt;a href="https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4755" title="certified by the U.S. National Institute of Standards and Technology (NIST)" target="_blank" rel="noopener noreferrer"&gt;certified by the U.S. National Institute of Standards and Technology; NIST&lt;/a&gt;
) and is production-ready for Java deployments. FIPS 140-3 is also available in IBM SDK, Java Technology Edition, V8.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;IBM first made FIPS 140-3 cryptography available as a technology preview more than a year ago, and users responded with helpful feedback on usage and configuration so that the IBM development team could improve its usability. With NIST certification, this capability is now generally available for production deployments on most platforms (with more to come).&lt;/p&gt;</description></item><item><title>Debugging Kubernetes - Troubleshooting Guide</title><link>https://foojayio.github.io/website/today/debugging-kubernetes-troubleshooting-guide/</link><pubDate>Mon, 26 Aug 2024 16:45:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-kubernetes-troubleshooting-guide/</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="#identifying-configuration-issues"&gt;Identifying Configuration Issues&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#common-causes-and-solutions"&gt;Common Causes and Solutions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#detailed-investigation-steps"&gt;Detailed Investigation Steps&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#dealing-with-image-pull-errors"&gt;Dealing with Image Pull Errors&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#troubleshooting-steps"&gt;Troubleshooting Steps&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#handling-node-issues"&gt;Handling Node Issues&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#preventive-measures"&gt;Preventive Measures&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#managing-missing-configuration-keys-or-secrets"&gt;Managing Missing Configuration Keys or Secrets&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#utilizing-buildg-for-interactive-debugging"&gt;Utilizing Buildg for Interactive Debugging&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#conclusion"&gt;Conclusion&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;As Kubernetes continues to revolutionize the way we manage and deploy applications, understanding its intricacies becomes essential for developers and operations teams alike. If you don&amp;rsquo;t have a dedicated DevOps team you probably shouldn&amp;rsquo;t be working with Kubernetes.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Unsupported OpenJDK Distributions are at Risk of Non-Compliance with DORA</title><link>https://foojayio.github.io/website/today/unsupported-openjdk-distributions-are-at-risk-of-non-compliance-with-dora/</link><pubDate>Mon, 26 Aug 2024 12:24:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/unsupported-openjdk-distributions-are-at-risk-of-non-compliance-with-dora/</guid><description>&lt;p&gt;&lt;strong&gt;For the EU Digital Operations Resilience Act (DORA) to have any meaning at all in the context of OpenJDK (and surely it must have application there since it is explicitly focused on &amp;ldquo;ICT Assets&amp;rdquo;, which it defines as broadly as possible as &amp;ldquo;a software or hardware asset in the network and information systems used by a financial entity&amp;rdquo;), it can only be interpreted to, at the very least, very strongly encourage the usage of supported OpenJDK distributions.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Creating 12-factor cloud-native Java apps with open source</title><link>https://foojayio.github.io/website/today/creating-cloud-native-java-applications-with-the-12-factor-app-methodology/</link><pubDate>Fri, 23 Aug 2024 05:30:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-cloud-native-java-applications-with-the-12-factor-app-methodology/</guid><description>&lt;p&gt;&lt;strong&gt;Learn how you could create cloud-native Java apps that are portable, scalable, and reliable with the 12 factor app methodology and open source Java frameworks.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Created in 2012, the 12-factor app methodology was designed to provide a set of guidelines for helping developers and organizations to design and build cloud-native applications. We&amp;rsquo;ll explore how you can take advantage of each of these 12 factors to create applications, utilizing open source technologies, that thrive in the cloud.&lt;/p&gt;</description></item><item><title>Running JavaFX applications on ARM with Azul Zulu</title><link>https://foojayio.github.io/website/today/running-javafx-applications-on-arm-with-azul-zulu/</link><pubDate>Thu, 22 Aug 2024 08:51:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/running-javafx-applications-on-arm-with-azul-zulu/</guid><description>&lt;p&gt;&lt;strong&gt;Since the April release of Azul Zulu Builds of OpenJDK, packages with JavaFX support for ARM 64-bit systems have been available.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As ARM processors are the &amp;ldquo;core&amp;rdquo; of most embedded systems, these runtimes provide the additional benefit of bringing user interface development into the Java space. Having your full code base, from server to end device, based on the same Java code and dependencies, brings many improvements in total cost, development approach, and test and deployment strategies.&lt;/p&gt;</description></item><item><title>OpenTelemetry Tracing on Spring Boot, Java Agent vs. Micrometer Tracing</title><link>https://foojayio.github.io/website/today/opentelemetry-tracing-on-spring-boot-java-agent-vs-micrometer-tracing/</link><pubDate>Thu, 22 Aug 2024 08:34:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/opentelemetry-tracing-on-spring-boot-java-agent-vs-micrometer-tracing/</guid><description>&lt;p&gt;&lt;strong&gt;My &lt;a href="https://github.com/nfrankel/opentelemetry-tracing" target="_blank" rel="noopener noreferrer"&gt;demo&lt;/a&gt;
 of OpenTelemetry Tracing features two Spring Boot components. One uses the Java agent, and I noticed a different behavior when I recently upgraded it from v1.x to v2.x. In the other one, I&amp;rsquo;m using Micrometer Tracing because I compile to GraalVM native, and it can&amp;rsquo;t process Java agents.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I want to compare these three different ways in this post: Java agent v1, Java agent v2, and Micrometer Tracing.&lt;/p&gt;</description></item><item><title>Connecting Resilience to Performance in Relation to OpenJDK</title><link>https://foojayio.github.io/website/today/connecting-resilience-to-performance-in-relation-to-openjdk/</link><pubDate>Thu, 22 Aug 2024 08:22:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/connecting-resilience-to-performance-in-relation-to-openjdk/</guid><description>&lt;p&gt;&lt;strong&gt;When considering the connection between performance and resilience in Java, especially in the context of OpenJDK distributions, specific distributions&amp;mdash;like &lt;a href="https://www.azul.com/products/prime/" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Prime&lt;/a&gt;
, which includes Azul Zing, an enhanced build of OpenJDK for superior performance, consistency, and efficiency&amp;mdash;offer unique features that can significantly influence how these two aspects are managed.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://foojayio.github.io/website/today/the-impact-of-the-digital-operational-resilience-act-dora-on-java-investment-with-azul/"&gt;Digital Operational Resilience Act (DORA) by the European Union&lt;/a&gt;
 adds another layer of importance to these considerations, particularly for financial institutions operating within the EU, &lt;a href="https://foojayio.github.io/website/today/the-impact-of-the-eu-dora-act-on-non-eu-financial-organizations/"&gt;regardless of whether they are themselves EU-based institutions&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Sustainable Software Engineering: Input Requested!</title><link>https://foojayio.github.io/website/today/sustainable-software-engineering-input-requested/</link><pubDate>Wed, 21 Aug 2024 09:49:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/sustainable-software-engineering-input-requested/</guid><description>&lt;p&gt;&lt;strong&gt;The Foojay community has a strong tradition around the creation of content on all things Java and OpenJDK. Since about a year ago, the community has a group of people that are working on a book with tips and information on Sustainable Software Engineering. For some of the topics in the book, we are looking for data to either support claims that are made, or inform us on the best direction to write a topic.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Spring: Internals of @ComponentScan</title><link>https://foojayio.github.io/website/today/spring-internals-of-componentscan/</link><pubDate>Tue, 20 Aug 2024 14:48:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-internals-of-componentscan/</guid><description>&lt;p&gt;&lt;strong&gt;The &lt;code&gt;@ComponentScan&lt;/code&gt; annotation, which is an interface located within the &lt;code&gt;org.springframework.context.annotation&lt;/code&gt; package, facilitates component scanning in a Spring application. This allows the Spring Container to automatically detect beans.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Spring automatically identifies Java classes that developers mark with stereotypes like &lt;code&gt;@Configuration, @Component, @Service, @Controller, and @Repository&lt;/code&gt;. Developers can annotate the component scan with or without parameters.&lt;/p&gt;
&lt;p&gt;You can designate either &lt;code&gt;basePackageClasses() or basePackages()&lt;/code&gt; (or its equivalent &lt;code&gt;value()&lt;/code&gt;) to identify the specific packages that need to be scanned.&lt;/p&gt;</description></item><item><title>Are Critical Vulnerabilities Lurking in Your Java Ecosystem?</title><link>https://foojayio.github.io/website/today/are-critical-vulnerabilities-lurking-in-your-java-ecosystem/</link><pubDate>Mon, 19 Aug 2024 12:57:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/are-critical-vulnerabilities-lurking-in-your-java-ecosystem/</guid><description>&lt;p&gt;Java, the popular object-oriented language renowned for its portability, performance, and security, is often the preferred choice for organisations building everything from enterprise and cloud-native applications to Android apps.&lt;/p&gt;
&lt;p&gt;However, despite these strengths, Java&amp;rsquo;s popularity and the complex ecosystem of third-party libraries it relies upon have also made it a prime target for malicious actors to exploit vulnerabilities. According to the Datadog &amp;ldquo;State of DevSecOps&amp;rdquo;[1] report, a staggering 90% of Java services are susceptible to one or more critical or high-severity vulnerabilities, often stemming from external dependencies, compared to an average of 47% for other technologies. This discrepancy is concerning and points to inherent issues within the Java ecosystem.&lt;/p&gt;</description></item><item><title>Interview with a Java Champion: Reflections on a Storied Career and Insights for the Next Generation</title><link>https://foojayio.github.io/website/today/interview-with-a-java-champion-reflections-on-a-storied-career-and-insights-for-the-next-generation/</link><pubDate>Mon, 19 Aug 2024 07:52:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/interview-with-a-java-champion-reflections-on-a-storied-career-and-insights-for-the-next-generation/</guid><description>&lt;h3 id="h3-0-introduction"&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;/h3&gt;
&lt;figure class="alignleft"&gt;
 &lt;img decoding="async" src="https://media.licdn.com/dms/image/v2/C4E03AQHOSJQsBSmS3A/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1517742324318?e=1729123200&amp;amp;v=beta&amp;amp;t=jVizFMHohUoyR_Jp1Cgi5UO-0lVIMQO2fRu3ivz1LHk" alt=""&gt;
&lt;/figure&gt;
&lt;p&gt;In the fast-paced world of software development, a few individuals leave a lasting impact through their dedication and contributions. Our guest today is a seasoned developer, a respected author, and a cornerstone of the Java community.&lt;/p&gt;
&lt;p&gt;With over two decades of experience, he has played a key role in the evolution of Java from a niche language to a critical tool in various industries. In this interview, he shares his journey, insights, and advice for developers at all stages of their careers.&lt;/p&gt;</description></item><item><title>Defining patterns of data transfers for Java applications with TornadoVM</title><link>https://foojayio.github.io/website/today/defining-patterns-of-data-transfers-for-java-applications-with-tornadovm/</link><pubDate>Thu, 15 Aug 2024 15:43:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/defining-patterns-of-data-transfers-for-java-applications-with-tornadovm/</guid><description>&lt;p&gt;&lt;strong&gt;The TornadoVM API is designed to aid Java programmers in adapting their code bases for hardware acceleration. As explained in a previous &lt;a href="https://foojayio.github.io/website/today/migrating-applications-to-tornadovm-v0-15-part-1/"&gt;++article++&lt;/a&gt;
, the TornadoVM API exposes two key Java objects for programmers, the &lt;a href="https://github.com/beehive-lab/TornadoVM/blob/master/tornado-api/src/main/java/uk/ac/manchester/tornado/api/TaskGraph.java" target="_blank" rel="noopener noreferrer"&gt;++TaskGraph++&lt;/a&gt;
 and the &lt;a href="https://github.com/beehive-lab/TornadoVM/blob/master/tornado-api/src/main/java/uk/ac/manchester/tornado/api/TornadoExecutionPlan.java" target="_blank" rel="noopener noreferrer"&gt;++TornadoExecutionPlan++&lt;/a&gt;
. The former is used to define which methods should be offloaded on an accelerator as well as how often the data will flow. The latter is used to configure how the execution will take place (e.g., with a warmup, with a specific grid, with a profiler, etc.) and contains a method that actually invokes the execution. More information about how to use those objects are provided &lt;a href="https://tornadovm.readthedocs.io/en/latest/programming.html#selecting-the-methods-to-be-accelerated-using-a-task-graph-api" target="_blank" rel="noopener noreferrer"&gt;++here++&lt;/a&gt;
.&lt;/strong&gt;{#viewer-foo}&lt;/p&gt;</description></item><item><title>DevIgnition with Foojay.io at Washington DC JUG</title><link>https://foojayio.github.io/website/today/devignition-with-foojay-io-at-washington-dc-jug/</link><pubDate>Wed, 14 Aug 2024 13:06:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/devignition-with-foojay-io-at-washington-dc-jug/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://devignition.com/" target="_blank" rel="noopener noreferrer"&gt;DevIgnition&lt;/a&gt;
 is a fun and informal community event run for and by the Washington DC software development community. One &lt;a href="https://devignition.com/" target="_blank" rel="noopener noreferrer"&gt;November 7, a full day of interesting presentations&lt;/a&gt;
 will be featured from excellent speakers from around the world on a wide variety of technical topics.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Come discover how the best minds use the latest technologies to build solutions. Network with other DC area software developers, and discuss the newest emerging trends and techniques.&lt;/p&gt;</description></item><item><title>The Impact of the EU DORA Act on Non-EU Financial Organizations</title><link>https://foojayio.github.io/website/today/the-impact-of-the-eu-dora-act-on-non-eu-financial-organizations/</link><pubDate>Wed, 14 Aug 2024 05:33:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-impact-of-the-eu-dora-act-on-non-eu-financial-organizations/</guid><description>&lt;p&gt;&lt;strong&gt;The &lt;a href="https://foojayio.github.io/website/today/the-impact-of-the-digital-operational-resilience-act-dora-on-java-investment-with-azul/"&gt;EU Digital Operational Resilience Act (DORA)&lt;/a&gt;
 is a significant regulatory framework designed to strengthen the digital resilience of financial institutions within the European Union.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;While the primary focus of DORA is on EU-based entities, its impact extends beyond the EU&amp;rsquo;s borders, particularly to financial organizations outside the EU that have business ties with the region.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s how DORA impacts financial organizations outside the EU.&lt;/p&gt;
&lt;h3 id="h3-0-1-third-party-service-providers"&gt;1. &lt;strong&gt;Third-Party Service Providers&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scope of Regulation&lt;/strong&gt;. DORA covers not just financial entities within the EU but also third-party service providers, including Cloud services, software providers, and IT services. If these providers serve EU financial institutions, they must comply with DORA&amp;rsquo;s requirements, even if they are based outside the EU.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Increased Compliance Costs&lt;/strong&gt;. Non-EU service providers might need to invest in compliance infrastructure to meet DORA standards, which include stringent cybersecurity measures, operational resilience requirements, and incident reporting protocols.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operational Changes&lt;/strong&gt;. These providers may need to adapt their operations to comply with DORA&amp;rsquo;s requirements, potentially impacting service delivery, pricing, and contractual arrangements with their EU clients.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-1-2-cross-border-operations"&gt;2. &lt;strong&gt;Cross-Border Operations&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;EU Subsidiaries&lt;/strong&gt;. Non-EU financial organizations with subsidiaries or branches in the EU must ensure that these entities comply with DORA. This might require significant changes in internal processes, governance structures, and IT systems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Protection and Transfer&lt;/strong&gt;. DORA&amp;rsquo;s focus on operational resilience and cybersecurity intersects with data protection regulations. Non-EU organizations must ensure that data transfers and processing are compliant with EU standards, which could involve changes in data management practices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-2-3-competitive-pressure"&gt;3. &lt;strong&gt;Competitive Pressure&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Market Access&lt;/strong&gt;. To maintain or gain access to the EU market, non-EU financial organizations must align with DORA&amp;rsquo;s requirements. Failure to comply might restrict their ability to operate within the EU or provide services to EU-based clients.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reputation and Trust&lt;/strong&gt;. Organizations that proactively comply with DORA may gain a competitive edge by being seen as trustworthy and secure partners. Conversely, those that lag may face reputational risks, especially in a market increasingly focused on cybersecurity and operational resilience.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-3-4-indirect-impact-through-business-relationships"&gt;4. &lt;strong&gt;Indirect Impact Through Business Relationships&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Supply Chain Scrutiny&lt;/strong&gt;. DORA requires EU financial entities to ensure that their supply chain, including non-EU entities, adheres to operational resilience standards. Non-EU organizations in these supply chains may face increased scrutiny and pressure to comply with DORA, indirectly impacting their operations and costs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contractual Obligations&lt;/strong&gt;. Financial institutions in the EU may impose new contractual obligations on non-EU partners to ensure DORA compliance. This could lead to renegotiation of contracts and increased legal and operational overheads for non-EU entities.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-4-5-global-regulatory-influence"&gt;5. &lt;strong&gt;Global Regulatory Influence&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Precedent for Other Jurisdictions&lt;/strong&gt;. DORA could set a precedent, encouraging other jurisdictions to adopt similar regulatory frameworks. Non-EU financial organizations may find themselves needing to adapt to a broader wave of operational resilience regulations globally, beyond just the EU.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-5-6-impact-on-financial-services-market"&gt;6. &lt;strong&gt;Impact on Financial Services Market&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Barrier to Entry&lt;/strong&gt;. DORA&amp;rsquo;s stringent requirements might act as a barrier to entry for smaller or less-resourced non-EU financial firms seeking to enter the EU market, potentially limiting competition.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Innovation and Fintech&lt;/strong&gt;. While aiming to enhance security, DORA may also slow down innovation, as non-EU fintech firms might find the compliance burden heavy, possibly leading to a more cautious approach in launching new products or services in the EU.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-6-summary"&gt;Summary&lt;/h3&gt;
&lt;p&gt;The EU DORA Act significantly impacts financial organizations outside the EU, especially those providing services to or operating within the EU.&lt;/p&gt;</description></item><item><title>Trash Pandas Love Enterprise Java Garbage Code</title><link>https://foojayio.github.io/website/today/trash-pandas-love-enterprise-java-garbage-code/</link><pubDate>Tue, 13 Aug 2024 08:16:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/trash-pandas-love-enterprise-java-garbage-code/</guid><description>&lt;p&gt;&lt;strong&gt;If raccoons were software engineers, they would feel at home inside many enterprise systems. These systems are often full of unused and dead code that was written, fully tested, then altered in a way that prevents teams from ever running it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This garbage code &amp;mdash; a raccoon&amp;rsquo;s favorite &amp;mdash; is a maintenance burden that developers must work around to keep passing tests while other major changes are made. This code often doesn&amp;rsquo;t end up in the trash because it&amp;rsquo;s hard to know what can be safely removed without breaking the application. But you can better identify bad code if you understand how to look for it.&lt;/p&gt;</description></item><item><title>Run AI-enabled JakartaEE/MicroProfile apps with LangChain4j</title><link>https://foojayio.github.io/website/today/run-ai-enabled-jakarta-ee-and-microprofile-applications-with-langchain4j-and-open-liberty/</link><pubDate>Mon, 12 Aug 2024 22:14:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/run-ai-enabled-jakarta-ee-and-microprofile-applications-with-langchain4j-and-open-liberty/</guid><description>&lt;p&gt;&lt;strong&gt;Artificial Intelligence (AI) is an exciting and disruptive field that is already transforming businesses, and even entire industries, by enabling automation, improving decision-making and unlocking new insights from data.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With the rise in large language models (LLMs) such as ChatGPT, there is a significant shift in the performance of AI and its potential to drive enterprise value. So, how will this impact on software development and the creation of cloud-native Java applications for enterprises?&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>How does it feel to test a compiler?</title><link>https://foojayio.github.io/website/today/how-does-it-feel-to-test-a-compiler/</link><pubDate>Thu, 08 Aug 2024 06:47:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-does-it-feel-to-test-a-compiler/</guid><description>&lt;p&gt;&lt;strong&gt;Hi, my name is Alex. I work as a QA engineer on the &lt;a href="https://kotlinlang.org/docs/native-overview.html" title="Kotlin/Native" target="_blank" rel="noopener noreferrer"&gt;Kotlin/Native&lt;/a&gt;
 team. I&amp;rsquo;m often asked by friends and colleagues what it&amp;rsquo;s like to test a compiler, so I decided to write an article about it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll briefly talk about my path to compiler testing, the Kotlin/Native compiler, the specifics of the tasks, the tools I use, and the knowledge that helps me in my work.&lt;/p&gt;
&lt;p&gt;I graduated with a bachelor&amp;rsquo;s and master&amp;rsquo;s degree in Software Engineering and then spent ten years in backend automation testing, including testing email backends (IMAP, POP3 protocols, email storage system, etc.), leading a testing team, and building test processes and test automation from scratch.&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>Free tier API with Apache APISIX</title><link>https://foojayio.github.io/website/today/free-tier-api-with-apache-apisix/</link><pubDate>Mon, 05 Aug 2024 13:50:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/free-tier-api-with-apache-apisix/</guid><description>&lt;p&gt;&lt;strong&gt;Lots of service providers offer a free tier of their service. The idea is to let you kick their service&amp;rsquo;s tires freely. If you need to go above the free tier at any point, you&amp;rsquo;ll likely stay on the service and pay.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this day and age, most services are online and accessible via an API. Today, we will implement a free tier with &lt;a href="https://apisix.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache APISIX&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-a-naive-approach"&gt;A naive approach&lt;/h2&gt;
&lt;p&gt;I implemented a free tier in my post &lt;a href="https://blog.frankel.ch/evolve-apis/#know-your-users" target="_blank" rel="noopener noreferrer"&gt;Evolving your RESTful APIs, a step-by-step approach&lt;/a&gt;
, albeit in a very naive way. I copy-pasted the &lt;a href="https://apisix.apache.org/docs/apisix/plugins/limit-count/" target="_blank" rel="noopener noreferrer"&gt;limit-count&lt;/a&gt;
 plugin and added my required logic.&lt;/p&gt;</description></item><item><title>Differentiating rate limits in Apache APISIX</title><link>https://foojayio.github.io/website/today/differentiating-rate-limits-in-apache-apisix/</link><pubDate>Mon, 05 Aug 2024 13:37:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/differentiating-rate-limits-in-apache-apisix/</guid><description>&lt;p&gt;&lt;strong&gt;In my talk Evolving your APIs, I mention that an API Gateways is a Reverse Proxy &amp;ldquo;on steroids&amp;rdquo;. One key difference between the former and the latter is that the API Gateway is not unfriendly to business logic. The poster child is rate-limiting.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rate-limiting is an age-old Reverse Proxy feature focused on protecting against attacks. It treats all clients the same and is purely technical. In this day and age, most API providers offer different subscription tiers; the higher the tier, the higher the rate limit, and the more you pay incidentally. It&amp;rsquo;s not technical anymore and requires to differentiate between clients.&lt;/p&gt;</description></item><item><title>Random and fixed routes with Apache APISIX</title><link>https://foojayio.github.io/website/today/random-and-fixed-routes-with-apache-apisix/</link><pubDate>Mon, 05 Aug 2024 13:29:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/random-and-fixed-routes-with-apache-apisix/</guid><description>&lt;p&gt;&lt;strong&gt;My ideas for blog posts inevitably start to dry up after over two years at &lt;a href="https://apisix.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache APISIX&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hence, I did some triage on the &lt;a href="https://github.com/apache/apisix/issues" target="_blank" rel="noopener noreferrer"&gt;APISIX repo&lt;/a&gt;
. I stumbled upon this one question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We have a requirement to use a plugin, where we need to route the traffic on percentage basis. I&amp;rsquo;ll give an example for better understanding.&lt;/p&gt;
&lt;p&gt;We have an URL where ca is country (Canada) and fr is french language. Now the traffic needs to routed 10% to and the remaining 90% to. And whenever we&amp;rsquo;re routing the traffic to we need to set a cookie. So for next call, if the cookie is there, it should directly go to else it should go via a 10:90 traffic split. What is the best possible way to achieve this ??&lt;/p&gt;</description></item><item><title>Are Java Security Updates Important?</title><link>https://foojayio.github.io/website/today/are-java-security-updates-important/</link><pubDate>Sat, 03 Aug 2024 14:56:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/are-java-security-updates-important/</guid><description>&lt;p&gt;&lt;strong&gt;Recently, I was in discussion with a Java user at a bank about the possibilities of using &lt;a href="https://www.azul.com/products/core/" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Core&lt;/a&gt;
 (formerly known as Zulu) to run a range of applications. One of the most significant advantages for mission-critical enterprise applications is knowing that you have access to the latest security patches and bug fixes. With Platform Core, these are provided within a defined SLA after the embargo for updates is lifted (this is essentially the point in time when Oracle releases the update to their JDK).&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Consequences of DORA on Java and OpenJDK with Azul</title><link>https://foojayio.github.io/website/today/consequences-of-dora-on-java-and-openjdk-with-azul/</link><pubDate>Fri, 02 Aug 2024 13:49:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/consequences-of-dora-on-java-and-openjdk-with-azul/</guid><description>&lt;p&gt;&lt;strong&gt;The EU&amp;rsquo;s &lt;a href="https://foojayio.github.io/website/today/the-impact-of-the-digital-operational-resilience-act-dora-on-java-investment-with-azul/"&gt;Digital Operational Resilience Act (DORA)&lt;/a&gt;
 is a regulatory framework aimed at enhancing the digital operational resilience of financial institutions within the European Union.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Its primary goal is to ensure that financial entities can withstand, respond to, and recover from all types of ICT-related disruptions and threats, such as cyberattacks.&lt;/p&gt;
&lt;p&gt;DORA establishes a uniform set of requirements for managing ICT risks across the financial sector, promoting a harmonized approach to digital resilience.&lt;/p&gt;</description></item><item><title>JUG PH: 1H 2024 Meetups</title><link>https://foojayio.github.io/website/today/jug-ph-1h-2024-meetups/</link><pubDate>Fri, 02 Aug 2024 07:59:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/jug-ph-1h-2024-meetups/</guid><description>&lt;p&gt;Summary of the meetups done in the 1st half of 2024. We discussed a variety of topics which was useful to our Java enthusiasts and members.&lt;/p&gt;
&lt;h2 id="h2-0-2024-meetup-kickoff"&gt;2024 Meetup Kickoff&lt;/h2&gt;
&lt;p&gt;We kicked-off the Java meetup in partnership with Angular Philippines. The meetup had 2 sessions which was demonstrated by Mark Montealto and Eric Martin.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/jug-ph-1h-2024-meetups/jugph-angular-2024-1-700x467.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h3 id="h3-1-progressive-web-app-using-angular-framework"&gt;Progressive Web App using Angular Framework&lt;/h3&gt;
&lt;p&gt;A 1 hour session by Mark Montealto talking about how to make a Progressive Web aplication using Angular Framework. He started with the concepts and performed a live-coding.&lt;/p&gt;</description></item><item><title>JUG PH: 1-Day Modern Java Development Bootcamp</title><link>https://foojayio.github.io/website/today/jug-ph-1-day-modern-java-development-bootcamp/</link><pubDate>Fri, 02 Aug 2024 07:53:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/jug-ph-1-day-modern-java-development-bootcamp/</guid><description>&lt;p&gt;&lt;strong&gt;A 1-Day Modern Java Bootcamp for students, early professionals and career shifters with minimal Java programming or general programming experience.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Java User Group Philippines (JUG PH) in partnership with Developer Connect (DEVCON) Philippines/Manila executed its 1st Modern Java Development Bootcamp.&lt;/p&gt;
&lt;p&gt;The bootcamp was organized by the JUG Leaders and Volunteers and DEVCON Volunteers.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/jug-ph-1-day-modern-java-development-bootcamp/java-bootcamp-2024-1-510x510.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-registration"&gt;Registration&lt;/h2&gt;
&lt;p&gt;The bootcamp received an overwhelming &lt;strong&gt;110+ registrations&lt;/strong&gt; but 50 was only accomodated due to the slots of the venue.&lt;/p&gt;</description></item><item><title>JavaFX Links of July 2024</title><link>https://foojayio.github.io/website/today/javafx-links-of-july-2024/</link><pubDate>Wed, 31 Jul 2024 17:54:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-july-2024/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of July 2024, published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during this month.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A message by &lt;strong&gt;Kevin Rushforth&lt;/strong&gt; on the &lt;a href="https://mail.openjdk.org/mailman/listinfo/openjfx-dev" target="_blank" rel="noopener noreferrer"&gt;[email protected]&lt;/a&gt;
 mailing list shows the Java/JavaFX release train is approaching the next station ;-): &amp;ldquo;Bump the version number of JavaFX to 24. I will integrate this to &lt;code&gt;master&lt;/code&gt; as part of forking the &lt;code&gt;jfx23&lt;/code&gt; stabilization branch, which is scheduled for Thursday, July 11, 2024 at 16:00 UTC.&amp;rdquo; We&amp;rsquo;re looking forward to the release of v23 in September!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://techhub.social/@thejvmbender/112693990775120413" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Özkan Pakdil&lt;/strong&gt; is working on an opensource alternative for Postman&lt;/a&gt;
: &amp;ldquo;I am looking for people to test or join, it&amp;rsquo;s in beta phase, but I am sure http get is working.&amp;rdquo; You can &lt;a href="https://github.com/ozkanpakdil/swaggerific" target="_blank" rel="noopener noreferrer"&gt;find it on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;LogoRRR is now available for download in the &lt;a href="https://apps.microsoft.com/detail/xpdlk5t61gqwlt?cid=DevShareCLPCS&amp;amp;hl=en-us&amp;amp;gl=SE" target="_blank" rel="noopener noreferrer"&gt;Microsoft App Store&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/SeanMiPhillips/status/1808556671188545555" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; shared a screenshot&lt;/a&gt;
: &amp;ldquo;New automatic Clustering features available from main branch of the Trinity 3D Visual Explainable AI tool. You can configure and asynchronously run multiple clustering algorithms in 3D, including DBSCAN, HDBSCAN, KMeans++, KMedoids Affinity Propagation, and more.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/emad-hanif-00b4aa227_javafx-spring-rxjava-activity-7214316565842845697-Xk4M/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Emad Hanif&lt;/strong&gt; shared a long description and video of Barcodify&lt;/a&gt;
: &amp;ldquo;Built with JavaFX, Spring Core and RxJava. This application empowers users to personalize every aspect, from color schemes and font sizes to margins and bar dimensions, delivering a comprehensive package with an elegant design. It currently supports 8 types of linear barcodes &amp;mdash; Code39, Code128, Codabar, Interleaved 2 of 5, UPC-A, UPC-E, EAN-8, and EAN-13.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/crschnick/status/1806954732964966740" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; added native window styling to XPipe 10&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/xiongchun007/status/1808935782033600521" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Xiong Chun&lt;/strong&gt; shared progress in Datacollie&lt;/a&gt;
: &amp;ldquo;Tonight, the basic SQL query and result display of the SQL query window implemented. There are still many details to be improved in this module.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Igor Azarny&lt;/strong&gt; released v2.5.5 of &lt;a href="http://gitgui.org/" target="_blank" rel="noopener noreferrer"&gt;Gitember, a cross platform graphical user interface for GIT&lt;/a&gt;
. You can find the &lt;a href="https://github.com/iazarny/gitember" target="_blank" rel="noopener noreferrer"&gt;sources on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@jabref/112797436287631234" target="_blank" rel="noopener noreferrer"&gt;JabRef announced release 5.15&lt;/a&gt;
 with &lt;a href="https://blog.jabref.org/2024/07/16/JabRef5-15/" target="_blank" rel="noopener noreferrer"&gt;a blog post&lt;/a&gt;
, &amp;ldquo;with binaries for Intel macs and fixes for Snap users. This release comes with some nice improvements for TeXLaTeX users and experimental support for using bst styles as preview.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/WebFXProject/status/1815417115161121078" target="_blank" rel="noopener noreferrer"&gt;WebFX shared&lt;/a&gt;
 an app they are hosting at &lt;a href="https://meteo.webfx.dev" target="_blank" rel="noopener noreferrer"&gt;meteo.webfx.dev&lt;/a&gt;
: &amp;ldquo;It showcases some cool webfx features: Scene graph (no canvas), Charts, Dual CSS (javafx &amp;amp; web), I18n, Json, Web service, Java service, Local storage, Sound.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/PatrikKarlstrom/status/1816016154852299111" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Patrik Karlström&lt;/strong&gt; shared screenshots&lt;/a&gt;
: &amp;ldquo;Bringing back the cron like scheduler to my JavaFX based rsync gui. Converting the old swing cron dialog was much less work than expected. JavaFX really do have nice things to offer!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Datacollie, the SQL UI by &lt;a href="https://x.com/xiongchun007/status/1816419820268605848" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Xiong Chun&lt;/strong&gt; looks more-and-more impressive&lt;/a&gt;
: &amp;ldquo;The paging model of the SQL query result is determined, and a toolbar is added to the result table.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/petkovicdev/status/1808533009831694720" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;5kovic&lt;/strong&gt; made Tetris&lt;/a&gt;
: &amp;ldquo;Music and background found on Google, links in comment section.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@maehem/112747959541918758" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mark J Koch&lt;/strong&gt; is reverse engineering the &amp;ldquo;Game of the Year&amp;rdquo; from 1989&lt;/a&gt;
: &amp;ldquo;Screen grab of browsing the sprites extracted from the Neuromancer PC .DAT files. They are stored as indexed color, RLE and Huffman encoded blobs of data. I wrote some Java code to extract/decompress/decode them from the file and write them to a &amp;lsquo;cache&amp;rsquo; directory as PNG files. The game came on two floppies and is still one of my favorites and I play it in a DOS emulator from time to time.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/orango_mango/status/1812950078665204134" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; made a game in 24h for the indiedevgamejam&lt;/a&gt;
: &amp;ldquo;Escape and drive on the highway as long as you can. By driving on the 2 leftmost lanes you get double score as well as driving fast.&amp;rdquo; You can play it on &lt;a href="https://orangomango.itch.io/milkywayescape" target="_blank" rel="noopener noreferrer"&gt;orangomango.itch.io/milkywayescape&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1815390389974503934" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duke&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;A bunch of changes coming to Transit Theme&amp;hellip; One of them is that if you change it to Dark style it will also change the Window frame of where the theme is applied. (JavaFX always shows the Window frame in light color)&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;And Pedro published a new post: &lt;a href="https://pixelduke.com/2024/07/24/transit-version-2-0-released/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Transit Version 2.0 Released&amp;rdquo;&lt;/a&gt;
: &amp;ldquo;Styles work as User Agent Stylesheets like Modena (much easier to override) + True Dark Mode (Window frame also changes when set to Dark style).&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/dlemmermann/status/1816511301369331865" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared a screenshot of an implementation of the FlexGanttFX library&lt;/a&gt;
: &amp;ldquo;We use it in our energy CRM system to visualise the consumption data provided by the home-installed electricity smart meters of our customers. In addition, it shows the time when our backend services send a request to the meters to send their data and which time periods they requested.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; published a &lt;a href="https://www.youtube.com/watch?v=XhDQvkcYJ88" target="_blank" rel="noopener noreferrer"&gt;video in which he experiments with the Azul Zulu runtimes with JavaFX support, JBang, and SDKMAN on a Raspberry Pi&lt;/a&gt;
 and a lot of colored circles.
&lt;ul&gt;
&lt;li&gt;Based on this experiment, he published an additional blog and video with a demo application to compare the performance between &lt;a href="https://webtechie.be/post/2024-07-22-javafx-nodes-versus-canvas/" target="_blank" rel="noopener noreferrer"&gt;thousands of Nodes versus drawing the same number of elements on a Canvas&lt;/a&gt;
: &amp;ldquo;On a Mac Studio, performance drops after 15k Nodes, versus 150k with Canvas.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;YouTube Shorts by &lt;strong&gt;OrangoMango&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/shorts/2T3UNo5EVXg" target="_blank" rel="noopener noreferrer"&gt;Falling sand with JavaFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/shorts/iaOnGQj86lQ" target="_blank" rel="noopener noreferrer"&gt;Conway&amp;rsquo;s Game Of Life implementation in Java and JavaFX&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On dev.to, &lt;a href="https://dev.to/paulike" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Paul Ngugi&lt;/strong&gt; is publishing a blog series of JavaFX tutorials&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/phidias51/status/1809962623448023389" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mark Fortner&lt;/strong&gt; replies&lt;/a&gt;
 to a message by &lt;a href="https://x.com/justinfagnani/status/1809709077150462075" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Justin Fagnani&lt;/strong&gt; about Flutter&lt;/a&gt;
: &amp;ldquo;It&amp;rsquo;s always interesting watching people re-invent the future. JavaFX has all of the features that you describe. Scenegraphs, multilanguage support, compiles to WASM, CSS. I think it really boils down to one&amp;rsquo;s willingness to get out of one&amp;rsquo;s comfort stack.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A new &lt;a href="https://x.com/crschnick/status/1809740192514793762" target="_blank" rel="noopener noreferrer"&gt;video by &lt;strong&gt;Christopher Schnick&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;The JavaFX 22 platform preferences API in action with native window themes on Windows 11.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/crschnick/status/1814024272295178515" target="_blank" rel="noopener noreferrer"&gt;Christopher also reports&lt;/a&gt;
: &amp;ldquo;Seems like JavaFX applications run fine on Windows ARM systems through the x86_64 compatibility layer.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/hansolo_/status/1813616079769686335" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; shared a screenshot&lt;/a&gt;
 of a private project (&amp;ldquo;sorry not allowed to share&amp;hellip;&amp;rdquo;) which recreates the &lt;a href="https://www.qlocktwo.com/en-be/" target="_blank" rel="noopener noreferrer"&gt;QLOCKTWO&lt;/a&gt;
 in JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/cbm64/status/1815503568897540159" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Chris&lt;/strong&gt; is wondering&lt;/a&gt;
: &amp;ldquo;Why are large displays in public spaces, including electronic ordering screens windows based?! It should be JavaFX territory running lightweight Linux on an SOC device.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The overview of the Links Of The Week of June are &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-june-2024/"&gt;bundled on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;New content:
&lt;ul&gt;
&lt;li&gt;Learn &amp;gt; JavaFX: &lt;a href="https://www.jfx-central.com/learn-javafx/nodes-versus-canvas" target="_blank" rel="noopener noreferrer"&gt;Comparing Nodes versus
Canvas&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Learn &amp;gt; JavaFX on Raspberry Pi: &lt;a href="https://www.jfx-central.com/learn-raspberrypi/zulu-sdkman-jbang" target="_blank" rel="noopener noreferrer"&gt;Experiment with Azul Zulu, SDKMAN, and JBANG&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/dlemmermann/status/1816486634260463781" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared this message with a screenshot&lt;/a&gt;
: &amp;ldquo;We are working on a mobile-only version of jfx-central.com. The routing framework and the development &amp;rsquo;environment&amp;rsquo; provided by &lt;a href="https://x.com/jpro_one" target="_blank" rel="noopener noreferrer"&gt;@jpro_one&lt;/a&gt;
 and &lt;a href="https://x.com/FlorianKirmaier" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Florian Kirmaier&lt;/strong&gt;&lt;/a&gt;
 helps a lot. It even allows us to simulate different phone resolutions.&amp;rdquo; Check all the commits by &lt;a href="https://x.com/LeeWyatt_7788" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Li Wang Yang&lt;/strong&gt;&lt;/a&gt;
 in the &lt;a href="https://github.com/dlsc-software-consulting-gmbh/jfxcentral2/commits/develop/" target="_blank" rel="noopener noreferrer"&gt;public GitHub repository&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;</description></item><item><title>JManc 2024 Trip Report</title><link>https://foojayio.github.io/website/today/jmanc-2024-trip-report/</link><pubDate>Wed, 31 Jul 2024 06:01:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/jmanc-2024-trip-report/</guid><description>&lt;h2 id="tldr"&gt;tl;dr&lt;/h2&gt;
&lt;p&gt;Great day, great people, great discussions and great team of &lt;em&gt;dis-organisers&lt;/em&gt;!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Whoever comes are the right people!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thanks to all who attended, it&amp;rsquo;s down to each and every one of you that JManc Unconference 2024 was a success!&lt;/p&gt;
&lt;p&gt;See you next year! 😀&lt;/p&gt;
&lt;h2 id="intro"&gt;intro&lt;/h2&gt;
&lt;p&gt;In January this year we decided to test the interest of the Manchester Java Community on whether they were up for another edition of the &lt;a href="https://jmanc.org/" target="_blank" rel="noopener noreferrer"&gt;JManc Unconference&lt;/a&gt;
. We sent out a survey to our members and from the responses received there was unanimous support for to us to run it again. This gave &lt;a href="https://www.linkedin.com/in/jsbullock/" target="_blank" rel="noopener noreferrer"&gt;Jon Bullock&lt;/a&gt;
, &lt;a href="https://www.linkedin.com/in/david-underwood-6b929858/" target="_blank" rel="noopener noreferrer"&gt;Dave Underwood&lt;/a&gt;
 and I the motivation we needed to put plans into motion for the 3rd edition of JManc Unconference!
&lt;img src="https://www.nickebbitt.com/blog/2024/07/20/jmanc-2024/jmanc-2024.png" alt="JManc 2024" loading="lazy"&gt;
&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>Failure is Required: Understanding Fail-Safe &amp; Fail-Fast Strategies</title><link>https://foojayio.github.io/website/today/failure-is-required-understanding-fail-safe-and-fail-fast-strategies/</link><pubDate>Tue, 30 Jul 2024 08:08:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/failure-is-required-understanding-fail-safe-and-fail-fast-strategies/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#failfast"&gt;Fail-Fast&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#failsafe"&gt;Fail-Safe&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#choosing-between-failfast-and-failsafe"&gt;Choosing Between Fail-Fast and Fail-Safe&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#balancing-both"&gt;Balancing Both&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#consistent-layer-behavior"&gt;Consistent Layer Behavior&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#retrys-are-not-failsafe"&gt;Retry&amp;rsquo;s Are not Fail-Safe&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#redefining-failure"&gt;Redefining Failure&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#data-corruption"&gt;Data Corruption&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#dont-fix-the-bug"&gt;Don&amp;rsquo;t Fix the Bug&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#debugging-failure"&gt;Debugging Failure&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#avoiding-cascading-failure"&gt;Avoiding Cascading Failure&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#hybrid-in-production"&gt;Hybrid in Production&lt;/a&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;Failures in software systems are inevitable. How these failures are handled can significantly impact system performance, reliability, and the business&amp;rsquo;s bottom line.&lt;/p&gt;
&lt;p&gt;In this article, I want to discuss the upside of failure. Why you should seek failure, why failure is good and why avoiding failure can reduce the reliability of your application. We will start with the discussion of fail-fast vs. fail-safe, this will take us to the second discussion about failures in general.&lt;/p&gt;</description></item><item><title>Mastering Serverless Debugging</title><link>https://foojayio.github.io/website/today/mastering-serverless-debugging/</link><pubDate>Mon, 29 Jul 2024 10:14:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/mastering-serverless-debugging/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#introduction-to-serverless-computing"&gt;Introduction to Serverless Computing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#challenges-of-serverless-debugging"&gt;Challenges of Serverless Debugging&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#disconnected-environments"&gt;Disconnected Environments&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#lack-of-standardization"&gt;Lack of Standardization&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#limited-debugging-tools"&gt;Limited Debugging Tools&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#concurrency-and-scale"&gt;Concurrency and Scale&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#effective-strategies-for-serverless-debugging"&gt;Effective Strategies for Serverless Debugging&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#local-debugging-with-ide-remote-capabilities"&gt;Local Debugging with IDE Remote Capabilities&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#using-feature-flags-for-debugging"&gt;Using Feature Flags for Debugging&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#staged-rollouts-and-canary-deployments"&gt;Staged Rollouts and Canary Deployments&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#comprehensive-logging"&gt;Comprehensive Logging&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#embracing-idempotency"&gt;Embracing Idempotency&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#debugging-a-lambda-application-locally-with-aws-sam"&gt;Debugging a Lambda Application Locally with AWS SAM&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#setting-up-the-local-environment"&gt;Setting Up the Local Environment&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#running-the-hello-world-application-locally"&gt;Running the Hello World Application Locally&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#configuring-remote-debugging"&gt;Configuring Remote Debugging&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#handling-debugger-timeouts"&gt;Handling Debugger Timeouts&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;&lt;strong&gt;Serverless computing has emerged as a transformative approach to deploying and managing applications. The theory is that by abstracting away the underlying infrastructure, developers can focus solely on writing code.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Understanding JVM Memory Layout with OpenJDK24's New PrintMemoryMapAtExit VM Option</title><link>https://foojayio.github.io/website/today/understanding-jvm-memory-layout-with-openjdk24s-new-printmemorymapatexit-vm-option/</link><pubDate>Sat, 27 Jul 2024 10:38:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-jvm-memory-layout-with-openjdk24s-new-printmemorymapatexit-vm-option/</guid><description>&lt;p&gt;&lt;strong&gt;OpenJDK24 recently added a new HotSpot JVM option called &lt;code&gt;PrintMemoryMapAtExit&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I know this because I&amp;rsquo;m the maintainer of a project called VMOptionsExplorer, whose job is to track changes to the more than 2000 command line options you can use to control the Java Virtual Machine (JVM).&lt;/p&gt;
&lt;p&gt;VMOptionsExplorer presents this information as a searchable online dictionary of VM options available at &lt;a href="https://chriswhocodes.com" target="_blank" rel="noopener noreferrer"&gt;https://chriswhocodes.com&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/understanding-jvm-memory-layout-with-openjdk24s-new-printmemorymapatexit-vm-option/vmoe-700x329.png" alt="A screenshot of the VMOptionsExplorer website" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;and also on Foojay at &lt;a href="https://foojayio.github.io/website/command-line-arguments/"&gt;https://foojay.io/command-line-arguments/&lt;/a&gt;
 (although the Foojay copy doesn&amp;rsquo;t always cover the latest JDKs).&lt;/p&gt;</description></item><item><title>Advanced URL Rewriting with Apache APISIX</title><link>https://foojayio.github.io/website/today/advanced-url-rewriting-with-apache-apisix/</link><pubDate>Thu, 25 Jul 2024 09:10:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/advanced-url-rewriting-with-apache-apisix/</guid><description>&lt;p&gt;&lt;strong&gt;I spoke at &lt;a href="https://www.pgday.ch/2024/#schedule" target="_blank" rel="noopener noreferrer"&gt;Swiss PgDay&lt;/a&gt;
 in Switzerland in late June. The talk was about how to create a no-code API with the famous &lt;a href="https://www.postgresql.org/" target="_blank" rel="noopener noreferrer"&gt;PostgreSQL&lt;/a&gt;
 database, the related &lt;a href="https://postgrest.org/" target="_blank" rel="noopener noreferrer"&gt;PostgREST&lt;/a&gt;
, and &lt;a href="https://apisix.apache.org" target="_blank" rel="noopener noreferrer"&gt;Apache APISIX&lt;/a&gt;
, of course. I already wrote about the idea in a &lt;a href="https://blog.frankel.ch/poor-man-api/" target="_blank" rel="noopener noreferrer"&gt;previous post&lt;/a&gt;
. However, I wanted to improve it, if only slightly.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;PostgREST offers a powerful &lt;code&gt;SELECT&lt;/code&gt; mechanism. To list all entities with a column equal to a value, you need the following command:&lt;/p&gt;</description></item><item><title>Creating a Command Line Tool with JBang and PicoCLI to Generate Release Notes</title><link>https://foojayio.github.io/website/today/creating-a-command-line-tool-with-jbang-and-picocli-to-generate-release-notes/</link><pubDate>Wed, 24 Jul 2024 09:44:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-a-command-line-tool-with-jbang-and-picocli-to-generate-release-notes/</guid><description>&lt;p&gt;Lately, I have been playing with JBang and PicoCLI, and I am pretty amazed at what we can do with these tools. I needed to create a script that would go to a specified repository on GitHub, check the commit range, and verify if any tickets were associated with them. Additionally, I wanted to check if the ticket is accepted and if the commit was approved or not. The idea was to integrate this script along with the CI/CD pipeline.&lt;/p&gt;</description></item><item><title>Effective Java Logging</title><link>https://foojayio.github.io/website/today/effective-java-logging/</link><pubDate>Mon, 22 Jul 2024 11:39:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/effective-java-logging/</guid><description>&lt;p&gt;Effective Logging is an essential aspect of any Java application, providing insights into its operational state. It is especially crucial in production environments, where it aids in debugging, monitoring, and incident response. In this comprehensive guide, we will explore the effective practices for using SLF4J with Logback, ensuring a reliable and maintainable logging strategy.&lt;/p&gt;
&lt;p&gt;By following these best practices, developers and operations teams can leverage SLF4J and Logback to turn logs into strategic resources for application management and incident resolution. Embracing these guidelines will lead to improved observability, quicker troubleshooting, and a deeper understanding of system behavior, establishing a solid foundation for application reliability and performance.&lt;/p&gt;</description></item><item><title>Continuous Feedback Free Udemy Course: Additional Coupons Available</title><link>https://foojayio.github.io/website/today/continuous-feedback-free-udemy-course-additional-coupons-available/</link><pubDate>Thu, 18 Jul 2024 08:24:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/continuous-feedback-free-udemy-course-additional-coupons-available/</guid><description>&lt;p&gt;We&amp;rsquo;ve added extra coupons for our free Continuous Feedback Udemy course! We&amp;rsquo;re glad to see it&amp;rsquo;s been valuable for some of you.&lt;/p&gt;
&lt;h2 id="h2-0-introduction-to-continuous-feedback"&gt;Introduction to Continuous Feedback&lt;/h2&gt;
&lt;p&gt;What do you know about the code changes that were just introduced into the codebase?&lt;/p&gt;
&lt;p&gt;When will you notice if something goes wrong?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.digma.ai/digma-developer-guide/what-is-a-continuous-feedback-platform" title="Continuous Feedback focuses" target="_blank" rel="noopener noreferrer"&gt;Continuous Feedback focuses&lt;/a&gt;
 on analyzing observability data, namely logs, traces, and metrics. It emphasizes continuous aggregation and processing to detect anomalies, changes, and provide actionable insights for developers.&lt;/p&gt;</description></item><item><title>New video series "JavaFX In Action", Part 1</title><link>https://foojayio.github.io/website/today/new-video-series-javafx-in-action-part-1/</link><pubDate>Tue, 16 Jul 2024 07:35:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-video-series-javafx-in-action-part-1/</guid><description>&lt;p&gt;JavaFX is a powerful user interface framework, often overlooked in the world of desktop applications development. With this new series of video interviews, I want to take you behind-the-scenes of some applications built using JavaFX.&lt;/p&gt;
&lt;p&gt;JavaFX combines the best features of a modern user interface toolkit with the unparalleled strength of the Java platform. This approach enables you to perform heavy &amp;ldquo;background tasks&amp;rdquo;, like processing large amounts of data, while still providing a responsive user interface.&lt;/p&gt;</description></item><item><title>The Impact of the Digital Operational Resilience Act (DORA) on Java Investment with Azul</title><link>https://foojayio.github.io/website/today/the-impact-of-the-digital-operational-resilience-act-dora-on-java-investment-with-azul/</link><pubDate>Sun, 14 Jul 2024 13:26:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-impact-of-the-digital-operational-resilience-act-dora-on-java-investment-with-azul/</guid><description>&lt;p&gt;&lt;strong&gt;The &lt;a href="https://eur-lex.europa.eu/eli/reg/2022/2554/oj" target="_blank" rel="noopener noreferrer"&gt;Digital Operational Resilience Act (DORA)&lt;/a&gt;
, Regulation (EU) 2022/2554&lt;/strong&gt; ,&lt;strong&gt;is a key piece of European Union legislation focused on strengthening the resilience of the financial sector against digital operational risks, such as cyber attacks and other ICT-related disruptions.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DORA is part of the broader &lt;a href="https://finance.ec.europa.eu/publications/digital-finance-package_en" target="_blank" rel="noopener noreferrer"&gt;Digital Finance Package&lt;/a&gt;
 introduced by the European Commission to enable innovation and competition in the financial sector while ensuring its security and resilience.&lt;/p&gt;
&lt;p&gt;It is focused on enhancing ICT risk management, strengthening cybersecurity, ensuring continuity and recovery, managing risks arising from dependencies on third-party ICT service providers, and incident reporting.&lt;/p&gt;</description></item><item><title>Structured Concurrency is More Than ShutdownOnFailure</title><link>https://foojayio.github.io/website/today/structured-concurrency-is-more-than-shutdownonfailure/</link><pubDate>Thu, 11 Jul 2024 16:34:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/structured-concurrency-is-more-than-shutdownonfailure/</guid><description>&lt;p&gt;&lt;strong&gt;Since Java 21, structured concurrency has been added as a preview feature. Structured concurrency is a way to manage sub-tasks that are run in parallel within a given scope.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve ever seen a presentation about &lt;a href="https://docs.oracle.com/en/java/javase/21/core/structured-concurrency.html" target="_blank" rel="noopener noreferrer"&gt;structured concurrency&lt;/a&gt;
, you&amp;rsquo;ve probably seen the use of the &lt;code&gt;ShutdownOnSuccess&lt;/code&gt; or &lt;code&gt;ShutdownOnFailure&lt;/code&gt; classes.&lt;/p&gt;
&lt;p&gt;These classes will stop the scope and the still running sub-tasks within that scope when one of the sub-task succeeds or fails.&lt;/p&gt;</description></item><item><title>Java's Unsafe is Finally Going Away</title><link>https://foojayio.github.io/website/today/unsafe-is-finally-going-away-embracing-safer-memory-access-with-jep-471/</link><pubDate>Thu, 11 Jul 2024 07:52:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/unsafe-is-finally-going-away-embracing-safer-memory-access-with-jep-471/</guid><description>&lt;p&gt;Java, being a safe language, doesn&amp;rsquo;t usually allow direct low-level access. Memory is primarily managed on the heap, so developers don&amp;rsquo;t typically deal with memory directly. However, library developers are occasionally required to manipulate memory outside the heap for performance or specific use cases. This is where the controversial &lt;a href="https://github.com/openjdk/jdk/blob/master/src/jdk.unsupported/share/classes/sun/misc/Unsafe.java" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;sun.misc.Unsafe&lt;/strong&gt;&lt;/a&gt;
 comes in.&lt;/p&gt;
&lt;p&gt;While undeniably powerful, &lt;strong&gt;sun.misc.Unsafe&lt;/strong&gt; is a double-edged sword. Its improper use can lead to severe consequences, including memory leaks, crashes due to invalid memory access, and even security vulnerabilities like buffer overflows. As the name suggests, it&amp;rsquo;s inherently unsafe.&lt;/p&gt;</description></item><item><title>9 Best Java Profilers to Use in 2024</title><link>https://foojayio.github.io/website/today/9-best-java-profilers-to-use-in-2024/</link><pubDate>Wed, 10 Jul 2024 13:46:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/9-best-java-profilers-to-use-in-2024/</guid><description>&lt;p&gt;&lt;strong&gt;In this article, I will share why my team decided to start a Java profiler, the list of profilers we found that are suited for profiling Java apps, and how to analyze the data from the profiler to draw conclusions faster.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Recently, one of our team members was working on a third-party Linux application, and started encountering instances where he figured that one of his applications probably had memory leaks, as he kept getting an out-of-memory exception.&lt;/p&gt;</description></item><item><title>Dynamic watermarking with imgproxy and Apache APISIX</title><link>https://foojayio.github.io/website/today/dynamic-watermarking-with-imgproxy-and-apache-apisix/</link><pubDate>Wed, 10 Jul 2024 13:38:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/dynamic-watermarking-with-imgproxy-and-apache-apisix/</guid><description>&lt;p&gt;I described &lt;a href="https://foojayio.github.io/website/today/dynamic-watermarking-on-the-jvm/"&gt;how to add a dynamic watermark to your images on the JVM&lt;/a&gt;
. I didn&amp;rsquo;t find any library, so I had to develop the feature, or, more precisely, an embryo of a feature, by myself.&lt;/p&gt;
&lt;p&gt;Depending on your tech stack, you must search for an existing library or roll up your sleeves. For example, Rust offers such an out-of-the-box library. Worse, this approach might be impossible to implement if you don&amp;rsquo;t have access to the source image.&lt;/p&gt;</description></item><item><title>Dynamic watermarking on the JVM</title><link>https://foojayio.github.io/website/today/dynamic-watermarking-on-the-jvm/</link><pubDate>Tue, 09 Jul 2024 07:59:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/dynamic-watermarking-on-the-jvm/</guid><description>&lt;p&gt;Displaying images on your website makes for an interesting problem: on one side, you want to make them publicly available; on the other, you want to protect them against undue use. The age-long method to achieve it is watermarking:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A &lt;strong&gt;digital watermark&lt;/strong&gt; is a kind of marker covertly embedded in a noise-tolerant signal such as audio, video or image data. It is typically used to identify ownership of the copyright of such signal. &amp;ldquo;Watermarking&amp;rdquo; is the process of hiding digital information in a carrier signal; the hidden information should, but does not need to, contain a relation to the carrier signal. Digital watermarks may be used to verify the authenticity or integrity of the carrier signal or to show the identity of its owners. It is prominently used for tracing copyright infringements and for banknote authentication.&lt;/p&gt;</description></item><item><title>Wireshark &amp; tcpdump: A Debugging Power Couple</title><link>https://foojayio.github.io/website/today/wireshark-tcpdump-a-debugging-power-couple/</link><pubDate>Mon, 08 Jul 2024 14:51:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/wireshark-tcpdump-a-debugging-power-couple/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#introduction-to-wireshark"&gt;Introduction to Wireshark&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#browser-network-monitors"&gt;Browser Network Monitors&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#installation-and-getting-started"&gt;Installation and Getting Started&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#navigating-through-noise-with-filters"&gt;Navigating Through Noise with Filters&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#deep-dive-into-data-analysis"&gt;Deep Dive into Data Analysis&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#beyond-basic-usage"&gt;Beyond Basic Usage&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-basics-of-https-encryption"&gt;The Basics of HTTPS Encryption&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#methods-for-decrypting-https-in-wireshark"&gt;Methods for Decrypting HTTPS in Wireshark&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#premaster-secret-key-logging"&gt;&lt;strong&gt;Pre-Master Secret Key Logging&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#using-a-proxy"&gt;&lt;strong&gt;Using a Proxy&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#integrating-tcpdump-with-wireshark-for-enhanced-network-analysis"&gt;Integrating tcpdump with Wireshark for Enhanced Network Analysis&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-role-of-tcpdump-in-network-troubleshooting"&gt;The Role of tcpdump in Network Troubleshooting&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#key-scenarios-for-tcpdump-usage"&gt;Key Scenarios for tcpdump Usage&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#using-tcpdump-effectively"&gt;Using tcpdump Effectively&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#challenges-and-considerations"&gt;Challenges and Considerations&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;Wireshark, the free open-source packet sniffer and network protocol analyzer, has cemented itself as an indispensable tool in network troubleshooting, analysis, and security (on both sides).&lt;/p&gt;</description></item><item><title>Foojay Podcast #56: Vectors in Java Code, Databases, and LLMs</title><link>https://foojayio.github.io/website/today/foojay-podcast-56/</link><pubDate>Mon, 08 Jul 2024 07:33:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-56/</guid><description>&lt;p&gt;In this Foojay podcast, we enter the world of mathematics by discussing Vectors and how they are crucial for AI and machine learning.&lt;/p&gt;
&lt;p&gt;As ChatGPT explains: &lt;strong&gt;&amp;ldquo;A Vector is a mathematical structure that holds numerical values. Vectors are fundamental to the field of Artificial Intelligence, as they allow mathematical operations to be performed efficiently and form the basis of many machine learning algorithms.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OK, but&amp;hellip; how are these vectors crucial for the whole Artificial Intelligence evolution?&lt;/p&gt;</description></item><item><title>The Best Way to Handle Phone Numbers</title><link>https://foojayio.github.io/website/today/the-best-way-to-handle-phone-numbers/</link><pubDate>Fri, 05 Jul 2024 07:00:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-best-way-to-handle-phone-numbers/</guid><description>&lt;p&gt;Processing phone numbers seems complicated at first glance because of the many different formats. In this post, I&amp;rsquo;ll show you that with libphonenumber, it becomes child&amp;rsquo;s play. I&amp;rsquo;ll also recommend how to store the phone number in the database.&lt;/p&gt;
&lt;h2 id="h2-0-introduction-google-s-libphonenumber"&gt;Introduction Google&amp;rsquo;s libphonenumber&lt;/h2&gt;
&lt;p&gt;According to the GitHub repository &lt;a href="https://github.com/google/libphonenumber/" target="_blank" rel="noopener noreferrer"&gt;https://github.com/google/libphonenumber/&lt;/a&gt;
 libphone number is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;br /&gt;
&lt;p&gt;Google&amp;rsquo;s common Java, C++ and JavaScript library for parsing, formatting, and validating international phone numbers. The Java version is optimized for running on smartphones, and is used by the Android framework since 4.0 (Ice Cream Sandwich).&lt;/p&gt;</description></item><item><title>Java: Demystifying The Stream API</title><link>https://foojayio.github.io/website/today/java-demystifying-the-stream-api-part-3/</link><pubDate>Fri, 05 Jul 2024 06:57:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-demystifying-the-stream-api-part-3/</guid><description>&lt;p&gt;In our earlier articles &lt;a href="https://foojayio.github.io/website/today/java-functional-programming/"&gt;part1&lt;/a&gt;
 and &lt;a href="https://foojayio.github.io/website/today/java-functional-programming-fx-part2"&gt;part2&lt;/a&gt;
, we have previously explored the significance of functional programming, Lambda Calculus, as well as various features such as Functional Interfaces, Lambda Expressions, and Method References.&lt;/p&gt;
&lt;p&gt;This article delves into a crucial aspect, namely the Stream API, which JDK1.8 incorporated. It also covers how to utilize Lambda Expressions, Method References, and Functional Interfaces within Stream API functions.&lt;/p&gt;
&lt;p&gt;So,&lt;/p&gt;
&lt;p&gt;Succinctly, In Java, &lt;strong&gt;a Stream is a collection of data that developers can process on in a declarative and functional approach&lt;/strong&gt;.&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>beetRoot: Yet Another Web Framework?</title><link>https://foojayio.github.io/website/today/beetroot-yet-another-web-framework/</link><pubDate>Tue, 02 Jul 2024 07:26:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/beetroot-yet-another-web-framework/</guid><description>&lt;p&gt;&lt;em&gt;News: beetRoot 3.2.0 was released on December 8, 2025&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Over the years, I have struggled with various Java web development frameworks and they all have their weaknesses and strengths.&lt;/p&gt;
&lt;p&gt;A few years ago, I evaluated around 10 of these frameworks for a project for a Swedish company. Nothing really impressed me at the time.&lt;/p&gt;
&lt;p&gt;It was only later that &lt;a href="https://spring.io/projects/spring-boot" target="_blank" rel="noopener noreferrer"&gt;SpringBoot&lt;/a&gt;
 came along, which seemed to fulfill all the requirements and there was actually very little to criticize about it. Then came microservices such as &lt;a href="https://quarkus.io/" target="_blank" rel="noopener noreferrer"&gt;Quarkus&lt;/a&gt;
 or &lt;a href="https://micronaut.io/" target="_blank" rel="noopener noreferrer"&gt;Micronaut&lt;/a&gt;
, which are often compiled into native code for small web service applications, but which can then rarely be embedded in a more mature architecture.
&lt;img src="https://raw.githubusercontent.com/autumoswitzerland/autumo-beetroot/master/web/img/autumo-beetroot-login.webp" alt="beetRoot starting on console" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Step up your coding with Continuous Feedback: Free Udemy Course</title><link>https://foojayio.github.io/website/today/step-up-your-coding-with-continuous-feedback-free-udemy-course/</link><pubDate>Tue, 02 Jul 2024 06:57:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/step-up-your-coding-with-continuous-feedback-free-udemy-course/</guid><description>&lt;p&gt;What do you know about the code changes that were just introduced into the codebase? When will you notice if something goes wrong?&lt;/p&gt;
&lt;h2 id="h2-0-what-is-continuous-feedback"&gt;What is Continuous Feedback?&lt;/h2&gt;
&lt;p&gt;First, let me explain Continuous Feedback. It&amp;rsquo;s a new dev practice that aims to make practical usage of code runtime data to shorten the feedback loop during development.&lt;/p&gt;
&lt;p&gt;OpenTelemetry makes it possible with great library support and a standard spec for tracing, metrics, and more. I truly feel that practicing CF can enhance your development experience, and we decided to share with Foojay the course for free.&lt;/p&gt;</description></item><item><title>Foojay Podcast #55: Embedded Java, Part 2</title><link>https://foojayio.github.io/website/today/foojay-podcast-55/</link><pubDate>Mon, 01 Jul 2024 08:21:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-55/</guid><description>&lt;p&gt;As a backend developer, you may not realize that Java was initially born on embedded devices like set-top boxes and gateways. We discussed this topic for the first time almost three years ago in &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-2/"&gt;Foojay Podcast #2 with James Gosling, Johan Vos, Erik Costlow, and Frank Delporte&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;In this episode #55, we look into the history of the Java Micro Edition and how things evolved. Nowadays, with processors becoming increasingly powerful, we can run the exact same Java runtime on any Linux system, from the biggest cloud servers to the smallest Raspberry Pi Zero.&lt;/p&gt;</description></item><item><title>Master Your Journey in the School of OpenJDK Migration</title><link>https://foojayio.github.io/website/today/master-your-journey-in-the-school-of-openjdk-migration/</link><pubDate>Sun, 30 Jun 2024 09:46:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/master-your-journey-in-the-school-of-openjdk-migration/</guid><description>&lt;p&gt;Azul has led so many OpenJDK migrations, we could write a book. Like, seriously, &lt;a href="https://www.azul.com/openjdk-migration-for-dummies/" target="_blank" rel="noopener noreferrer"&gt;we wrote the book&lt;/a&gt;
. If you prefer more a more visual, immersive experience, welcome to the School of OpenJDK Migration!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.azul.com/school-of-open-jdk-migration/" target="_blank" rel="noopener noreferrer"&gt;The School of OpenJDK Migration&lt;/a&gt;
 is your ultimate resource for mastering OpenJDK migration. Dive into our rich collection of webinars, where OpenJDK experts divulge their secrets, from foundational knowledge to advanced tactics, derived from industry knowledge and professional experience. You&amp;rsquo;ll leave the course with a blueprint to navigate the complexities of OpenJDK migration with confidence and ease.&lt;/p&gt;</description></item><item><title>JavaFX Links of June 2024</title><link>https://foojayio.github.io/website/today/javafx-links-of-june-2024/</link><pubDate>Sun, 30 Jun 2024 07:07:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-june-2024/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of June 2024, published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during this month.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New JavaFX 23 Early-Access Builds are &lt;a href="https://jdk.java.net/javafx23/" target="_blank" rel="noopener noreferrer"&gt;available on jdk.java.net/javafx23&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/FriedholdMatz/status/1776354116517732465" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Friedhold Matz&lt;/strong&gt; shared a screenshot&lt;/a&gt;
 showing that WebView in JavaFX 22 now works with GraalVM 22+36.1.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/crschnick/status/1797530886289940828" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; shared screenshots&lt;/a&gt;
: &amp;ldquo;XPipe 9.4 comes with a JavaFX markdown view for notes that works through the WebView. It supports using external editors and updates in real time.&amp;rdquo; Check the sources on &lt;a href="https://github.com/xpipe-io/xpipe" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/SerendigityInfo/status/1797164327763357725" target="_blank" rel="noopener noreferrer"&gt;Smartfinder now runs on Java 22&lt;/a&gt;
. It&amp;rsquo;s a Desktop Search alternative to Windows Search/Mac OS Finder.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/logorrr/status/1800544389216997657" target="_blank" rel="noopener noreferrer"&gt;LogoRRR reached a major milestone this week&lt;/a&gt;
: &amp;ldquo;10.000 downloads for LogoRRR on all platforms!! I&amp;rsquo;m very proud of this achievement, thank you guys!🙂&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/xiongchun007/status/1799863501135245739" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Xiong Chun&lt;/strong&gt; keeps teasing us with videos&lt;/a&gt;
 showing progress with his Datacollie application to interact with databases&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/haltraet" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hallvard Trætteberg&lt;/strong&gt;&lt;/a&gt;
 shared &lt;a href="https://github.com/kantega/llm-starter-and-workbench" target="_blank" rel="noopener noreferrer"&gt;code of a LLM workbench to explore various parts of a RAG chain using Quarkus, LangChain4J and JavaFX&lt;/a&gt;
 (with an extension allowing Quarkus to work with JavaFX): &amp;ldquo;The UI is rough, just what is needed functionally, but the project may still be interesting for others. It&amp;rsquo;s also a showcase for a rare combination, a desktop app running on Quarkus.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/SeanMiPhillips/status/1802142816602108122" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; is taking requests and suggestions for Trinity&lt;/a&gt;
: &amp;ldquo;If anyone has ideas they would like to see implemented in a 3D asteroids game or in the actual AI analysis tool, and it&amp;rsquo;s feasible in my spare time, I will happily attempt to implement it. (and credit you!)&amp;rdquo;&lt;/li&gt;
&lt;li&gt;In a XTwitter Thread, &lt;a href="https://x.com/EmadHanif_/status/1806383935083233771" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Emad Hanif&lt;/strong&gt; shares several videos of Barcodify&lt;/a&gt;
: &amp;ldquo;Check out how easy it is to configure and export barcodes.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/PatrikKarlstrom/status/1804865421918491014" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Patrik Karlström&lt;/strong&gt; is working on nbLauncher&lt;/a&gt;
, an app to build launcher configs for NetBeans Platform Apps: &amp;ldquo;Expect a release after testing and polishing.&amp;rdquo; You can &lt;a href="https://github.com/trixon/nbLauncher" target="_blank" rel="noopener noreferrer"&gt;find it on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/WebFXProject/status/1797963817659600978" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WebFX&lt;/strong&gt; published a new version of SpaceFX&lt;/a&gt;
 a game originally created by &lt;a href="https://x.com/hansolo_" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
. It&amp;rsquo;s playable online at &lt;a href="https://spacefx.webfx.dev" target="_blank" rel="noopener noreferrer"&gt;spacefx.webfx.dev&lt;/a&gt;
 with a few updates to make the game even more challenging for true gamers. More WebFX demos on &lt;a href="https://github.com/webfx-demos" target="_blank" rel="noopener noreferrer"&gt;github.com/webfx-demos&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;And &lt;a href="https://x.com/WebFXProject/status/1803038702693740734" target="_blank" rel="noopener noreferrer"&gt;another new update&lt;/a&gt;
 of the &lt;a href="https://spacefx.webfx.dev" target="_blank" rel="noopener noreferrer"&gt;online SpaceFX&lt;/a&gt;
: &amp;ldquo;2 new weapons: Autofire Fury and Rainbow Blaster. Can you now score 100,000? All of this made possible only by the amazingly performant JavaFX game engine written by &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; and the power of GWT.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/SeanMiPhillips/status/1801354864162967663" target="_blank" rel="noopener noreferrer"&gt;The Trinity XAI analysis tool by &lt;strong&gt;Sean Phillips&lt;/strong&gt; now supports video playback and automatic clustering algorithms&lt;/a&gt;
. Because data science is also fun, he integrated the ability to turn your AI analysis data and clusters into a playable Asteroids 3D minigame. &lt;a href="https://www.youtube.com/watch?v=vFThM9BoTLg" target="_blank" rel="noopener noreferrer"&gt;Watch the video here&lt;/a&gt;
, and the &lt;a href="https://github.com/Birdasaur/Trinity" target="_blank" rel="noopener noreferrer"&gt;code is available here&lt;/a&gt;
. &amp;ldquo;Watch out for those alien Opticons&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/orango_mango/status/1805585806863602035" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; shared&lt;/a&gt;
 a &lt;a href="https://www.youtube.com/watch?v=npwdeEwLjpY" target="_blank" rel="noopener noreferrer"&gt;video showcase of his best projects since February 2020&lt;/a&gt;
: &amp;ldquo;JavaFX is the best 💪.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/v1aaad/status/1800614531191996618" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;vlaaad&lt;/strong&gt; released version 1.9.0 of cljfx&lt;/a&gt;
, a reactive UI wrapper of JavaFX for Clojure: &amp;ldquo;The new features bring cljfx a bit further away from re-frame and a bit closer to react.&amp;rdquo; Check out the &lt;a href="https://github.com/cljfx/cljfx/blob/master/CHANGELOG.md" target="_blank" rel="noopener noreferrer"&gt;changelog on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Updates shared by &lt;a href="https://x.com/P_Duke" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duke&lt;/strong&gt;&lt;/a&gt;
:
&lt;ul&gt;
&lt;li&gt;Do you want your JavaFX application to have rounded borders? &lt;a href="https://x.com/P_Duke/status/1797614063289274570" target="_blank" rel="noopener noreferrer"&gt;FXThemes can do that for you&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1800522435734995086" target="_blank" rel="noopener noreferrer"&gt;Video of an experiment with a new Login Dialog&lt;/a&gt;
: &amp;ldquo;Using FXThemes for the background blur on the Dialog and FXSkins for the differently looking Progress Bar and Button animations.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1801238597707735479" target="_blank" rel="noopener noreferrer"&gt;Video showing that the next version of FXThemes&lt;/a&gt;
 will allow you to add platform decorations to an Undecorated or Transparent Stage.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1803758549677293986" target="_blank" rel="noopener noreferrer"&gt;Version 1.6 of FXThemes&lt;/a&gt;
: &amp;ldquo;Change the roundness of window corners. Set native platform decorations on TRANSPARENT or UNDECORATED Stages.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Updates shared by &lt;a href="https://twitter.com/dlemmermann/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
:
&lt;ul&gt;
&lt;li&gt;Uploaded a video to &lt;a href="https://www.youtube.com/watch?v=9CaDcCvJZ7I" target="_blank" rel="noopener noreferrer"&gt;demonstrate the AvatarView in GemsFX&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1801010129237598714" target="_blank" rel="noopener noreferrer"&gt;Added an AvatarView control to GemsFX&lt;/a&gt;
, which can be used to either display the image/avatar of a user or his/her initials. Clipping will give you a round or a square view.&lt;/li&gt;
&lt;li&gt;Doing a &amp;ldquo;&lt;a href="https://x.com/dlemmermann/status/1805595281209118818" target="_blank" rel="noopener noreferrer"&gt;2nd attempt at providing a reusable control in GemsFX that features a table view with built-in column-based filtering&lt;/a&gt;
 (aka iTunes-style filtering). Trying to use what I learned since I started coding JavaFX in 2013.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/FrankDelporte" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt;&lt;/a&gt;
 started a new series of videos: &amp;ldquo;JavaFX In Action&amp;rdquo;:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2024-06-05-jfxinaction-pedro-duque-vieira-duke/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt;, aka Duke about Hero, PDFSam, FXThemes, FXComponents,&amp;hellip;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2024-06-12-jfxinaction-daniel-zimmermann/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Daniel Zimmermann&lt;/strong&gt; about JavaFX and Kotlin&lt;/a&gt;
 to build nice user interfaces, making full use of the JVM to run on any platform and perform heavy tasks like testing network speeds up to 10Gbps!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2024-06-18-jfxinaction-christopher-schnick/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; about XPipe&lt;/a&gt;
, an app to manage all your servers.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webtechie.be/post/2024-06-26-jfxinaction-robert-ladstatter/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt; about LogoRRR&lt;/a&gt;
, a cross-platform log analysis tool written with Scala and JavaFX to find problems blazingly fast in log files with millions of lines.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/side-project-local-llm-powered-image-renaming-tool-marc-leveque-sdkfe/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mark Leveque&lt;/strong&gt; shares a side project&lt;/a&gt;
: &amp;ldquo;Local LLM-Powered Image Renaming JavaFX Tool. Use case: you have a disk full of randomly named images and you want to give them filenames relevant to their content. The article will covers: llama.cpp with Java, JavaFX as GUI, packaging the application and pitfalls along the way.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Video tutorial by &lt;a href="https://twitter.com/iamBalkrishnaS" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Balkrishna Srivastava&lt;/strong&gt;&lt;/a&gt;
: &lt;a href="https://www.youtube.com/watch?v=8h0CJCsnsa4" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;JavaFX GUI App to play the game of TicTacToe in Java.&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video tutorial by &lt;strong&gt;Kensoft PH&lt;/strong&gt; : &lt;a href="https://www.youtube.com/watch?v=1u0boNYDGNI" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;JavaFX Pie Chart: World Population with National Flag.&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/orango_mango/status/1800494415674577288" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; shared a quick video of a handwritten digits recognizer using neural networks&lt;/a&gt;
: &amp;ldquo;Of course built from scratch and in Java and JavaFX&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;JavaFX love by&amp;hellip;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/maytanthegeek/status/1794393624995885123" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tanmay&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Not gonna lie. I still love JavaFX. Android layout learned a lot from it. JavaFX is so fun and simple. I would really like to see it take a leading spot some day for GUI programming.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/DaXiong008/status/1799322279241011688" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Xiong Chun&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Never has styling a Java UI been easier than with JavaFX and CSS. Going from one theme to another, or customizing the look of just one control, can all be done with CSS. eg: I want to let the scrollbar is only be displayed when the component has focus, otherwise disappear.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Sharat_Chander/status/1801461459840549198" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sharat Chander&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Wicked cool usage of Java AND JavaFX! @SeanMiPhillips, super genius!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/jasperpotts/status/1800623060346921264" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jasper Potts&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Had déjà vu today seeing the new Apple Car UI, guess what Mo Chicharro and I designed 10 years ago was ahead of our time. 😀&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/EvanderTor57903/status/1800928991689453989" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Evander Torres&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;I think JavaFX is the true desktop ui solution for Kotlin!&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/embed/feed/update/urn:li:share:7212075229894881280" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Crystal Furman&lt;/strong&gt; wrote a long LinkedIn message about the use of JavaFX in education&lt;/a&gt;
: &amp;ldquo;I encourage you to try out Java FX charts with your students. For some, data analysis is simply not going to be exciting, even if it is on a topic they care about. Adding some graphics, might just spruce up this project and make it more exciting for them. Hope you try it and let me know how it goes.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/hansolo_/status/1806004059368784098" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; shares a screenshot&lt;/a&gt;
: &amp;ldquo;JavaFX is simply super productive&amp;hellip; Created this chart component in just 1.5h&amp;hellip; From idea to running in my app&amp;hellip; Just love it&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/carldea/status/1805773088576974861" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; is extending Cognitive, a JavaFX MVVM library&lt;/a&gt;
, with a new feature, as &lt;a href="https://github.com/carldea/cognitive/issues/2" target="_blank" rel="noopener noreferrer"&gt;extensively documented on GitHub&lt;/a&gt;
: &amp;ldquo;Additional way to look up properties using a Property Identifier type object instead of a String.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Experiments by &lt;strong&gt;konczdev&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;&lt;a href="https://x.com/konczdev/status/1804825701134082331" target="_blank" rel="noopener noreferrer"&gt;Git branch graph like JavaFx visualization entirely made by Claude 3.5 Sonnet&lt;/a&gt;
. All iterations. The input was just an image and a short prompt.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;a href="https://x.com/konczdev/status/1804591278073532624" target="_blank" rel="noopener noreferrer"&gt;A little fun with Java 22, JavaFX and Project Panama&lt;/a&gt;
. Modified JavaFX window with a custom JavaFX title bar without any refection, JNI, JNA or native code.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The videos of &amp;ldquo;JavaFX In Action&amp;rdquo;, mentioned above, are also added to the &lt;a href="https://www.jfx-central.com/videos" target="_blank" rel="noopener noreferrer"&gt;video section of JFX Central&lt;/a&gt;
, select &amp;ldquo;JFX In Action&amp;rdquo; in the &amp;ldquo;Type&amp;rdquo; filter. More to come after the summer break&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/dlemmermann/status/1798688644133486973" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared visitor statistics&lt;/a&gt;
: &amp;ldquo;We are seeing more and more traffic on JFX Central coming from China and the United States. Normally Germany was on the number 1 spot. Interesting&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;All the Links Of The Week of May are &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-may-2024/"&gt;bundled in one post on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Renovate for everything</title><link>https://foojayio.github.io/website/today/renovate-for-everything/</link><pubDate>Thu, 27 Jun 2024 08:18:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/renovate-for-everything/</guid><description>&lt;p&gt;In my earlier post about moving from &lt;a href="https://blog.frankel.ch/kotlin-scripting-to-python/" target="_blank" rel="noopener noreferrer"&gt;Kotlin Scripting to Python&lt;/a&gt;
, I mentioned several reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Separating the content from the script&lt;/li&gt;
&lt;li&gt;Kotlin Scripting is an unloved child of JetBrains&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mend.io/renovate/" target="_blank" rel="noopener noreferrer"&gt;Renovate&lt;/a&gt;
 cannot update Kotlin Scripting files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I was wrong on the third point. Here&amp;rsquo;s my &lt;em&gt;mea culpa&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;First things first, Renovate does indeed &lt;a href="https://docs.renovatebot.com/modules/manager/kotlin-script/" target="_blank" rel="noopener noreferrer"&gt;manages Kotlin Scripting&lt;/a&gt;
 files - since 2022.&lt;/p&gt;
&lt;p&gt;Even better, Renovate can manage &lt;em&gt;any&lt;/em&gt; type of file. Thanks to Max Andersen for the tip:&lt;/p&gt;</description></item><item><title>How to Run Neo4j on Kubernetes</title><link>https://foojayio.github.io/website/today/how-to-run-neo4j-on-kubernetes/</link><pubDate>Tue, 25 Jun 2024 19:34:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-run-neo4j-on-kubernetes/</guid><description>&lt;h3 id="h3-0-kubernetes-is-an-open-source-container-orchestration-platform-that-automates-the-deployment-scaling-and-management-of-containerized-applications-in-this-post-we-walk-through-how-to-run-the-neo4j-graph-database-on-kubernetes"&gt;Kubernetes is an open-source container orchestration platform that automates the deployment, scaling, and management of containerized applications. In this post, we walk through how to run the Neo4j graph database on Kubernetes.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;For an upcoming event, I was asked to give a demo of how to run Neo4j on Kubernetes. I had very little experience with Kubernetes, so I decided to document my journey for later reference.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="_what_is_kubernetes"&gt;What is Kubernetes?&lt;/h2&gt;
&lt;p&gt;Kubernetes is an open-source container orchestration platform that automates the deployment, scaling, and management of containerized applications. It was originally developed by Google and is now maintained by the Cloud Native Computing Foundation.&lt;/p&gt;</description></item><item><title>Foojay Podcast #54: Music and MIDI with Java and Kotlin</title><link>https://foojayio.github.io/website/today/foojay-podcast-54/</link><pubDate>Mon, 24 Jun 2024 18:23:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-54/</guid><description>&lt;p&gt;MIDI is a universal standard for communicating between musical instruments and computers.&lt;/p&gt;
&lt;p&gt;Within OpenJDK, there is a whole Java package dedicated to MIDI communication and data handling. Is it up to date? Are there better approaches now? And what can we do with music, Java, and Kotlin?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s find out&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/tHKZA9yqIVM?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Example Java Application with Embedded Jetty and a htmx Website</title><link>https://foojayio.github.io/website/today/example-java-application-with-embedded-jetty-and-a-htmx-website/</link><pubDate>Fri, 21 Jun 2024 08:59:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/example-java-application-with-embedded-jetty-and-a-htmx-website/</guid><description>&lt;p&gt;&lt;strong&gt;I was experimenting with a Java application that can act as a web server and includes the user interface HTML-files that get modified with htmx, to replace certain parts of the HTML with other ones created in Java.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I found it pretty hard to understand how to configure the embedded &lt;strong&gt;Jetty&lt;/strong&gt; webserver, but as always with Java libraries, it&amp;rsquo;s pretty easy once you understand how to do it 😉 I decided to share my example, so you don&amp;rsquo;t need to go through the same search if you want to use the same approach&amp;hellip;&lt;/p&gt;</description></item><item><title>Exploring New Features in JDK 23: Simplifying Java with Module Import Declarations with JEP 476</title><link>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-simplifying-java-with-module-import-declarations-with-jep-476/</link><pubDate>Thu, 20 Jun 2024 16:14:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-simplifying-java-with-module-import-declarations-with-jep-476/</guid><description>&lt;p&gt;As Java evolves, simplifying code and improving developer productivity remain priorities.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://openjdk.org/jeps/476" target="_blank" rel="noopener noreferrer"&gt;JEP 476&lt;/a&gt;
 introduces a new feature in JDK 23: Module Import Declarations.&lt;/p&gt;
&lt;p&gt;This feature aims to streamline the process of importing multiple packages from a module, enhancing code readability and reducing boilerplate.&lt;/p&gt;
&lt;h3 id="h3-0-what-is-jep-476"&gt;&lt;strong&gt;What is JEP 476?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;JEP 476 proposes the ability to import all packages exported by a module with a single declaration. This is particularly useful for developers who frequently use multiple packages from the same module, as it eliminates the need for numerous individual import statements.&lt;/p&gt;</description></item><item><title>Even More Opentelemetry!</title><link>https://foojayio.github.io/website/today/even-more-opentelemetry/</link><pubDate>Thu, 20 Jun 2024 06:40:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/even-more-opentelemetry/</guid><description>&lt;p&gt;&lt;strong&gt;I continue to work on my &lt;a href="https://github.com/nfrankel/opentelemetry-tracing" target="_blank" rel="noopener noreferrer"&gt;Opentelemetry demo&lt;/a&gt;
. Its main idea is to showcase &lt;em&gt;traces&lt;/em&gt; across various technology stacks, including asynchronous communication via an MQTT queue. Recently, I added a couple of components and changed the architecture. Here are some noteworthy learnings; note that some of them might not be entirely connected to OpenTelemetry.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an updated diagram. New components appear in violet, and updated components appear in green.&lt;/p&gt;</description></item><item><title>Why is Kubernetes Debugging so Problematic?</title><link>https://foojayio.github.io/website/today/why-is-kubernetes-debugging-so-problematic/</link><pubDate>Thu, 20 Jun 2024 06:37:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-is-kubernetes-debugging-so-problematic/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-immutable-nature-of-containers"&gt;The Immutable Nature of Containers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-limitations-of-raw-kubectl-exec-endraw-"&gt;The Limitations of &lt;code&gt;kubectl exec&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#avoiding-direct-modifications"&gt;Avoiding Direct Modifications&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#enter-ephemeral-containers"&gt;Enter Ephemeral Containers&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#using-raw-kubectl-debug-endraw-"&gt;Using &lt;code&gt;kubectl debug&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#practical-application-of-ephemeral-containers"&gt;Practical Application of Ephemeral Containers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#security-considerations"&gt;Security Considerations&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#interlude-the-role-of-observability"&gt;Interlude: The Role of Observability&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#command-line-debugging"&gt;Command Line Debugging&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#connecting-a-standard-ide-for-remote-debugging"&gt;Connecting a Standard IDE for Remote Debugging&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#conclusion"&gt;Conclusion&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Debugging application issues in a Kubernetes cluster can often feel like navigating a labyrinth. Containers are ephemeral by design, intended to be immutable once deployed.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This presents a unique challenge when something goes wrong and we need to dig into the issue. Before diving into the debugging tools and techniques, it&amp;rsquo;s essential to grasp the core problem: why modifying container instances directly is a bad idea.&lt;/p&gt;</description></item><item><title>Java on Visual Studio Code May 2024 Update - New AI Feature, Spring Updates</title><link>https://foojayio.github.io/website/today/java-on-visual-studio-code-may-2024-update-new-ai-feature-spring-updates/</link><pubDate>Tue, 18 Jun 2024 10:42:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-visual-studio-code-may-2024-update-new-ai-feature-spring-updates/</guid><description>&lt;p&gt;Hi everyone, welcome to the May update for Visual Studio Code for Java!&lt;/p&gt;
&lt;p&gt;In this articlem we are going to share an exciting new AI related feature for Java developers on Visual Studio Code.&lt;/p&gt;
&lt;p&gt;In addition, there will be several important Spring updates, so let&amp;rsquo;s get started.&lt;/p&gt;
&lt;h3 id="h3-0-rewriting-your-java-code-with-copilot-based-suggestions"&gt;Rewriting your Java code with Copilot-based suggestions&lt;/h3&gt;
&lt;p&gt;As our code undergoes updates and iterations, our business logic continues to grow in complexity. Meanwhile, Java versions are constantly evolving. Often, our older code can be replaced with newer, more efficient alternatives, not only improving their performance but also making the code more elegant, concise and secure. Previously, these tasks may have been done manually, but with the power of AI, many tasks can now be handled automatically.&lt;/p&gt;</description></item><item><title>Foojay Podcast #53: JCON Report, Part 5 – CQRS, JOOQ, GraphQL, API, Vaadin, OpenRewrite, ErrorProne, Gateways, Proxies,...</title><link>https://foojayio.github.io/website/today/foojay-podcast-53/</link><pubDate>Mon, 17 Jun 2024 09:24:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-53/</guid><description>&lt;p&gt;This is the final part of the JCON interviews. Did I save the best for last? It&amp;rsquo;s up to you to decide&amp;hellip;&lt;/p&gt;
&lt;p&gt;In this episode you&amp;rsquo;ll hear Simon Martinelli, Nicolas Fränkel, Marcus Hellberg, Rick Ossendrijver, and Abdel Sghiouar.&lt;/p&gt;
&lt;p&gt;We talked about a bunch of topics like evolving your APIs, GraphQL, Java versus Kotlin versus Rust, Vaadin, AI and ChatGPT, OpenRewrite, ErrorProne, Infrastructure, and a lot more.&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/6ops5sU_UiY?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Book review: Frontend Development with JavaFX and Kotlin</title><link>https://foojayio.github.io/website/today/book-review-frontend-development-with-javafx-and-kotlin/</link><pubDate>Fri, 14 Jun 2024 09:06:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-frontend-development-with-javafx-and-kotlin/</guid><description>&lt;figure class="wp-block-image size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="327" height="466" src="cover.jpg" alt="" class="wp-image-110882" style="width:auto;height:200px"&gt;
&lt;/figure&gt;
&lt;p&gt;For a personal pet project, I started experimenting with JavaFX and Kotlin to create a user interface with a lot of Java / Kotlin background processing. As I knew there is a book available on this specific topic, Apress was so kind to send me a review copy of &lt;a href="https://www.amazon.nl/Frontend-Development-JavaFX-Kotlin-State/dp/1484297164" target="_blank" rel="noopener noreferrer"&gt;Frontend Development with JavaFX and Kotlin: Build State-of-the-Art Kotlin GUI Applications&lt;/a&gt;
 by Peter Späth (152 pages, 48€ on paper, 35.5€ for ebook on Amazon.nl).&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>Vaadin 24.4 Adds React Support, In-App Coding Assistant</title><link>https://foojayio.github.io/website/today/vaadin-24-4-adds-react-support-in-app-coding-assistant/</link><pubDate>Wed, 12 Jun 2024 14:38:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/vaadin-24-4-adds-react-support-in-app-coding-assistant/</guid><description>&lt;h2 id="h2-0-unified-vaadin-platform-seamless-integration-with-hilla"&gt;Unified Vaadin Platform: Seamless Integration with Hilla&lt;/h2&gt;
&lt;p&gt;24.4 adds React support to the entire Vaadin platform by including the Hilla framework.&lt;/p&gt;
&lt;p&gt;The Vaadin BOM and Vaadin Spring Boot Starter now include Hilla, allowing you to choose between Flow and Hilla or mix both in your projects.&lt;/p&gt;
&lt;h2 id="h2-1-vaadin-copilot-an-in-app-development-assistant"&gt;Vaadin Copilot: an in-app development assistant&lt;/h2&gt;
&lt;p&gt;Vaadin 24.4 introduces &lt;strong&gt;&lt;a href="https://vaadin.com/copilot" target="_blank" rel="noopener noreferrer"&gt;Vaadin Copilot&lt;/a&gt;
&lt;/strong&gt;, a visual development tool and AI-powered assistant.&lt;/p&gt;
&lt;p&gt;Available by default in development mode, Copilot helps you inspect and edit the UI, and use generative AI to create or modify code.&lt;/p&gt;</description></item><item><title>Be a Better Java Developer: 19 Tips for Staying Ahead in 2024</title><link>https://foojayio.github.io/website/today/become-a-better-java-developer-19-tips-for-staying-ahead-in-2024/</link><pubDate>Tue, 11 Jun 2024 12:31:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/become-a-better-java-developer-19-tips-for-staying-ahead-in-2024/</guid><description>&lt;p&gt;Recently I reached out to one of my fellow Java developers who is very experienced and has been working in the industry forever and asked for his thoughts about the observability improvements in JDK 21 and Spring Boot 3.2 and if he has already migrated from 17 to 21 and to Spring Boot 3.2.&lt;/p&gt;
&lt;p&gt;This is the reply I got from him:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;Lately, I&amp;rsquo;ve been feeling quite rusty, my current job has me solely focused on building an IntelliJ plugin, it&amp;rsquo;s been almost two years now. And I&amp;rsquo;m concerned I&amp;rsquo;m not keeping up to date. I&amp;rsquo;ve promised myself to take a tutorial and learn everything from Java versions 17 to 21. With Java 22 nearly released and Spring 3.2 out, I&amp;rsquo;m not familiar with all the improvements. I&amp;rsquo;ve already heard about the exciting new features of Java 22 like the non-Java interop and access to important libraries like LAPACK and BLAS. These libraries power significant Python libraries like NumPy, offering new opportunities for Java.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Foojay Podcast #52 from JCON in Cologne!</title><link>https://foojayio.github.io/website/today/foojay-podcast-52/</link><pubDate>Mon, 10 Jun 2024 09:32:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-52/</guid><description>&lt;p&gt;This is part 4 of the JCON interviews!&lt;/p&gt;
&lt;p&gt;In this episode, we have 5 new guests for you.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We start with garbage collectors and Intelligence Cloud, a tool created by Azul to find out which of your code is actually used in production and which dependencies are known to have vulnerabilities. My colleague Gerrit Grunwald was at JCON to give a talk about these subjects.&lt;/li&gt;
&lt;li&gt;With Balkrishna Rawool we dove into Virtual Threads, a very interesting topic as concurrency and threads can be challenging&amp;hellip;&lt;/li&gt;
&lt;li&gt;Piotr Przybyl came to JCON to give a talk about Test Containers and how to test your application in an environment that is similar to your production environment. Another important topic related to testing is Flaky Tests. How do you handle tests that only fail from time to time and make your whole test report unreliable?&lt;/li&gt;
&lt;li&gt;François Martin had a talk about this subject, and he came to the conference together with Annelore Egger, who was one of the many volunteers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/9q7kSibmVBA?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Identify Dependencies in Codebases During Microservice Migration</title><link>https://foojayio.github.io/website/today/how-to-identify-dependencies-in-your-codebase-during-microservices-migration/</link><pubDate>Fri, 07 Jun 2024 07:17:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-identify-dependencies-in-your-codebase-during-microservices-migration/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Migration from a monolithic architecture to microservices presents challenges, particularly in identifying and managing dependencies within the codebase. By analyzing the application&amp;rsquo;s training data, we can uncover the seams and threads that bind the application together, discovering a safer, more iterative path to refactor our code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Collecting tracing data to understand code dependencies&lt;/li&gt;
&lt;li&gt;Using Digma Analytic Insights to identify dependencies in your codebase:&lt;/li&gt;
&lt;li&gt;Code Nexus Point Insight&lt;/li&gt;
&lt;li&gt;Top Usage Insight&lt;/li&gt;
&lt;li&gt;Discovering Dead Code&lt;/li&gt;
&lt;li&gt;Duration Breakdown Insight&lt;/li&gt;
&lt;li&gt;Conclusion: Identifying Dependencies in Your Codebase During Microservices Migration&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Migration from a monolithic architecture to microservices can be crucial for scalability, flexibility, and development velocity. However, this transformation has challenges, particularly when trying to identify and manage dependencies within the codebase. Many teams optimistically embark on an application-wide modernization epic, thinking of making short work of refactoring their codebase to be more modular. Unfortunately, many of these initiatives quickly lose the initial momentum, as it becomes apparent that untangling the Gordian monolith knot is proving to be an uphill struggle.&lt;/p&gt;</description></item><item><title>Exploring New Features in JDK 23: Simplifying Java with Primitive Type Patterns with JEP 455</title><link>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-simplifying-java-with-primitive-type-patterns-with-jep-455/</link><pubDate>Thu, 06 Jun 2024 10:37:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-simplifying-java-with-primitive-type-patterns-with-jep-455/</guid><description>&lt;p&gt;&lt;strong&gt;Java continues to evolve, introducing features that streamline coding practices and improve readability. &lt;a href="https://openjdk.org/jeps/455" target="_blank" rel="noopener noreferrer"&gt;JEP 455&lt;/a&gt;
 is one such proposal that enhances the switch statement, making it more versatile and expressive.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article delves into how JEP 455 can be utilized to handle complex decision-making scenarios more efficiently. We&amp;rsquo;ll examine a practical example to illustrate the benefits of this feature.&lt;/p&gt;
&lt;h3 id="h3-0-what-s-new-in-jep-455"&gt;&lt;strong&gt;What&amp;rsquo;s New in JEP 455?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;This JEP introduces the following key features:&lt;/p&gt;</description></item><item><title>Debugging Kubernetes Part 1: An Introduction</title><link>https://foojayio.github.io/website/today/debugging-kubernetes-part-1-an-introduction/</link><pubDate>Wed, 05 Jun 2024 06:12:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-kubernetes-part-1-an-introduction/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#introduction-to-kubernetes-and-distributed-systems"&gt;Introduction to Kubernetes and Distributed Systems&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-evolution-of-deployment-technologies"&gt;The Evolution of Deployment Technologies&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#enter-virtualization"&gt;Enter Virtualization&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#rise-of-containers"&gt;Rise of Containers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#rise-of-orchestration"&gt;Rise of Orchestration&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#enter-kubernetes"&gt;Enter Kubernetes&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#why-kubernetes-stands-out"&gt;Why Kubernetes Stands Out&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#kubernetes-for-developers"&gt;Kubernetes For Developers&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#kubernetes-basics-in-practice"&gt;Kubernetes Basics In Practice&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;While debugging in an IDE or using simple command line tools is relatively straightforward, the real challenge lies in production debugging. Modern production environments have enabled sophisticated self-healing deployments, yet they have also made troubleshooting more complex. Kubernetes (aka k8s) is probably the most well known orchestration production environment. To effectively teach debugging in Kubernetes, it&amp;rsquo;s essential to first introduce its fundamental principles.&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>Java: Functional Programming f(x) – Part2</title><link>https://foojayio.github.io/website/today/java-functional-programming-fx-part2/</link><pubDate>Mon, 03 Jun 2024 17:05:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-functional-programming-fx-part2/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-functional-programming/"&gt;the preceding article&lt;/a&gt;
, we explored the significance of &lt;strong&gt;Functional Programming, Lambda Calculus&lt;/strong&gt;, and other related concepts.&lt;/p&gt;
&lt;p&gt;In this article, we delve deeper into the essential aspects of Functional Programming, such as&amp;hellip;​&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Lambda Expressions
2. Method References
3. Functional Interfaces&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And we will discuss about the relationship between each of the features.&lt;/p&gt;
&lt;p&gt;JSR 335 has greatly facilitated programming in a multicore environment by introducing Lambda Expressions/closures/anonymous method, and related features.&lt;/p&gt;</description></item><item><title>Foojay Podcast #51: Persistence, Evolving your Career, Jakarta EE, GlassFish, Messaging via Telegram</title><link>https://foojayio.github.io/website/today/foojay-podcast-51/</link><pubDate>Mon, 03 Jun 2024 08:03:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-51/</guid><description>&lt;p&gt;This is part 3 of the JCON interviews.&lt;/p&gt;
&lt;p&gt;Frank meets Otavio Santana, who recently wrote the book &amp;ldquo;Mastering the Java Virtual Machine.&amp;rdquo; At JCON, he talked about the persistence layer and how you can evolve your career.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll also learn more about Jakarta EE, GlassFish, and a PET project with messaging via Telegram.&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/7-lhQld4KVc?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>JavaFX Links of May 2024</title><link>https://foojayio.github.io/website/today/javafx-links-of-may-2024/</link><pubDate>Sat, 01 Jun 2024 08:12:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-may-2024/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of May 2024, published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during this month.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When &lt;a href="https://mastodon.social/@johanvos/112477892809739391" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; shares his notes&lt;/a&gt;
, you may want to keep on eye on them&amp;hellip;: &amp;ldquo;While working on Java on Mobile, I &lt;a href="https://download2.gluonhq.com/mobile/" target="_blank" rel="noopener noreferrer"&gt;keep my notes here&lt;/a&gt;
 (best viewed with lynx). This is not user/developer documentation, but people interested/familiar with OpenJDK building might keep an eye to see how far we are.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/afoo_me/status/1795340765469855915" target="_blank" rel="noopener noreferrer"&gt;Nice visualization by &lt;strong&gt;afoo&lt;/strong&gt;&lt;/a&gt;
 to illustrate the flow of event phases (capturing with EventFilter versus bubbling with EventHandler) in JavaFX.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/logorrr/status/1785790043451249020" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt; announced a new release of LogoRRR&lt;/a&gt;
: &amp;ldquo;This update is a maintenance release with visual improvements and bugfixes. Internally, substiantial work was done to improve test coverage (End2End tests and performance tests).&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;And a &lt;a href="https://twitter.com/logorrr/status/1789428827828974030" target="_blank" rel="noopener noreferrer"&gt;video shows a new viewport visualisation&lt;/a&gt;
 of the current visible text in the box view on the left.&lt;/li&gt;
&lt;li&gt;And did you know &lt;a href="https://twitter.com/logorrr/status/1788685166547800300" target="_blank" rel="noopener noreferrer"&gt;you can play Snake with your logs&lt;/a&gt;
?!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; is on a roll again with a Twitter Thread with a lot of amazing 3D data visualizations.
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;&lt;a href="https://twitter.com/SeanMiPhillips/status/1789361307361083527" target="_blank" rel="noopener noreferrer"&gt;Hi res Lunar elevation scans combined with hi res color spectrum imagery&lt;/a&gt;
 (100m accuracy). Working on an easy to use Line Of Sight viz for Lunar surface assets. Mixing JavaFX and the NASA WorldWind Java SDK is a very powerful combination!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Borrowing from Worldwind&amp;rsquo;s Line of Sight example I integrated a &lt;a href="https://twitter.com/SeanMiPhillips/status/1790000502555451591" target="_blank" rel="noopener noreferrer"&gt;JavaFX point &amp;amp; click tool with hi res lunar elevation data/terrain&lt;/a&gt;
. Upgraded the computations to run using #Java parallel streams. 100 LOS checks computed/rendered &amp;lt; 1 second. Developed in a weekend.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;a href="https://twitter.com/SeanMiPhillips/status/1790084437029327307" target="_blank" rel="noopener noreferrer"&gt;Extended the lunar LOS tool by several orders of magnitude to check for performance&lt;/a&gt;
. 10k LOS checks, 30k 3D artifacts added to the scene: 244 ms (including the rendering)&amp;hellip; on a decent laptop. But Java is slow and JavaFX sucks and all those other foolish things you hear&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/bj-delacruz_javafx-fiji-buildinpublic-activity-7197088263570944000-gQfh?utm_source=share&amp;amp;utm_medium=member_desktop" target="_blank" rel="noopener noreferrer"&gt;Screenshot of an application by &lt;strong&gt;BJ Dela Cruz&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;With my JavaFX app Flight Display, you can dream about landing in the beautiful island nation of Fiji. My dream of creating my own flight display board has come true!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7196818552274767872/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Aman Singh&lt;/strong&gt; is excited to share his latest project&lt;/a&gt;
: &amp;ldquo;An Internet Download Manager built using JavaFX! With features like dynamic URL input, file management, and multi-threaded downloading, it&amp;rsquo;s designed to streamline your downloading experience. &lt;a href="https://github.com/Aman298871/Internet-Download-Manager" target="_blank" rel="noopener noreferrer"&gt;Check out the code&lt;/a&gt;
 and let me know your thoughts!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/P_Duke/status/1791442291070058732" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt;&lt;/a&gt;
 shared a &lt;a href="https://youtu.be/P06dmx-SpkM?si=l6QkoY2fTQR-9sk7" target="_blank" rel="noopener noreferrer"&gt;video of Hero version 4 in action&lt;/a&gt;
 which uses JMetro, FXThemes, and FXSkins.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/crschnick/status/1791903229397103051" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; shared&lt;/a&gt;
: &amp;ldquo;XPipe 9 comes with an integrated VNC client, written in JavaFX! Get it from &lt;a href="https://github.com/xpipe-io/xpipe" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/emad-hanif-00b4aa227_javafx-activity-7201626665133785090-eHOS/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Emad Hanif&lt;/strong&gt; shared an update of this Barcodify application&lt;/a&gt;
: &amp;ldquo;It&amp;rsquo;s been a great month working with JavaFX. By the way, the application is now faster and more memory efficient. Templates are generated in batches, columns are processed concurrently, and everything is merged into a single PDF &amp;mdash; all while maintaining perfect alignment. Soon, will be sharing short video to demonstrate the magic!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/Heshantk" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Heshan Kariyawasam&lt;/strong&gt;&lt;/a&gt;
 is &lt;a href="https://www.linkedin.com/posts/heshanthenura_java-javafx-library-activity-7200502273158885376-uak0/" target="_blank" rel="noopener noreferrer"&gt;working on Libro&lt;/a&gt;
: Open Source Library Management App. The sources are on &lt;a href="https://github.com/heshanthenura/Libro" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/DaXiong008/status/1795857529894781252" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Xiong Chun&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;Since I started using EventBus in JavaFX, my UI element and content changes are entirely event-driven/data-driven, making development more streamlined. I&amp;rsquo;ve recently completed my Datacollie&amp;rsquo;s interaction effect with selected tree node and the data displayed in the right-pane.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/WigglyGull/status/1791292994064396793" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Auron&lt;/strong&gt; started work on a new Pixelart Game project&lt;/a&gt;
: &amp;ldquo;There&amp;rsquo;s lots of placeholder stuff right now but the main logic this there.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1786017713283817828" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; announced FXThemes Version 1.5&lt;/a&gt;
 which introduces macOS support. Thanks to contributions by &lt;a href="https://twitter.com/carldea" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt;&lt;/a&gt;
. Read more in this &lt;a href="https://pixelduke.com/2024/05/02/fxthemes-version-1-5-released/" target="_blank" rel="noopener noreferrer"&gt;blog post&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1788958790416556511" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; announced support for search &amp;ldquo;history&amp;rdquo; in the SearchTextField control of GemsFX&lt;/a&gt;
. Available with release 2.17.0, thanks to &lt;a href="https://twitter.com/LeeWyatt_7788" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Li Wang Yang&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/carldea/status/1747046776765284445" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; shared a video&lt;/a&gt;
, showing &amp;ldquo;A JavaFX background blur effect library for the MacOS is now able to support Light and Dark Mode!&amp;rdquo;. You can find it on &lt;a href="https://github.com/carldea/windowblur" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/carldea/status/1796344316618817798" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; also published a lightweight JavaFX MVVM library &amp;ldquo;Cognitive&amp;rdquo;&lt;/a&gt;
 on GitHub and Maven Central, with &lt;a href="https://github.com/carldea/cognitive/wiki" target="_blank" rel="noopener noreferrer"&gt;a lot of info and examples here&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcast-video-books"&gt;Podcast, Video, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; &lt;a href="https://webtechie.be/post/2024-05-06-book-review-javafx-kotlin/" target="_blank" rel="noopener noreferrer"&gt;wrote a review of the book &amp;ldquo;Frontend Development with JavaFX and Kotlin&amp;rdquo;&lt;/a&gt;
, written by &lt;strong&gt;Peter Späth&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A complete set of video tutorials by &lt;a href="https://twitter.com/timbuchalka" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tim Buchalka&lt;/strong&gt;&lt;/a&gt;
, all combined into a single YouTube video of more than five hours, yes indeed, 5 hours: &lt;a href="https://www.youtube.com/watch?v=YX9ad_9jtXQ" target="_blank" rel="noopener noreferrer"&gt;Java Programming Masterclass Updated To Java 17: JavaFX part 1&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/tobiasbriones_computerscience-javafx-art-activity-7190393026538536960-CZMY" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tobias Briones&lt;/strong&gt; entered the Matrix&amp;hellip;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dashaun/status/1788735171514028142" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;DaShaun Carter&lt;/strong&gt; wants to create a JavaFX Chat Buddy&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/DaXiong008/status/1786781960318439803" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Xiong Chun&lt;/strong&gt; shared a screenshot&lt;/a&gt;
: &amp;ldquo;JavaFX TreeView is very powerful. Completely meets my functional requirements. This technology selection of native desktop framework is still very successful so far.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;On the Twitter profile of &lt;a href="https://x.com/JodiChildrej" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jodi Childress&lt;/strong&gt;&lt;/a&gt;
 a long list of logo screenshots are posted which all seem to be generated with JavaFX during a computer programming class.&lt;/li&gt;
&lt;li&gt;Some JavaFX love on X &amp;hellip;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/DaXiong008/status/1792070496152076630" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Xiong Chun&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Yep, JavaFX may take a good balance between cross-platform features and performance. In fact, I used Electron+Vue 3 to dev Datacollie. However, I found this architecture pattern, interactive experience and the performance are all not good enough for me. So, I switched to JavaFX.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/EvanderTor57903/status/1792001252349346050" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Evander Torres&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;I like JavaFX and Gluon not only because it has very proven and tested UI components but they are updated with the latest Java versions so you can take 100% advantage from Java.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/caifyoca/status/1791530281058357650" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Junior ADI&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Done! JavaFX is seriously interesting. Give a try.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/luciascarlet/status/1793317192890507599" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;lucia scarlet&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;If you&amp;rsquo;re gonna use Java for the love of all that is holy use JavaFX instead of Swing because Swing apps are Distinctly Unpleasant to use (far, far more so than any Electron app). I would also look into Compose Multiplatform on Kotlin though.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/hansolo_/status/1794086894008930686" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;After more coding I think now it&amp;rsquo;s time for the weekend&amp;hellip; and again I realized that JavaFX is so productive&amp;hellip; amazing.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/maytanthegeek/status/1794393624995885123" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tanmay&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Not gonna lie. I still love JavaFX. Android layout learned a lot from it. JavaFX is so fun and simple. I would really like to see it take a leading spot some day for GUI programming.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;And some Kotlin+JavaFX love &amp;hellip;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/DystopianSnow/status/1793140611773554938" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Daniel Zimmermann&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;To your dismay I have to tell you I write all my desktop applications using Kotlin and JavaFX&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; has created a new repository for utility classes related to using the &lt;a href="https://square.github.io/retrofit/" target="_blank" rel="noopener noreferrer"&gt;Retrofit framework&lt;/a&gt;
 (a type-safe HTTP client for Android and Java) in a JavaFX applications: &amp;ldquo;Obviously it is called &lt;a href="https://github.com/dlsc-software-consulting-gmbh/RetrofitFX" target="_blank" rel="noopener noreferrer"&gt;RetrofitFX (on GitHub)&lt;/a&gt;
 and currently contains a total of two classes 🙂 Most importantly a class called ServiceInvocation which runs async server calls via Retrofit and then returns the result on †the JavaFX thread via various handlers that can be attached to the ServiceInvocation class. Hope some of you will find it useful &amp;hellip; although pretty specific.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New libraries
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/libraries/fxform2" target="_blank" rel="noopener noreferrer"&gt;FxForm2&lt;/a&gt;
 to easily creating forms.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jfx-central.com/libraries/chartfx" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;ChartFX&amp;rdquo; for creating scientific charts&lt;/a&gt;
, thanks to &lt;a href="https://www.jfx-central.com/people/r.steinhagen" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Ralph J. Steinhagen&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1791084367718027559" target="_blank" rel="noopener noreferrer"&gt;Message by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;JavaFX library developers: if you haven&amp;rsquo;t done so already, please add your library to JFX Central so that everybody can find it very easily. You can add it yourself &lt;a href="https://github.com/dlsc-software-consulting-gmbh/jfxcentral-data" target="_blank" rel="noopener noreferrer"&gt;in this GitHub repository&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;The Links Of The Week are now also &lt;a href="https://www.jfx-central.com/lotw/rss.xml" target="_blank" rel="noopener noreferrer"&gt;available via RSS&lt;/a&gt;
 thanks to contributions by &lt;a href="https://x.com/FrankDelporte" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt;&lt;/a&gt;
 and &lt;a href="https://x.com/FlorianKirmaier" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Florian Kirmaier&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Who instruments the instrumenters?</title><link>https://foojayio.github.io/website/today/who-instruments-the-instrumenters/</link><pubDate>Thu, 30 May 2024 16:25:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/who-instruments-the-instrumenters/</guid><description>&lt;p&gt;Have you ever wondered how libraries like &lt;a href="https://spring.io/" target="_blank" rel="noopener noreferrer"&gt;Spring&lt;/a&gt;
 and &lt;a href="https://site.mockito.org/" target="_blank" rel="noopener noreferrer"&gt;Mockito&lt;/a&gt;
 modify your code at run-time to implement all their advanced features?&lt;/p&gt;
&lt;p&gt;Wouldn&amp;rsquo;t it be cool to get a peek behind the curtains?&lt;/p&gt;
&lt;p&gt;This is the premise of my &lt;a href="https://github.com/parttimenerd/meta-agent" target="_blank" rel="noopener noreferrer"&gt;meta-agent&lt;/a&gt;
, a Java agent to instrument instrumenters, to get these insights and what this blog post is about.&lt;/p&gt;
&lt;p&gt;This article is a collaboration with &lt;a href="https://www.linkedin.com/in/mika%C3%ABl-francoeur/" target="_blank" rel="noopener noreferrer"&gt;Mikaël Francoeur&lt;/a&gt;
, who had the idea for the meta-agent and wrote most of this post. So it&amp;rsquo;s my first ever post-collaboration. But I start with a short introduction to the agent itself before Mikaël takes over with real-world examples.&lt;/p&gt;</description></item><item><title>My opinion on the Tauri framework</title><link>https://foojayio.github.io/website/today/my-opinion-on-the-tauri-framework/</link><pubDate>Thu, 30 May 2024 16:05:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/my-opinion-on-the-tauri-framework/</guid><description>&lt;p&gt;&lt;strong&gt;I&amp;rsquo;ve always liked , both desktop-based and browser-based before you needed five years of training on the latter. That&amp;rsquo;s the reason I loved, and still love &lt;a href="https://vaadin.com/" target="_blank" rel="noopener noreferrer"&gt;Vaadin&lt;/a&gt;
: you can develop web UIs without writing a single line of HTML, JavaScript, and CSS. I&amp;rsquo;m still interested in the subject; a couple of years ago, I analyzed the &lt;a href="https://blog.frankel.ch/focus/state-jvm-desktop-frameworks/" target="_blank" rel="noopener noreferrer"&gt;state of JVM desktop frameworks&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I also like the Rust programming language a lot.&lt;/p&gt;</description></item><item><title>Five Java Developer Must-Haves For Ultra-Fast Startup Solutions</title><link>https://foojayio.github.io/website/today/five-java-developer-must-haves/</link><pubDate>Wed, 29 May 2024 20:15:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/five-java-developer-must-haves/</guid><description>&lt;p&gt;&lt;strong&gt;Faster Java startup must not compromise developer experience, throughput performance, or security. We discuss how we achieved this with Liberty InstantOn.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;By Vijay Sundaresan, Thomas Watson, Laura Cowen&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Many solutions that promise ultra-fast startup times for serverless Java apps force you to compromise on developer experience, throughput performance, or security. We&amp;rsquo;ll show you how to get ultra-fast startup of your Java apps without these compromises.&lt;/p&gt;
&lt;p&gt;Say, for example, you&amp;rsquo;re writing a Java web service that provides a catalog of items that your business sells. At quiet times, your application needs to stop all unneeded instances of the catalog service so that your business is not paying unnecessary cloud bills; at busy times, your application needs to rapidly spin up more instances so that your customers get instantaneous response times on your website. This is &amp;ldquo;scale-to-zero,&amp;rdquo; and your application needs to do it fast.&lt;/p&gt;</description></item><item><title>Indexing all of Wikipedia, on a laptop</title><link>https://foojayio.github.io/website/today/indexing-all-of-wikipedia-on-a-laptop/</link><pubDate>Wed, 29 May 2024 15:54:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/indexing-all-of-wikipedia-on-a-laptop/</guid><description>&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;In November, &lt;a href="https://huggingface.co/datasets/Cohere/wikipedia-2023-11-embed-multilingual-v3" target="_blank" rel="noopener noreferrer"&gt;Cohere released a dataset containing all of Wikipedia&lt;/a&gt;
, chunked and embedded to vectors with &lt;a href="https://cohere.com/blog/introducing-embed-v3" target="_blank" rel="noopener noreferrer"&gt;their multilingual-v3 model&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Computing this many embeddings yourself would cost in the neighborhood of $5000, so the public release of this dataset makes creating &lt;a href="https://www.datastax.com/guides/what-is-vector-search" target="_blank" rel="noopener noreferrer"&gt;a semantic, vector-based index&lt;/a&gt;
 of Wikipedia practical for an individual for the first time.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what we&amp;rsquo;re building:
&lt;img src="https://lh7-us.googleusercontent.com/ydeHYk97v6Bza1GF0wbbHUEzxgCAJLfwbRcVnWvUP6QDPKKY5YQH00Dvi2n6VgkioW_PGqwckcCnQu9cJ2nOz2XSuL_27HNPAAbZdv2vXPOy_vUJ_Vcg-ii83E4jaqMycskzmzt8wBP1XsOYh5b7Cv4" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;You can try searching the completed index &lt;a href="https://jvectordemo.com:8443/" target="_blank" rel="noopener noreferrer"&gt;on a public demo instance here&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Top 7 Java Microservices Frameworks</title><link>https://foojayio.github.io/website/today/top-7-java-microservices-frameworks/</link><pubDate>Wed, 29 May 2024 08:58:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/top-7-java-microservices-frameworks/</guid><description>&lt;h3 id="h3-0-history-of-microservices"&gt;&lt;strong&gt;History of Microservices&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The concept of microservices has its roots in Service Oriented Architecture (SOA), which was prominent in the early 2000s. However, the term &amp;ldquo;microservices&amp;rdquo; itself didn&amp;rsquo;t appear until around 2012, when it started being discussed at software architecture events and on software architecture blogs.&lt;/p&gt;
&lt;p&gt;Early pioneers of microservices include companies like Netflix, Amazon, and eBay. For instance, in 2009, Netflix started to transition from a monolithic architecture to a microservices architecture to better handle their rapidly scaling customer base. Other major companies followed, realizing that the monolithic architecture model had limitations when dealing with large-scale, complex systems.&lt;/p&gt;</description></item><item><title>The TornadoVM Programming Model Explained</title><link>https://foojayio.github.io/website/today/the-tornadovm-programming-model-explained/</link><pubDate>Tue, 28 May 2024 11:01:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-tornadovm-programming-model-explained/</guid><description>&lt;h2 id="h2-0-key-takeaways"&gt;Key Takeaways&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://raw.githubusercontent.com/jjfumero/jjfumero.github.io/master/files/blog/24-02-prog-model/back.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/beehive-lab/TornadoVM/" target="_blank" rel="noopener noreferrer"&gt;TornadoVM&lt;/a&gt;
 offers an API for parallel programming on modern hardware that tackles data parallel, task parallel and pipeline parallel applications.&lt;/li&gt;
&lt;li&gt;TornadoVM offers different abstractions to developers to be able to express parallel applications in Java, identify the methods to offload, and dispatch the application on the corresponding accelerators.&lt;/li&gt;
&lt;li&gt;Task-Graphs and Execution Plans are the main building blocks of TornadoVM applications, allowing developers to compose complex graphs of computations and interact with the TornadoVM runtime to enable/disable profiling, enable debugging, or enable dynamic reconfiguration to select the best possible accelerators for the compute graphs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this blog post, I will explain how developers can start programming with TornadoVM and interact with the TornadoVM runtime.&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>Foojay Podcast #50: JCON Report, Part 2 - Maven, Software Security, Code Quality</title><link>https://foojayio.github.io/website/today/foojay-podcast-50/</link><pubDate>Mon, 27 May 2024 08:07:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-50/</guid><description>&lt;p&gt;This is part 2 of the interviews we recorded at the JCON conference earlier this month in Germany. In this episode, you get two main topics: &lt;strong&gt;Maven and Code Quality&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In the first part, you&amp;rsquo;ll hear Karl Heinz Marbaise and Steve Poole discuss the Maven project, the repository, Sonaytype, and the security impact of dependencies.&lt;/p&gt;
&lt;p&gt;But next to security, we developers are also responsible for creating readable and maintainable code. Miro Wengner, Marit van Dijk, and Hinse ter Schuur dive into this topic, in the second part!&lt;/p&gt;</description></item><item><title>Evolutions in the Pi4J library by Tom Aarts and Robert von Burg</title><link>https://foojayio.github.io/website/today/evolutions-in-the-pi4j-library-by-tom-aarts-and-robert-von-burg/</link><pubDate>Fri, 24 May 2024 12:16:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/evolutions-in-the-pi4j-library-by-tom-aarts-and-robert-von-burg/</guid><description>&lt;p&gt;Multiple improvements have been implemented in the new release, V2.6.0 (2024-04-29) of Pi4J, a friendly object-oriented I/O API and implementation libraries for Java Programmers to access the full I/O capabilities of the Raspberry Pi platform. This blog post will give you a quick overview and an interview with Tom Aarts and Robert von Burg, two of the main contributors.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#i2c-improvements"&gt;Ongoing I2C Improvements&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#hardware-pwm"&gt;PWM Hardware Support on Raspberry Pi 5&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#board-info"&gt;New Class to Get Board Info&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#interview-robert"&gt;Interview with Robert von Burg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#interview-tom"&gt;Interview with Tom Aarts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#conclusion"&gt;Conclusion&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="i2c-improvements"&gt;Ongoing I2C Improvements&lt;/h2&gt;
&lt;p&gt;Robert von Burg worked on improvements to the I2C implementation in Pi4J. The changes are in &lt;a href="https://github.com/Pi4J/pi4j-v2/pull/351/files" target="_blank" rel="noopener noreferrer"&gt;pull request #351&lt;/a&gt;
 and allow atomically executing multiple I2C calls in a thread safely, plus other improvements. See &lt;a href="https://pi4j.com/blog/2024/20240418_i2c_improvements/" target="_blank" rel="noopener noreferrer"&gt;this blog post for more details&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Improve DevOps Productivity with Azul Intelligence Cloud for Any JVM</title><link>https://foojayio.github.io/website/today/improve-devops-productivity-with-azul-intelligence-cloud-for-any-jvm/</link><pubDate>Fri, 24 May 2024 09:46:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/improve-devops-productivity-with-azul-intelligence-cloud-for-any-jvm/</guid><description>&lt;p&gt;For decades DevOps teams have been under pressure to do four things: make software faster, make it cheaper, keep it secure, and accelerate time to market.&lt;/p&gt;
&lt;p&gt;But with fewer engineering resources, enterprises that use Java must find a way to speed up application innovation and fortify application security across their entire Java estate more efficiently.&lt;/p&gt;
&lt;p&gt;The rewards (and costs of not doing so) are high &amp;ndash; companies in the top quartile of &lt;a href="https://www.mckinsey.com/industries/technology-media-and-telecommunications/our-insights/developer-velocity-how-software-excellence-fuels-business-performance" target="_blank" rel="noopener noreferrer"&gt;McKinsey&amp;rsquo;s Developer Velocity Index (DVI)&lt;/a&gt;
 perform significantly higher than bottom-quartile companies:&lt;/p&gt;</description></item><item><title>Learn how to debug unresponsive Java/JVM applications, then reload the fix on the fly, using a hands-on example</title><link>https://foojayio.github.io/website/today/debug-unresponsive-apps/</link><pubDate>Thu, 23 May 2024 07:14:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/debug-unresponsive-apps/</guid><description>&lt;p&gt;Read in other languages: &lt;a href="https://flounder.dev/zh/posts/debug-unresponsive-apps/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
 &lt;a href="https://flounder.dev/es/posts/debug-unresponsive-apps/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/debug-unresponsive-apps/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There are a lot of debugger tutorials out there that teach you how to set line breakpoints, log values, or evaluate expressions. While this knowledge alone gives you a lot of tools for debugging your application, real-world scenarios may be somewhat trickier and require a more advanced approach.&lt;/strong&gt;
&lt;img src="https://flounder.dev/img/debug-unresponsive-apps-banner.png" alt="Debug Unresponsive Apps – post banner" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In this article, we will learn how to locate code that causes a UI freeze without much prior knowledge of the project and fix faulty code on the fly.&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>JManc Unconference 2024</title><link>https://foojayio.github.io/website/today/jmanc-unconference-2024/</link><pubDate>Tue, 21 May 2024 14:08:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/jmanc-unconference-2024/</guid><description>&lt;p&gt;&lt;a href="https://foojayio.github.io/website/www.jmanc.org" title="JManc Unconferece"&gt;&lt;img src="https://jmanc.org/assets/images/jmanc-logo.png" alt="JManc Unconferece" title="JManc Unconferece" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Manchester Java Community are delighted to announce the return of JManc Unconference on Friday 28th June 2024!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been a few years since we last hosted JManc, and a lot has changed in the world, but one thing we&amp;rsquo;ve learned in the Manchester Java Community is that in-person events are what we love the most. JManc provides another opportunity for us to get together with like-minded people from the Java community.&lt;/p&gt;</description></item><item><title>Foojay Podcast #49: JCON Report, Part 1 - JUGs, Communities, Generative AI, and more!</title><link>https://foojayio.github.io/website/today/foojay-podcast-49/</link><pubDate>Tue, 21 May 2024 06:05:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-49/</guid><description>&lt;p&gt;On Tuesday, May 14th, the Foojay Podcast went live at the JCON conference in Cologne, Germany, to talk with speakers and visitors about all things Java.&lt;/p&gt;
&lt;p&gt;We had so many amazing talks that we will combine them into several podcast episodes in the next weeks.&lt;/p&gt;
&lt;p&gt;This is part 1 about JUGs, Communities, Open Source, Generative AI, LangChain4j, Machine Learning!&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/-wVCYj8oQUY?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Calling Microservices in Java: Part 1</title><link>https://foojayio.github.io/website/today/calling-microservices-in-java/</link><pubDate>Fri, 17 May 2024 19:41:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/calling-microservices-in-java/</guid><description>&lt;p&gt;&lt;strong&gt;When building applications that need to call other parts of the system (&lt;a href="https://mezocode.com/microservices-soa-introduction-part1/" title="microservices" target="_blank" rel="noopener noreferrer"&gt;microservices&lt;/a&gt;
), Java programmers have access to a variety of tools and techniques that they can use for their development tasks.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article guides you through different ways of calling Microservices in Java, from basic methods to more advanced ones, and will share tips on best practices and common mistakes.&lt;/p&gt;
&lt;h3 id="h3-0-1-basic-http-requests-with-httpurlconnection"&gt;1. Basic HTTP Requests with HttpURLConnection&lt;/h3&gt;
&lt;p&gt;The simplest way to calling a microservice in Java is using the &lt;code&gt;HttpURLConnection&lt;/code&gt; class. This lets your application send HTTP requests and receive responses directly.&lt;/p&gt;</description></item><item><title>A Modern Approach to Middleware with Chronicle</title><link>https://foojayio.github.io/website/today/a-modern-approach-to-middleware-with-chronicle/</link><pubDate>Fri, 17 May 2024 09:46:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-modern-approach-to-middleware-with-chronicle/</guid><description>&lt;p&gt;&lt;strong&gt;Financial institutions today face significant challenges in updating their legacy middleware systems which are crucial for supporting millions of lines of code serving critical business functions. Prior to multicast support in modern switching hardware that became prevalent in the early 2000s, message middleware was largely done via proprietary protocols that converged onto TCP/IP. IBM&amp;rsquo;s Websphere MQ was a leader in this space.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Point to point middleware based on TCP/IP requires extra processing power and network bandwidth proportional to the number of consumers, and unreliable or slow consumers can negatively impact performance of the publisher. To combat these challenges, software vendors utilized IP multicast to create messaging platforms that supported topic based publish/subscribe networks.&lt;/p&gt;</description></item><item><title>How to Submit a Technical Presentation</title><link>https://foojayio.github.io/website/today/nodes-2024-how-to-submit-a-technical-presentation/</link><pubDate>Thu, 16 May 2024 09:06:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/nodes-2024-how-to-submit-a-technical-presentation/</guid><description>&lt;p&gt;&lt;strong&gt;There is no shortage of technical events such as conferences, meetups, trainings, hackathons, and so on. These events are a great way to learn new things, connect with people, and share knowledge with others. One of the most valuable and exciting ways to share knowledge is by giving a technical presentation.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Today, we will look at how to submit a technical presentation for an event and get some personal recommendations from me, as well. Though we will specifically gear the information for the NODES 2024 call for proposals, nearly everything discussed can be applied to other technical events and speaking engagements.&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>Software Testing as a Debugging Tool</title><link>https://foojayio.github.io/website/today/software-testing-as-a-debugging-tool/</link><pubDate>Wed, 15 May 2024 07:43:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/software-testing-as-a-debugging-tool/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-intersection-of-debugging-and-testing"&gt;The Intersection of Debugging and Testing&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#unit-tests"&gt;Unit Tests&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#integration-tests"&gt;Integration Tests&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#coverage"&gt;Coverage&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-debugfix-cycle"&gt;The Debug-Fix Cycle&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#composing-tests-with-debuggers"&gt;Composing Tests with Debuggers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#testdriven-development"&gt;Test-Driven Development&lt;/a&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;Debugging is not just about identifying errors&amp;mdash;it&amp;rsquo;s about instituting a reliable process for ensuring software health and longevity. In this post we discuss the role of software testing in debugging, including foundational concepts and how they converge to improve software quality.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/yap509UZz6M?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;As a side note, if you like the content of this and the other posts in this series check out my &lt;a href="https://www.amazon.com/dp/1484290410/" target="_blank" rel="noopener noreferrer"&gt;Debugging book&lt;/a&gt;
 that covers &lt;strong&gt;t&lt;/strong&gt; his subject. If you have friends that are learning to code I&amp;rsquo;d appreciate a reference to my &lt;a href="https://www.amazon.com/Java-Basics-Practical-Introduction-Full-Stack-ebook/dp/B0CCPGZ8W1/" target="_blank" rel="noopener noreferrer"&gt;Java Basics book.&lt;/a&gt;
 If you want to get back to Java after a while check out my &lt;a href="https://www.amazon.com/Java-21-Explore-cutting-edge-features/dp/9355513925/" target="_blank" rel="noopener noreferrer"&gt;Java 8 to 21 book&lt;/a&gt;
&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Oracle Alternatives Survey &amp; Report</title><link>https://foojayio.github.io/website/today/oracle-alternatives-survey-report/</link><pubDate>Mon, 13 May 2024 19:27:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/oracle-alternatives-survey-report/</guid><description>&lt;p&gt;&lt;a href="https://azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
 is planning to issue an Oracle Java &amp;ldquo;alternatives&amp;rdquo; Report in late July, and would like your help to complete the survey.&lt;/p&gt;
&lt;p&gt;The focus of this report is to explore the following themes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;highlight the frictions created by Oracle with their pricing policies and tactics&lt;/li&gt;
&lt;li&gt;show whether customers are in fact moving off of Oracle Java to OpenJDK alternatives&lt;/li&gt;
&lt;li&gt;prove the extent to which customers are willing to pay for commercial support and application migration expertise&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Below is the link to the survey.&lt;/p&gt;</description></item><item><title>Hello eBPF: XDP-based Packet Filter (9)</title><link>https://foojayio.github.io/website/today/hello-ebpf-xdp-based-packet-filter-9/</link><pubDate>Mon, 13 May 2024 07:13:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/hello-ebpf-xdp-based-packet-filter-9/</guid><description>&lt;p&gt;&lt;strong&gt;Welcome back to my &lt;a href="https://mostlynerdless.de/blog/tag/hello-ebpf/" target="_blank" rel="noopener noreferrer"&gt;series on ebpf&lt;/a&gt;
. In the last blog post, we learned how &lt;a href="https://mostlynerdless.de/blog/2024/04/09/hello-ebpf-generating-c-code-8/" target="_blank" rel="noopener noreferrer"&gt;annotation processors can&lt;/a&gt;
generate C code, simplifying writing eBPF applications.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This week, we&amp;rsquo;ll use this work together with new support for XDP to create a simple package blocker for eBPF (&lt;a href="https://github.com/parttimenerd/hello-ebpf/blob/main/bpf/src/main/java/me/bechberger/ebpf/samples/XDPPacketFilter.java" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
):&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;./run_bpf.sh XDPPacketFilter twitter.com&lt;/pre&gt;
&lt;p&gt;This blocks all incoming IPv4 packages from &lt;code&gt;twitter.com&lt;/code&gt;. We see how it works in this blog post. First, we start with some background on networking and explain what XDP is.&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>Building a Simple Home Assistant using Langchain4j and Raspberry Pi</title><link>https://foojayio.github.io/website/today/building-simple-home-assistant-langchain4j-raspberry-pi/</link><pubDate>Sun, 12 May 2024 05:31:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-simple-home-assistant-langchain4j-raspberry-pi/</guid><description>&lt;p&gt;&lt;strong&gt;Many believe that the future of IoT is AI. Building a Smart Home Assistant is less complex today than ever before. AI has become so accessible that you only need an internet connection and a computer to connect to an API.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While training specialized deep learning models or using commercial APIs to harness machine learning for specific deterministic use cases is still an option, it is now more common and accessible to use LLMs. Today, you can effortlessly utilize numerous LLMs from various providers through an LLM orchestration framework like &lt;a href="https://github.com/langchain4j/langchain4j" target="_blank" rel="noopener noreferrer"&gt;Langchain4j&lt;/a&gt;
. This framework not only allows the use of LLMs but also provides components that simplify the creation of AI applications such as chatbots and question-answering systems. With these tools, anyone can assemble a Generative AI-powered app in minutes.&lt;/p&gt;</description></item><item><title>SQL Query Optimization: How to Identify and Optimize Slow SQL Queries</title><link>https://foojayio.github.io/website/today/sql-query-optimization-how-to-identify-and-optimize-slow-sql-queries/</link><pubDate>Thu, 09 May 2024 21:44:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/sql-query-optimization-how-to-identify-and-optimize-slow-sql-queries/</guid><description>&lt;p&gt;&lt;strong&gt;In this article, we want to share our experience with fellow developers and offer insights using real-life examples on how to identify and optimize slow SQL queries, especially when working with relational database management systems like PostgreSQL, MySQL, MSSQL, Oracle, etc.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you are a developer who doesn&amp;rsquo;t use database ORMs like Hibernate that much, you are no stranger to the concept of SQL query optimization. As developers, we know that a slow SQL query can reduce our application&amp;rsquo;s efficiency and performance, leaving our users with a bad experience.&lt;/p&gt;</description></item><item><title>Spring AI: How to Write GenAI Applications with Java</title><link>https://foojayio.github.io/website/today/spring-ai-how-to-write-genai-applications-with-java/</link><pubDate>Thu, 09 May 2024 18:46:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-ai-how-to-write-genai-applications-with-java/</guid><description>&lt;p&gt;Generative AI (GenAI) is currently a hot topic in the tech world. It&amp;rsquo;s a subset of artificial intelligence that focuses on creating new content, such as text, images, or music. One popular type of GenAI component is the Large Language Model (LLM), which can generate human-like text based on a prompt.&lt;/p&gt;
&lt;p&gt;Retrieval-Augmented Generation (RAG) is a technique that enhances the accuracy and reliability of generative AI models by grounding them in external knowledge sources. While most GenAI applications and related content are centered around Python and its ecosystem, what if you want to write a GenAI application in Java?&lt;/p&gt;</description></item><item><title>Duplicate Finder for Documentation</title><link>https://foojayio.github.io/website/today/duplicate-finder-for-documentation/</link><pubDate>Wed, 08 May 2024 22:08:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/duplicate-finder-for-documentation/</guid><description>&lt;p&gt;Other languages: &lt;a href="https://flounder.dev/es/posts/duplicate-finder-intro/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/ko/posts/duplicate-finder-intro/" target="_blank" rel="noopener noreferrer"&gt;한국어&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/duplicate-finder-intro/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
 &lt;a href="https://flounder.dev/zh/posts/duplicate-finder-intro/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
&lt;br&gt;
This post is about the development of the duplicate finder tool. For downloads and instructions on how to use it, see the &amp;lsquo;Download&amp;rsquo; page
&lt;a href="https://flounder.dev/duplicate-finder/" target="_blank" rel="noopener noreferrer"&gt;Download&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Anyone who worked on technical documentation in a big team is certainly aware of the content duplication issue. Even with the best tools and practices at hand, duplication is fundamentally difficult to overcome.
&lt;img src="https://flounder.dev/img/duplicate-finder-banner.png" alt="Duplicate Finder for Documentation - Post banner" title="Duplicate Finder for Documentation - Post banner" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Is your Java application ready for the next generation of server CPUs?</title><link>https://foojayio.github.io/website/today/is-your-java-application-ready-for-the-next-generation-of-server-cpus/</link><pubDate>Wed, 08 May 2024 08:03:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/is-your-java-application-ready-for-the-next-generation-of-server-cpus/</guid><description>&lt;p&gt;&lt;strong&gt;If you only know about Arm CPU architecture from working on smartphones or Raspberry Pi devices, it might come as a surprise to you that there are also high-performance, cloud-scale Arm CPUs already on the Java market.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The share of cloud and server workloads running on Arm is increasing every year. Back in 2011, Arm released the AArch64 instruction set, the first 64-bit support on Arm CPUs. Since then, Arm&amp;rsquo;s silicon partners have been producing a range of systems-on-chip (SoCs) that adopt Arm&amp;rsquo;s high performance CPUs. These power a broad range of diverse devices and technologies, including &lt;a href="https://newsroom.arm.com/news/tcs23-mediatek-vivo" title="flagship smartphones" target="_blank" rel="noopener noreferrer"&gt;flagship smartphones&lt;/a&gt;
, &lt;a href="https://newsroom.arm.com/blog/windows-on-arm-laptop-momentum" title="laptops" target="_blank" rel="noopener noreferrer"&gt;laptops&lt;/a&gt;
, &lt;a href="https://newsroom.arm.com/blog/high-end-aiot-markets" target="_blank" rel="noopener noreferrer"&gt;industrial IoT&lt;/a&gt;
, servers, and even &lt;a href="https://newsroom.arm.com/news/arm-powered-fugaku-supercomputer-claims-1-spot-on-top500-third-time-in-a-row" target="_blank" rel="noopener noreferrer"&gt;powerful super computers&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Remotely Recording a JFR Log from a Container (Without Using the Command Line)</title><link>https://foojayio.github.io/website/today/remotely-recording-a-jfr-log-from-a-container-without-using-the-command-line/</link><pubDate>Tue, 07 May 2024 04:32:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/remotely-recording-a-jfr-log-from-a-container-without-using-the-command-line/</guid><description>&lt;p&gt;Java Flight Recorder (JFR) is the go-to technology for recording and viewing JVM and system metrics.&lt;/p&gt;
&lt;p&gt;JFR records JFR logs which reveal much about the running application, the health of the JVM and the stability of the system. JFR logs are easily obtained by simply going into the command line / terminal and entering a few commands.&lt;/p&gt;
&lt;p&gt;But what if you don&amp;rsquo;t have access to the command line or terminal directly on the system where the JVM is running, like when the JVM is running in a container?&lt;/p&gt;</description></item><item><title>Let's Replace the synchronized Keyword</title><link>https://foojayio.github.io/website/today/lets-replace-the-synchronized-keyword/</link><pubDate>Tue, 07 May 2024 04:26:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/lets-replace-the-synchronized-keyword/</guid><description>&lt;p&gt;&lt;strong&gt;Let&amp;rsquo;s see in this article different ways to replace the synchronized keyword to make our code more virtual threads friendly.&lt;/strong&gt;&lt;br&gt;
&lt;img src="https://foojayio.github.io/website/today/lets-replace-the-synchronized-keyword/synchronized-loc.png" alt="" loading="lazy"&gt;
 Lines of code of the different solutions discussed in this article&lt;/p&gt;
&lt;h2 id="h2-0-synchronized-and-pinning-threads"&gt;Synchronized and pinning threads&lt;/h2&gt;
&lt;p&gt;Since Java 21, we can enjoy virtual threads and have more than 1 million threads in Java.&lt;/p&gt;
&lt;p&gt;But it has a condition, the virtual thread shouldn&amp;rsquo;t be pinned to the OS thread.&lt;/p&gt;
&lt;p&gt;Pinning means that a virtual thread is blocking the OS thread from being used by any other virtual threads.&lt;/p&gt;</description></item><item><title>Why This JCON Europe Talk Is Unmissable (Part 2)</title><link>https://foojayio.github.io/website/today/why-this-jcon-europe-talk-is-unmissable-part-2/</link><pubDate>Mon, 06 May 2024 08:22:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-this-jcon-europe-talk-is-unmissable-part-2/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://2024.europe.jcon.one/" target="_blank" rel="noopener noreferrer"&gt;JCON Europe&lt;/a&gt;
 in Cologne is around the corner (&lt;a href="https://bit.ly/3xv9yfT" target="_blank" rel="noopener noreferrer"&gt;and here are your free Foojay JCON tickets&lt;/a&gt;
), May 13 to 16. Why should you go? Well, one reason is that the talks will be awesome. Here&amp;rsquo;s the start of a series of reasons why some of them are absolutely unmissable!&lt;/strong&gt;&lt;/p&gt;
&lt;figure class="wp-block-image size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="1024" height="682" src="image.png" alt="" class="wp-image-110878" style="width:582px;height:auto"&gt;
&lt;/figure&gt;
&lt;h3 id="h3-0-jakarta-ee-11-performance-and-developer-productivity-ivar-grimstad"&gt;Jakarta EE 11 - Performance and Developer Productivity - Ivar Grimstad&lt;/h3&gt;
&lt;p&gt;Thursday, 16 May 2024 9:00 am - 9:45 am - Cinema 7&lt;/p&gt;</description></item><item><title>Foojay Podcast #48: JUG Oberpfalz, JCON Conference, and JAVAPRO Magazine</title><link>https://foojayio.github.io/website/today/foojay-podcast-48/</link><pubDate>Mon, 06 May 2024 07:48:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-48/</guid><description>&lt;p&gt;Once a month, in the Foojay Podcast, we discuss the history of a Java User Group and the people behind it.&lt;/p&gt;
&lt;p&gt;In this episode, we are in Oberpfalz, Germany, for a particular reason: the organizers of the local JUG are the same people responsible for the JCON conference in Cologne in a few weeks.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s also learn more about this Java community in Germany!&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/PIpQbo-1DnQ?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Writing a Data Orchestrator in Java</title><link>https://foojayio.github.io/website/today/writing-a-data-orchestrator-in-java/</link><pubDate>Thu, 02 May 2024 19:43:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/writing-a-data-orchestrator-in-java/</guid><description>&lt;p&gt;&lt;strong&gt;A data orchestrator is a platform to schedule, organize, and monitor data-oriented workflows. A workflow is a set of tasks, most data orchestrators come with built-in tasks for a wide range of technologies and provide support for custom processing via a scripting language. A data orchestrator can have multiple types of triggers to start a workflow.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Most Data orchestrators are written in Python.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Most Data orchestrators mandate that &lt;strong&gt;you&lt;/strong&gt; write Python code.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Crowd-Publishing the 10x Java Dev Book</title><link>https://foojayio.github.io/website/today/crowd-publishing-the-10x-java-dev-book/</link><pubDate>Thu, 02 May 2024 07:17:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/crowd-publishing-the-10x-java-dev-book/</guid><description>&lt;p&gt;&lt;strong&gt;Java transformed the world of software development as we know it and continues to evolve as a platform and language. Nevertheless, the &amp;ldquo;&lt;a href="https://github.com/devoxx/JavaRoadmap" target="_blank" rel="noopener noreferrer"&gt;enlightenment roadmap&lt;/a&gt;
&amp;rdquo; of a Java developer can be scary. How do you become the 10x Java Developer you always dreamed of becoming?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the question Steve Poole and Olimpiu Pop embarked on to respond. And, what better way to achieve it than to tap into the best resource Java has: its community!&lt;/p&gt;</description></item><item><title>Five ways to pass parameters to Apache APISIX</title><link>https://foojayio.github.io/website/today/five-ways-to-pass-parameters-to-apache-apisix/</link><pubDate>Tue, 30 Apr 2024 14:53:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/five-ways-to-pass-parameters-to-apache-apisix/</guid><description>&lt;p&gt;I recently read &lt;a href="https://javabulletin.substack.com/p/6-ways-to-pass-parameters-to-spring" target="_blank" rel="noopener noreferrer"&gt;6 Ways To Pass Parameters to Spring REST API&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Though the title is a bit misleading, as it&amp;rsquo;s unrelated to REST, it does an excellent job listing all ways to send parameters to a Spring application.&lt;/p&gt;
&lt;p&gt;I want to do the same for Apache APISIX; it&amp;rsquo;s beneficial when you write a custom plugin.&lt;/p&gt;
&lt;h2 id="h2-0-general-setup"&gt;General setup&lt;/h2&gt;
&lt;p&gt;The general setup uses Docker Compose and static configuration.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll have one plugin per way to pass parameters.&lt;/p&gt;</description></item><item><title>JavaFX Links of April 2024</title><link>https://foojayio.github.io/website/today/javafx-links-of-april-2024/</link><pubDate>Mon, 29 Apr 2024 15:22:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-april-2024/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of April 2024, published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during this month.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gluon&lt;/strong&gt; published new releases of JavaFX: 22.0.1 and the LTS releases 17.0.11 and 21.0.3. You can get them from Maven Central and the &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;Gluon website&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;The new builds of Java and JavaFX, that were released this week, contain several fixes related to Common Vulnerabilities and Exposures (CVE), see for example the &lt;a href="https://docs.azul.com/core/release-notes#fixed-common-vulnerabilities-and-exposures" target="_blank" rel="noopener noreferrer"&gt;release notes of Azul Zulu&lt;/a&gt;
. The 3-monthly security update schedule, guarantees that detected CVEs are fixed quickly and become available in a well-organized and documented way. Thanks to the power of the OpenJDK community!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; is &amp;ldquo;&lt;a href="https://mastodon.social/@johanvos/112325369175582324" target="_blank" rel="noopener noreferrer"&gt;Fixing one test at a time to get JavaFX Headless support in the core&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.jabref.org/2024/04/03/JabRef5-13/" target="_blank" rel="noopener noreferrer"&gt;JabRef 5.13 now runs on JavaFX 22&lt;/a&gt;
: &amp;ldquo;In the Northern Hemisphere, Spring is on it&amp;rsquo;s way and we are releasing a new version with many new features and bug fixes with a focus on improving the usability (not only) for LaTeX users.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/EmadHanif_/status/1782111780611010776" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Emad Hanif&lt;/strong&gt; shared a video of Barcodify&lt;/a&gt;
, a barcode generator, improving the application speed with Task-Level Concurrency vs Thread-Level Concurrency.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1781480060408537145" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; shared&lt;/a&gt;
 a &lt;a href="https://www.youtube.com/watch?v=jI5r-flszzU" target="_blank" rel="noopener noreferrer"&gt;video, showing Trinity in action&lt;/a&gt;
 to detect the Biden robocall deepfake on a consumer grade laptop (as presented at DevNexus).
&lt;ul&gt;
&lt;li&gt;And Sean also &lt;a href="https://twitter.com/SeanMiPhillips/status/1783677579980845232" target="_blank" rel="noopener noreferrer"&gt;shared a futuristic user interface&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1776166816814977289" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; shared a new experiment with FXGL&lt;/a&gt;
: &amp;ldquo;Is it just me, or does this thing look like an eye?&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/logorrr/status/1774901636965519758" target="_blank" rel="noopener noreferrer"&gt;LogoRRR shared a video&lt;/a&gt;
 demonstrating &lt;a href="https://github.com/TestFX/TestFX" target="_blank" rel="noopener noreferrer"&gt;TestFX&lt;/a&gt;
 &amp;ldquo;the testing framework for JavaFX applications. We use it to verify that everything works as designed 🙂.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;There is active development to support headless execution of tests - see &lt;a href="https://github.com/TestFX/TestFX/issues/803" target="_blank" rel="noopener noreferrer"&gt;#803&lt;/a&gt;
! 🎉&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1777378767670841488" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; announced version 1.6 of FXComponents&lt;/a&gt;
, introducing a new control: Navigation Pane. &lt;a href="https://www.pixelduke.com/2024/04/08/fxcomponents-version-1-6-released/" target="_blank" rel="noopener noreferrer"&gt;More info and a video is available here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1777686986003796056" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; announced version 3.1.0 of PDFViewFX&lt;/a&gt;
: &amp;ldquo;It contains a fix for the zooming bug and cleans up the use of CSS. You can find the &lt;a href="https://github.com/dlsc-software-consulting-gmbh/PDFViewFX" target="_blank" rel="noopener noreferrer"&gt;source code on GitHub&lt;/a&gt;
 and the artifacts on Maven Central.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
 shared a lot of updates for the GemsFX library, thanks to contributions by &lt;a href="https://twitter.com/LeeWyatt_7788" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Li Wang Yang&lt;/strong&gt;&lt;/a&gt;
. GemsFX is a collection of custom controls and utilities for JavaFX, see &lt;a href="https://github.com/dlsc-software-consulting-gmbh/GemsFX" target="_blank" rel="noopener noreferrer"&gt;sources on GitHub&lt;/a&gt;
. Here are some screenshots:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1780122735177339359" target="_blank" rel="noopener noreferrer"&gt;LimitedTextArea&lt;/a&gt;
, which allows you to specify the maximum content length (and is resizable as it inherits from ResizableTextArea).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1780123307901136965" target="_blank" rel="noopener noreferrer"&gt;Responsive pane&lt;/a&gt;
, which allows you to show a node on one of the four sides either fully or in a smaller size depending on available space (or not at all when there is too little space).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1780123562163961858" target="_blank" rel="noopener noreferrer"&gt;Circle progress indicator&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1780122006823883068" target="_blank" rel="noopener noreferrer"&gt;EnhancedPasswordField&lt;/a&gt;
, which gives you additional capabilities compared to the standard #avaFX password field (e.g. &amp;ldquo;show password&amp;rdquo;).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1780123785334522160" target="_blank" rel="noopener noreferrer"&gt;Tree and graph view&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-conferences"&gt;Conferences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.qfs.de/en/blog/article/javafx-more-alive-than-ever.html" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gregor Schmid&lt;/strong&gt; wrote a blog about the JFX Adopters Meeting in Munich&lt;/a&gt;
: &amp;ldquo;JavaFX &amp;ndash; More alive than ever. It was an impressive demonstration of the diverse activities of the FX world: organized with a lot of passion by &lt;strong&gt;Christian Heilmann&lt;/strong&gt;.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/mraible/status/1778156667764408768" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Matt Raible&lt;/strong&gt; shared&lt;/a&gt;
: &amp;ldquo;This was an awesomely energetic talk by &lt;strong&gt;Sean Phillips&lt;/strong&gt;! I enjoyed it immensely. Check out his Trinity project which can detect AI-generated audio in minutes. Built with JavaFX.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New tutorial by &lt;a href="https://twitter.com/Polypragmatist" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dave Barrett&lt;/strong&gt;&lt;/a&gt;
: &lt;a href="https://www.pragmaticcoding.ca/javafx/elements/events_and_listeners" target="_blank" rel="noopener noreferrer"&gt;EventHandlers, Listeners and Bindings - What to Use Where&lt;/a&gt;
: &amp;ldquo;The more that I work with JavaFX, the more that I am convinced that it is one of the best frameworks for building &amp;ldquo;Reactive User Interfaces&amp;rdquo; that&amp;rsquo;s out there.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/iAbhinay" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Abhinay Agarwal&lt;/strong&gt;&lt;/a&gt;
 wrote a blog post: &lt;a href="https://abhinay.xyz/javafx/2024/04/06/Platform-preferences-API.html" target="_blank" rel="noopener noreferrer"&gt;Platform preferences API: ColorScheme usage&lt;/a&gt;
: &amp;ldquo;JavaFX 22 introduces several new features and enhancements. One of the notable additions is the Platform preferences API, which provides developers with a convenient way to access platform-specific preferences and adapt their applications accordingly. In this blog post, we&amp;rsquo;ll explore the new APIs and demonstrate how to leverage them in your JavaFX applications.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hantsy/quarkus-cargotracker-regapp" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hantsy Bai&lt;/strong&gt; rewrote the Cargotracker regapp in Quarkus and JavaFX&lt;/a&gt;
: &amp;ldquo;The original Cargotracker regapp from Eric&amp;rsquo;s DDD book sample was written in Swing and Spring. I have created a variant of CargoTracker Regapp (CDI/Weld + JavaFX) to submit handling events to the cargotracker core system (forked from eclipse-ee4j/cargotracker).&amp;rdquo;&lt;/li&gt;
&lt;li&gt;The blog and videos by &lt;strong&gt;Frank Delporte&lt;/strong&gt; &amp;ldquo;Search in Documentation with a JavaFX ChatGPT-like LangChain4j Application&amp;rdquo; are now also &lt;a href="https://foojayio.github.io/website/today/search-in-documentation-with-a-javafx-chat-langchain4j-application/"&gt;published on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Loic__Lefevre/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Loïc Lefèvre&lt;/strong&gt;&lt;/a&gt;
 wrote on Medium: &amp;ldquo;&lt;a href="https://medium.com/db-one/building-javafx-app-native-image-with-graalvm-new-achievement-unlocked-c5e236ecf11d" target="_blank" rel="noopener noreferrer"&gt;Building JavaFX app native image with GraalVM: New achievement unlocked!&lt;/a&gt;
&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/RB_Bhatti_171/status/1776931544688734495" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Rushi Bhatti&lt;/strong&gt; shared a video showing three small JavaFX experiments&lt;/a&gt;
, you can find the &lt;a href="https://github.com/RushiBhatti/JavaFX_Projects" target="_blank" rel="noopener noreferrer"&gt;sources on GitHub&lt;/a&gt;
:
&lt;ul&gt;
&lt;li&gt;Tic Tac Toe (basic gameplay)&lt;/li&gt;
&lt;li&gt;BMI Calculator (calculates your Body Mass Index)&lt;/li&gt;
&lt;li&gt;Indian Flag (a simple tribute)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/agoncal/status/1783732219615297908" target="_blank" rel="noopener noreferrer"&gt;Small code example by &lt;strong&gt;Manfred Riem&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Having some fun with JavaFX. How do you &lt;a href="https://manorrock.com/blog/2024/04/25/add_a_tooltip_to_a_cell_in_a_table_view.html" target="_blank" rel="noopener noreferrer"&gt;add a ToolTip to a cell in a TableView&lt;/a&gt;
?&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1775836658304201122" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; played around with 3D cylindrical projections&lt;/a&gt;
: &amp;ldquo;Setup a system that can convert the pixels of an image to a 3D scatter plot wrapped around a cylindrical projection, using the color hue as an elevation offset to the base radius.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt; : &amp;ldquo;I made it, I made it. Successfully use &lt;a href="https://twitter.com/WhiteWoodCity/status/1773700873077547085" target="_blank" rel="noopener noreferrer"&gt;Vulkan to create a triangle and then export to the javafx writable image to display it&lt;/a&gt;
.&amp;rdquo; Check &lt;a href="https://github.com/chengenzhao/java-vulkan-mac" target="_blank" rel="noopener noreferrer"&gt;GitHub for the source code&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/ppavel24/status/1775603966262358253" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pavel Perikov&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;I just wanted to experiment with the canvas rasterisation performance, but now I developed some empathy to the life of the 1000 circles involved.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1777678966746161226" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; created a song with Suno&lt;/a&gt;
: &amp;ldquo;JavaFX all the Way&amp;rdquo;&amp;hellip;!
&lt;ul&gt;
&lt;li&gt;And &lt;a href="https://twitter.com/AlmasBaim/status/1777381482257944904" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; did something similar with FXGL&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; is &amp;ldquo;so &lt;a href="https://twitter.com/SeanMiPhillips/status/1777434462478803387" target="_blank" rel="noopener noreferrer"&gt;close to having a Cylindrical Surface projection&lt;/a&gt;
 based on an arbitrary data grid working&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;For macOS 14 users: &lt;a href="https://twitter.com/hansolo_/status/1778774663939707037" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; published a new version of JDKUpdater&lt;/a&gt;
 with the ability to download builds of OpenJDK from different distributions, with or without JavaFX included. &lt;a href="https://github.com/HanSolo/JDK-Updater/releases" target="_blank" rel="noopener noreferrer"&gt;Sources and releases are available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Do you want to use JavaFX on the Raspberry Pi? Thanks to contributions by &lt;a href="https://mstdn.gsi.li/@eitch" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert von Burg&lt;/strong&gt;&lt;/a&gt;
, the &lt;a href="https://github.com/Pi4J/pi4j-example-javafx" target="_blank" rel="noopener noreferrer"&gt;Pi4J JavaFX example project&lt;/a&gt;
 downloads JavaFX 22 from the Gluon website automatically when you build the application with Maven.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On Foojay.io, you can find an &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-march-2024/"&gt;overview of all the JavaFX Links of March&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;</description></item><item><title>Why This JCON Europe Talk Is Unmissable (Part 1)</title><link>https://foojayio.github.io/website/today/why-this-jcon-europe-talk-is-unmissable-part-1/</link><pubDate>Mon, 29 Apr 2024 07:29:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-this-jcon-europe-talk-is-unmissable-part-1/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://2024.europe.jcon.one/" target="_blank" rel="noopener noreferrer"&gt;JCON Europe&lt;/a&gt;
 in Cologne is around the corner (&lt;a href="https://bit.ly/3xv9yfT" target="_blank" rel="noopener noreferrer"&gt;and here are your free Foojay JCON tickets&lt;/a&gt;
), May 13 to 16. Why should you go? Well, one reason is that the talks will be awesome. Here&amp;rsquo;s the start of a series of reasons why some of them are absolutely unmissable!&lt;/strong&gt;
&lt;img src="https://foojayio.github.io/website/today/why-this-jcon-europe-talk-is-unmissable-part-1/image-2.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-devops-for-java-developers-or-maybe-against-them-baruch-sadogursky"&gt;&lt;strong&gt;DevOps for Java Developers (Or Maybe Against Them?!) - Baruch Sadogursky&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Thursday, 16 May 2024 12:30 pm - 1:15 pm - Cinema BlackBox&lt;/p&gt;</description></item><item><title>Functional Programming: Revolutionizing Software Development</title><link>https://foojayio.github.io/website/today/java-functional-programming/</link><pubDate>Thu, 25 Apr 2024 17:43:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-functional-programming/</guid><description>&lt;p&gt;&lt;strong&gt;Mathematics serves as the driving force behind significant advancements in computer science from my perspective. We deeply root the fundamental principles that we utilize in our daily programming tasks and application development in mathematical concepts. I am constantly intrigued by the opportunity to incorporate mathematical ideas into the programming languages I work with as a student of Mathematics.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Many other programming paradigms, like functional programming, take inspiration from Mathematics to address challenges related to concurrency and parallelism. Computing shifts towards utilizing multiple cores and distributed systems, which makes this increasingly important.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>The High Availability Features of Microservices using Chronicle Services</title><link>https://foojayio.github.io/website/today/the-high-availability-features-of-microservices-using-chronicle-services/</link><pubDate>Thu, 25 Apr 2024 13:36:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-high-availability-features-of-microservices-using-chronicle-services/</guid><description>&lt;p&gt;&lt;strong&gt;In low-latency microservices, ensuring system resilience without compromising performance is vital.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article explores how &lt;a href="https://chronicle.software/services/" title="Chronicle Services" target="_blank" rel="noopener noreferrer"&gt;Chronicle Services&lt;/a&gt;
, a Java-based framework optimised for low-latency microservices, meets these critical requirements by integrating HA, performance, and data persistence.&lt;/p&gt;
&lt;h2 id="h2-0-stateful-and-stateless-services"&gt;Stateful and Stateless Services&lt;/h2&gt;
&lt;p&gt;A &lt;a href="https://chronicle.software/services/" title="Chronicle Service" target="_blank" rel="noopener noreferrer"&gt;Chronicle Service&lt;/a&gt;
 application consists of a number of processing units known as Services, which interact with each other using events posted on &lt;a href="https://chronicle.software/queue-enterprise/" title="Chronicle Queues" target="_blank" rel="noopener noreferrer"&gt;Chronicle Queues&lt;/a&gt;
. The Chronicle Queue is an extremely fast shared memory inter-process communication; it also has an enterprise version that facilitates replication of queues over the network.&lt;/p&gt;</description></item><item><title>Hello eBPF: Generating C Code (8)</title><link>https://foojayio.github.io/website/today/hello-ebpf-generating-c-code-8/</link><pubDate>Wed, 24 Apr 2024 13:11:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/hello-ebpf-generating-c-code-8/</guid><description>&lt;p&gt;&lt;strong&gt;Welcome back to my &lt;a href="https://mostlynerdless.de/blog/tag/hello-ebpf/" target="_blank" rel="noopener noreferrer"&gt;series on ebpf&lt;/a&gt;
. In the last article, we learned how to&lt;a href="https://mostlynerdless.de/blog/2024/03/25/hello-ebpf-auto-layouting-structs-7/" target="_blank" rel="noopener noreferrer"&gt;auto-layout struct members and auto-generate BPFStructTypes for annotated Java records&lt;/a&gt;
. We&amp;rsquo;re going to extend this work today.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This is a rather short article, but the implementation and fixing all the bugs took far more time then expected.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="h2-0-generating-struct-definitions"&gt;Generating Struct Definitions&lt;/h2&gt;
&lt;p&gt;We saw in the last article how powerful Java annotation processing is for generating Java code; this week, we&amp;rsquo;ll tackle the generation of C code: In the previous article, we still had to write the C struct and map definitions ourselves, but writing&lt;/p&gt;</description></item><item><title>Using my new Raspberry Pi to run an existing GitHub Action</title><link>https://foojayio.github.io/website/today/using-my-new-raspberry-pi-to-run-an-existing-github-action/</link><pubDate>Tue, 23 Apr 2024 18:45:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-my-new-raspberry-pi-to-run-an-existing-github-action/</guid><description>&lt;p&gt;Recently, I mentioned &lt;a href="https://blog.frankel.ch/kotlin-scripting-to-python/" target="_blank" rel="noopener noreferrer"&gt;how I refactored&lt;/a&gt;
 &lt;a href="https://github.com/nfrankel/nfrankel-update/" target="_blank" rel="noopener noreferrer"&gt;the script&lt;/a&gt;
 that kept &lt;a href="https://github.com/nfrankel/" target="_blank" rel="noopener noreferrer"&gt;my GitHub profile&lt;/a&gt;
 up-to-date. Since Geecon Prague, I&amp;rsquo;m also a happy owner of a Raspberry Pi:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/nicolas_frankel/status/1715313240568197233" target="_blank" rel="noopener noreferrer"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="aligncenter wp-image-106305 size-medium" src="Screenshot-2024-03-10-at-17.20.56-557x510.png" alt="" width="557" height="510"&gt;
&lt;p&gt;](&lt;a href="https://twitter.com/nicolas_frankel/status/1715313240568197233" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/nicolas_frankel/status/1715313240568197233&lt;/a&gt;
)&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;Though the current setup works flawlessly - and is free, I wanted to experiment with self-hosted runners. Here are my findings.&lt;/p&gt;
&lt;h2 id="h2-0-context"&gt;Context&lt;/h2&gt;
&lt;p&gt;GitHub offers a large free usage of GitHub Actions:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;GitHub Actions usage is free for standard GitHub-hosted runners in public repositories, and for self-hosted runners. For private repositories, each GitHub account receives a certain amount of free minutes and storage for use with GitHub-hosted runners, depending on the account&amp;rsquo;s plan. Any usage beyond the included amounts is controlled by spending limits.&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>Debugging Using JMX Revisited</title><link>https://foojayio.github.io/website/today/debugging-using-jmx-revisited/</link><pubDate>Thu, 18 Apr 2024 13:02:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-using-jmx-revisited/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-need-for-advanced-management-tools-in-development"&gt;The Need for Advanced Management Tools in Development&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#introduction-to-jmx-java-management-extensions"&gt;Introduction to JMX (Java Management Extensions)&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#understanding-mbeans"&gt;&lt;strong&gt;Understanding MBeans&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#spring-and-management-beans"&gt;Spring and Management Beans&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#tooling-for-jmx-management"&gt;Tooling for JMX Management&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#getting-started-with-jmxterm"&gt;Getting Started with JMXTerm&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#leveraging-jmx-in-debugging-and-management"&gt;Leveraging JMX in Debugging and Management&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#exposing-mbeans-in-spring-boot"&gt;Exposing MBeans in Spring Boot&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#understanding-spring-boot-jmx-support"&gt;Understanding Spring Boot JMX Support&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#expose-an-mbean-in-spring-boot"&gt;Expose an MBean in Spring Boot&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#example-exposing-a-simple-configuration-mbean"&gt;Example: Exposing a Simple Configuration MBean&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;Debugging effectively requires a nuanced approach, similar to using tongs that tightly grip the problem from both sides.&lt;/p&gt;</description></item><item><title>Smarter Logging in Spring Boot with AOP</title><link>https://foojayio.github.io/website/today/smarter-logging-in-spring-boot-with-aop/</link><pubDate>Tue, 16 Apr 2024 06:25:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/smarter-logging-in-spring-boot-with-aop/</guid><description>&lt;p&gt;Hey &lt;strong&gt;AOP&lt;/strong&gt; fan, after explaining the basics of AOP in &lt;em&gt;&lt;strong&gt;&lt;a href="https://foojayio.github.io/website/today/aspect-oriented-programming-aop/"&gt;Part 1&lt;/a&gt;
&lt;/strong&gt;&lt;/em&gt;, we will dive deeper and demonstrate hands-on how to implement smart logging in Spring Boot using AOP.&lt;/p&gt;
&lt;p&gt;The complete example can be found on &lt;em&gt;&lt;strong&gt;&lt;a href="https://github.com/mezocode/healthcare-management-system/blob/main/src/main/java/com/mezocode/healthcare/shared/aop/LoggingAspect.java" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="h2-0-the-problem-with-logging-everywhere"&gt;&lt;strong&gt;The Problem with Logging Everywhere&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;As software developers, we know the importance of logging 📝. But scattering log statements everywhere comes with drawbacks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Code duplication as the same logs show up in multiple places&lt;/p&gt;</description></item><item><title>Getting Started with bld</title><link>https://foojayio.github.io/website/today/getting-started-with-bld/</link><pubDate>Mon, 15 Apr 2024 18:31:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-bld/</guid><description>&lt;p&gt;&lt;strong&gt;bld is an up-and-coming build tool for the Java ecosystem. This article guides you through getting set up to use it in your own projects.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-what-is-bld"&gt;What is &lt;code&gt;bld&lt;/code&gt;?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;bld&lt;/code&gt; is a build tool for the Java ecosystem.&lt;/p&gt;
&lt;h2 id="h2-1-why-use-bld"&gt;Why use &lt;code&gt;bld&lt;/code&gt;?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;bld&lt;/code&gt; is a very simple build tool.&lt;/p&gt;
&lt;p&gt;Unlike its contemporaries &lt;code&gt;Maven&lt;/code&gt; and &lt;code&gt;Gradle&lt;/code&gt;, which concern themselves with abstract models of a project, lifecycles, declarative DSLs, and avoiding repeated work, &lt;code&gt;bld&lt;/code&gt; just runs Java code.&lt;/p&gt;</description></item><item><title>Foojay Podcast #47: Artificial Intelligence and Machine Learning with Java</title><link>https://foojayio.github.io/website/today/foojay-podcast-47/</link><pubDate>Mon, 15 Apr 2024 09:59:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-47/</guid><description>&lt;p&gt;About one and a half years ago, ChatGPT was launched.&lt;/p&gt;
&lt;p&gt;The way we search for information and develop software has changed a lot since then as the use of Artificial Intelligence suddenly became a lot easier.&lt;/p&gt;
&lt;p&gt;What can we expect in the near future, and how can we program AI ourselves with Java? Let&amp;rsquo;s find out&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/E1gBwWFpfUA?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Free Foojay.io Tickets for JCON EUROPE, Cologne!</title><link>https://foojayio.github.io/website/today/free-foojay-io-tickets-for-jcon-europe-cologne/</link><pubDate>Sun, 14 Apr 2024 20:00:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/free-foojay-io-tickets-for-jcon-europe-cologne/</guid><description>&lt;p&gt;&lt;a href="https://2024.europe.jcon.one/" target="_blank" rel="noopener noreferrer"&gt;Welcome to JCON EUROPE&lt;/a&gt;
 (May 13 - 16, 2024) - a conference and unique platform to come together with Java developers from all over the world to network, learn from each other and develop your personal skills. At JCON EUROPE, we create room for complex topics to unfold. Literally, hosted in a multiplex movie theater, Java code, concepts and programming are brought to life on impressively large cinema screens.
&lt;a href="https://2024.europe.jcon.one/" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/free-foojay-io-tickets-for-jcon-europe-cologne/image-1024x263.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>JUG Munich hosts the JCP Executive Committee meeting to 25th anniversary of JCP</title><link>https://foojayio.github.io/website/today/jug-munich-hosts-the-jcp-executive-committee-meeting-to-25th-anniversary-of-jcp/</link><pubDate>Sun, 14 Apr 2024 19:40:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/jug-munich-hosts-the-jcp-executive-committee-meeting-to-25th-anniversary-of-jcp/</guid><description>&lt;p&gt;&lt;strong&gt;The Java Community Process (JCP) was established in 1998 to formalize the development process of the Java platform, where all interested parties can openly participate in the development of specification standards.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For many reasons, the JCP process [1] has decided to organize at least two face-to-face meetings of the Java Executive Committee per year. These meetings not only contain a very warm exchange of ideas, but are also very helpful in identifying future challenges. These meetings bring executives from all interested parties very close to the Java Community, as their feedback is very important to future platform development.&lt;/p&gt;</description></item><item><title>Hello eBPF: Auto Layouting Structs (7)</title><link>https://foojayio.github.io/website/today/hello-ebpf-auto-layouting-structs-7/</link><pubDate>Sun, 14 Apr 2024 16:19:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/hello-ebpf-auto-layouting-structs-7/</guid><description>&lt;p&gt;&lt;strong&gt;Welcome back to my &lt;a href="https://mostlynerdless.de/blog/tag/hello-ebpf/" target="_blank" rel="noopener noreferrer"&gt;series on ebpf&lt;/a&gt;
. In the last article, &lt;a href="https://mostlynerdless.de/blog/2024/03/12/hello-ebpf-ring-buffers-in-libbpf-6/" target="_blank" rel="noopener noreferrer"&gt;we learned how to use ring buffers with libbpf&lt;/a&gt;
 for efficient communication. This week, we&amp;rsquo;re looking into the memory layout and alignment of structs transferred between the kernel and user-land.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Alignment is essential; it specifies how the compiler layouts the structs and variables and where to put the data in memory. Take, for example, the struct that we defined in the previous article in the &lt;a href="https://github.com/parttimenerd/hello-ebpf/blob/main/bpf/src/main/java/me/bechberger/ebpf/samples/RingSample.java" target="_blank" rel="noopener noreferrer"&gt;RingSample&lt;/a&gt;
:&lt;/p&gt;</description></item><item><title>Ensuring the right usage of the Java 21 new features</title><link>https://foojayio.github.io/website/today/ensuring-the-right-usage-of-java-21-new-features/</link><pubDate>Sun, 14 Apr 2024 16:16:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/ensuring-the-right-usage-of-java-21-new-features/</guid><description>&lt;p&gt;&lt;strong&gt;Last September 2023 a new version of Java was released as the latest LTS (Long Time Support). This 21st version &lt;a href="https://www.sonarsource.com/blog/the-new-jdk-lts-is-out-long-live-jdk-21/" title="brought lots of new features" target="_blank" rel="noopener noreferrer"&gt;brought lots of new features&lt;/a&gt;
 that will improve performance and clarity in our code base.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;But taking advantage of these changes and new features, which we are not used to including in our code, can be a tough task. Also, it can lead to improper use or poor uptake, bugs, or basically not taking full advantage of new improvements.&lt;/p&gt;</description></item><item><title>Calling Gemma with Ollama, TestContainers, and LangChain4j</title><link>https://foojayio.github.io/website/today/calling-gemma-with-ollama-testcontainers-and-langchain4j/</link><pubDate>Fri, 12 Apr 2024 13:55:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/calling-gemma-with-ollama-testcontainers-and-langchain4j/</guid><description>&lt;p&gt;&lt;strong&gt;Lately, for my Generative AI powered Java apps, I&amp;rsquo;ve used the &lt;a href="https://deepmind.google/technologies/gemini/#introduction" target="_blank" rel="noopener noreferrer"&gt;Gemini&lt;/a&gt;
 multimodal large language model from Google. But there&amp;rsquo;s also &lt;a href="https://blog.google/technology/developers/gemma-open-models/" target="_blank" rel="noopener noreferrer"&gt;Gemma&lt;/a&gt;
, its little sister model.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Gemma is a family of lightweight, state-of-the-art open models built from the same research and technology used to create the Gemini models.&lt;/p&gt;
&lt;p&gt;Gemma is available in two sizes: 2B and 7B. Its weights are freely available, and its small size means you can run it on your own, even on your laptop. So I was curious to give it a run with &lt;a href="https://docs.langchain4j.dev/" target="_blank" rel="noopener noreferrer"&gt;LangChain4j&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>IntelliJ IDEA and Open Liberty - Effective Java app development</title><link>https://foojayio.github.io/website/today/effective-cloud-native-java-app-development-with-open-liberty-in-intellij-idea/</link><pubDate>Fri, 12 Apr 2024 13:36:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/effective-cloud-native-java-app-development-with-open-liberty-in-intellij-idea/</guid><description>&lt;p&gt;&lt;strong&gt;See how you can use Liberty Tools for IntelliJ IDEA to enable rapid, easy, and efficient development of cloud-native Java applications with Open Liberty and WebSphere Liberty&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When it comes to integrated development environments, within the Java community, IntelliJ IDEA is the most popular IDE amongst professional developers. It is the preferred IDE of choice by two-fifths of developers, making up the biggest majority of IDE users in this community, according to JRebel&amp;rsquo;s &lt;a href="https://www.jrebel.com/resources/java-developer-productivity-report-2023" target="_blank" rel="noopener noreferrer"&gt;2023 Java Developer Productivity Report&lt;/a&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>12 Text Tools For Developers</title><link>https://foojayio.github.io/website/today/12-text-tools-for-developers/</link><pubDate>Tue, 09 Apr 2024 07:31:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/12-text-tools-for-developers/</guid><description>&lt;p&gt;&lt;strong&gt;As developer, you would think we would spend all our time in an IDE doing development. The reality is a bit different. We may need to analyze logs, test our web services, generate test data, do security tests, analyze data in the database, and so on. Text processing os also part of a developer job. Let&amp;rsquo;s see a few free text tools to simplify your job.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Using online tools makes me wonder if I&amp;rsquo;m leaking company data to the website, so I wrote a desktop freeware &lt;a href="https://www.japplis.com/toolbox/" target="_blank" rel="noopener noreferrer"&gt;Japplis Toolbox&lt;/a&gt;
 containing a collection of text tools.&lt;/p&gt;</description></item><item><title>Java on Raspberry Pi 5 with Pi4J</title><link>https://foojayio.github.io/website/today/java-on-raspberry-pi-5-with-pi4j/</link><pubDate>Sat, 06 Apr 2024 11:08:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-raspberry-pi-5-with-pi4j/</guid><description>&lt;p&gt;In October 2023, &lt;a href="https://www.raspberrypi.com/news/introducing-raspberry-pi-5/" target="_blank" rel="noopener noreferrer"&gt;Raspberry Pi announced version 5&lt;/a&gt;
 of its affordable single-board computer with 4GB (60$) or 8GB (80$) of memory.&lt;/p&gt;
&lt;p&gt;Soon after the first boards were delivered, it turned out the Pi4J library wasn&amp;rsquo;t compatible with this new board. Pi4J is a library to create Java applications for the Raspberry Pi that can interact with electronic components through the GPIO pins.&lt;/p&gt;
&lt;p&gt;But because the Raspberry Pi 5 uses a new approach, with the &lt;a href="https://www.raspberrypi.com/documentation/microcontrollers/rp1.html" target="_blank" rel="noopener noreferrer"&gt;new RP1 chip&lt;/a&gt;
, to connect the SoC with these pins. Thanks to the RP1, it was possible to seperate GPIO, SPI, I2C, USB, ethernet,&amp;hellip; from the SoC to make it easier to develop newer boards. However, this new approach wasn&amp;rsquo;t supported by the PiGpio library used in Pi4J V2.&lt;/p&gt;</description></item><item><title>Debugging Streams with Peek</title><link>https://foojayio.github.io/website/today/debugging-streams-with-peek/</link><pubDate>Fri, 05 Apr 2024 08:05:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-streams-with-peek/</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="#understanding-java-streams"&gt;Understanding Java Streams&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#a-simple-stream-example"&gt;A Simple Stream Example&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#what-is-the-raw-peek-endraw-method"&gt;What is the &lt;code&gt;peek()&lt;/code&gt; Method?&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#debugging-with-raw-peek-endraw-"&gt;Debugging with &lt;code&gt;peek()&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#uncovering-common-bugs-with-raw-peek-endraw-"&gt;Uncovering Common Bugs with &lt;code&gt;peek()&lt;/code&gt;&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#filtering-issues"&gt;Filtering Issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#large-data-sets"&gt;Large Data Sets&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#addressing-side-effects"&gt;&lt;strong&gt;Addressing Side Effects&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#limitations-and-pitfalls"&gt;Limitations and Pitfalls&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#potential-for-misuse-in-production-code"&gt;Potential for Misuse in Production Code&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#performance-overhead"&gt;Performance Overhead&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#side-effects-and-functional-purity"&gt;Side Effects and Functional Purity&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-right-tool-for-the-job"&gt;The Right Tool for the Job&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#navigating-the-pitfalls"&gt;Navigating the Pitfalls&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#final-thoughts"&gt;Final Thoughts&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I blogged about &lt;a href="https://debugagent.com/debugging-streams-and-collections" target="_blank" rel="noopener noreferrer"&gt;Java Stream debugging&lt;/a&gt;
 in the past but I skipped an important method that&amp;rsquo;s worthy of a post of its own: peek.&lt;/p&gt;</description></item><item><title>How to Detect Cache Misses Using Observability</title><link>https://foojayio.github.io/website/today/how-to-detect-cache-misses-using-observability/</link><pubDate>Thu, 04 Apr 2024 07:44:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-detect-cache-misses-using-observability/</guid><description>&lt;p&gt;&lt;strong&gt;All of us know about caching in system design and software architecture, It is applicable everywhere in the computer industry, even in hardware. Caching is a quick and shortcut solution to improve performance, of course, we need to be careful of using the cache, misusing the cache can directly affect the system&amp;rsquo;s consistency.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this article, we will learn about cache miss and, in general, about the caching concept and how to implement it in Spring Boot. Eventually, we will see how Digma can help us detect cache misses locally during development.&lt;/p&gt;</description></item><item><title>Changes Included in Release 24.02 of Azul Zing Builds of OpenJDK</title><link>https://foojayio.github.io/website/today/changes-included-in-release-24-02-of-azul-zing-builds-of-openjdk/</link><pubDate>Wed, 03 Apr 2024 20:25:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/changes-included-in-release-24-02-of-azul-zing-builds-of-openjdk/</guid><description>&lt;p&gt;&lt;a href="https://www.azul.com/products/prime" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Prime&lt;/a&gt;
 is a Java platform with a modern, TCK-compliant JVM, Azul Zing, based on OpenJDK.&lt;/p&gt;
&lt;p&gt;Zing provides low, consistent response latency of your Java workloads, higher total throughput and carrying capacity, faster warm-up, and infrastructure savings, achieved thanks to the &lt;a href="https://www.azul.com/products/components/pgc/" target="_blank" rel="noopener noreferrer"&gt;C4 pauseless garbage collector&lt;/a&gt;
, &lt;a href="https://www.azul.com/products/components/falcon-jit-compiler/" target="_blank" rel="noopener noreferrer"&gt;Falcon JIT compiler&lt;/a&gt;
 and other technologies created by Azul.&lt;/p&gt;
&lt;p&gt;Zing Builds are available in two versions, either for evaluation or production use:&lt;/p&gt;</description></item><item><title>Records for Cleaner and More Expressive Parameterized Tests in JUnit 5</title><link>https://foojayio.github.io/website/today/records-for-cleaner-and-more-expressive-parameterized-tests-in-junit-5/</link><pubDate>Wed, 03 Apr 2024 09:00:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/records-for-cleaner-and-more-expressive-parameterized-tests-in-junit-5/</guid><description>&lt;h3 id="h3-0-introduction"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;:&lt;/h3&gt;
&lt;p&gt;Parameterized testing in JUnit 5 is a potent technique for executing the same test logic with various inputs. While you can use a variety of data structures, such as custom classes, arrays, or collections, Java records offer a compelling advantage in readability, type safety, and expressiveness.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s examine how to leverage Java records for parameterized tests through a concrete example &amp;ndash; testing an expression evaluator.&lt;/p&gt;
&lt;h3 id="h3-1-the-expression-evaluator-scenario"&gt;The Expression Evaluator Scenario&lt;/h3&gt;
&lt;p&gt;Consider a simple expression evaluator capable of handling the following:&lt;/p&gt;</description></item><item><title>Improving upon my OpenTelemetry Tracing demo</title><link>https://foojayio.github.io/website/today/improving-upon-my-opentelemetry-tracing-demo/</link><pubDate>Wed, 03 Apr 2024 06:35:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/improving-upon-my-opentelemetry-tracing-demo/</guid><description>&lt;p&gt;Last year, I wrote a &lt;a href="https://blog.frankel.ch/end-to-end-tracing-opentelemetry/" target="_blank" rel="noopener noreferrer"&gt;post&lt;/a&gt;
 on Open Telemetry Tracing to understand more about the subject. I also created a demo around it, which featured the following components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Apache APISIX API Gateway&lt;/li&gt;
&lt;li&gt;A Kotlin/Spring Boot service&lt;/li&gt;
&lt;li&gt;A Python/Flask service&lt;/li&gt;
&lt;li&gt;And a Rust/Axum service&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ve recently improved the demo to deepen my understanding and want to share my learning.&lt;/p&gt;
&lt;h2 id="h2-0-using-a-regular-database"&gt;Using a regular database&lt;/h2&gt;
&lt;p&gt;In the initial demo, I didn&amp;rsquo;t bother with a regular database. Instead:&lt;/p&gt;</description></item><item><title>Foojay Podcast #46: JUG Switzerland</title><link>https://foojayio.github.io/website/today/foojay-podcast-46/</link><pubDate>Tue, 02 Apr 2024 09:42:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-46/</guid><description>&lt;p&gt;In this podcast, once a month, we discuss the history of a Java User Group and the people behind it.&lt;/p&gt;
&lt;p&gt;In this episode, I&amp;rsquo;m leaving the European Union and stepping over the border of Switzerland, the country where the Red Cross was started, and many international institutions have their headquarters.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s find out if there is also a big Java community&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/onYRMp1sFhk?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>JavaFX Links of March 2024</title><link>https://foojayio.github.io/website/today/javafx-links-of-march-2024/</link><pubDate>Sun, 31 Mar 2024 08:39:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-march-2024/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of March 2024, published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during this month.&lt;/p&gt;
&lt;h2 id="h2-0-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; integrated this &lt;a href="https://github.com/dukke/FXThemes/pull/2" target="_blank" rel="noopener noreferrer"&gt;pull request in FXThemes&lt;/a&gt;
: &amp;ldquo;&lt;a href="https://twitter.com/P_Duke/status/1762488686313120185" target="_blank" rel="noopener noreferrer"&gt;True Dark Mode is now also available on Mac&lt;/a&gt;
. All thanks to &lt;a href="https://twitter.com/carldea" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Not new, but &lt;a href="https://twitter.com/siedlerchr/status/1762439783236636842" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;siedlerchr&lt;/strong&gt; pointed&lt;/a&gt;
 us on &lt;a href="https://github.com/tobiasdiez/EasyBind" target="_blank" rel="noopener noreferrer"&gt;EasyBind&lt;/a&gt;
: &amp;ldquo;Leverages lambdas to reduce boilerplate when creating custom bindings, providing a type-safe alternative to Bindings.select* methods and provides enhanced bindings support for Optional.&amp;rdquo; It&amp;rsquo;s a fork by &lt;a href="https://twitter.com/tobias_diez" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tobias Diez&lt;/strong&gt;&lt;/a&gt;
 of an older project by &lt;a href="https://twitter.com/tomas_mikula" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tomas Mikula&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;This month Java 22 and JavaFX 22 got released! Here are the &lt;a href="https://github.com/openjdk/jfx/blob/master/doc-files/release-notes-22.md" target="_blank" rel="noopener noreferrer"&gt;release notes of JavaFX 22&lt;/a&gt;
, including:
&lt;ul&gt;
&lt;li&gt;An important change for animations (&lt;a href="https://bugs.openjdk.org/browse/JDK-8324658" target="_blank" rel="noopener noreferrer"&gt;JDK-8324658&lt;/a&gt;
): the Animation methods play, start, stop, and pause may now be called on any thread.&lt;/li&gt;
&lt;li&gt;8 enhancements&lt;/li&gt;
&lt;li&gt;80 fixed bugs&lt;/li&gt;
&lt;li&gt;3 security fixes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;You can download JavaFX 22 here:
&lt;ul&gt;
&lt;li&gt;As a separate SDK from the &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;Gluon website&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Or included with a Java JDK from, e.g., the &lt;a href="https://www.azul.com/downloads/?version=java-22-sts&amp;amp;package=jdk-fx#zulu" target="_blank" rel="noopener noreferrer"&gt;Azul website&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Release highlights of JavaFX 22 can &lt;a href="https://openjfx.io/highlights/22/" target="_blank" rel="noopener noreferrer"&gt;be found here&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/iAbhinay/status/1770347967536419186" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Abhinay Agarwal&lt;/strong&gt; highlights this one&lt;/a&gt;
: &amp;ldquo;This release includes &amp;lsquo;Platform preferences API&amp;rsquo; which allows developers to style their apps in accordance with the appearance of the OS.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kevin Rushforth&lt;/strong&gt; published a &lt;a href="https://github.com/kevinrushforth/jfx/blob/javafx.incubator/INCUBATOR-MODULES.md" target="_blank" rel="noopener noreferrer"&gt;description of JavaFX Incubator Modules&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1770840921753502170" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; explains&lt;/a&gt;
: &amp;ldquo;These new modules will exist in the JavaFX SDK. They&amp;rsquo;ll be the home of features that are still under review, to possibly later be included as final stable features. One such feature will likely be the Rich Text Area.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;In the Oracle Java 22 Launch Stream, &lt;a href="https://www.youtube.com/watch?v=AjjAZsnRXtE&amp;amp;t=4685s" target="_blank" rel="noopener noreferrer"&gt;Kevin Rushforth talked about &amp;ldquo;JavaFX 22 and Beyond&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jdk.java.net/javafx23/" target="_blank" rel="noopener noreferrer"&gt;JavaFX 23 Early-Access Builds&lt;/a&gt;
 are available.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/PatrikKarlstrom/status/1762215364845244834" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Patrik Karlström&lt;/strong&gt; announced the release of Mapollage 3.0.0&lt;/a&gt;
: &amp;ldquo;3 yrs later, on the very day! The KML generator of geotagged images for GoogleEarth. This is a major rewrite of the UI, combining NetBeans Platform and JavaFX.&amp;rdquo; &lt;a href="https://github.com/trixon/mapollage/releases/tag/v3.0.0" target="_blank" rel="noopener noreferrer"&gt;Sources and downloads are available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/invokecoley/status/1764991484808380927" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Matt Coley&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;Re-creating Intellij&amp;rsquo;s &amp;ldquo;Search Everywhere&amp;rdquo; panel in Recaf 4X&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1767940438177055123" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; announced version 4 of HERO&lt;/a&gt;
, a tool which provides next-generation energy modelling capabilities. Here are the &lt;a href="https://blog.hero-software.com.au/hero-v4-0-released-whats-new/" target="_blank" rel="noopener noreferrer"&gt;release notes&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/logorrr/status/1768167973276057712" target="_blank" rel="noopener noreferrer"&gt;A video of LogoRRR displaying data more densely&lt;/a&gt;
, &amp;ldquo;and a tad nicer.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;JabRef immediately &lt;a href="https://foojay.social/@jabref/112124226121637837" target="_blank" rel="noopener noreferrer"&gt;bumped to version 22&lt;/a&gt;
: &amp;ldquo;We just updated to the newest version of JavaFX 22, and it works fine so far! Great to see so many bugs fixed!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; shared &amp;ldquo;a &lt;a href="https://twitter.com/carldea/status/1768673053213347911" target="_blank" rel="noopener noreferrer"&gt;glimpse of a responsive layout for a landing page&lt;/a&gt;
. Clinical interface terminology system (knowledge base).&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;One of the students of &lt;strong&gt;Almas Baim&lt;/strong&gt; built a &lt;a href="https://twitter.com/AlmasBaim/status/1770767408896110958" target="_blank" rel="noopener noreferrer"&gt;dungeon layout generator for FXGL&lt;/a&gt;
: &amp;ldquo;Once the API is finalised, it will be available from the next release.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;He also shared a &lt;a href="https://twitter.com/AlmasBaim/status/1768709121136599320" target="_blank" rel="noopener noreferrer"&gt;video of a rotating cube with rotating cubes with rotating cubes with&amp;hellip;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;And &lt;a href="https://twitter.com/AlmasBaim/status/1770842307169857714" target="_blank" rel="noopener noreferrer"&gt;another one video&lt;/a&gt;
: &amp;ldquo;In the next release of FXGL the pathfinding API treats all grid based data structures in the same way. This means mazes, dungeons, maps, levels, including custom types, are all easily traversable by entities using pathfinding.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1772682076673782087" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; announced version 21.1 of FXGL&lt;/a&gt;
:
&lt;ul&gt;
&lt;li&gt;new module fxgl-intelligence: speech recognition, hand tracking, text to speech&lt;/li&gt;
&lt;li&gt;mazes/dungeons/grids can utilise A* pathfinding up to 8 directions&lt;/li&gt;
&lt;li&gt;completed QuestService implementation&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AlmasB/FXGL/releases/tag/21.1" target="_blank" rel="noopener noreferrer"&gt;Full change log, with 5 new contributors, is here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;And he published a &lt;a href="https://www.youtube.com/watch?v=hdPspgAetQk" target="_blank" rel="noopener noreferrer"&gt;video on YouTube: &amp;ldquo;FXGL 21.1 Tutorial: Speech Recognition in Java&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1771786912363131183" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; announced version 2.0 of Reflection&lt;/a&gt;
: &amp;ldquo;Can you beat all the current 30 levels? New levels, new mechanic, bugfix, new textures, android version and much more. &lt;a href="https://orangomango.itch.io/reflection" target="_blank" rel="noopener noreferrer"&gt;Play it in the browser or download it&lt;/a&gt;
 for Windows, Linux, Mac or Android.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; has been very productive this week&amp;hellip;
&lt;ul&gt;
&lt;li&gt;Added a &lt;a href="https://twitter.com/dlemmermann/status/1770757809698697560" target="_blank" rel="noopener noreferrer"&gt;few more features to the DrawerStackPane in GemsFX&lt;/a&gt;
: &amp;ldquo;You can now configure the animation duration and the top and side paddings.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Added &lt;a href="https://twitter.com/dlemmermann/status/1770415222815092963" target="_blank" rel="noopener noreferrer"&gt;field validation via ValidatorFX to the dialog framework in GemsFX&lt;/a&gt;
: &amp;ldquo;Will be part of next release.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Added a &lt;a href="https://twitter.com/dlemmermann/status/1770136937044541910" target="_blank" rel="noopener noreferrer"&gt;&amp;lsquo;PowerPane&amp;rsquo; to GemsFX&lt;/a&gt;
: &amp;ldquo;&amp;hellip; the mother of all panes &amp;hellip; combining a glass pane, a drawer pane, hidden panes, dialog pane, info center (notification) pane. Basically something that will give you a great quick-start when creating a new app in JavaFX.&amp;rdquo; Check the thread on Twitter for more screenshots.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Implemented my own &lt;a href="https://twitter.com/dlemmermann/status/1768640804820488349" target="_blank" rel="noopener noreferrer"&gt;&amp;lsquo;Friday Fun Component&amp;rsquo;&lt;/a&gt;
 now that &lt;a href="https://twitter.com/hansolo_" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
 is mostly on &lt;a href="https://docs.azul.com/core/crac/crac-introduction" target="_blank" rel="noopener noreferrer"&gt;CRaC&lt;/a&gt;
 🙂 We needed an &amp;rsquo;energy efficiency&amp;rsquo; display for our energy software at &lt;a href="https://twitter.com/SenaptEaaS" target="_blank" rel="noopener noreferrer"&gt;Senapt&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;And and update by &lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; : &amp;ldquo;Work in progress (continued - very close to finished): &lt;a href="https://twitter.com/P_Duke/status/1770112311300083931" target="_blank" rel="noopener noreferrer"&gt;Navigation Control&lt;/a&gt;
. When shrunk, show popup menus when clicking items - scroll bar shows when items exceed space. And animations when shrinking and expanding.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcast-video-books"&gt;Podcast, Video, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://foojay.social/deck/@frankdelporte/112007776688012320" target="_blank" rel="noopener noreferrer"&gt;new version of the ebook by &lt;strong&gt;Frank Delporte&lt;/strong&gt;&lt;/a&gt;
, &amp;ldquo;Getting Started with Java on the Raspberry Pi&amp;rdquo;, is &lt;a href="https://webtechie.be/books/" target="_blank" rel="noopener noreferrer"&gt;now available here&lt;/a&gt;
. It contains 20 extra pages describing a joystick-controlled game with &lt;a href="https://pi4j.com/" target="_blank" rel="noopener noreferrer"&gt;Pi4J&lt;/a&gt;
 and the JavaFX &lt;a href="https://www.jfx-central.com/libraries/fxgl" target="_blank" rel="noopener noreferrer"&gt;FXGL game-library&lt;/a&gt;
 of &lt;a href="https://twitter.com/AlmasBaim" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-conferences"&gt;Conferences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/wolflook/status/1765356417760760283" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Wolfgang Weigend&lt;/strong&gt; shared some pictures of the JFX Adopters Meeting&lt;/a&gt;
: &amp;ldquo;Thanks a lot for attending my session about JavaFX technology at Zeiss Meditec in Munich.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;If you attend &lt;a href="https://twitter.com/devnexus" target="_blank" rel="noopener noreferrer"&gt;DEVNEXUS (Apr 9-11, 2024, Atlanta, GA)&lt;/a&gt;
, make sure to attend this talk: &lt;a href="https://devnexus.com/presentations/java-javafx-and-life-on-jupiter-s-europa/" target="_blank" rel="noopener noreferrer"&gt;Java, JavaFX, and Life on Jupiter&amp;rsquo;s Europa&lt;/a&gt;
 by &lt;strong&gt;Jordi Turner&lt;/strong&gt; and &lt;strong&gt;Scott Turner&lt;/strong&gt;: &amp;ldquo;To achieve this, we created an infrastructure in Java that allows us to responsively render and interact with maps and space views by combining JavaFX and AWT in a multi-threaded approach. This approach has been extremely successful, and now supports missions outside of Europa Clipper, analyzing spacecraft and data around Saturn, Venus, the Moon, and all the way back to Earth.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Polypragmatist" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dave Barrett&lt;/strong&gt;&lt;/a&gt;
 published a long article with a lot of example code &lt;a href="https://www.pragmaticcoding.ca/javafx/subscribe_and_map" target="_blank" rel="noopener noreferrer"&gt;about new Binding and Listener features added to JavaFX in versions 19 and 21&lt;/a&gt;
: &amp;ldquo;I looked at the JavaDocs page for ObservableValue in both JFX 16 and 21. There are just 3 methods in JFX 16: addListener(), getValue(), and removeListener(). There are 9 methods in the JFX 21 version. Those 6 new methods (plus one in Observable) are what we are going to look at in this article. And yes, these are game changers!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/CarlWalkerDrums" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Walker&lt;/strong&gt;&lt;/a&gt;
 published an &lt;a href="https://www.bekwam.net/javafx/custom-dialog.html" target="_blank" rel="noopener noreferrer"&gt;article on using custom JavaFX Dialog subclasses&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;The JavaFX standard library doesn&amp;rsquo;t provide a number-only input field. But with &lt;a href="https://codestore.cloud/public-snippets/c352ebe8-0045-acef-b59a-22efa873dc12" target="_blank" rel="noopener noreferrer"&gt;this short snippet&lt;/a&gt;
, provided by &lt;a href="https://twitter.com/FranzDeschler/status/1761707840970904014" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Franz Deschler&lt;/strong&gt;&lt;/a&gt;
, you can create your own component, that limits the possible input characters to only numbers.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devcodef1.com/news/1172964/javafx-in-intellij-idea" target="_blank" rel="noopener noreferrer"&gt;Creating a JavaFX Project in IntelliJ IDEA: A Step-by-Step Guide&lt;/a&gt;
 on Dev Code F1.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; wrote a blog post, including two &amp;ldquo;Code Walk-Trough&amp;rdquo; videos: &amp;ldquo;&lt;a href="https://webtechie.be/post/2024-03-18-search-documentation-javafx-chat-langchain4j/" target="_blank" rel="noopener noreferrer"&gt;Search in Documentation with a JavaFX ChatGPT-like LangChain4j Application&lt;/a&gt;
&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;JetBrains published an update of their IntelliJIDEA tutorial: &lt;a href="https://www.jetbrains.com/help/idea/javafx.html" target="_blank" rel="noopener noreferrer"&gt;Create a new JavaFX project&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/shannah78/status/1764028712943751539" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Steve Hannah&lt;/strong&gt;&lt;/a&gt;
 published a post: &lt;a href="https://jdeploy.substack.com/p/jdeploy-vs-jpackage" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;jDeploy vs jpackage - When does it make sense to distribute your Java desktop app with jDeploy vs jpackage&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/bazlur_rahman" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Bazlur Rahman&lt;/strong&gt;&lt;/a&gt;
 created a &lt;a href="https://www.linkedin.com/pulse/fractal-journeys-javafx-exploration-a-n-m-bazlur-rahman-rfkjc/" target="_blank" rel="noopener noreferrer"&gt;Mandelbrot fractal using JavaFX&lt;/a&gt;
 with the help of Gemini LLM. The &lt;a href="https://github.com/rokon12/Mandelbrot" target="_blank" rel="noopener noreferrer"&gt;code is available here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://twitter.com/SeanMiPhillips/status/1764341506725286256" target="_blank" rel="noopener noreferrer"&gt;shout-out from &lt;strong&gt;Sean Phillips&lt;/strong&gt;&lt;/a&gt;
 to &lt;a href="https://twitter.com/GeertjanW" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Geertjan Wielenga&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&amp;hellip;for investing so much of his personal time providing many helpful articles over the years.&amp;rdquo; in a reaction to a &lt;a href="https://twitter.com/jaimin_chovatia/status/1763977378030661739" target="_blank" rel="noopener noreferrer"&gt;Tweet by &lt;strong&gt;CJ&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&amp;hellip;due to my curiosity in desktop app development, I learned JavaFX to some extent and utilized NetBeans to create applications back in 2018-19&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;A really great research and JavaFX insights by &lt;a href="https://twitter.com/crschnick" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt;&lt;/a&gt;
 on &lt;a href="https://twitter.com/foojayio" target="_blank" rel="noopener noreferrer"&gt;Foojay&lt;/a&gt;
, showing &lt;a href="https://foojayio.github.io/website/today/javafx-on-wsl/"&gt;how to run standalone JavaFX applications on exotic Linux systems like the Windows Subsystem for Linux or some embedded systems&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Pi Day just got more fun! Visualizing Pi with a JavaFX simulation&amp;rdquo;, a video by &lt;strong&gt;ANM Bazlur Rahman&lt;/strong&gt; in a &lt;a href="https://www.linkedin.com/posts/bazlur_javafx-piday-montecarlo-activity-7174005135688261632-4Vcj" target="_blank" rel="noopener noreferrer"&gt;LinkedIn post&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.jabref.org/2024/03/11/JabRef-20-years-start/" target="_blank" rel="noopener noreferrer"&gt;JabRef posted a first blog&lt;/a&gt;
 of a series of posts on the 20 years anniversary of JabRef, talking with one of the early contributors &lt;strong&gt;David Weitzman&lt;/strong&gt;. He started contributing to JabRef while he was in high school.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1765709277384384864" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt; created a Vulkan example&lt;/a&gt;
 and is &amp;ldquo;now heading for the integration of Vulkan rendering with JavaFX PixelBuffer.&amp;rdquo;. Source code is &lt;a href="https://github.com/chengenzhao/java-vulkan-mac" target="_blank" rel="noopener noreferrer"&gt;available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1768364472798691780" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; seems to be struggling with events and the Garbage Collector&lt;/a&gt;
: &amp;ldquo;GC: &lt;em&gt;sweeping quietly in the background&lt;/em&gt; Why are you all looking at me?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SwiftVideoBlog/status/1770307570911031724" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sergey&lt;/strong&gt; has a question about mobile JavaFX development&lt;/a&gt;
: &amp;ldquo;I am very happy to see JavaFX being actively developed and supported. I wonder though how many developers use it for Mobile app development? Is there any recent data available to see the adoption of this technology?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Discussion on Reddit: &lt;a href="https://www.reddit.com/r/JavaFX/comments/1bodn5q/javafx_at_oracle_present_and_future/" target="_blank" rel="noopener noreferrer"&gt;JavaFX at Oracle, present and future?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/112155358077106884" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; gets irritated&amp;hellip;&lt;/a&gt;
: &amp;ldquo;Even very smart people who I admire don&amp;rsquo;t realize that the &amp;lsquo;We have to write 3 clients (ios/android/web)&amp;rsquo; is wrong. You &lt;em&gt;can&lt;/em&gt; do that, but technically there is no reason not to use Java once, and run it everywhere. Granted, the tools/docs/samples for Java Everywhere are way behind the web-copy-paste stuff. Nothing to do with technical stuff. It just doesn&amp;rsquo;t fit in the big tech revenue models. So what?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1772343662447317204" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; on Twitter&lt;/a&gt;
: &amp;ldquo;JavaFX is fun what can I say. It&amp;rsquo;s great at combining 2D controls and overlays with 3D scenes. This allows me to interactively measure samples from the Biden Deep Fake robocall against known fake volumes to show which were faked and which were real. Super easy, takes 3 minutes.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;He will be &lt;a href="https://twitter.com/SeanMiPhillips/status/1771606914821931474" target="_blank" rel="noopener noreferrer"&gt;presenting a new method for detecting Deep Fake Audio called Projected Volumetric Detection at DevNexus 2024&lt;/a&gt;
: &amp;ldquo;Join me in Atlanta April 9-11 if you would like to know more about how to detect AI generated Deep Fakes using Java and JavaFX.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-8-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A new showcase application has been added: &lt;a href="https://jfx-central.com/showcases/bktext" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;bk.text&amp;rdquo;&lt;/a&gt;
: &amp;ldquo;An ergonomic and accessible text system for the German justice system, which supports the digital processing of court proceedings.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;The overview of all the LinksOfTheWeek of February got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-february-2024/"&gt;published on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;</description></item><item><title>Aspect-Oriented Programming (AOP) Made Easy With Java</title><link>https://foojayio.github.io/website/today/aspect-oriented-programming-aop/</link><pubDate>Thu, 28 Mar 2024 06:58:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/aspect-oriented-programming-aop/</guid><description>&lt;p&gt;Aspect-oriented programming (AOP) is a programming paradigm that seeks to increase modularity by separating cross-cutting concerns from core application logic.&lt;/p&gt;
&lt;p&gt;Cross-cutting concerns refer to functionality like logging, security, and transactions that span across multiple areas of an application.&lt;/p&gt;
&lt;p&gt;AOP allows these concerns to be encapsulated in reusable modules called aspects.&lt;/p&gt;
&lt;p&gt;This improves modularity and makes the codebase easier to maintain.&lt;/p&gt;
&lt;p&gt;In large-scale Java applications, AOP is invaluable for avoiding code duplication and keeping the core code focused on business goals.&lt;/p&gt;</description></item><item><title>Tips for reading code</title><link>https://foojayio.github.io/website/today/tips-for-reading-code/</link><pubDate>Tue, 26 Mar 2024 11:46:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/tips-for-reading-code/</guid><description>&lt;p&gt;&lt;strong&gt;As developers, we read code more than we write it. When adding new features or fixing bugs, we first need to understand existing code, so we can make the right changes in the right place.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When reading code inside the IDE, &lt;a href="https://www.jetbrains.com/idea/" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA&lt;/a&gt;
 helps us to read and understand code by providing helpful features like syntax highlighting and inlay hints. But there are more features to help us understand a piece of code.&lt;/p&gt;</description></item><item><title>To Brussels, Canada and back</title><link>https://foojayio.github.io/website/today/to-brussels-canada-and-back/</link><pubDate>Tue, 26 Mar 2024 10:53:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/to-brussels-canada-and-back/</guid><description>&lt;p&gt;Last year was my first year blogging, speaking at conferences, meeting incredible people, and seeing places I&amp;rsquo;ve never been before.&lt;/p&gt;
&lt;p&gt;It was at times quite arduous but at the same time energizing, as you can read in my post Looking back on one year of speaking and blogging. I didn&amp;rsquo;t want it to be a one-off year, so I dutifully started a new article series on eBPF and applied for conferences&amp;hellip;&lt;/p&gt;</description></item><item><title>Apache APISIX North America Tour</title><link>https://foojayio.github.io/website/today/apache-apisix-north-america-tour/</link><pubDate>Mon, 25 Mar 2024 15:31:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/apache-apisix-north-america-tour/</guid><description>&lt;p&gt;&lt;strong&gt;Once in a while, I write non-technical blog posts when I&amp;rsquo;ve something worth sharing. Today, I&amp;rsquo;d like to write about my North America &amp;ldquo;Tour&amp;rdquo; across several conferences and user groups.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first leg of my journey started in Oakland, California, with &lt;a href="https://developerweek2024.sched.com/event/1WpId" target="_blank" rel="noopener noreferrer"&gt;Developer Week&lt;/a&gt;
. Developer Week is an established conference with different editions in several locations and online during the year. Though I&amp;rsquo;m on their advisory board, this is only the second time I&amp;rsquo;ve spoken at one of their events. Pro-tip: Avoid being on any board of a conference where you speak. It&amp;rsquo;s bad taste and casts doubt on whether you validated yourself.&lt;/p&gt;</description></item><item><title>Spring Framework – Internals of RestClient</title><link>https://foojayio.github.io/website/today/spring-internals-of-restclient/</link><pubDate>Mon, 25 Mar 2024 11:32:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-internals-of-restclient/</guid><description>&lt;p&gt;&lt;strong&gt;As a developer and architect, my constant pursuit is to achieve simplicity and elegance when constructing resilient and intricate enterprise applications. With my affinity for the Spring Framework, I have witnessed firsthand the simplicity and modernization it brings to the Spring Ecosystem.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This framework enables the creation of complex enterprise applications in a more streamlined and refined manner, boasting a sophisticated diffusion and transformer architecture.&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="size-medium wp-image-103465" src="RestClient_1-700x394.jpg" alt="Spring RestClient" width="700" height="394"&gt;
&lt;p&gt;Spring RestClient&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes#restclient-support" title="Spring Boot 3.2" target="_blank" rel="noopener noreferrer"&gt;Spring Boot 3.2&lt;/a&gt;
 launched and introduced a range of captivating functionalities. Notably, the release includes the RestClient feature, which offers a contemporary approach to developing REST endpoints.&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>How to improve your spring boot skills</title><link>https://foojayio.github.io/website/today/how-to-improve-your-spring-boot-skills/</link><pubDate>Wed, 20 Mar 2024 15:10:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-improve-your-spring-boot-skills/</guid><description>&lt;p&gt;&lt;strong&gt;Does anyone else ever feel overwhelmed by Spring Boot? With a rich set of options and eco-system libraries on the one hand, and a very opinionated framework on the other, I often spend considerable time deciphering the &amp;ldquo;Spring Way&amp;rdquo; of doing things. I&amp;rsquo;ve been working with &lt;a href="https://digma.ai/10-spring-boot-performance-best-practices/" target="_blank" rel="noopener noreferrer"&gt;Spring Boot&lt;/a&gt;
 for over three years, yet there are moments when I sense I&amp;rsquo;m not fully harnessing the capabilities of this remarkable framework and that I need to improve my Spring Boot skills.&lt;/strong&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>Hello eBPF: Ring buffers in libbpf (6)</title><link>https://foojayio.github.io/website/today/hello-ebpf-ring-buffers-in-libbpf-6/</link><pubDate>Tue, 19 Mar 2024 17:54:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/hello-ebpf-ring-buffers-in-libbpf-6/</guid><description>&lt;p&gt;&lt;strong&gt;Welcome back to my article series on eBPF. Some weeks ago, &lt;a href="https://foojayio.github.io/website/today/hello-ebpf-developing-ebpf-apps-in-java-1/"&gt;I got started in using libbpf instead of libbcc&lt;/a&gt;
. This week, I show you how to use ring buffers, port the code from Ansil H&amp;rsquo;s blog post eBPF for Linux Admins: Part IX from C to Java, and add tests to the underlying map implementation.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;My libbpf-based implementation advances slower than the bcc-based, as I thoroughly test all added functionality and develop a proper Java API, not just a clone.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Java 22 Is Here, And It's Ready To Rock</title><link>https://foojayio.github.io/website/today/java-22-is-here-and-its-ready-to-rock/</link><pubDate>Tue, 19 Mar 2024 13:56:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-22-is-here-and-its-ready-to-rock/</guid><description>&lt;p&gt;Java 22 is here!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been six months since Java 21 was released, so it&amp;rsquo;s time for another fresh set of Java features.&lt;/p&gt;
&lt;p&gt;In this article, you&amp;rsquo;ll go on a tour of the JEPs that are part of this release, giving you a brief introduction to each of them.&lt;/p&gt;
&lt;p&gt;Where applicable, the differences with Java 21 are highlighted and a few typical use cases are provided, so that you&amp;rsquo;ll be more than ready to use these features after reading this!&lt;/p&gt;</description></item><item><title>Java 22: What’s New?</title><link>https://foojayio.github.io/website/today/java-22-whats-new/</link><pubDate>Mon, 18 Mar 2024 14:10:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-22-whats-new/</guid><description>&lt;p&gt;As soon as Java 22 is out, it&amp;rsquo;ll be time to walk through all the functionalities that this version bring to us as developers.&lt;/p&gt;
&lt;h2 id="h2-0-jep-461-stream-gatherers-preview"&gt;JEP 461 - Stream Gatherers (Preview)&lt;/h2&gt;
&lt;p&gt;Enhances the Stream API with support for custom intermediate operations. This is a preview API.&lt;/p&gt;
&lt;p&gt;The Stream API provides a fixed set of intermediate and terminal operations. It allows terminal operations to be extended via the &lt;code&gt;Stream::collect(Collector)&lt;/code&gt; method, but does not allow intermediate operations to be extended. Some operations are missing or others are possible via a set of operations or via an operation that doesn&amp;rsquo;t fully match what&amp;rsquo;s needed.&lt;/p&gt;</description></item><item><title>Foojay Podcast #45: Welcome to Java 22</title><link>https://foojayio.github.io/website/today/foojay-podcast-45/</link><pubDate>Mon, 18 Mar 2024 10:31:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-45/</guid><description>&lt;p&gt;Last September, we got Java 21, a Long Term Support (LTS) version with eight new big features and seven incubator or preview features.&lt;/p&gt;
&lt;p&gt;Does Java 22 also bring that much innovation, or is it just a bug-fix release?&lt;/p&gt;
&lt;p&gt;And what needs to be done to get such a release published on time? Let&amp;rsquo;s find out&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/_NYuuoCQgO8?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>How Oracle Separates Java Pricing from Value</title><link>https://foojayio.github.io/website/today/how-oracle-separates-java-pricing-from-value/</link><pubDate>Fri, 15 Mar 2024 14:00:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-oracle-separates-java-pricing-from-value/</guid><description>&lt;p&gt;&lt;strong&gt;On January 23, 2023, Oracle quietly replaced the online link to the Oracle Java SE Subscription Global Price List with a link to a new Oracle Java SE Universal Subscription Global Price List.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The old Oracle Java pricing was far from perfect. It was based on a processor-count metric for servers and a named-user-plus metric for desktops. With the processor-count metric, the license cost was determined by multiplying a processor&amp;rsquo;s total number of cores by a core processor licensing factor specified by Oracle. The named-user metric applied to all individuals &lt;em&gt;authorized&lt;/em&gt; to use a program regardless of whether they were &lt;em&gt;actively&lt;/em&gt; using it. These definitions left the door open for uncomfortable conversations with Oracle reps who were famous for setting up meetings &amp;ldquo;to talk about your Java usage.&amp;rdquo; Unpleasant in themselves, these meetings could lead to painful Java audits.&lt;/p&gt;</description></item><item><title>More readability &amp; less complexity with Java's Pattern Matching.</title><link>https://foojayio.github.io/website/today/increase-readability-and-reduce-complexity-with-javas-pattern-matching/</link><pubDate>Thu, 14 Mar 2024 13:29:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/increase-readability-and-reduce-complexity-with-javas-pattern-matching/</guid><description>&lt;p&gt;&lt;strong&gt;Increase readability, reduce cognitive complexity, and avoid bugs that are hard to spot with Java&amp;rsquo;s Pattern Matching.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I bet you don&amp;rsquo;t like writing ugly but necessary boilerplate code or reading it. But, sometimes we need to create logic that has to deal with an object of unknown type and follow different paths depending on the type. This code is prone to be too verbose, is complex to understand, and may involve some hidden errors hard to spot due to intermediate assignments.&lt;/p&gt;</description></item><item><title>Run JavaFX on the Windows Subsystem for Linux and More!</title><link>https://foojayio.github.io/website/today/javafx-on-wsl/</link><pubDate>Tue, 12 Mar 2024 16:11:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-on-wsl/</guid><description>&lt;p&gt;&lt;strong&gt;What does it take to run standalone JavaFX applications on exotic Linux systems like the Windows Subsystem for Linux or some embedded systems? As you will see, not a lot! Familiarizing yourself with the native libraries required by JavaFX and the font loading process is all that is needed. Then, JavaFX applications can run on them out of the box if you set everything up correctly.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most graphical Linux systems will automatically come with all the native libraries that are required by Java(FX) as these are pretty standard. Running a standalone Java(FX) application, which has been created with jlink or jpackage for example, on these systems works without having to put in any thought about possible dependencies. However, there are systems where this is not the case.&lt;/p&gt;</description></item><item><title>Foojay.io Mini Conference at Uber, Amsterdam</title><link>https://foojayio.github.io/website/today/foojay-io-mini-conference-at-uber-amsterdam/</link><pubDate>Mon, 11 Mar 2024 16:59:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-io-mini-conference-at-uber-amsterdam/</guid><description>&lt;p&gt;Uber Tech is partnering with Java User Group Amsterdam to host &lt;a href="https://www.meetup.com/amsterdam-java-user-group/events/299589593/" target="_blank" rel="noopener noreferrer"&gt;their first mini conference with Foojay.io&lt;/a&gt;
. Come and join in at the Uber Amsterdam HQ and learn from experts in their fields.&lt;/p&gt;
&lt;p&gt;This meetup will be hosted by Uber Tech, in their office at Uber, Burgerweeshuispad 301, Amsterdam.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note: To get the bar code and details for entering the event, you need to register on this meetup page &lt;a href="https://pages.beamery.com/uber/page/uber-x-jug-amsterdam-meetup" target="_blank" rel="noopener noreferrer"&gt;as well as here at Uber Tech&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Secure your API with these 16 Practices with Apache APISIX – part 2</title><link>https://foojayio.github.io/website/today/secure-your-api-with-these-16-practices-with-apache-apisix-part-2/</link><pubDate>Mon, 11 Mar 2024 09:39:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/secure-your-api-with-these-16-practices-with-apache-apisix-part-2/</guid><description>&lt;p&gt;&lt;a href="https://foojayio.github.io/website/today/secure-your-api-with-these-16-practices-with-apache-apisix-part-1/"&gt;We&amp;rsquo;ve listed 16 practices to help secure one&amp;rsquo;s APIs&lt;/a&gt;
 and described how to implement them with Apache APISIX.&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;del&gt;Authentication 🕵️️ - Verifies the identity of users accessing APIs.&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Authorization 🚦 - Determines permissions of authenticated users.&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;Data Redaction 🖍️ - Obscures sensitive data for protection.&lt;/li&gt;
&lt;li&gt;Encryption 🔒 - Encodes data so only authorized parties can decode it.&lt;/li&gt;
&lt;li&gt;Error Handling ❌ - Manages responses when things go wrong, avoiding revealing sensitive info.&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Input Validation &amp;amp; Data Sanitization 🧹 - Checks input data and removes harmful parts.&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;Intrusion Detection Systems 👀 - Monitor networks for suspicious activities.&lt;/li&gt;
&lt;li&gt;&lt;del&gt;IP Whitelisting 📝 - Permits API access only from trusted IP addresses.&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Logging and Monitoring 🖥️ - Keeps detailed logs and regularly monitors APIs.&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Rate Limiting ⏱️ - Limits user requests to prevent overload.&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;Secure Dependencies 📦 - Ensures third-party code is free from vulnerabilities.&lt;/li&gt;
&lt;li&gt;Security Headers 📋 - Enhances site security against types of attacks like XSS.&lt;/li&gt;
&lt;li&gt;Token Expiry ⏳ - Regularly expiring and renewing tokens prevents unauthorized access.&lt;/li&gt;
&lt;li&gt;Use of Security Standards and Frameworks 📘 - Guides your API security strategy.&lt;/li&gt;
&lt;li&gt;Web Application Firewall 🔥 - Protects your site from HTTP-specific attacks.&lt;/li&gt;
&lt;li&gt;API Versioning 🔄 - Maintains different versions of your API for seamless updates.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;Let&amp;rsquo;s now look at the remaining practices.&lt;/p&gt;</description></item><item><title>Secure your API with these 16 Practices with Apache APISIX - part 1</title><link>https://foojayio.github.io/website/today/secure-your-api-with-these-16-practices-with-apache-apisix-part-1/</link><pubDate>Mon, 11 Mar 2024 09:35:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/secure-your-api-with-these-16-practices-with-apache-apisix-part-1/</guid><description>&lt;p&gt;A couple of months ago, I stumbled upon this list &lt;a href="https://www.linkedin.com/posts/brijpandeyji_secure-your-api-with-these-16-practices-activity-7094020647529369601-5kzQ/" target="_blank" rel="noopener noreferrer"&gt;16 practices to secure your API&lt;/a&gt;
:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Authentication 🕵️️ - Verifies the identity of users accessing APIs.&lt;/li&gt;
&lt;li&gt;Authorization 🚦 - Determines permissions of authenticated users.&lt;/li&gt;
&lt;li&gt;Data Redaction 🖍️ - Obscures sensitive data for protection.&lt;/li&gt;
&lt;li&gt;Encryption 🔒 - Encodes data so only authorized parties can decode it.&lt;/li&gt;
&lt;li&gt;Error Handling ❌ - Manages responses when things go wrong, avoiding revealing sensitive info.&lt;/li&gt;
&lt;li&gt;Input Validation &amp;amp; Data Sanitization 🧹 - Checks input data and removes harmful parts.&lt;/li&gt;
&lt;li&gt;Intrusion Detection Systems 👀 - Monitor networks for suspicious activities.&lt;/li&gt;
&lt;li&gt;IP Whitelisting 📝 - Permits API access only from trusted IP addresses.&lt;/li&gt;
&lt;li&gt;Logging and Monitoring 🖥️ - Keeps detailed logs and regularly monitors APIs.&lt;/li&gt;
&lt;li&gt;Rate Limiting ⏱️ - Limits user requests to prevent overload.&lt;/li&gt;
&lt;li&gt;Secure Dependencies 📦 - Ensures third-party code is free from vulnerabilities.&lt;/li&gt;
&lt;li&gt;Security Headers 📋 - Enhances site security against types of attacks like XSS.&lt;/li&gt;
&lt;li&gt;Token Expiry ⏳ - Regularly expiring and renewing tokens prevents unauthorized access.&lt;/li&gt;
&lt;li&gt;Use of Security Standards and Frameworks 📘 - Guides your API security strategy.&lt;/li&gt;
&lt;li&gt;Web Application Firewall 🔥 - Protects your site from HTTP-specific attacks.&lt;/li&gt;
&lt;li&gt;API Versioning 🔄 - Maintains different versions of your API for seamless updates.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;While it&amp;rsquo;s debatable whether some points relate to security, &lt;em&gt;e.g.,&lt;/em&gt;, versioning, the list is a good starting point anyway. In this two-post series, I&amp;rsquo;d like to describe how we can implement each point with Apache APISIX (or not).&lt;/p&gt;</description></item><item><title>TornadoInsight: Harness the Power of TornadoVM from IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/tornadoinsight-an-intellij-plugin-for-tornavovm/</link><pubDate>Fri, 08 Mar 2024 11:59:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/tornadoinsight-an-intellij-plugin-for-tornavovm/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/tornadoinsight-an-intellij-plugin-for-tornavovm/tornado-insight.webp" alt="" loading="lazy"&gt;
&lt;br&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TornadoInsight is an open-source IntelliJ IDEA plugin for enhancing the developer experience when working with TornadoVM.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It provides a built-in on-the-fly static checker, empowering developers to identify unsupported Java features in TornadoVM and understand the reasons behind these limitations.&lt;/p&gt;
&lt;p&gt;Additionally, TornadoInsight introduces a dynamic testing framework that enables developers to easily test individual TornadoVM tasks. It automatically wraps TornadoVM tasks, invoking the native TornadoVM runtime on the developer&amp;rsquo;s machine for seamless debugging and testing. In this blog, we expand on TornadoInsight by:&lt;/p&gt;</description></item><item><title>Payara Cloud Hackathon is Open for Sign-ups!</title><link>https://foojayio.github.io/website/today/payara-cloud-hackathon-is-open-for-sign-ups/</link><pubDate>Thu, 07 Mar 2024 13:53:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/payara-cloud-hackathon-is-open-for-sign-ups/</guid><description>&lt;p&gt;We&amp;rsquo;re excited to announce that the 2nd edition of Payara Hackathon is now open for sign ups! &lt;a href="https://www.payara.fish/page/payara-hackathon-2024/" target="_blank" rel="noopener noreferrer"&gt;Find out more and sign up here!&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;The Payara Cloud Hackathon will be running from the 11th until the 31st of March and this time, we are looking for applications that tackle environmental, social, and economic sustainability challenges. With a focus on deploying to our Payara as a Service platform Payara Cloud, this is your chance to showcase the power and versatility of Jakarta EE technologies.&lt;/p&gt;</description></item><item><title>Hello eBPF: First steps with libbpf (5)</title><link>https://foojayio.github.io/website/today/hello-ebpf-first-steps-with-libbpf-5/</link><pubDate>Thu, 07 Mar 2024 13:51:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/hello-ebpf-first-steps-with-libbpf-5/</guid><description>&lt;p&gt;&lt;strong&gt;Welcome back to my blog series on eBPF. Two weeks ago, I showed you &lt;a href="https://mostlynerdless.de/blog/2024/02/12/hello-ebpf-tail-calls-and-your-first-ebpf-application-4/" target="_blank" rel="noopener noreferrer"&gt;how to write your own eBPF application using my hello-ebpf library based on libbcc&lt;/a&gt;
. This week, I show you why using libbcc is not the best idea and start working with the newer &lt;a href="https://libbpf.readthedocs.io/en/latest/" target="_blank" rel="noopener noreferrer"&gt;libbpf&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With my current libbcc-based approach, we essentially embed the executed eBPF program into our programs as a string into our applications and compile them on the fly for every run:&lt;/p&gt;</description></item><item><title>Microservices Design Principles</title><link>https://foojayio.github.io/website/today/microservices-design-principles-for-well-crafted-architecture/</link><pubDate>Wed, 06 Mar 2024 10:48:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/microservices-design-principles-for-well-crafted-architecture/</guid><description>&lt;h4 id="introduction-to-microservices-design-principles"&gt;Introduction to Microservices Design Principles&lt;/h4&gt;
&lt;p&gt;Welcome back to the second part of our Microservice Journey series! In this edition, we will delve into the core principles of microservice design principles, including the important topics of coupling and cohesion in Object-Oriented Programming (OOP).&lt;/p&gt;
&lt;p&gt;This innovative approach to software system development prioritizes modularity and scalability, and understanding coupling and cohesion is essential for improving coding skills and designing architecture.&lt;/p&gt;
&lt;p&gt;If you missed the first part, you can catch up here: &lt;a href="https://foojayio.github.io/website/today/evolution-of-microservices-from-soa-to-modern-architecture/" title="The Evolution of Microservices with SOA"&gt;The Evolution of Microservices with SOA&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Why I moved my blog to RIFE2 after 23 years?</title><link>https://foojayio.github.io/website/today/why-i-moved-my-blog-to-rife2-after-23-years/</link><pubDate>Tue, 05 Mar 2024 06:42:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-i-moved-my-blog-to-rife2-after-23-years/</guid><description>&lt;p&gt;In April 2023, I decided to move &lt;a href="https://erik.thauvin.net/blog/" title="my blog" target="_blank" rel="noopener noreferrer"&gt;my blog&lt;/a&gt;
 to &lt;a href="https://rife2.com/" target="_blank" rel="noopener noreferrer"&gt;RIFE2&lt;/a&gt;
, a full-stack framework. It was previously built &lt;a href="https://erik.thauvin.net/blog/stories//15/behind-this-blog" target="_blank" rel="noopener noreferrer"&gt;using my own custom JSP tag library&lt;/a&gt;
, which ran non-stop for 23 years. At one point in time, it was handling close to 5 connections per second, or around 12 million a month, on a single Apache/Tomcat instance.&lt;/p&gt;
&lt;p&gt;Over the years, I tried many frameworks, and the features never made up for the bloat. I&amp;rsquo;ve also never been a big fan of the MVC approach, and I wanted it to be very lean. RIFE2 no-dependencies approach immediately appealed to me, but I wasn&amp;rsquo;t sure the features passed muster.&lt;/p&gt;</description></item><item><title>Foojay Podcast #44: Quarkus Club</title><link>https://foojayio.github.io/website/today/foojay-podcast-44/</link><pubDate>Mon, 04 Mar 2024 08:25:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-44/</guid><description>&lt;p&gt;Once a month in this podcast, we talk about the history of a Java User Group and the people behind it.&lt;/p&gt;
&lt;p&gt;In this episode, we have a special group as we visit the virtual Quarkus Club.&lt;/p&gt;
&lt;p&gt;Did you know? The Quarkus Club initiative started less than a year ago and is already one of the biggest groups in the world dedicated to Quarkus!&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/qWUJTfk-ABY?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>JavaFX Links of February 2024</title><link>https://foojayio.github.io/website/today/javafx-links-of-february-2024/</link><pubDate>Thu, 29 Feb 2024 09:46:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-february-2024/</guid><description>&lt;p&gt;Here is the overview of the JavaFX LinksOfTheMonth of February 2024 that got published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during this month.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/crschnick/status/1752252092029251610" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;The JavaFX 22 platform preferences API in action. You can now query and observe the system color schemes..&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techhub.social/@gluonhq/111901859568537205" target="_blank" rel="noopener noreferrer"&gt;Gluon announced&lt;/a&gt;
 that new EA releases for the upcoming JavaFX 22 (22-ea+28) and JavaFX 23 (23-ea+3) platforms are available for download from &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;gluonhq.com&lt;/a&gt;
 and from Maven Central.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-1-highlights-from-the-openjfx-dev-mailing-list"&gt;Highlights from the openjfx-dev mailing list&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Version 23 will &lt;a href="https://github.com/openjdk/jfx/pull/1370" target="_blank" rel="noopener noreferrer"&gt;bump the minimum version of the JDK needed to run JavaFX to JDK 21&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://github.com/andy-goryachev-oracle/Test/blob/rich.jep.review/doc/RichTextArea/RichTextArea.md" target="_blank" rel="noopener noreferrer"&gt;new feature is proposed: RichTextArea&lt;/a&gt;
. &amp;ldquo;Intended to bridge the functional gap with Swing and its StyledEditorKit/JEditorPane. The main design goal is to provide a control that is complete enough to be useful out-of-the box, as well as open to extension by the application developers. We are looking for feedback, and will update the proposal based on the suggestions we receive from the community.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; shared the following message: &amp;ldquo;I created a &lt;a href="https://github.com/openjdk/jfx-sandbox/tree/johanvos-headless" target="_blank" rel="noopener noreferrer"&gt;branch in the jfx-sandbox repository&lt;/a&gt;
 for experimenting with a headless glass platform. This addresses &lt;a href="https://bugs.openjdk.org/browse/JDK-8324941" target="_blank" rel="noopener noreferrer"&gt;JDK-8324941&lt;/a&gt;
 where I suggest a POC for a Headless platform. There are a number of use cases for this, including:
&lt;ul&gt;
&lt;li&gt;Applications that require JavaFX rendering without presenting this to a window (and instead send it to a printer for example).&lt;/li&gt;
&lt;li&gt;Running tests without requiring a window manager.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/am1t_m0ndal/status/1753042932821623124" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Amit Kumar Mondal&lt;/strong&gt; announced OSGi.fx v2.4.4&lt;/a&gt;
: &amp;ldquo;Packed with enhancements, integrating Java 21 and JavaFX 21 seamlessly.&amp;rdquo; OSGi.fx is an easy-to-use desktop application to manage OSGi frameworks remotely. You can find the &lt;a href="https://github.com/amitjoy/osgifx/releases/tag/v2.4.4" target="_blank" rel="noopener noreferrer"&gt;release notes on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; is using the open source Trinity software for deep fake detection: &amp;ldquo;&lt;a href="https://twitter.com/SeanMiPhillips/status/1755246775504433374" target="_blank" rel="noopener noreferrer"&gt;This clip demonstrates visualizing a 3D Fast Fourier Transform (FFT)&lt;/a&gt;
 of the January 2024 deep fake of US President Biden. Trinity is written in Java using JavaFX for rendering.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/PDFsamOSS/status/1755193888908665333" target="_blank" rel="noopener noreferrer"&gt;PDFsam released the new PDFsam Basic 5.2.2&lt;/a&gt;
: &amp;ldquo;We upgraded the bundled Java, JavaFX and few other dependencies. We also fixed/improved drag and drop of files into the selection table with autoscroll at the edges and drop of files between rows.&amp;rdquo; See the &lt;a href="https://blog.pdfsam.org/bug-fix/new-release-5-2-2-for-pdfsam-basic/2520/" target="_blank" rel="noopener noreferrer"&gt;release notes&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;David Youcef Khodja&lt;/strong&gt; &lt;a href="https://twitter.com/DavidYKhodja/status/1759703816973283401" target="_blank" rel="noopener noreferrer"&gt;shared a video of Geoptic&lt;/a&gt;
, an app to measure distances and surfaces on maps: &amp;ldquo;I&amp;rsquo;m actually using my own custom UI controls and CSS inspired by IntelliJ IDEA&amp;rdquo;, made with SpringBoot, JavaFX, Leaflet, JavaScript.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heshan Thenura Kariyawasam&lt;/strong&gt; is &lt;a href="https://twitter.com/Heshantk/status/1758869052066329014" target="_blank" rel="noopener noreferrer"&gt;replicating Instagram&amp;rsquo;s story feature&lt;/a&gt;
: &amp;ldquo;This Java application dynamically changes background color based on the dominant color of uploaded images.&amp;rdquo; Sources are &lt;a href="https://github.com/heshanthenura/DominantBackgroundColor" target="_blank" rel="noopener noreferrer"&gt;available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Namuan&lt;/strong&gt; &lt;a href="https://twitter.com/deskriders_twt/status/1759688935444287993" target="_blank" rel="noopener noreferrer"&gt;shared a video of MirrOllama&lt;/a&gt;
: &amp;ldquo;Desktop application to talk to multiple models using &lt;a href="https://github.com/ollama/ollama" target="_blank" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;
 (Get up and running with large language models locally). Idea is to use multiple (up to 3) models simultaneously and select the best answer. ️I built it for my own use but hopefully useful for others as well.&amp;rdquo; Sources are &lt;a href="https://github.com/namuan/mirrollama" target="_blank" rel="noopener noreferrer"&gt;available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ilyriadz/mawdja" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;ilyriadz&lt;/strong&gt; open sourced his JavaFX game engine &amp;ldquo;mawdja&amp;rdquo;&lt;/a&gt;
 and &amp;ldquo;My javafx game &lt;a href="https://ilyriadz.itch.io/almaseer-almahtoom" target="_blank" rel="noopener noreferrer"&gt;&amp;lsquo;Almaseer Almahtoom&amp;rsquo;&lt;/a&gt;
 RC1 was realized.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; announced new speech-to-text in FXGL:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;The next version of FXGL brings the fxgl-intelligence module with a range of features. &lt;a href="https://twitter.com/AlmasBaim/status/1756048026882150872" target="_blank" rel="noopener noreferrer"&gt;The one shown in the video is text to speech&lt;/a&gt;
. The API is pure Java code. You can play with it very soon.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;An &lt;a href="https://twitter.com/AlmasBaim/status/1756610895088636371" target="_blank" rel="noopener noreferrer"&gt;example of speech to text&lt;/a&gt;
, coming to the next version FXGL. The left app uses text to speech, the right one uses speech to text. Demo shows: Java String -&amp;gt; speech output (speakers) -&amp;gt; speech input (mic) -&amp;gt; String. Anyone wants to build speech controlled games? 😃&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heshan Thenura Kariyawasam&lt;/strong&gt; , &lt;strong&gt;OrangoMango&lt;/strong&gt; , and &lt;strong&gt;Sean Phillips&lt;/strong&gt; are &lt;a href="https://twitter.com/SeanMiPhillips/status/1755640542120063394" target="_blank" rel="noopener noreferrer"&gt;cooperating on X and sharing experiences&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lottie4j.com/index.html" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; published a small update about the Lottie4J project&lt;/a&gt;
 as he is diving deeper into the Lottie-format (vector animations for the web).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/maxandersen/status/1751725403553546275" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Max Rydahl Andersen&lt;/strong&gt; is expecting 2024 to be the year of Java on desktop&lt;/a&gt;
: &amp;ldquo;We got early &lt;a href="https://github.com/quarkiverse/quarkus-fx" target="_blank" rel="noopener noreferrer"&gt;JavaFX support for Quarkus contribution in Quarkuverse Hub&lt;/a&gt;
&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/haltraet/status/1753728173387153866" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hallvard Trætteberg&lt;/strong&gt;&lt;/a&gt;
 shared &lt;a href="https://github.com/hallvard/fxml-template-processor" target="_blank" rel="noopener noreferrer"&gt;fxml-template-processor on GitHub&lt;/a&gt;
: &amp;ldquo;String templates (preview in Java 21) allow you to inject expression values into strings, so you don&amp;rsquo;t need to use explicit string concatenation, StringBuilder or formatting. An important point of template strings is building other data types from the string and constrain and validate the input accordingly. This project contains a String template processor for FXML, so you can use template strings for FXML code and convert to Node structures with FXMLLoader.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; &lt;a href="https://twitter.com/P_Duke/status/1760765867992731766" target="_blank" rel="noopener noreferrer"&gt;shared videos showing work in progress on NavigationPane Control&lt;/a&gt;
 that&amp;rsquo;s in the FXComponents library, using the FXThemes library behind the scenes to achieve a background blur effect on the window.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-podcast-video-books"&gt;Podcast, Video, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For the online JChampions Conference, &lt;strong&gt;Paul and Gail Anderson&lt;/strong&gt; presented &amp;ldquo;Are You Game? Mobile Development with Modern Java, JavaFX, and GraalVM&amp;rdquo;. The video recording &lt;a href="https://www.youtube.com/watch?v=9h-BoB6UjiE" target="_blank" rel="noopener noreferrer"&gt;is available here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;At Fosdem in Brussels, &lt;strong&gt;Frank Delporte&lt;/strong&gt; showed a JavaFX AI-Chat-application based on LangChain4J to interact with a documentation set. 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 are available on his blog&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/wolflook/status/1744805486690537806" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Wolfgang Weigend&lt;/strong&gt; announced&lt;/a&gt;
 the &lt;a href="https://www.zeiss.com/meditec/en/news-events/events/jfx-adopters-meeting.html" target="_blank" rel="noopener noreferrer"&gt;final agenda online&lt;/a&gt;
 for the &amp;ldquo;JFX Adopters Meeting&amp;rdquo; on 6th of March 2024.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Published on JavaTechOnline: &amp;ldquo;&lt;a href="https://javatechonline.com/javafx-tutorial-javafx-applications-in-java/" target="_blank" rel="noopener noreferrer"&gt;JavaFX Tutorial: How To Create Rich Desktop Applications In Java?&lt;/a&gt;
&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;WebFX now &lt;a href="https://github.com/webfx-project/webfx/discussions/27" target="_blank" rel="noopener noreferrer"&gt;supports WebGL&lt;/a&gt;
: &amp;ldquo;This means that you can program a JavaFX canvas with a WebGL context in the browser.&amp;rdquo; A &lt;a href="https://cube.webfx.dev/" target="_blank" rel="noopener noreferrer"&gt;web demo is available here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/111838246384894266" target="_blank" rel="noopener noreferrer"&gt;Message from &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;a href="https://mastodon.social/@laurent_bourges" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Laurent Bourges&lt;/strong&gt;&lt;/a&gt;
 is an exceptional &lt;em&gt;independent&lt;/em&gt; OpenJDK and OpenJFX contributor. I guess most of the developers using his code don&amp;rsquo;t even realise the amazing work he does. Please &lt;a href="https://mastodon.social/@laurent_bourges/111776388216851460" target="_blank" rel="noopener noreferrer"&gt;let him know how much you appreciate his work on the Marlin renderer&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1752347204474249564" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is a big fan of AtlantaFX&lt;/a&gt;
: &amp;ldquo;We liked the sampler app of &lt;a href="https://www.jfx-central.com/libraries/atlantafx" target="_blank" rel="noopener noreferrer"&gt;AtlantaFX&lt;/a&gt;
 so much that we are now using it in-house for our own theming / styles app.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-8-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/tools/webswing" target="_blank" rel="noopener noreferrer"&gt;Webswing got listed in the tools section&lt;/a&gt;
. It&amp;rsquo;s a web server that allows you to run your (old) Swing, JavaFX, NetBeans or Applet application inside your web browser in a blink of an eye. They posted a nice &lt;a href="https://twitter.com/Webswing_org/status/1753054902941556928" target="_blank" rel="noopener noreferrer"&gt;shoutout to JFX Central on Twitter/X&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Available soon: &lt;a href="https://twitter.com/dlemmermann/status/1756715833848459656" target="_blank" rel="noopener noreferrer"&gt;new detailed icon page&lt;/a&gt;
 where you can find out everything there is to know about the icon, e.g. the Ikonli &amp;ldquo;literal&amp;rdquo; (code), the CSS rule, the Java code required, the maven / gradle dependency, the SVG path, and so on. The main reason for having this detail page is so that you can send a URL to somebody else pointing directly at a specific icon and all of its info.&lt;/li&gt;
&lt;li&gt;All the JFX Central Links Of The Week of January got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-january-2024"&gt;posted on Foojay.io&lt;/a&gt;
, the website for Friends Of OpenJDK.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Builders, Withers, and Records - Java’s path to immutability</title><link>https://foojayio.github.io/website/today/builders-withers-and-records-javas-path-to-immutability/</link><pubDate>Wed, 28 Feb 2024 12:19:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/builders-withers-and-records-javas-path-to-immutability/</guid><description>&lt;p&gt;&lt;strong&gt;We know that immutable objects are easier to maintain, lead to fewer errors, and are multi-thread friendly. In this article, I will talk about two different approaches in Java to creating objects: Builders and Withers, typically used in the context of immutable objects, along with a new type of immutable object in Java: Records.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When it comes to creating objects in Java, we can use fluent approaches, especially for complex objects containing lots of fields, that will increase readability and also adaptability allowing us to evolve the code with lower impact on the existing code. And we want to because fluent code is both easier to read and easier to write.&lt;/p&gt;</description></item><item><title>You’re Invited to IntelliJ IDEA Conf 2024!</title><link>https://foojayio.github.io/website/today/youre-invited-to-intellij-idea-conf-2024/</link><pubDate>Tue, 27 Feb 2024 08:13:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/youre-invited-to-intellij-idea-conf-2024/</guid><description>&lt;p&gt;We are back and excited to invite you to &lt;a href="http:https://lp.jetbrains.com/intellij-idea-conf-2024/?utm_source=partners&amp;amp;amp;utm_medium=foojay&amp;amp;amp;utm_campaign=intellijideaconf//" title="IntelliJ IDEA Conf 2024"&gt;IntelliJ IDEA Conf 2024&lt;/a&gt;
, a developer-focused, live, online event that is free for all to attend!&lt;/p&gt;
&lt;p&gt;IntelliJ IDEA Conf celebrates the developer community and its desire to learn and improve every day.&lt;/p&gt;
&lt;p&gt;Join us for this free, live online conference and learn from industry leaders and experts on March 6&amp;ndash;7, 2024.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll be able to learn about a variety of topics, like Core Java, Kotlin, Java and AI, Apache Maven 4, Spring Boot, Micronaut, Testcontainers, Secure Coding, and testing frameworks like JUnit, Mockito, and AssertJ.&lt;/p&gt;</description></item><item><title>Foojay Podcast #43: Modern Java Testing</title><link>https://foojayio.github.io/website/today/foojay-podcast-43/</link><pubDate>Mon, 26 Feb 2024 08:03:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-43/</guid><description>&lt;p&gt;As developers, we all want to write bug free and high quality code. Writing tests is a crucial part to achieve this.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s explore the art of ensuring robust and bug-free code in the Java ecosystem.&lt;/p&gt;
&lt;p&gt;Whether you&amp;rsquo;re a seasoned developer or just starting out, there&amp;rsquo;s a lot you can learn from the experts in this podcast about testing methodologies, tools, and best practices, empowering you to write reliable Java applications.&lt;/p&gt;</description></item><item><title>Hello eBPF: Tail calls and your first eBPF application (4)</title><link>https://foojayio.github.io/website/today/hello-ebpf-tail-calls-and-your-first-ebpf-application-4/</link><pubDate>Fri, 23 Feb 2024 08:44:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/hello-ebpf-tail-calls-and-your-first-ebpf-application-4/</guid><description>&lt;p&gt;Welcome back to my series on eBPF. Two weeks ago, I showed you &lt;a href="https://foojayio.github.io/website/today/hello-ebpf-recording-data-in-event-buffers-3/"&gt;how to use perf event buffers to stream data from the eBPF program to the Java application&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This week, we will finish chapter 2 of the Learning eBPF book, learn how to use tail calls and the hello-ebpf project as a library and implement one of the book&amp;rsquo;s exercises.&lt;/p&gt;
&lt;p&gt;We start with function and tail calls:&lt;/p&gt;
&lt;h2 id="h2-0-function-calls"&gt;Function Calls&lt;/h2&gt;
&lt;p&gt;Regular C programs are divided into functions that call each other; so far in this series, all our eBPF programs consisted of just a single function that calls kernel functions. But can we call other eBPF functions? End of 2017, Daniel Borkman et al. introduced the ability to call other functions defined in eBPF:&lt;/p&gt;</description></item><item><title>foojay – 12 Lessons Learned From Doing The 1BRC Challenge</title><link>https://foojayio.github.io/website/today/12-lessons-learned-from-doing-the-one-billion-row-challenge/</link><pubDate>Thu, 22 Feb 2024 10:44:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/12-lessons-learned-from-doing-the-one-billion-row-challenge/</guid><description>&lt;p&gt;The One Billion Row Challenge or 1BRC or 1️⃣🐝🏎 was a challenge to read a CSV file of one billion rows with &amp;ldquo;station name;temperature&amp;rdquo; data and compute the min/average/max temperature per weather station as fast as possible.&lt;/p&gt;
&lt;p&gt;If you want to know what is the fastest algorithm, you can go the the &lt;a href="https://github.com/gunnarmorling/1brc" target="_blank" rel="noopener noreferrer"&gt;1BRC page&lt;/a&gt;
. But the real answer is &amp;ldquo;&lt;strong&gt;it depends&lt;/strong&gt;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;It depends:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The machine you&amp;rsquo;re running it on&lt;/li&gt;
&lt;li&gt;How far are you ready to use hacks in your code&lt;/li&gt;
&lt;li&gt;The JVM&lt;/li&gt;
&lt;li&gt;The data in the file&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-it-works-on-my-machine"&gt;It works on my machine&lt;/h2&gt;
&lt;p&gt;or to be more precise, it&amp;rsquo;s faster on my machine.&lt;/p&gt;</description></item><item><title>Cloud Cost Optimization Is Hard, Java Can Help</title><link>https://foojayio.github.io/website/today/cloud-cost-optimization-is-hard-java-can-help/</link><pubDate>Wed, 21 Feb 2024 12:07:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/cloud-cost-optimization-is-hard-java-can-help/</guid><description>&lt;p&gt;In my recent conversation with William Fellows, Research Director at S&amp;amp;P Global Market Research, we &lt;a href="https://www.youtube.com/watch?v=nAP3bYxdsZw&amp;amp;t=1s" target="_blank" rel="noopener noreferrer"&gt;discussed ways to reduce cloud waste&lt;/a&gt;
 specifically for Java workloads. After all, cloud cost optimization is hard.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/nAP3bYxdsZw?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;A large delta is growing between budgeted and actual spending. Top areas for spending are cloud integration and modernization services, security and compliance monitoring, and application modernization &amp;ndash; specifically applications written in Java.&lt;/p&gt;</description></item><item><title>Hardening Apache APISIX with the OWASP's Coraza and Core Ruleset</title><link>https://foojayio.github.io/website/today/hardening-apache-apisix-with-the-owasps-coraza-and-core-ruleset/</link><pubDate>Tue, 20 Feb 2024 08:01:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/hardening-apache-apisix-with-the-owasps-coraza-and-core-ruleset/</guid><description>&lt;blockquote&gt;
&lt;p&gt;The Open Worldwide Application Security Project is an online community that produces freely available articles, methodologies, documentation, tools, and technologies in the fields of IoT, system software and web application security. The OWASP provides free and open resources. It is led by a non-profit called The OWASP Foundation. The OWASP Top 10 - 2021 is the published result of recent research based on comprehensive data compiled from over 40 partner organizations.&lt;/p&gt;</description></item><item><title>Flexible Jakarta EE Apps With Apache CouchDB NoSQL Database</title><link>https://foojayio.github.io/website/today/build-flexible-jakarta-ee-applications-with-apache-couchdb-nosql-database/</link><pubDate>Mon, 19 Feb 2024 07:33:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/build-flexible-jakarta-ee-applications-with-apache-couchdb-nosql-database/</guid><description>&lt;p&gt;&lt;strong&gt;Are you a Jakarta EE developer interested in leveraging the power of NoSQL databases for your applications?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This webinar - &lt;a href="https://youtu.be/PVp40gXJ954?feature=shared" target="_blank" rel="noopener noreferrer"&gt;watch the recording here&lt;/a&gt;
 - is designed specifically to introduce you to the world of NoSQL through CouchDB, a high-performance, scalable database ideal for cloud-native applications.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/PVp40gXJ954?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;h2 id="h2-0-what-is-couchdb"&gt;What is CouchDB?&lt;/h2&gt;
&lt;p&gt;CouchDB is a NoSQL database used in distributed and cloud environments. It uses a schema-free JSON document format, which allows for more flexible and efficient data models.&lt;/p&gt;</description></item><item><title>Video: Spring Boot Testcontainers Support for Local Development</title><link>https://foojayio.github.io/website/today/video-spring-boot-testcontainers-support-for-local-development/</link><pubDate>Fri, 16 Feb 2024 09:07:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/video-spring-boot-testcontainers-support-for-local-development/</guid><description>&lt;p&gt;Spring Boot has supported TestsContainers for running services during tests for quite a while.&lt;/p&gt;
&lt;p&gt;With Spring Boot 3.1, Testcontainers support for local development was added. This video will show you how this works and how to use it.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/GoBm7BoufIM?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;</description></item><item><title>State of Open (Source?!) and Free AI</title><link>https://foojayio.github.io/website/today/state-of-open-source-and-free-ai-a-fosdem-recap/</link><pubDate>Thu, 15 Feb 2024 13:04:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/state-of-open-source-and-free-ai-a-fosdem-recap/</guid><description>&lt;p&gt;&lt;em&gt;Disclaimer: This article is on the things I learned/observed spending the day in AI and Machine Learning Developer Room at FOSDEM 24. Opinions and statements are mine and have nothing to do with my employer. This article might raise more questions than answers, but in my opinion, we all need more awareness on this topic and get familiar with the (right) questions that are to be answered.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="h3-0-fosdem"&gt;FOSDEM&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://fosdem.org/2024/" title="FOSDEM" target="_blank" rel="noopener noreferrer"&gt;FOSDEM&lt;/a&gt;
 (Free Open-Source Developers&amp;rsquo;European Meeting) is a community-organised event that is free and non-commercial. The aim is to provide a venue for free and open-source software developers and communities to:&lt;/p&gt;</description></item><item><title>Java top most detected issues</title><link>https://foojayio.github.io/website/today/top-most-detected-issues-in-java-projects/</link><pubDate>Wed, 14 Feb 2024 09:49:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/top-most-detected-issues-in-java-projects/</guid><description>&lt;p&gt;&lt;strong&gt;Using the telemetry from SonarLint after analyzing thousands of projects, these are the top most raised issues in Java projects.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We know that having clean code in our projects is important, and every developer would agree on that. But, according to what SonarLint telemetry shows, there are still lots of issues that appear in the huge list of analyzed projects.&lt;/p&gt;
&lt;p&gt;From the SonarLint telemetry for the last 2 years, with more than 2.5 million issues, I have taken the top most common issues happening in Java projects, from the +600 rules covering the language, considering quality and security to see how we can avoid them and align our code a bit more towards having a consistent, intentional, adaptable, and responsible code.&lt;/p&gt;</description></item><item><title>Minimize costs utilizing the cloud with Spring-Data-Eclipse-Store</title><link>https://foojayio.github.io/website/today/minimize-costs-by-utilizing-cloud-storage-with-spring-data-eclipse-store/</link><pubDate>Tue, 13 Feb 2024 15:26:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/minimize-costs-by-utilizing-cloud-storage-with-spring-data-eclipse-store/</guid><description>&lt;p&gt;Sooner or later any Spring application needs to store data. And of course, the first and easiest move is to utilize &lt;a href="https://spring.io/projects/spring-data-jpa" target="_blank" rel="noopener noreferrer"&gt;Spring Data JPA&lt;/a&gt;
. You can set up your data storage without knowing which relational database you will use in production and simply start coding without worrying about that.&lt;/p&gt;
&lt;p&gt;It is the easiest and most convenient way to store data (in a relational database like PostgreSQL), yet in the cloud environment it is also an expensive way. Pricing at AWS RDS starts at 30$/month with tiny-Instances and always have &lt;strong&gt;fixed monthly costs regardless of its usage&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>DTrace Revisited: Advanced Debugging Techniques</title><link>https://foojayio.github.io/website/today/dtrace-revisited-advanced-debugging-techniques/</link><pubDate>Tue, 13 Feb 2024 07:46:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/dtrace-revisited-advanced-debugging-techniques/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#dtrace-overview"&gt;DTrace Overview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#understanding-dtraces-capabilities"&gt;Understanding DTrace&amp;rsquo;s Capabilities&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#system-monitoring-and-analysis"&gt;System Monitoring and Analysis&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#process-and-performance-analysis"&gt;Process and Performance Analysis&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#customizability-and-flexibility"&gt;Customizability and Flexibility&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#real-world-applications"&gt;Real-World Applications&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#performance-and-compatibility-of-dtrace"&gt;Performance and Compatibility of DTrace&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#cross-platform-compatibility"&gt;&lt;strong&gt;Cross-Platform Compatibility&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#compatibility-challenges-on-macos"&gt;&lt;strong&gt;Compatibility Challenges on MacOS&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#customizability-and-flexibility-of-dtrace"&gt;Customizability and Flexibility of DTrace&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#adaptability-to-various-scenarios"&gt;&lt;strong&gt;Adaptability to Various Scenarios&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#examples-of-customizable-probes"&gt;&lt;strong&gt;Examples of Customizable Probes&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#real-world-applications-of-dtrace"&gt;Real-World Applications of DTrace&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#final-words"&gt;Final Words&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When we think of debugging, we think of breakpoints in IDEs, stepping over, inspecting variables, etc.&lt;/p&gt;
&lt;p&gt;However, there are instances where stepping outside the conventional confines of an IDE becomes essential to track and resolve complex issues. This is where tools like DTrace come into play, offering a more nuanced and powerful approach to debugging than traditional methods.&lt;/p&gt;</description></item><item><title>Is JDWP's onjcmd feature worth using?</title><link>https://foojayio.github.io/website/today/is-jdwps-onjcmd-feature-worth-using/</link><pubDate>Mon, 12 Feb 2024 11:25:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/is-jdwps-onjcmd-feature-worth-using/</guid><description>&lt;p&gt;A few months ago, I told you about the onjcmd feature in my blog post &lt;a href="https://foojayio.github.io/website/today/level-up-your-java-debugging-skills-with-on-demand-debugging/"&gt;Level-up your Java Debugging Skills with on-demand Debugging&lt;/a&gt;
 (which is coming to JavaLand 2024). The short version is that adding onjcmd=y to the list of JDWP options allows you to delay accepting the incoming connection request in the JDWP agent until &lt;code&gt;jcmd &amp;lt;JVM pid&amp;gt; VM.start_java_debugging&lt;/code&gt; is called.&lt;/p&gt;
&lt;p&gt;The main idea is that the JDWP agent&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;only listens on the debugging port after it is triggered, which could have some security benefits&lt;/li&gt;
&lt;li&gt;and that the JDWP agent causes less overhead while waiting, compared to just accepting connections from the beginning.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The first point is debatable; one can find arguments for and against it. But for the second point, we can run some benchmarks. After renewed discussions, I started benchmarking to conclude whether the onjcmd feature improves on-demand debugging performance. &lt;em&gt;Spoiler alert: It doesn&amp;rsquo;t.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Evolution of Microservices &amp; SOA -- the Architectural Landscape</title><link>https://foojayio.github.io/website/today/evolution-of-microservices-from-soa-to-modern-architecture/</link><pubDate>Fri, 09 Feb 2024 09:30:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/evolution-of-microservices-from-soa-to-modern-architecture/</guid><description>&lt;h4 id="the-evolution-of-microservices-with-soa-navigating-the-architectural-landscape-"&gt;The Evolution of Microservices with SOA: Navigating the Architectural Landscape 🗺️&lt;/h4&gt;
&lt;p&gt;Microservices represent a paradigm shift in the way we construct distributed systems. This comprehensive guide dives into the heart of microservices and service-oriented architecture (SOA), comparing their roles in current development ecosystems.&lt;/p&gt;
&lt;p&gt;By understanding the evolution and the modern application of microservices, developers can harness their full potential for creating flexible, scalable, and resilient applications. 🚀&lt;/p&gt;
&lt;h4 id="microservices-and-soa-a-comprehensive-guide-"&gt;Microservices and SOA: A Comprehensive Guide 📚&lt;/h4&gt;
&lt;p&gt;Microservices and service-oriented architecture (SOA) are two popular architectural styles for building distributed systems. Both approaches share the goal of breaking down a large, complex system into smaller, more manageable components. However, there are some key differences between the two approaches. 🤔&lt;/p&gt;</description></item><item><title>Kicking the Tires of Docker Scout</title><link>https://foojayio.github.io/website/today/kicking-the-tires-of-docker-scout/</link><pubDate>Thu, 08 Feb 2024 08:47:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/kicking-the-tires-of-docker-scout/</guid><description>&lt;p&gt;I never moved away from Docker Desktop.&lt;/p&gt;
&lt;p&gt;For some time, after you use it to build an image, it prints a message:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic"&gt;What's Next?
 View a summary of image vulnerabilities and recommendations → docker scout quickview&lt;/pre&gt;
&lt;p&gt;I decided to give it a try. I&amp;rsquo;ll use the root commit of my &lt;a href="https://github.com/nfrankel/opentelemetry-tracing" target="_blank" rel="noopener noreferrer"&gt;OpenTelemetry tracing demo&lt;/a&gt;
. Let&amp;rsquo;s execute the proposed command:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="bash"&gt;docker scout quickview otel-catalog:1.0&lt;/pre&gt;
&lt;p&gt;Here&amp;rsquo;s the result:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic"&gt; ✓ Image stored for indexing
 ✓ Indexed 272 packages
 Target │ otel-catalog:1.0 │ 0C 2H 15M 23L
 digest │ 7adfce68062e │
 Base image │ eclipse-temurin:21-jre │ 0C 0H 15M 23L
 Refreshed base image │ eclipse-temurin:21-jre │ 0C 0H 15M 23L
 │ │
What's Next?
 View vulnerabilities → docker scout cves otel-catalog:1.0
 View base image update recommendations → docker scout recommendations otel-catalog:1.0
 Include policy results in your quickview by supplying an organization → docker scout quickview otel-catalog:1.0 --org &amp;lt;organization&amp;gt;&lt;/pre&gt;
&lt;p&gt;Docker gives out exciting bits of information:&lt;/p&gt;</description></item><item><title>foojay – Sorting Text in Java</title><link>https://foojayio.github.io/website/today/sorting-text-in-java-how-complicated-can-it-be/</link><pubDate>Wed, 07 Feb 2024 08:41:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/sorting-text-in-java-how-complicated-can-it-be/</guid><description>&lt;p&gt;&lt;strong&gt;Sorting text should be easy as String implements the &lt;em&gt;Comparable&lt;/em&gt; interface. In this article, we&amp;rsquo;ll see that it can be more complicated than that.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Text is represented by the &lt;em&gt;String&lt;/em&gt; class in Java. In this article we&amp;rsquo;ll explore how to sort String, the advantages and drawbacks of each possibility.&lt;/p&gt;
&lt;h2 id="h2-0-level-1-comparable"&gt;Level 1: Comparable&lt;/h2&gt;
&lt;p&gt;The class String implements &lt;em&gt;Comparable&lt;/em&gt; so sorting a list of String is as simple as&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;List&amp;lt;String&amp;gt; textList = new ArrayList&amp;lt;&amp;gt;(List.of("test","test11","test2","Test4","test3","test5","tést2","test2","3test","testa","test2a","test4a","test2b"));
Collections.sort(textList);&lt;/pre&gt;
&lt;p&gt;=&amp;gt; &lt;strong&gt;[3test, Test4, test, test11, test2, test2, test2a, test2b, test3, test4a, test5, testa, tést2]&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Migrate to Spring Boot 3.2 with OpenRewrite</title><link>https://foojayio.github.io/website/today/openrewrite-migrate-to-spring-boot-3-2/</link><pubDate>Tue, 06 Feb 2024 08:17:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/openrewrite-migrate-to-spring-boot-3-2/</guid><description>&lt;p&gt;&lt;strong&gt;As a developer, we frequently face the challenges of migrating to newer versions of frameworks and refactoring code. However, we can effortlessly achieve these tasks with the assistance of &lt;a href="https://docs.openrewrite.org/" target="_blank" rel="noopener noreferrer"&gt;OpenRewrite&lt;/a&gt;
. OpenRewrite provides a stack of recipes specifically designed for migration purposes. By utilizing the appropriate recipes and integrating with the rewrite plugin, we can effectively migrate our code.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Two months ago, the Spring Boot 3.2 version released, bringing numerous changes to the framework. If you are involved in multiple projects and require migrating to the latest version, developers may find manually updating all the code repositories with the necessary upgrade changes a challenging task.&lt;/p&gt;</description></item><item><title>Foojay Podcast #42: Jozi-JUG and Cape Town Java Community</title><link>https://foojayio.github.io/website/today/foojay-podcast-42/</link><pubDate>Mon, 05 Feb 2024 08:50:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-42/</guid><description>&lt;p&gt;Once a month in this podcast, we talk about the history of a Java User Group and the people behind it.&lt;/p&gt;
&lt;p&gt;Today, we are traveling to Cape Town and Johannesburg to learn more about its Java communities.&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/fdJIDSy9_MA?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Hello eBPF: Recording data in event buffers (3)</title><link>https://foojayio.github.io/website/today/hello-ebpf-recording-data-in-event-buffers-3/</link><pubDate>Fri, 02 Feb 2024 14:45:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/hello-ebpf-recording-data-in-event-buffers-3/</guid><description>&lt;p&gt;&lt;strong&gt;Welcome back to my article series on eBPF. Last week, I showed you how the &lt;a href="https://foojayio.github.io/website/today/hello-ebpf-recording-data-in-basic-ebpf-maps-2/"&gt;eBPF program and Java application can communicate using eBPF maps&lt;/a&gt;
. This allowed us to write an application that counts the number of &lt;code&gt;execve&lt;/code&gt; calls per user.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This week, I&amp;rsquo;ll show you briefly how to use another kind of eBPF maps, the perf event buffer, and run tests with docker and &lt;a href="https://junit.org/junit5/docs/current/user-guide/" target="_blank" rel="noopener noreferrer"&gt;JUnit 5&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This article is shorter than the previous one as I&amp;rsquo;m preparing for the OpenJDK committers workshop in Brussels and my &lt;a href="https://fosdem.org/2024/schedule/speaker/WS77F8/" target="_blank" rel="noopener noreferrer"&gt;Python and Java DevRoom talks&lt;/a&gt;
 at FOSDEM. I&amp;rsquo;m happy to meet my readers; say hi when you&amp;rsquo;re there.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Achieving High Throughput Without Sacrificing Latency</title><link>https://foojayio.github.io/website/today/achieving-high-throughput-without-sacrificing-latency/</link><pubDate>Fri, 02 Feb 2024 09:39:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/achieving-high-throughput-without-sacrificing-latency/</guid><description>&lt;h2 id="h2-0-latency-and-throughput"&gt;Latency and Throughput&lt;/h2&gt;
&lt;p&gt;In discussions on performance, it is common to encounter the terms &lt;em&gt;Latency&lt;/em&gt; and &lt;em&gt;Throughput&lt;/em&gt; to describe the characteristics of a software component.&lt;/p&gt;
&lt;p&gt;We can define these terms as follows:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Latency&lt;/strong&gt; is a measure of the time taken for one thing to occur. For example, it could be the time taken to respond to a change in the price of a financial instrument that could influence the decision on whether to buy, or sell. It could be the time taken for a component monitoring some external device to respond to an indication of a change in the status of that device (like a change in temperature reported from a thermometer).&lt;/p&gt;</description></item><item><title>JavaFX Links of January 2024</title><link>https://foojayio.github.io/website/today/javafx-links-of-january-2024/</link><pubDate>Wed, 31 Jan 2024 08:55:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-january-2024/</guid><description>&lt;p&gt;This is the first JavaFX LinksOfTheMonth review for 2024, an overview of the LinksOfTheWeek that got published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during January.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="h2-1-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;JavaFX 21.0.2 (January 2024) is available on the Gluon website&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt; added ZIP file support to LogoRRR: &amp;ldquo;&lt;a href="https://twitter.com/rladstaetter/status/1741795036826566704" target="_blank" rel="noopener noreferrer"&gt;No more unzipping before analysing your latest bugs from ops&lt;/a&gt;
!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/carldea/status/1738937742984126795" target="_blank" rel="noopener noreferrer"&gt;A Christmas present by &lt;strong&gt;Carl Dea&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;I wanted to give you a sneak peek at a JavaFX based clinical interface terminology system (knowledge base).&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heshan Kariyawasam&lt;/strong&gt; &amp;ldquo;&lt;a href="https://www.linkedin.com/posts/heshanthenura_java-javafx-music-activity-7148745375539970048-aKXD" target="_blank" rel="noopener noreferrer"&gt;made something random today night just for fun&lt;/a&gt;
. For me it&amp;rsquo;s so satisfying to watch&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; is working on a &lt;a href="https://twitter.com/crschnick/status/1743296483544150114" target="_blank" rel="noopener noreferrer"&gt;standalone application running on NixOS&lt;/a&gt;
 with Deepin desktop environment: &amp;ldquo;The popup windows don&amp;rsquo;t support transparency and the tray icon is cut off, but other than that it is working fine.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt; published a &lt;a href="https://twitter.com/rladstaetter/status/1745586922515288416" target="_blank" rel="noopener noreferrer"&gt;new release of LogoRRR&lt;/a&gt;
: &amp;ldquo;This update brings enhanced zip file support and animated clipboard actions, alongside various bug fixes.&amp;rdquo; &lt;a href="https://github.com/rladstaetter/LogoRRR/releases/tag/24.2.0" target="_blank" rel="noopener noreferrer"&gt;Here you can find the release notes&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/carldea_java-javafx-activity-7153563217930125312-llns/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; bumped versions for ScenicView&lt;/a&gt;
: &amp;ldquo;Yay, my &lt;a href="https://github.com/JonathanGiles/scenic-view" target="_blank" rel="noopener noreferrer"&gt;PR was accepted&lt;/a&gt;
 for the excellent JavaFX debugging tool ScenicView. It now works with JDK 11+ and JavaFX 21.0.1. I believe the release should be out soon, but if you want to the latest binaries just clone and build the project locally 🙂.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1746593368463876123" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; is having fun with maths&lt;/a&gt;
: &amp;ldquo;Now the application automatically inverts the transformation equations and applies them to any function or quadratic equation for y.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=5ogC95PX0Ag" target="_blank" rel="noopener noreferrer"&gt;Video with a walk-through of LogoRRR&lt;/a&gt;
: &amp;ldquo;While exploring the log files is an essential part of troubleshooting, sometimes you may not want to go so deep. In fact, when you get an error, you may simply want to see what happened as fast as possible and in a clear way. LogoRRR is a tool that does precisely that and provides you with a quick way to filter out critical events or other points of interest.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Some nice small demo applications again by &lt;a href="https://twitter.com/orango_mango" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt;&lt;/a&gt;
:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/shorts/2T3UNo5EVXg" target="_blank" rel="noopener noreferrer"&gt;Falling sand video&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://orangomango.github.io/Clock/" target="_blank" rel="noopener noreferrer"&gt;Clock drawn on the Canvas, running in the browser&lt;/a&gt;
 with about &lt;a href="https://github.com/OrangoMango/Clock/blob/main/src/main/java/com/orangomango/clock/Clock.java" target="_blank" rel="noopener noreferrer"&gt;100 lines of code&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patrik Karlström&lt;/strong&gt; is &amp;ldquo;&lt;a href="https://twitter.com/PatrikKarlstrom/status/1750568870241280298" target="_blank" rel="noopener noreferrer"&gt;in the middle of a major facelift of mapollage&lt;/a&gt;
, a KML generator. This time combining JavaFX with NetBeans Java Platform. It&amp;rsquo;s great as usual, and now I&amp;rsquo;m using the &amp;ldquo;output window&amp;rdquo; with all it&amp;rsquo;s goodies like folding, coloring &amp;amp; links. It&amp;rsquo;s all there, for free!&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; made a perfect Snake AI, &lt;a href="https://twitter.com/orango_mango/status/1741480547627507809" target="_blank" rel="noopener noreferrer"&gt;check the video&lt;/a&gt;
! You can find the game (and play it) with a link to the sources on &lt;a href="https://orangomango.itch.io/snake" target="_blank" rel="noopener noreferrer"&gt;orangomango.itch.io/snake&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; published FXGL game engine 21 with:
&lt;ul&gt;
&lt;li&gt;Java and JavaFX 21&lt;/li&gt;
&lt;li&gt;Numerous dialogue editor improvements&lt;/li&gt;
&lt;li&gt;Initial hex support for Tiled&lt;/li&gt;
&lt;li&gt;Extra Image processing API&lt;/li&gt;
&lt;li&gt;Video cutscenes&lt;/li&gt;
&lt;li&gt;Full &lt;a href="https://github.com/AlmasB/FXGL/releases/tag/21" target="_blank" rel="noopener noreferrer"&gt;changelog on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Almas also &lt;a href="https://twitter.com/AlmasBaim/status/1741128302050378091" target="_blank" rel="noopener noreferrer"&gt;found another awesome project&lt;/a&gt;
 built with JavaFX and FXGL: &amp;ldquo;Royal Demons&amp;rdquo;. From the readme: &amp;ldquo;&amp;hellip; won the Best Project Competition out of a total of 114 teams at Georgia Tech CS 2340 Objects and Design course during Spring 2021.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;And &lt;a href="https://twitter.com/AlmasBaim/status/1749742997145583662" target="_blank" rel="noopener noreferrer"&gt;he found out&lt;/a&gt;
 that: &amp;ldquo;team JavaFX is now right in the middle of JVM game projects on the 1st page of GitHub search with 3960 stars! Since FXGL is now 49.4% #Kotlin and 49.1% #Java, I had to cheat and include both &lt;code&gt;language: Java, language: Kotlin&lt;/code&gt; in &lt;a href="https://github.com/search?o=desc&amp;amp;q=java&amp;#43;game&amp;#43;language%3AJava&amp;#43;language%3AKotlin&amp;amp;s=stars&amp;amp;type=repositories" target="_blank" rel="noopener noreferrer"&gt;the search&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/maxandersen/status/1750504675630022941" target="_blank" rel="noopener noreferrer"&gt;Max Rydahl Andersen&lt;/a&gt;
 wants to collaborate with Almas to make FXGL and game development easier with JBang: &amp;ldquo;I&amp;rsquo;m happy to help to make &lt;a href="https://github.com/almasb/FXGLGames" target="_blank" rel="noopener noreferrer"&gt;FXGL example games&lt;/a&gt;
 &amp;ldquo;jbang friendly&amp;rdquo; &amp;hellip; there are lots of ways we can do that.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;New &lt;a href="https://twitter.com/LondonSoftworks/status/1742674131299000615" target="_blank" rel="noopener noreferrer"&gt;video update by &lt;strong&gt;London Softworks&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Trying my best to work every day, so many exciting things to come in the near future! For now, enjoy a small demo of a few components (Texture, Mesh, Transformation) being fully implemented!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/HlanHtetKyaw1/status/1742194376820814247" target="_blank" rel="noopener noreferrer"&gt;Beta preview by &lt;strong&gt;Hlan Htet Kyaw&lt;/strong&gt; of Brain Buster&lt;/a&gt;
: &amp;ldquo;Please test and provide feedback. Any help would be appreciated.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/shannah78" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Steve Hannah&lt;/strong&gt;&lt;/a&gt;
 published a new &lt;a href="https://jdeploy.substack.com/p/new-intellij-plugin-for-jdeploy" target="_blank" rel="noopener noreferrer"&gt;IntelliJ Plugin for jDeploy&lt;/a&gt;
 to create a new desktop app with automated releases on GitHub in under 2 minutes: &amp;ldquo;In addition to creating the project locally, the wizard will create a new GitHub repository, that is set up to generate new releases on every commit. Within 30 seconds of creating your project, you should be able to download and install the app from GitHub releases.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;He also shared a GitHub project as a showcase for jDeploy: &lt;a href="https://github.com/shannah/fxgl-test8" target="_blank" rel="noopener noreferrer"&gt;Sample FXGL project deployed with jDeploy via GitHub releases&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Michael Gasche&lt;/strong&gt; shared a &lt;a href="https://products.autumo.ch/modules/overview#at_ui" target="_blank" rel="noopener noreferrer"&gt;showcase of a rapid development framework&lt;/a&gt;
 on the Foojay Slack with some out-of-the-box functionalities (installer, licensing/registering, app-config, update-checks, some further dialogs) for Java FX UI apps: &amp;ldquo;It has default views which can be used with a one-liner to show an HTML page, license dialog, or other content that can be switched off per platform, e.g. because the Windows installer already has one. The Registration module in the demo is a &amp;ldquo;dummy&amp;rdquo; as it is quite big and advanced and possibly involves a server.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/laurent_bourges" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Laurent Bourgès&lt;/strong&gt;&lt;/a&gt;
 reached the milestone of +125,000 downloads of his &lt;a href="https://github.com/bourgesl/marlin-renderer" target="_blank" rel="noopener noreferrer"&gt;Marlin Renderer&lt;/a&gt;
: &amp;ldquo;An open source (GPL2 + CP) Java2D RenderingEngine optimized for performance (improved memory usage (~ no GC) and footprint, better multi-threading) and better visual quality based on OpenJDK&amp;rsquo;s Pisces implementation.&amp;rdquo; And he adds: &amp;ldquo;&lt;a href="https://mastodon.social/@laurent_bourges/111776582923358418" target="_blank" rel="noopener noreferrer"&gt;Enjoy FOSS &amp;amp; see you at FOSDEM24&lt;/a&gt;
&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/carldea/status/1746712384725483585" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;JavaFX with the native background blurring effect on the MacOS is now working! Thanks to &lt;a href="https://twitter.com/shannah78" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Steve Hannah&lt;/strong&gt;&lt;/a&gt;
 for the tremendous help in understanding the native side (MacOS). &lt;a href="https://github.com/carldea/windowblur" target="_blank" rel="noopener noreferrer"&gt;Demo here&lt;/a&gt;
. Eventually will end up in &lt;a href="https://twitter.com/P_Duke" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt;&lt;/a&gt;
&amp;rsquo;s FXThemes project. I also want to give a shout-out to the amazing software engineer &lt;a href="https://github.com/beldenfox" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Martin Fox&lt;/strong&gt;&lt;/a&gt;
 (a JavaFX contributor).&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1750632079430189283" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; is asking for help testing out FXThemes&lt;/a&gt;
: &amp;ldquo;If you have a machine running Windows 10 can you run the fxthemes-samples subproject and tell me if the window that shows up has a background blur? The project is using Java17 for now&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-podcast-video-books"&gt;Podcast, Video, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href="https://www.youtube.com/watch?v=IufaUwDsHUA" target="_blank" rel="noopener noreferrer"&gt;recording of the live stream&lt;/a&gt;
 by &lt;strong&gt;Frank Delporte&lt;/strong&gt; and &lt;strong&gt;Almas Baim&lt;/strong&gt; provides a code walk-through of this blog post: &lt;a href="https://webtechie.be/post/2023-12-14-jbang-fxgl/" target="_blank" rel="noopener noreferrer"&gt;A JavaFX Game Application in a Single Java File with JBang and FXGL&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;New book by &lt;strong&gt;Peter Späth&lt;/strong&gt; : &lt;a href="https://www.amazon.nl/Frontend-Development-JavaFX-Kotlin-State/dp/1484297164" target="_blank" rel="noopener noreferrer"&gt;Frontend Development with JavaFX and Kotlin: Build State-of-the-Art Kotlin GUI Applications&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Nice video by &lt;strong&gt;Akif (Sorest) Karaca&lt;/strong&gt; to help you &lt;a href="https://www.youtube.com/watch?v=HmoRQkmyPnk" target="_blank" rel="noopener noreferrer"&gt;understand different sorting algorithms&lt;/a&gt;
 (selection, insertion, quick, bubble, heap, shell) by visualizing them with JavaFX (in Turkish).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/kinsley-kajiva/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Kinsley Kajiva&lt;/strong&gt;&lt;/a&gt;
 published a video: &amp;ldquo;&lt;a href="https://www.youtube.com/watch?v=PYv9Pp-Wu3c" target="_blank" rel="noopener noreferrer"&gt;Ripple WebRTC - JavaFX G Streamer Demo&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://airhacks.fm/#episode_278" target="_blank" rel="noopener noreferrer"&gt;Airhacks #278: &amp;ldquo;Java at Azul: The Interesting Features&amp;rdquo;&lt;/a&gt;
: &lt;a href="https://twitter.com/AdamBien" target="_blank" rel="noopener noreferrer"&gt;Adam Bien&lt;/a&gt;
 talks with &lt;a href="https://twitter.com/hansolo_" target="_blank" rel="noopener noreferrer"&gt;Gerrit Grunwald&lt;/a&gt;
 about Java desktop applications with Swing and JavaFX + many other topics.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/tobiasbriones_" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tobias Briones&lt;/strong&gt;&lt;/a&gt;
 added &lt;a href="https://blog.mathsoftware.engineer/drawing-a-rounded-triangle-via-quadratic-curves-2023-12-22" target="_blank" rel="noopener noreferrer"&gt;support for rounded triangles&lt;/a&gt;
 to the Canvas Play JavaFX project using quadratic Bézier curves.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://examples.javacodegeeks.com/examples-of-transformations-in-javafx/" target="_blank" rel="noopener noreferrer"&gt;Examples of Transformations in JavaFX&lt;/a&gt;
 by &lt;a href="https://twitter.com/OAziegbe" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Omozegie Aziegbe&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/techbuddy_dev" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tech Buddy&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;a href="https://techbuddy.dev/kotlin-tornadofx-three-layered-javafx" target="_blank" rel="noopener noreferrer"&gt;Building Three-Layered JavaFX Apps with TornadoFX and Kotlin&lt;/a&gt;
&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;JFX Adopters Meeting 2024&lt;/strong&gt; takes place on the 6th of March at ZEISS in Munich Germany. It&amp;rsquo;s a user meeting about JavaFX technology and the &lt;a href="https://zeiss.com/meditec/en/news-events/events/jfx-adopters-meeting.html#register" target="_blank" rel="noopener noreferrer"&gt;registration is open&lt;/a&gt;
. You can still apply to be a speaker at this event!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heshan Kariyawasam&lt;/strong&gt; &lt;a href="https://www.linkedin.com/posts/heshanthenura_javafx-java-night-activity-7149071331672616960-gXKa/" target="_blank" rel="noopener noreferrer"&gt;fell in love with JavaFX canvas&lt;/a&gt;
: &amp;ldquo;So I&amp;rsquo;m going to simulate night sky. I&amp;rsquo;ll try to add Constellations and Meteors so it will be more realistic.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;And he shared this &lt;a href="https://www.youtube.com/playlist?list=PLRqwX-V7Uu6ZiZxtDDRCi6uhfTH4FilpH" target="_blank" rel="noopener noreferrer"&gt;list of coding challenges&lt;/a&gt;
 that he would like to solve with JavaFX. Keep scrolling, the list is very long 😉&lt;/li&gt;
&lt;li&gt;He continues his 3D experiments&amp;hellip; &lt;a href="https://github.com/heshanthenura/TextureAndLight" target="_blank" rel="noopener noreferrer"&gt;Texture And Light on GitHub&lt;/a&gt;
 is only one of those. Follow him on &lt;a href="https://twitter.com/Heshantk" target="_blank" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt;
 or &lt;a href="https://www.linkedin.com/in/heshanthenura/recent-activity/all/" target="_blank" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
 for videos and links to sources&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Want to combine Quarkus and JavaFX? Seems work is ongoing:
&lt;ul&gt;
&lt;li&gt;A lot of &lt;a href="https://github.com/quarkusio/quarkus/issues/9313" target="_blank" rel="noopener noreferrer"&gt;new comments in a Quarkus ticket&lt;/a&gt;
 started in 2020.&lt;/li&gt;
&lt;li&gt;With a link to &lt;a href="https://github.com/CodeSimcoe/quarkus-fx-extension" target="_blank" rel="noopener noreferrer"&gt;quarkus-fx-extension&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@laurent_bourges/111782539726528107" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Laurent Bourgès&lt;/strong&gt; realized he needs to celebrate&lt;/a&gt;
 &amp;ldquo;10 years as openjdk committer, 10 years since first Marlin-renderer 0.3: 2014.01, and a new Marlin 0.9.4.8 release: 2024.01. I want to launch the Marlin-renderer Drawing Contest #MDC btw 01.20 and 02.03: &lt;em&gt;Please draw me a nice thing with the marlin-renderer&lt;/em&gt; in 3 categories. Submissions will be shared as png, svg, pdf files under author&amp;rsquo;s declared license. What do you think?&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;Geographic maps (gis)&lt;/li&gt;
&lt;li&gt;Illustration / plans / complex charts&lt;/li&gt;
&lt;li&gt;Computer arts&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://www.linkedin.com/posts/heshanthenura_java-javafx-debugging-activity-7156150466643468289-GcHG/" target="_blank" rel="noopener noreferrer"&gt;tip from &lt;strong&gt;Heshan Kariyawas&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Before the production release of a JavaFX app on Windows using JPackage, enable the console with the &lt;code&gt;--win-console&lt;/code&gt; flag for easy debugging. However, after the production release, no debuggers are available. This tip proved very useful for me today.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-8-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;JFX Central is on the cover page of Javamagazin 2.2024, and the article by &lt;strong&gt;Frank Delporte&lt;/strong&gt; is eight (8!) pages. A complete walkthrough of the website and interviews with &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; , &lt;strong&gt;Li Wang Yang&lt;/strong&gt; , &lt;strong&gt;Florian Kirmaier&lt;/strong&gt; , and &lt;strong&gt;Mike Hearn&lt;/strong&gt; . The &lt;a href="https://entwickler.de/java/jfx-central-javafx" target="_blank" rel="noopener noreferrer"&gt;full article is also available here&lt;/a&gt;
 (with login).&lt;/li&gt;
&lt;li&gt;The summary of our &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-december-2023/"&gt;Links Of December are shared on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Video: Spring Boot Docker Compose Support</title><link>https://foojayio.github.io/website/today/video-spring-boot-docker-compose-support/</link><pubDate>Wed, 31 Jan 2024 07:50:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/video-spring-boot-docker-compose-support/</guid><description>&lt;p&gt;In Spring Boot 3.1, Docker Compose support was added to simplify local development with external resources.&lt;/p&gt;
&lt;p&gt;In this video, I show you how this works and how to use it!&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/BQkvCxmaiqU?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;br /&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>Friends of OpenJDK Hangout at FOSDEM 2024</title><link>https://foojayio.github.io/website/today/friends-of-openjdk-hangout-at-fosdem-2024/</link><pubDate>Mon, 29 Jan 2024 10:20:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/friends-of-openjdk-hangout-at-fosdem-2024/</guid><description>&lt;p&gt;&lt;a href="https://fosdem.org/2024/" target="_blank" rel="noopener noreferrer"&gt;FOSDEM is here again&lt;/a&gt;
, this coming weekend. Many will remember &lt;a href="https://foojayio.github.io/website/today/foojay-io-at-fosdem-2023-trip-report/"&gt;the great hangout friends of OpenJDK had at Bier Centraal in Brussels&lt;/a&gt;
 last year.
&lt;img src="https://foojayio.github.io/website/today/friends-of-openjdk-hangout-at-fosdem-2024/image-7-1024x768.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Well, that was a great experience and all those connected in any way to OpenJDK, whether speaking or not at FOSDEM, are extremely welcome to spend time with the friends of OpenJDK community on Saturday evening at the same location, &lt;a href="https://maps.app.goo.gl/7w4NY2QLCSVMdoDz5" target="_blank" rel="noopener noreferrer"&gt;Bier Centraal&lt;/a&gt;
 (Anspachlaan 37).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://maps.app.goo.gl/7w4NY2QLCSVMdoDz5" target="_blank" rel="noopener noreferrer"&gt;https://maps.app.goo.gl/7w4NY2QLCSVMdoDz5&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Foojay Podcast #41: Web Development with Java</title><link>https://foojayio.github.io/website/today/foojay-podcast-41/</link><pubDate>Mon, 29 Jan 2024 08:23:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-41/</guid><description>&lt;p&gt;When starting to build a new website, you are facing a major challenge. Which framework should you use? Angular, React, Vue, Svelte? They are all based on JavaScript and can be the right choice depending on your needs.&lt;/p&gt;
&lt;p&gt;But&amp;hellip; do you really need one of these frameworks? Why would you not just stick to Java and use one of the many great libraries that are available for it?&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/aaYs7zqaBO8?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Book review: "Tidy first?"</title><link>https://foojayio.github.io/website/today/book-review-tidy-first/</link><pubDate>Fri, 26 Jan 2024 18:30:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-tidy-first/</guid><description>&lt;p&gt;&lt;img src="https://learning.oreilly.com/library/cover/9781098151232/250w/" alt="Tidy first" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;price: €39.99 for the eBook&lt;/p&gt;
&lt;p&gt;publication date: October 2023&lt;/p&gt;
&lt;p&gt;publisher: O&amp;rsquo;Reilly Media, Inc.&lt;/p&gt;
&lt;p&gt;pages: 99&lt;/p&gt;
&lt;p&gt;ISBN: 9781098151249&lt;/p&gt;
&lt;p&gt;Kent Beck, who certainly is not an unknown name in the software development world, recently published this book, which is based upon his newsletter with the same name.&lt;/p&gt;
&lt;p&gt;In this book, which is the start of a new series, we dive into the world of tidyings which are small changes that do not alter the behaviour of our applications.&lt;/p&gt;</description></item><item><title>Java Flight Recording and Analysis with Azul Mission Control</title><link>https://foojayio.github.io/website/today/java-flight-recording-and-analysis-with-azul-mission-control/</link><pubDate>Thu, 25 Jan 2024 07:59:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-flight-recording-and-analysis-with-azul-mission-control/</guid><description>&lt;p&gt;&lt;strong&gt;Java Flight Recording (JFR) is a Java Virtual Machine (JVM) profiling and diagnostics tool. It enables you to collect and analyze data regarding the performance and behavior of a Java application. As JFR is included in the JVM, there is no need for additional tools or installations to make recordings of your applications.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;By utilizing JFR, you gain valuable insights into the runtime behavior of your Java applications. It helps you to optimize performance, identify and troubleshoot issues, and ensure better overall reliability. JFR is designed with very low overhead, allowing its use in production environments with minimal impact on the performance of your application.&lt;/p&gt;</description></item><item><title>Microservices Architecture: Navigating the Buzz</title><link>https://foojayio.github.io/website/today/microservices-architecture-navigating-the-buzz/</link><pubDate>Wed, 24 Jan 2024 20:05:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/microservices-architecture-navigating-the-buzz/</guid><description>&lt;p&gt;Lately I&amp;rsquo;ve been exploring what all the talk around &amp;lsquo;&lt;a href="https://semaphoreci.com/blog/microservice-architecture" title="microservices architecture" target="_blank" rel="noopener noreferrer"&gt;microservices architecture&lt;/a&gt;
&amp;rsquo; is really about. From it popping up in every other social media debate to it increasingly becoming a must-have skill on job listings, what is it that has caused this strong divide between the proponents of the traditional monolithic approach and those who have embraced the microservices paradigm.&lt;/p&gt;
&lt;p&gt;In this article I&amp;rsquo;m here to break it down for you as I outline the benefits, some common challenges, and offer some insights from microservices experts for those considering this approach.&lt;/p&gt;</description></item><item><title>MariaDB Java Connector, Benchmark, and Java 21 virtual threads</title><link>https://foojayio.github.io/website/today/benchmark-jdbc-connectors-and-java-21-virtual-threads/</link><pubDate>Tue, 23 Jan 2024 13:03:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/benchmark-jdbc-connectors-and-java-21-virtual-threads/</guid><description>&lt;p&gt;Why should Java and database developers care about Virtual Threads? Developers can write faster and more resource efficient applications without having to refactor synchronous code a.k.a. &amp;ldquo;imperative&amp;rdquo;) JDBC code into asynchronous (a.k.a &amp;ldquo;reactive&amp;rdquo;) code that is hard to create, debug and maintain.&lt;/p&gt;
&lt;p&gt;Writing scalable network code is always difficult. Synchronous APIs can&amp;rsquo;t be scaled beyond a certain point because they can block when performing I/O operations, which in turn block the thread until the operation is ready. For example, if you try to read data from a socket when no data is available, the thread will freeze until data becomes available. Threads are also an expensive resource on the Java platform, so we don&amp;rsquo;t want to force them to wait for I/O operations to complete. To avoid these limitations, we typically use asynchronous or reactive I/O frameworks such as Project Reactor, RxJava, or Vert.x and connectors like R2DBC. These frameworks allow us to write code that doesn&amp;rsquo;t block a thread during an I/O operation, but instead uses a callback or event notification to notify the code when the I/O operation is complete or ready.&lt;/p&gt;</description></item><item><title>Controlling LED Strips with Java and JBang</title><link>https://foojayio.github.io/website/today/controlling-led-strips-with-java-and-jbang/</link><pubDate>Mon, 22 Jan 2024 18:08:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/controlling-led-strips-with-java-and-jbang/</guid><description>&lt;p&gt;One of the most &amp;ldquo;fancy&amp;rdquo; electronic components is definitely&amp;hellip; a LED strip. It&amp;rsquo;s really cool to control a long strip of lights with only a few lines of code.&lt;/p&gt;
&lt;p&gt;But, there is a problem. The timing of the signals is crucial to reliably control these strips. Both Python and Java on a Raspberry Pi can struggle with these timings as they are running on Linux, a non-real-time operating system.&lt;/p&gt;
&lt;p&gt;So, for instance, pauses in the garbage collection of the Java virtual machine, or any glitch in the operating system can cause unexpected effects on the LED strips. That&amp;rsquo;s why in most projects, a microcontroller (Arduino, Raspberry Pi Pico, ESP32,&amp;hellip;) is used to drive the LED strip.&lt;/p&gt;</description></item><item><title>API Versioning</title><link>https://foojayio.github.io/website/today/api-versioning/</link><pubDate>Mon, 22 Jan 2024 09:00:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/api-versioning/</guid><description>&lt;p&gt;&lt;strong&gt;In my previous article &lt;a href="https://blog.frankel.ch/evolve-apis/" target="_blank" rel="noopener noreferrer"&gt;Evolving your APIs&lt;/a&gt;
, I mention the main API versioning approaches. During the talk of the same name, I sometimes get some questions on the subject. In this article, I&amp;rsquo;ll detail each of them.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I assume readers know the reasons behind versioning, semantic versioning, and product lifecycle. If not, I encourage you to read a bit about these themes; in particular, chapter 24 of the excellent &lt;a href="https://blog.frankel.ch/api-design-patterns/" target="_blank" rel="noopener noreferrer"&gt;API Design Patterns&lt;/a&gt;
 book focuses on them.&lt;/p&gt;</description></item><item><title>Soft Assertions - testing kindly</title><link>https://foojayio.github.io/website/today/soft-assertions-testing-kindly/</link><pubDate>Fri, 19 Jan 2024 10:17:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/soft-assertions-testing-kindly/</guid><description>&lt;p&gt;Given it&amp;rsquo;s the advent of a new year, I thought let&amp;rsquo;s start with something nice and fun that can make live more enjoyable for everyone.&lt;/p&gt;
&lt;p&gt;As developers, we write testcases all the time to help us in our development process, and to help us detect potential regressions in the future.&lt;/p&gt;
&lt;p&gt;Now ideally we want our testcases to be as efficient as possible, and ideally to require as few reruns as possible. And this is where Soft Assertions come into play.&lt;/p&gt;</description></item><item><title>Hello eBPF: Recording data in basic eBPF maps (2)</title><link>https://foojayio.github.io/website/today/hello-ebpf-recording-data-in-basic-ebpf-maps-2/</link><pubDate>Thu, 18 Jan 2024 15:50:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/hello-ebpf-recording-data-in-basic-ebpf-maps-2/</guid><description>&lt;p&gt;Welcome back to my article series on eBPF.&lt;/p&gt;
&lt;p&gt;Last week, I introduced &lt;a href="https://mostlynerdless.de/blog/2023/12/31/hello-ebpf-developing-ebpf-apps-in-java-1/" target="_blank" rel="noopener noreferrer"&gt;eBPF, the series, and the project&lt;/a&gt;
 and showed how you can write a &lt;a href="https://github.com/parttimenerd/hello-ebpf/blob/spotless/bcc/src/main/java/me/bechberger/ebpf/samples/chapter2/HelloWorld.java" target="_blank" rel="noopener noreferrer"&gt;simple eBPF application&lt;/a&gt;
 with Java that prints &amp;ldquo;Hello World!&amp;rdquo; whenever a process calls &lt;code&gt;execve&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;public class HelloWorld {
 public static void main(String[] args) {
 try (BPF b = BPF.builder("""
 int hello(void *ctx) {
 bpf_trace_printk("Hello, World!");
 return 0;
 }
 """).build()) {
 var syscall = b.get_syscall_fnname("execve");
 b.attach_kprobe(syscall, "hello");
 b.trace_print();
 }
 }
}&lt;/pre&gt;
&lt;p&gt;But what if we want to send more information from our eBPF program to our userland application than just some logs?&lt;/p&gt;</description></item><item><title>A Day in the Life of a Software Engineer in a Scrum Team Part-2</title><link>https://foojayio.github.io/website/today/a-day-in-the-life-of-a-software-engineer-in-a-scrum-team-part-2/</link><pubDate>Wed, 17 Jan 2024 13:52:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-day-in-the-life-of-a-software-engineer-in-a-scrum-team-part-2/</guid><description>&lt;p&gt;Welcome back to the journey through the world of &lt;strong&gt;Scrum&lt;/strong&gt; ! If you&amp;rsquo;ve read &lt;a href="https://foojayio.github.io/website/today/unlocking-scrum-a-software-engineers-journey-part-1/"&gt;Part 1&lt;/a&gt;
, you&amp;rsquo;re already familiar with the basics of Scrum and how it can help teams manage their work efficiently. Now, let&amp;rsquo;s dive deeper and explore a day in the life of Alex, a software engineer in a Payment Scrum Team.&lt;/p&gt;
&lt;p&gt;Alex is part of an elite team called &amp;ldquo;The Payment Pioneers.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;This team is working on adding Apple Pay to their company&amp;rsquo;s online payment options.&lt;/p&gt;</description></item><item><title>Payara Platform Roadmap 2024</title><link>https://foojayio.github.io/website/today/payara-platform-roadmap-2024/</link><pubDate>Wed, 17 Jan 2024 10:39:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/payara-platform-roadmap-2024/</guid><description>&lt;p&gt;&lt;strong&gt;Now that New Year is here, we reflect on 2023 and look ahead to what you can expect from our entire suite of Payara products in 2024. What is the future for Payara Community, Enterprise and Payara Cloud?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Read below to find out more about Payara Rodmap in the coming months - Java 21 compatibility, the upcoming Jakarta EE 11 and our plan for support, and more!&lt;/p&gt;
&lt;p&gt;You can also &lt;a href="https://www.crowdcast.io/c/virtualpayaraconference/xstAZ" target="_blank" rel="noopener noreferrer"&gt;watch the Payara Roadmap 2024 presented&lt;/a&gt;
 at the Virtual Payara Conference last month.&lt;/p&gt;</description></item><item><title>Where do you get your Java?</title><link>https://foojayio.github.io/website/today/where-do-you-get-your-java/</link><pubDate>Tue, 16 Jan 2024 14:19:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/where-do-you-get-your-java/</guid><description>&lt;p&gt;Today&amp;rsquo;s Java is vastly different, although it is still true to its root principles of robustness, portability, and ease of programming. Your options for where to get your Java have similarly evolved.&lt;/p&gt;
&lt;p&gt;If you download Java directly, you might think that you can only get an official version from Oracle. This is no longer the case. In fact, there are a number of vendors that now provide their own Java distributions that are 100% compatible with the official Java specification.&lt;/p&gt;</description></item><item><title>2023 Software Conferences in the Philippines</title><link>https://foojayio.github.io/website/today/2023-software-conferences-in-the-philippines/</link><pubDate>Tue, 16 Jan 2024 07:47:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/2023-software-conferences-in-the-philippines/</guid><description>&lt;p&gt;In the last months of 2023, technical conferences took place in the Philippines focusing on Artificial Intelligence (AI), Cloud Computing, Java, Open-source and Data related topics.&lt;/p&gt;
&lt;p&gt;The Philippine Java Community were involved in two big conferences namely, Software Conference Philippines and Samsung Open Source Conference.&lt;/p&gt;
&lt;p&gt;Members of the Foojay community were included as the speakers of the conferences, including me (Tristan Mahinay). This is the first time that the Friends of OpenJDK is involved in these big conferences. Thanks to &lt;a href="https://www.azul.com/" title="Azul" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
 for being a sponsor of both events.&lt;/p&gt;</description></item><item><title>2023 in Retrospective</title><link>https://foojayio.github.io/website/today/2023-in-retrospective/</link><pubDate>Tue, 16 Jan 2024 07:44:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/2023-in-retrospective/</guid><description>&lt;p&gt;&lt;strong&gt;Last year, I wrote my first &lt;a href="https://blog.frankel.ch/retrospective/" target="_blank" rel="noopener noreferrer"&gt;yearly retrospective&lt;/a&gt;
. I liked the experience, so I&amp;rsquo;m trying one more time. Let the future decide if it will become a trend or not.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Before diving into our safe technological world, my thoughts go to Ukraine, to my friends who had to flee their own country, to other friends who fought on the front to defend it from an imperial power, and to all victims of an old kleptocrat who clings to power despite the cost to others. The free world needs to support Ukraine more. I hope 2024 will be the year of Ukrainian victory.&lt;/p&gt;</description></item><item><title>Foojay Podcast #40: Making Java Attractive for Beginners in Programming</title><link>https://foojayio.github.io/website/today/foojay-podcast-40/</link><pubDate>Mon, 15 Jan 2024 09:06:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-40/</guid><description>&lt;p&gt;&amp;ldquo;Public static void main string array&amp;rdquo; are the first words everyone sees when they start their first Java Hello World experiments.&lt;/p&gt;
&lt;p&gt;Some teachers explain them, while others say you will understand each word later.&lt;/p&gt;
&lt;p&gt;Is this a problem to attract more Java developers?&lt;/p&gt;
&lt;p&gt;And how can we make the Java language more attractive for newbies? Let&amp;rsquo;s ask some experts&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/XvUmhzoL_cY?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>JUG PH Meetup 4 and 5 Report</title><link>https://foojayio.github.io/website/today/jug-ph-meetup-4-and-5/</link><pubDate>Sun, 14 Jan 2024 13:26:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/jug-ph-meetup-4-and-5/</guid><description>&lt;p&gt;&lt;strong&gt;Continuing the connection with the Java Enthusiasts and the efforts of Java User Group Philippines (JUG PH), we held our 4th and 5th meetup last September and November 2023.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The speakers of these meetups were composed of &lt;a href="https://www.linkedin.com/in/jansen-ang/" title="Jansen Ang" target="_blank" rel="noopener noreferrer"&gt;Jansen Ang&lt;/a&gt;
, one of the JUG PH Leader, &lt;a href="https://www.linkedin.com/in/kenpe%C3%B1aranda/" title="Kenneth Penarada" target="_blank" rel="noopener noreferrer"&gt;Kenneth Penarada&lt;/a&gt;
, Senior Enterprise Engineer at Orange and Bronze Philippines and &lt;a href="https://www.linkedin.com/in/ma-minerva-l-iguana/" title="Bang Iguana" target="_blank" rel="noopener noreferrer"&gt;Bang Iguana&lt;/a&gt;
, Senior Java Engineer at ING Hubs Philippines.&lt;/p&gt;</description></item><item><title>Journey of a Java Champion: Bert Jan Schrijver's Path to Mastery and Community Leadership</title><link>https://foojayio.github.io/website/today/journey-of-a-java-champion-bert-jan-schrijvers-path-to-mastery-and-community-leadership/</link><pubDate>Wed, 10 Jan 2024 15:50:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/journey-of-a-java-champion-bert-jan-schrijvers-path-to-mastery-and-community-leadership/</guid><description>&lt;figure class="alignright size-full"&gt;
 &lt;img fetchpriority="high" decoding="async" width="400" height="400" src="image.png" alt="" class="wp-image-105572"&gt;
&lt;/figure&gt;
&lt;p&gt;Bert Jan is CTO at &lt;a href="https://www.openvalue.eu/" target="_blank" rel="noopener noreferrer"&gt;OpenValue&lt;/a&gt;
 and focuses on Java, software architecture, Continuous Delivery and DevOps.&lt;/p&gt;
&lt;p&gt;Bert Jan is a Java Champion, JavaOne Rock Star speaker, Duke&amp;rsquo;s Choice Award winner and leads NLJUG, the Dutch Java User Group.&lt;/p&gt;
&lt;p&gt;He loves to share his experience by speaking at conferences, writing for the Dutch Java magazine and helping out Devoxx4Kids by teaching kids how to code. Bert Jan is easily reachable on Twitter at &lt;a href="https://twitter.com/bjschrijver" target="_blank" rel="noopener noreferrer"&gt;@bjschrijver&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Hello eBPF: Developing eBPF Apps in Java (1)</title><link>https://foojayio.github.io/website/today/hello-ebpf-developing-ebpf-apps-in-java-1/</link><pubDate>Tue, 09 Jan 2024 16:34:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/hello-ebpf-developing-ebpf-apps-in-java-1/</guid><description>&lt;p&gt;&lt;strong&gt;eBPF allows you to attach programs directly to hooks in the Linux kernel without loading kernel modules, like hooks for networking or executing programs.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This has historically been used for writing custom package filters in firewalls. Still, nowadays, it is used for monitoring and tracing, becoming an ever more critical building block of modern observability tools. To quote from &lt;a href="https://ebpf.io/what-is-ebpf/" target="_blank" rel="noopener noreferrer"&gt;ebpf.io&lt;/a&gt;
:&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;figure class="aligncenter size-full is-resized"&gt;
 &lt;img decoding="async" src="https://mostlynerdless.de/wp-content/uploads/2023/12/image-20.png" alt="" class="wp-image-1469" style="width:524px;height:auto"&gt;
&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;Historically, the operating system has always been an ideal place to implement observability, security, and networking functionality due to the kernel&amp;rsquo;s privileged ability to oversee and control the entire system. At the same time, an operating system kernel is hard to evolve due to its central role and high requirement towards stability and security. The rate of innovation at the operating system level has thus traditionally been lower compared to functionality implemented outside of the operating system.&lt;a href="https://ebpf.io/static/e293240ecccb9d506587571007c36739/f2674/overview.png" target="_blank" rel="noopener noreferrer"&gt;&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Effective cloud-native Java dev in Eclipse IDE with Open Liberty</title><link>https://foojayio.github.io/website/today/effective-cloud-native-development-eclipse-ide-open-liberty/</link><pubDate>Tue, 09 Jan 2024 12:50:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/effective-cloud-native-development-eclipse-ide-open-liberty/</guid><description>&lt;p&gt;&lt;strong&gt;The Eclipse IDE has been a popular choice with developers for many years, placing 2nd in &amp;ldquo;most popular IDE of 2022&amp;rdquo; by &lt;a href="http://https://www.jrebel.com/blog/best-java-ide" title="JRebel" target="_blank" rel="noopener noreferrer"&gt;JRebel&lt;/a&gt;
. This mature and fully-featured &lt;a href="https://www.redhat.com/en/topics/middleware/what-is-ide" target="_blank" rel="noopener noreferrer"&gt;IDE&lt;/a&gt;
, with an extensive plugin repository, can help to significantly improve the development experience. However, ensuring that developers have the most appropriate and helpful plugins can be the key to unlocking this improved development experience and enhanced productivity.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll explore the Liberty Tools plugin for Eclipse IDE and how it can help enable fast, easy, and efficient development of cloud-native Java applications with Open Liberty and WebSphere Liberty.&lt;/p&gt;</description></item><item><title>Interview with Gokul Chandrasekaran, the creator of JDoodle</title><link>https://foojayio.github.io/website/today/interview-with-gokul-chandrasekaran-the-creator-of-jdoodle/</link><pubDate>Mon, 08 Jan 2024 12:08:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/interview-with-gokul-chandrasekaran-the-creator-of-jdoodle/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/interview-with-gokul-chandrasekaran-the-creator-of-jdoodle/JDoodle-Gokul.png" alt="" loading="lazy"&gt;
&lt;br&gt;
In two previous posts, we &lt;a href="https://foojayio.github.io/website/today/integrate-executable-java-code-in-your-blog-posts/"&gt;explained how you can add executable Java code to your posts here on Foojay&lt;/a&gt;
, including &lt;a href="https://foojayio.github.io/website/today/integrate-executable-java-code-in-your-blog-posts-part-2-how-to-use-dependencies/"&gt;code with dependencies&lt;/a&gt;
, by using JDoodle.&lt;/p&gt;
&lt;p&gt;To achieve this full integration, we got &lt;a href="https://www.linkedin.com/in/gokulchandrasekaran-jdoodle/" target="_blank" rel="noopener noreferrer"&gt;Gokul Chandrasekaran&lt;/a&gt;
&amp;rsquo;s support to use the plugin version, and he also gave us some insight into the history and development of JDoodle.&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Thanks, Gokul for your support in bringing&lt;/strong&gt;&lt;/em&gt; an online Java editor to Foojay! Can you introduce yourself,&lt;em&gt;&lt;strong&gt;please?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Looking Back on One Year of Speaking and Blogging</title><link>https://foojayio.github.io/website/today/looking-back-on-one-year-of-speaking-and-blogging/</link><pubDate>Fri, 05 Jan 2024 17:49:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/looking-back-on-one-year-of-speaking-and-blogging/</guid><description>&lt;p&gt;&lt;strong&gt;2023 was an adventurous year for me: I came into my blogging rhythm, blogging every one to two weeks, resulting in 39 articles, many of them on Foojay.io, spoke at my first conferences, around 14 overall, 22 if you include JUGs and online conferences, and continued working on my &lt;a href="https://mostlynerdless.de/blog/2023/12/04/profiling-maven-projects-with-my-intellij-profiler-plugin/" target="_blank" rel="noopener noreferrer"&gt;IntelliJ plugin&lt;/a&gt;
, as well as my proposal for a &lt;a href="https://openjdk.org/jeps/435" target="_blank" rel="noopener noreferrer"&gt;new profiling API&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article is a recollection of the year&amp;rsquo;s highlights. If you want a complete list of my presentations, visit my &lt;a href="https://mostlynerdless.de/talks/" target="_blank" rel="noopener noreferrer"&gt;Talks&lt;/a&gt;
 page or the &lt;a href="https://github.com/SAP/SapMachine/wiki/Presentations" target="_blank" rel="noopener noreferrer"&gt;Presentations&lt;/a&gt;
 page in the SapMachine Wiki.&lt;/p&gt;</description></item><item><title>Unlocking Scrum: A Software Engineer's Journey - Part 1</title><link>https://foojayio.github.io/website/today/unlocking-scrum-a-software-engineers-journey-part-1/</link><pubDate>Thu, 04 Jan 2024 16:12:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/unlocking-scrum-a-software-engineers-journey-part-1/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/unlocking-scrum-a-software-engineers-journey-part-1/scrum-700x376.webp" alt="https://medium.com/@johnwilliams1756/embracing-scrum-while-ensuring-timely-delivery-of-software-features-20b82ee1abcd" loading="lazy"&gt;
&lt;/p&gt;
&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Hey there 🖐️, have you heard of Agile and Scrum?&lt;/p&gt;
&lt;p&gt;If not, buckle up because we&amp;rsquo;re about to embark on a journey to Scrumland!&lt;/p&gt;
&lt;p&gt;Scrum is a framework under the Agile umbrella that makes software development a breeze (or at least, less of a hurricane 🌪️).&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s all about collaboration, flexibility, and delivering value in small, tasty chunks. 🍫&lt;/p&gt;
&lt;h3 id="h3-1-understanding-scrum"&gt;Understanding Scrum&lt;/h3&gt;
&lt;p&gt;Scrum is like a game with its own rules and players. It&amp;rsquo;s anchored on principles like transparency, inspection, and adaptation. Imagine a GPS that reroutes you when you take a wrong turn &amp;ndash; that&amp;rsquo;s Scrum! 🗺️&lt;/p&gt;</description></item><item><title>(Semantic) Versioning your Java libraries</title><link>https://foojayio.github.io/website/today/semantic-versioning-your-java-libraries/</link><pubDate>Wed, 03 Jan 2024 15:10:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/semantic-versioning-your-java-libraries/</guid><description>&lt;p&gt;&lt;strong&gt;There are a lot of ways to version your library but the &lt;a href="https://semver.org/lang/nl/" target="_blank" rel="noopener noreferrer"&gt;semantic versioning scheme&lt;/a&gt;
 is the most used and for a good reason, by looking at the version change you can already defer if you can upgrade the dependency without any problems or if you might have to do some refactoring. Semantic versioning proposes a simple set of rules and requirements that dictate how version numbers are assigned and incremented.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Playing with WASM on Docker</title><link>https://foojayio.github.io/website/today/playing-with-wasm-on-docker/</link><pubDate>Wed, 03 Jan 2024 07:48:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/playing-with-wasm-on-docker/</guid><description>&lt;p&gt;The idea of bytecode that can run anywhere dates back to the JVM inception (as far as I know).&lt;/p&gt;
&lt;p&gt;WebAssembly is the new implementation of an old idea. While WebAssembly is meant to run in the browser, Docker recently announced its capability to run WASM code without needing containers.&lt;/p&gt;
&lt;p&gt;In this post, I want to explore how it can work.&lt;/p&gt;
&lt;h2 id="h2-0-prerequisite"&gt;Prerequisite&lt;/h2&gt;
&lt;p&gt;Running WebAssembly is a &lt;em&gt;beta&lt;/em&gt; feature and requires using &lt;code&gt;containerd&lt;/code&gt;. To enable &lt;code&gt;containerd&lt;/code&gt;, go to the Docker Desktop dashboard, then Settings &amp;gt; Features in development &amp;gt; Beta features &amp;gt; Use containerd for storing and pulling image.&lt;/p&gt;</description></item><item><title>Foojay Podcast #39: Java Dominicano</title><link>https://foojayio.github.io/website/today/foojay-podcast-39/</link><pubDate>Tue, 02 Jan 2024 10:29:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-39/</guid><description>&lt;p&gt;Once a month in this podcast, we talk about the history of a Java User Group and the people behind it.&lt;/p&gt;
&lt;p&gt;Today, we are traveling to the Dominican Republic to learn more about the country and its Java community.&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/AKNjwn0yPow?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>JavaFX Links of December 2023</title><link>https://foojayio.github.io/website/today/javafx-links-of-december-2023/</link><pubDate>Sat, 30 Dec 2023 13:11:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-december-2023/</guid><description>&lt;p&gt;This is the final JavaFX LinksOfTheMonth review for 2023.&lt;/p&gt;
&lt;p&gt;It was an amazing year with many evolutions in Java and JavaFX and a complete &amp;ldquo;fresh&amp;rdquo; version of JFX Central.&lt;/p&gt;
&lt;p&gt;Thanks for following these updates and looking forward to more of your JavaFX work in the new year&amp;hellip;&lt;/p&gt;
&lt;p&gt;This is the overview of the LinksOfTheWeek that got published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during December.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;JavaFX 22 Early-Access Builds, Build 19 (2023/11/24), is available on &lt;a href="https://jdk.java.net/javafx22/" target="_blank" rel="noopener noreferrer"&gt;jdk.java.net/javafx22&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;Issues addressed in &lt;a href="https://bugs.openjdk.org/issues/?jql=project%20%3D%20JDK%20AND%20fixversion%20%3D%20jfx22%20and%20component%20%3d%20javafx%20and%20%22resolved%20in%20build%22%20%3d%20b18%20order%20by%20component%2C%20subcomponent" target="_blank" rel="noopener noreferrer"&gt;Build 18&lt;/a&gt;
 and &lt;a href="https://bugs.openjdk.org/browse/JDK-8319996?jql=project%20%3D%20JDK%20AND%20fixversion%20%3D%20jfx22%20and%20component%20%3D%20javafx%20and%20%22resolved%20in%20build%22%20%3D%20b19%20order%20by%20component%2C%20subcomponent" target="_blank" rel="noopener noreferrer"&gt;Build 19&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;JavaFX 22-ea is designed to work with JDK 22-ea, but it is known to work with JDK 17 and later versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1731945181056803237" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is happy&lt;/a&gt;
 with a &lt;a href="https://github.com/openjdk/jfx/pull/1293" target="_blank" rel="noopener noreferrer"&gt;pull request in OpenJFX&lt;/a&gt;
 &amp;ldquo;that finally adds styling support to the fitWidth / fitHeight / preserveRatio / smooth properties of the ImageView class. I always wondered why they were missing. Turns out they were simply forgotten (but a TODO was in the source code :-)).&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A little &lt;a href="https://mastodon.social/@johanvos/111596707584064200" target="_blank" rel="noopener noreferrer"&gt;insight into the OpenJFX project by &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;We often get requests about &amp;lsquo;Why don&amp;rsquo;t you provide a JavaFX build for this or that platform?&amp;rsquo; The short answer: it&amp;rsquo;s easy to create a one-time build with some parameters, but it&amp;rsquo;s hard to maintain. And expensive. Our AWS bill is impressive. And since all our OpenJFX builds are available for free, this is really a major cost for us.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RNArtist&lt;/strong&gt; is doing amazing user interface work&amp;hellip; This is only &lt;a href="https://twitter.com/rnartist_app/status/1730530572227764240" target="_blank" rel="noopener noreferrer"&gt;one of his recent messages&lt;/a&gt;
: &amp;ldquo;If the RNA 2D layout selected at first doesn&amp;rsquo;t fit your needs, RNArtist will provide you a new panel to compute and preview alternate layouts.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;An impressive and super-smooth first &lt;a href="https://twitter.com/Alessio_Vinerbi/status/1730177673316503598" target="_blank" rel="noopener noreferrer"&gt;timeline management demo&lt;/a&gt;
 of the personal After Effects app by &lt;strong&gt;Alessio Vinerbi&lt;/strong&gt; .
&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://twitter.com/Alessio_Vinerbi/status/1730630540569522287" target="_blank" rel="noopener noreferrer"&gt;video by &lt;strong&gt;Alessio Vinerbi&lt;/strong&gt;&lt;/a&gt;
 introducing the first time interpolation demo of MoonsonFX, his personal After Effects written entirely in JavaFX.&lt;/li&gt;
&lt;li&gt;A new teaser &lt;a href="https://twitter.com/Alessio_Vinerbi/status/1733534005792805267" target="_blank" rel="noopener noreferrer"&gt;video by &lt;strong&gt;Alessio Vinerbi&lt;/strong&gt; of MoonsonFX&lt;/a&gt;
, a JavaFX animation tool.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Donald Raab&lt;/strong&gt; uses the &lt;a href="https://twitter.com/TheDonRaab/status/1732273493092524526" target="_blank" rel="noopener noreferrer"&gt;Jackson library to persist his JavaFX ToDo List to JSON&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Divyanshu Yadav&lt;/strong&gt; is working on a weather app: &lt;a href="https://twitter.com/DVyadav2307/status/1731645629536124981" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Dear Web Devs! JavaFX is also in the race!!&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heshan Kariyawasam&lt;/strong&gt; shared some nice projects again!
&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7139904558327099392/" target="_blank" rel="noopener noreferrer"&gt;JavaFX-based statistical calculator&lt;/a&gt;
: &amp;ldquo;Quickly compute mean, median, mode, and variance with an intuitive user interface.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://github.com/heshanthenura/DynamicBackground" target="_blank" rel="noopener noreferrer"&gt;Dynamic Background Demo&lt;/a&gt;
 that dynamically adjusts the background image to fit the screen dimensions. It utilizes JavaFX&amp;rsquo;s Stage and ImageView components to create a responsive background. The app also includes functionality to open a new window, demonstrating basic window management in JavaFX. The video shows a cool use of multiple windows in one application.&lt;/li&gt;
&lt;li&gt;And on Foojay.io, his first blog was published: &lt;a href="https://foojayio.github.io/website/today/creating-executables-for-javafx-applications/"&gt;Creating Executables For JavaFX Applications&lt;/a&gt;
: &amp;ldquo;Let&amp;rsquo;s take a look in this article at the current state of what can be done with jpackage and GitHub Actions to create executables for JavaFX applications.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patrik Karlström&lt;/strong&gt; is &lt;a href="https://twitter.com/PatrikKarlstrom/status/1737534168043552769" target="_blank" rel="noopener noreferrer"&gt;updating rsync GUI, an application he wrote in 2015&lt;/a&gt;
: &amp;ldquo;Today I ran my first #backup with the next version based on NetBeans Platform and JavaFX. Still very rough around the edges though.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; is working on new features for FXGL:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;The current version of the FXGL engine can only show up to 5 dialogue options. The next version will use a scroll bar, where needed, to show any number of options, &lt;a href="https://twitter.com/AlmasBaim/status/1730336323750224104" target="_blank" rel="noopener noreferrer"&gt;as can be seen in the demo&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Adding NPCs that can act as companions somehow instantly makes it &lt;a href="https://twitter.com/AlmasBaim/status/1730000612777976047" target="_blank" rel="noopener noreferrer"&gt;more interesting to explore the world&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1734865416697114945" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; shared a new proof-of-concept of the node inspector panel&lt;/a&gt;
 in FXGL, which allows editing various node properties: &amp;ldquo;This way each dialogue node in the main UI just captures the text associated with it and reduces visual clutter&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; published a &lt;a href="https://www.youtube.com/watch?v=OAunQTTsbio" target="_blank" rel="noopener noreferrer"&gt;trailer of RailTheWay on YouTube&lt;/a&gt;
: &amp;ldquo;A game made in Java/JavaFX without the use of any game engine. Guide the trains to their station. Each train has a color that represents its destination. Sometimes there are some cargo trains that disturb you, try to let them go away and be sure to avoid the cars on your way!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SulaimonMuhamm9/status/1731418084617933140" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sulaimon Muhammad&lt;/strong&gt; shared a brief video&lt;/a&gt;
 of the &amp;ldquo;Who Wants to Be a Millionaire&amp;rdquo; game developed using JavaFX and Hibernate: &amp;ldquo;Exciting things happening with Java!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/LondonSoftworks" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;London Softworks&lt;/strong&gt;&lt;/a&gt;
 is building a custom 2D game engine in Java and shares the progress in various tweets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; published &lt;a href="https://webtechie.be/post/2023-12-14-jbang-fxgl/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;A JavaFX Game Application in a Single Java File with JBang and FXGL&amp;rdquo;&lt;/a&gt;
. A video walk-through together with &lt;strong&gt;Almas Baim&lt;/strong&gt; will follow soon&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; is &lt;a href="https://twitter.com/hansolo_/status/1729494468309500362" target="_blank" rel="noopener noreferrer"&gt;bumping his libraries to JDK 21&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;PhoneNumberFX by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; got extended: &amp;ldquo;The field can now automatically create prompt texts showing you example phone numbers for the selected country&amp;rdquo;, &lt;a href="https://twitter.com/dlemmermann/status/1728080959520526807" target="_blank" rel="noopener noreferrer"&gt;and more&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;yWorks, a software library for visualizing, editing and analyzing graphs, &lt;a href="https://twitter.com/yworks/status/1732707567346872829" target="_blank" rel="noopener noreferrer"&gt;shared their newest update&lt;/a&gt;
 which is compatible with the latest JDKs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcast-video-books"&gt;Podcast, Video, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;In the &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-36/"&gt;third part of the Foojay J-Fall Report Podcast&lt;/a&gt;
, &lt;a href="https://www.jfx-central.com/people/g.grunwald" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
 and &lt;a href="https://twitter.com/Anthony_Goubard" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Anthony Goubard&lt;/strong&gt;&lt;/a&gt;
 talk about desktop application development with Java.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On Foojay, part 1 of a series by &lt;strong&gt;Christopher Schnick&lt;/strong&gt; , the creator of &lt;a href="https://www.jfx-central.com/showcases/xpipe" target="_blank" rel="noopener noreferrer"&gt;XPipe&lt;/a&gt;
, was published: &lt;a href="https://foojayio.github.io/website/today/java-for-desktop-applications-part-1/"&gt;&amp;ldquo;Java for desktop applications: Tips and Tricks&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/shiratsuyudachi/status/1734874003100364858" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;shiratsuyudachi&lt;/strong&gt; asked ChatGPT&lt;/a&gt;
 to create a minimal JavaFX application.&lt;/li&gt;
&lt;li&gt;A new tutorial by &lt;a href="https://twitter.com/Polypragmatist" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dave Barrett&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;An &lt;a href="https://www.pragmaticcoding.ca/javafx/elements/listview-basics" target="_blank" rel="noopener noreferrer"&gt;introduction to ListView&lt;/a&gt;
 and understanding how to use it to display something more than just lists of Strings.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Graham Billington&lt;/strong&gt; is looking for help: &amp;ldquo;What the hell is &lt;a href="https://twitter.com/GBillington7/status/1729908761958215950" target="_blank" rel="noopener noreferrer"&gt;happening with this light and how do I make it stop&lt;/a&gt;
?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jonathan Giles&lt;/strong&gt; is sharing &lt;a href="https://twitter.com/JonathanGiles/status/1729774535354794466" target="_blank" rel="noopener noreferrer"&gt;good memories to when he was working on JavaFX at Sun&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heshan Thenura&lt;/strong&gt; shared a GitHub repository that shows how to create &lt;a href="https://github.com/heshanthenura/JavaPackageDemo" target="_blank" rel="noopener noreferrer"&gt;JavaFX executables with jpackage for all platforms&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heshan Thenura&lt;/strong&gt; &amp;rsquo;s screen got invaded by a little Samurai walking on his task bar. A &lt;a href="https://github.com/heshanthenura/DesktopCompanion" target="_blank" rel="noopener noreferrer"&gt;fun demo project&lt;/a&gt;
 using animated GIFs and a transparent stage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Michael Schnell&lt;/strong&gt; created a &lt;a href="https://github.com/fuinorg/javafx-cdi-example" target="_blank" rel="noopener noreferrer"&gt;JavaFX CDI Example&lt;/a&gt;
 project (Java 17 with &amp;ldquo;jakarta&amp;rdquo; namespace, Maven build, GitHub build, Sub controllers, Blocking UI, About dialog, Exception dialog, TestFX unit test). There is also a &lt;a href="https://github.com/fuinorg/javafx-cdi-archetype" target="_blank" rel="noopener noreferrer"&gt;JavaFX CDI Archetype&lt;/a&gt;
 based on it that allows easily bootstrapping your own project.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/DVyadav2307/status/1735285920885277156" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Divyanshu Yadav&lt;/strong&gt; needs some serious UI suggestions&lt;/a&gt;
&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; now has an &lt;a href="https://twitter.com/dlemmermann/status/1734941451971182773" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;official JavaFX&amp;rdquo; office&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/gail_asgteach/status/1736836965683892661" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gail Anderson&lt;/strong&gt; has a call for all JavaFX developers&lt;/a&gt;
: &amp;ldquo;Please let the GraalVM team know that JavaFX and mobile is important by &lt;a href="https://graalvm.typeform.com/survey?typeform-source=t.co" target="_blank" rel="noopener noreferrer"&gt;filling out this survey&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The bundled overview of the JavaFX Links Of The Week of November, &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-november-2023/"&gt;got published on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;The main menu of JFX Central got reworked as we ran out of space, because&amp;hellip; we added a complete new section: &amp;ldquo;Learn&amp;rdquo;!
&lt;ul&gt;
&lt;li&gt;You can already find a few new pages with content provided by &lt;a href="https://www.jfx-central.com/people/e.nyirenda" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Edward Nyirenda Jr.&lt;/strong&gt;&lt;/a&gt;
, &lt;a href="https://www.jfx-central.com/people/g.anderson" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gail Anderson&lt;/strong&gt;&lt;/a&gt;
, and &lt;a href="https://www.jfx-central.com/people/f.delporte" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;In the coming weeks, months,&amp;hellip; we will be adding more of this, including new videos.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/learn-javafx" target="_blank" rel="noopener noreferrer"&gt;Learn JavaFX&lt;/a&gt;
: from getting started with JavaFX to all the components that are available. This will become the largest section.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/learn-mobile" target="_blank" rel="noopener noreferrer"&gt;Learn JavaFX for Mobile&lt;/a&gt;
: how to create applications for Android and iPhone.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/learn-raspberrypi" target="_blank" rel="noopener noreferrer"&gt;Learn JavaFX on Raspberry Pi&lt;/a&gt;
: build user interfaces on the Raspberry Pi to interact with electronic components.&lt;/li&gt;
&lt;li&gt;Thanks to &lt;a href="https://www.jfx-central.com/people/f.kirmaier" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Florian Kirmaier&lt;/strong&gt;&lt;/a&gt;
 and &lt;a href="https://twitter.com/LeeWyatt_7788" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Li Wang Yang&lt;/strong&gt;&lt;/a&gt;
 for the integration of this new section in JFX Central and some required new features in JPro!&lt;/li&gt;
&lt;li&gt;Several tutorials were added to the &amp;ldquo;Learn JavaFX&amp;rdquo; section a week later, with content provided by &lt;a href="https://www.jfx-central.com/people/e.nyirenda" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Edward Nyirenda Jr.&lt;/strong&gt;&lt;/a&gt;
:&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/learn-javafx/checkbox" target="_blank" rel="noopener noreferrer"&gt;CheckBox&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/learn-javafx/chart" target="_blank" rel="noopener noreferrer"&gt;Chart&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/learn-javafx/gridpane" target="_blank" rel="noopener noreferrer"&gt;GridPane&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Securing Symmetric Encryption Algorithms in Java</title><link>https://foojayio.github.io/website/today/securing-symmetric-encryption-algorithms-in-java/</link><pubDate>Fri, 29 Dec 2023 05:53:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/securing-symmetric-encryption-algorithms-in-java/</guid><description>&lt;p&gt;&lt;strong&gt;In our connected world, securing digital data has become an utmost priority. With the wide spread of Java applications in various sectors, from banking to healthcare, we must emphasize the importance of encryption. Encryption is converting readable data or plaintext into unreadable data or ciphertext, ensuring that even if encrypted data is intercepted, it remains inaccessible to unauthorized individuals.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first choice you must make as a developer is whether you need encryption. Although this sounds like a strange question, the key principle of encryption is that the ciphertext can be reverted into the original text.&lt;/p&gt;</description></item><item><title>Using AI to Create JFR Event Descriptions</title><link>https://foojayio.github.io/website/today/using-ai-to-create-jfr-event-descriptions/</link><pubDate>Fri, 29 Dec 2023 05:42:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-ai-to-create-jfr-event-descriptions/</guid><description>&lt;p&gt;JFR (JDK Flight Recorder) is the default profiler for OpenJDK (see &lt;a href="https://mostlynerdless.de/blog/category/java-servicability/profiling/" target="_blank" rel="noopener noreferrer"&gt;my other blog posts&lt;/a&gt;
 for more information).&lt;/p&gt;
&lt;p&gt;What makes JFR stand out from the other profilers is the ability to log many, many different events that contain lots of information, like information on class loading, JIT compilation, and garbage collection.&lt;/p&gt;
&lt;p&gt;You can see a list of all available events on my &lt;a href="https://sap.github.io/SapMachine/jfrevents/" target="_blank" rel="noopener noreferrer"&gt;JFR Event Collection&lt;/a&gt;
 website:
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/12/image-10-2000x1604.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;This website gives an overview of the events, with descriptions from the OpenJDK, their properties, examples, configurations, and the JDK versions in which every event is present. However, few descriptions are available, and the available texts are mostly single sentences.&lt;/p&gt;</description></item><item><title>When Should we Move to Microservices?</title><link>https://foojayio.github.io/website/today/when-should-we-move-to-microservices/</link><pubDate>Thu, 28 Dec 2023 14:08:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/when-should-we-move-to-microservices/</guid><description>&lt;p&gt;&lt;strong&gt;Sometime ago I wrote about &lt;a href="https://debugagent.com/is-it-time-to-go-back-to-the-monolith" target="_blank" rel="noopener noreferrer"&gt;modular Monoliths and the value of modern Monolithic architecture&lt;/a&gt;
. One of the more interesting discussions that came out of that post (and &lt;a href="https://www.youtube.com/watch?v=NWu7AJJlLM8" target="_blank" rel="noopener noreferrer"&gt;video&lt;/a&gt;
) is the inverse discussion: when is it right to still pick Microservices?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Like any design choice, the answer is subjective and depends on many things. But there are still general rules of thumb and global metrics we can use.&lt;/p&gt;
&lt;p&gt;Before we get into these problems, we need to understand what it means to have a Microservice architecture. Then we can gauge the benefit and price of having such an architecture.&lt;/p&gt;</description></item><item><title>Durable Subscription with JMS and Spring Boot</title><link>https://foojayio.github.io/website/today/durable-subscription-with-jms-and-spring-boot/</link><pubDate>Thu, 28 Dec 2023 12:45:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/durable-subscription-with-jms-and-spring-boot/</guid><description>&lt;p&gt;&lt;strong&gt;When using the publish-subscribe domain with JMS, we often want to use durable subscriptions. But how can this be done with Spring Boot?&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-what-is-jms"&gt;What is JMS?&lt;/h2&gt;
&lt;p&gt;The Java Message Service (JMS) API is a standard for creating, sending, receiving, and reading messages. It enables distributed communication that is loosely coupled, reliable, and asynchronous.&lt;/p&gt;
&lt;p&gt;JMS supports two message delivery modes: Point-to-Point and Publish/Subscribe&lt;/p&gt;
&lt;p&gt;In the point-to-point domain, a producer can send a message to one consumer through a destination called &amp;ldquo;queue&amp;rdquo;. A given queue may have multiple receivers, but only one receiver may consume each message.
&lt;img src="https://foojayio.github.io/website/today/durable-subscription-with-jms-and-spring-boot/image.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Revolutionising Java Collections: The Advent of Sequenced Collections in Java 21</title><link>https://foojayio.github.io/website/today/revolutionising-java-collections-the-advent-of-sequenced-collections-in-java-21/</link><pubDate>Tue, 26 Dec 2023 14:07:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/revolutionising-java-collections-the-advent-of-sequenced-collections-in-java-21/</guid><description>&lt;p&gt;&lt;strong&gt;Java has been a staple in the software development world for decades, renowned for its robustness and vast ecosystem. However, some seasoned Java developers have encountered limitations within its collections framework, particularly when dealing with ordered elements.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Enter JEP 431. JEP 431, part of the Java Enhancement Proposal system, represents a significant advancement in Java&amp;rsquo;s ongoing evolution.&lt;/p&gt;
&lt;p&gt;The Java Enhancement Proposal system is a process for proposing, reviewing, and implementing new features in the Java programming language.&lt;/p&gt;</description></item><item><title>Foojay Podcast #38: Java in the Cloud</title><link>https://foojayio.github.io/website/today/foojay-podcast-38/</link><pubDate>Mon, 25 Dec 2023 12:02:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-38/</guid><description>&lt;p&gt;Java was born in 1995, when the internet as we know it today didn&amp;rsquo;t exist yet.&lt;/p&gt;
&lt;p&gt;Cloud servers, Docker, Kubernetes, distributed systems, scaling up and down&amp;hellip; these things are now part of our daily job, but Java wasn&amp;rsquo;t originally designed for it.&lt;/p&gt;
&lt;p&gt;In this episode, we want to learn if the recent evolutions in OpenJDK, and ongoing related projects, will make Java a full Cloud member.&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/xU4rKnzkSpo?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Five Apache Projects You Probably Haven't Heard Of (Yet)</title><link>https://foojayio.github.io/website/today/five-apache-projects-you-probably-havent-heard-of-yet/</link><pubDate>Sun, 24 Dec 2023 10:17:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/five-apache-projects-you-probably-havent-heard-of-yet/</guid><description>&lt;p&gt;&lt;strong&gt;In early 2021, 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 have to admit that at the time I had never heard about it before.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As a result, in this article, I&amp;rsquo;d like to introduce some Apache projects that are less well-known than HTTPD or Kafka.&lt;/p&gt;
&lt;h2 id="h2-0-apache-apisix"&gt;Apache APISIX&lt;/h2&gt;
&lt;img fetchpriority="high" decoding="async" class="alignright wp-image-103491 size-full" src="apisix.png" alt="" width="256" height="256"&gt;
&lt;p&gt;&lt;a href="https://apisix.apache.org/" target="_blank" rel="noopener noreferrer"&gt;APISIX&lt;/a&gt;
 is an &lt;a href="https://en.wikipedia.org/wiki/API_management" target="_blank" rel="noopener noreferrer"&gt;API Gateway&lt;/a&gt;
. It builds upon &lt;a href="https://openresty.org/en/" target="_blank" rel="noopener noreferrer"&gt;OpenResty&lt;/a&gt;
, a Lua layer built on top of the famous &lt;a href="https://nginx.org/" target="_blank" rel="noopener noreferrer"&gt;nginx&lt;/a&gt;
 reverse-proxy. APISIX adds abstractions to the mix, &lt;em&gt;e.g.&lt;/em&gt; , &lt;code&gt;Route&lt;/code&gt;, &lt;code&gt;Service&lt;/code&gt;, &lt;code&gt;Upstream&lt;/code&gt;, and offers a plugin-based architecture.&lt;/p&gt;</description></item><item><title>Book Review: Modern Frontends with htmx</title><link>https://foojayio.github.io/website/today/book-review-modern-frontends-with-htmx/</link><pubDate>Sun, 24 Dec 2023 10:07:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-modern-frontends-with-htmx/</guid><description>&lt;p&gt;&lt;strong&gt;People who follow me probably know I have a big love for user interface development with JavaFX (for desktop), and Vaadin (for browser). But as always, there are different solutions for every challenge, and building a web user interface with Java can be done with other frameworks.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;htmx seems to be one of those hot new rising stars, and I already wanted to dive deeper into it, but didn&amp;rsquo;t find the time yet.&lt;/p&gt;</description></item><item><title>Handling security vulnerabilities in Spring Boot</title><link>https://foojayio.github.io/website/today/handling-security-vulnerabilities-in-spring-boot/</link><pubDate>Fri, 22 Dec 2023 14:59:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/handling-security-vulnerabilities-in-spring-boot/</guid><description>&lt;p&gt;&lt;strong&gt;In the world of software development, managing dependencies is a core part of creating strong and secure applications. Spring Boot, a favorite among Java developers, makes building applications easier, but there&amp;rsquo;s more to it than meets the eye. Keeping your dependencies in check is crucial to ensure that your Spring Boot projects run smoothly and remain resilient in the face of ever-evolving threats.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One critical aspect of Spring Boot dependency management is security. Software vulnerabilities are discovered frequently, and by keeping your project&amp;rsquo;s dependencies up to date, you&amp;rsquo;re essentially putting on your digital security armor. Outdated dependencies can be like unlocked doors, inviting trouble from potential threats, and that&amp;rsquo;s something we&amp;rsquo;d like to avoid.&lt;/p&gt;</description></item><item><title>lntelliJ IDEA: Selectively Commit Changes to a File</title><link>https://foojayio.github.io/website/today/lntellij-idea-selectively-commit-changes-to-a-file/</link><pubDate>Thu, 21 Dec 2023 06:15:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/lntellij-idea-selectively-commit-changes-to-a-file/</guid><description>&lt;p&gt;&lt;strong&gt;Sometimes you&amp;rsquo;re making multiple changes to a file that you don&amp;rsquo;t want to commit together. For example, if you&amp;rsquo;re working on a new feature, but notice some other small things you want to fix. If these changes are in separate files, we can commit each file separately. But what if they&amp;rsquo;re in the same file?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://www.jetbrains.com/idea/" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA&lt;/a&gt;
 (as of version &lt;a href="https://blog.jetbrains.com/idea/2023/12/intellij-idea-2023-3/" target="_blank" rel="noopener noreferrer"&gt;2023.3&lt;/a&gt;
), we can now select which chunks and specific lines we want to add to our commit.&lt;/p&gt;</description></item><item><title>Writing C Code in Java</title><link>https://foojayio.github.io/website/today/writing-c-code-in-java/</link><pubDate>Wed, 20 Dec 2023 09:21:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/writing-c-code-in-java/</guid><description>&lt;p&gt;&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/12/panama-2000x981.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Foreign Function &amp;amp; Memory API (also called Project Panama) has come a long way since it started. You can find the latest version implemented in JDK 21 as a preview feature (use &lt;code&gt;--enable-preview&lt;/code&gt; to enable it) which is specified by the &lt;a href="https://openjdk.org/jeps/454" target="_blank" rel="noopener noreferrer"&gt;JEP 454&lt;/a&gt;
:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;By efficiently invoking foreign functions (i.e., code outside the JVM), and by safely accessing foreign memory (i.e., memory not managed by the JVM), the API enables Java programs to call native libraries and process native data without the brittleness and danger of JNI.
&lt;a href="https://openjdk.org/jeps/454" target="_blank" rel="noopener noreferrer"&gt;JEP 454&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Canary Releases with Apache APISIX</title><link>https://foojayio.github.io/website/today/canary-releases-with-apache-apisix/</link><pubDate>Tue, 19 Dec 2023 08:01:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/canary-releases-with-apache-apisix/</guid><description>&lt;p&gt;&lt;strong&gt;In a few words, the idea of canary releases is to deliver a new software version to only a fraction of the users, analyze the results, and decide whether to proceed further or not. If results are not aligned with expectations, roll back; if they are, increase the number of users exposed until all users benefit from the new version.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this article, I&amp;rsquo;d like to detail this introduction briefly, explain different ways to define the fraction, and show how to execute it with Apache APISIX.&lt;/p&gt;</description></item><item><title>Foojay Podcast #37: J-Fall Report, Part 4 (final)</title><link>https://foojayio.github.io/website/today/foojay-podcast-37/</link><pubDate>Mon, 18 Dec 2023 10:34:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-37/</guid><description>&lt;p&gt;Check the previous Foojay Podcasts for the first three parts of our J-Fall report (&lt;a href="https://foojayio.github.io/website/today/foojay-podcast-36/"&gt;part 1&lt;/a&gt;
, &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-34"&gt;part 2&lt;/a&gt;
, and &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-33/"&gt;part 3&lt;/a&gt;
). That one-day conference in the Netherlands in November was packed with amazing sessions.&lt;/p&gt;
&lt;p&gt;In this episode, you&amp;rsquo;ll get the remaining interviews we made that day! And as they say, last but not least, again, we have some fascinating insights for you into Java and its evolutions.&lt;/p&gt;
&lt;h2 id="h2-0-video-report"&gt;Video report&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/3h4GG4owtYQ?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Book Review : The Software Engineer's Guidebook</title><link>https://foojayio.github.io/website/today/book-review-the-software-engineers-guidebook/</link><pubDate>Fri, 15 Dec 2023 14:12:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-the-software-engineers-guidebook/</guid><description>&lt;p&gt;&lt;strong&gt;Gergely Orosz&amp;rsquo;s book, &amp;ldquo;The Software Engineer&amp;rsquo;s Guidebook,&amp;rdquo; takes readers on an enthralling exploration of the realm of software development, working in various companies, and startups.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A software engineer in a startup or Big Tech company traces the journey in this book, starting from a beginner developer to a principal engineer.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This book serves as a comprehensive guide, especially beneficial for new engineers and individuals with limited work experience in a few companies.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Integrate executable Java code in your blog posts, part 2: How to use dependencies</title><link>https://foojayio.github.io/website/today/integrate-executable-java-code-in-your-blog-posts-part-2-how-to-use-dependencies/</link><pubDate>Fri, 15 Dec 2023 10:07:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/integrate-executable-java-code-in-your-blog-posts-part-2-how-to-use-dependencies/</guid><description>&lt;p&gt;In a previous post, we &lt;a href="https://foojayio.github.io/website/today/integrate-executable-java-code-in-your-blog-posts/"&gt;explained how you can add executable Java code to your posts here on Foojay&lt;/a&gt;
, by using JDoodle. In this post, you will learn how you can extend this with one or more libraries.&lt;/p&gt;
&lt;h2 id="h2-0-define-dependencies"&gt;Define Dependencies&lt;/h2&gt;
&lt;p&gt;To integrate Java code in your post or page that needs dependencies, you need to specify them in the initial &lt;code&gt;div&lt;/code&gt; with &lt;code&gt;data-libs&lt;/code&gt;.&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;&amp;lt;div data-pym-src='https://www.jdoodle.com/plugin' 
 data-language="java" 
 data-version-index="4"
 data-client-id="34d6e81ae45d88cdb9fb98fed1415b81" 
 data-libs="mavenlib1,mavenlib2"&amp;gt;
 &amp;lt;div data-type="script"&amp;gt;&amp;lt;xmp&amp;gt;

 // This is the place to put your Java code

 &amp;lt;/xmp&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;script src="https://www.jdoodle.com/assets/jdoodle-pym.min.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;data-client-id&lt;/code&gt; can only be used for the Foojay website! Create your own &lt;a href="https://www.jdoodle.com" target="_blank" rel="noopener noreferrer"&gt;account on the JDoodle site&lt;/a&gt;
 if you want to use this functionality on another website.&lt;/p&gt;</description></item><item><title>Profiling Maven Projects with my IntelliJ Profiler Plugin</title><link>https://foojayio.github.io/website/today/profiling-maven-projects-with-my-intellij-profiler-plugin/</link><pubDate>Thu, 14 Dec 2023 10:41:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/profiling-maven-projects-with-my-intellij-profiler-plugin/</guid><description>&lt;h3 id="h3-0-or-i-just-released-version-0-0-11-with-a-cool-new-feature-that-i-can-t-wait-to-tell-you-about"&gt;Or: I just released version 0.0.11 with a cool new feature that I can&amp;rsquo;t wait to tell you about&amp;hellip;&lt;/h3&gt;
&lt;p&gt;According to the recent &lt;a href="https://www.jetbrains.com/lp/devecosystem-2023/java/" target="_blank" rel="noopener noreferrer"&gt;JetBrains survey&lt;/a&gt;
, most people use Maven as their build system and build Spring Boot applications with Java. Yet my profiling plugin for IntelliJ only supports profiling pure Java run configurations. Configurations where the JVM gets passed the main class to run. This is great for tiny examples where you directly right-click on the &lt;code&gt;main&lt;/code&gt; method and profile the whole application using the context menu:
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/12/image-2.png" alt="" loading="lazy"&gt;
&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>[Unit] Testing Supabase in Kotlin using Test Containers - PART 2</title><link>https://foojayio.github.io/website/today/unit-testing-supabase-in-kotlin-using-test-containers-part-2/</link><pubDate>Wed, 13 Dec 2023 08:37:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/unit-testing-supabase-in-kotlin-using-test-containers-part-2/</guid><description>&lt;p&gt;&lt;em&gt;TL;DR : You can run a full Supabase instance inside Test Containers quite easily. &lt;a href="https://github.com/jlengrand/supabase-testcontainers-kotlin?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;See this repository&lt;/a&gt;
.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://foojayio.github.io/website/today/unit-testing-supabase-in-kotlin/"&gt;In my last article&lt;/a&gt;
, I was listing a few attempts I had done at running tests against my Kotlin Supabase application. The way the Supabase-Kt library is built makes it hard to mock, and I ended up building a minimal Docker Compose setup that was mimicking a Supabase instance.&lt;/p&gt;
&lt;p&gt;In this second part, we&amp;rsquo;re gonna push the madness further and actually run a FULL SUPABASE instance locally, still using &lt;a href="https://testcontainers.com/?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;Test Containers&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Testing Spring Boot JMS with ActiveMQ Artemis and Testcontainers</title><link>https://foojayio.github.io/website/today/testing-spring-boot-jms-with-activemq-artemis-and-testcontainers/</link><pubDate>Tue, 12 Dec 2023 07:55:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/testing-spring-boot-jms-with-activemq-artemis-and-testcontainers/</guid><description>&lt;p&gt;&lt;strong&gt;Currently, I&amp;rsquo;m teaching JMS with Spring Boot at the University of Applied Science in Bern, Switzerland. We use &lt;a href="https://activemq.apache.org/components/artemis/" target="_blank" rel="noopener noreferrer"&gt;Apache ActiveMQ Artemis&lt;/a&gt;
 as the JMS message broker. But how can we test our Spring Boot application?&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-testcontainers-to-the-rescue"&gt;Testcontainers to the Rescue&lt;/h2&gt;
&lt;p&gt;Currently, there is no &lt;a href="https://java.testcontainers.org%24/" target="_blank" rel="noopener noreferrer"&gt;Testcontainers Java&lt;/a&gt;
 module for ActiveMQ Artemis. As you can see in the &lt;a href="https://github.com/testcontainers/testcontainers-java" target="_blank" rel="noopener noreferrer"&gt;Testcontainers GitHub repository&lt;/a&gt;
, there is an active activemq branch that may be released soon. But in the meantime, we need another solution.&lt;/p&gt;</description></item><item><title>Foojay Podcast #36: J-Fall Report, Part 3</title><link>https://foojayio.github.io/website/today/foojay-podcast-36/</link><pubDate>Mon, 11 Dec 2023 09:41:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-36/</guid><description>&lt;p&gt;In Episodes &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-33/"&gt;33&lt;/a&gt;
 and &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-34/"&gt;34&lt;/a&gt;
 of the Foojay Podcast, you got the first two parts of our J-Fall Report.&lt;/p&gt;
&lt;p&gt;But on that single-day conference, we had many more interesting interviews.&lt;/p&gt;
&lt;p&gt;This is part 3 in which my guests talk about Maven, contributing to Open Source projects, JOOQ, Desktop Applications, Thymeleaf, htmx, and Security.&lt;/p&gt;
&lt;h2 id="h2-0-video-report"&gt;Video report&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/sA54m2bketo?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Creating Executables For JavaFX Applications</title><link>https://foojayio.github.io/website/today/creating-executables-for-javafx-applications/</link><pubDate>Fri, 08 Dec 2023 13:46:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-executables-for-javafx-applications/</guid><description>&lt;p&gt;Here on Foojay, you can already find some great articles on how to create native executables from your JavaFX code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/native-applications-for-multiple-devices-from-a-single-javafx-project-with-gluon-mobile-and-github-actions/"&gt;Native Applications for Multiple Devices from a Single JavaFX Project with Gluon Mobile and GitHub Actions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/javafx-templates-for-desktop-applications/"&gt;JavaFX Templates for Desktop Applications&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s take a look in this article at the current state of what can be done with &lt;code&gt;jpackage&lt;/code&gt; and GitHub Actions.&lt;/p&gt;
&lt;p&gt;All the sources and workflow files used here &lt;a href="https://github.com/heshanthenura/JavaPackageDemo" target="_blank" rel="noopener noreferrer"&gt;can be found in the &lt;code&gt;JavaPackageDemo&lt;/code&gt; repository&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>Who Killed the JVM? Attaching a Debugger Twice</title><link>https://foojayio.github.io/website/today/who-killed-the-jvm-attaching-a-debugger-twice/</link><pubDate>Wed, 06 Dec 2023 17:17:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/who-killed-the-jvm-attaching-a-debugger-twice/</guid><description>&lt;p&gt;A few weeks back, I told you about on-demand debugging in my &lt;a href="https://mostlynerdless.de/blog/2023/10/03/level-up-your-java-debugging-skills-with-on-demand-debugging/" target="_blank" rel="noopener noreferrer"&gt;Level-up your Java Debugging Skills with on-demand Debugging&lt;/a&gt;
 blog post, enabling you to delay a debugging session until:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You gave orders via &lt;code&gt;jcmd&lt;/code&gt; (&lt;code&gt;onjcmd=y&lt;/code&gt; option), a feature contributed by the &lt;a href="https://sapmachine.io" target="_blank" rel="noopener noreferrer"&gt;SapMachine&lt;/a&gt;
 team&lt;/li&gt;
&lt;li&gt;the program threw a specific exception (&lt;code&gt;onthrow=&amp;lt;exception&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;The program threw an uncaught exception (&lt;code&gt;onuncaught=y&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is quite useful because the JDWP agent has to do substantial initialization before it can start listening for the attaching debugger:&lt;/p&gt;</description></item><item><title>Couch to fully-observed code with Spring Boot 3.2, Micrometer Tracing, and Digma</title><link>https://foojayio.github.io/website/today/couch-to-fully-observed-code-with-spring-boot-3-2-micrometer-tracing-and-digma/</link><pubDate>Wed, 06 Dec 2023 10:42:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/couch-to-fully-observed-code-with-spring-boot-3-2-micrometer-tracing-and-digma/</guid><description>&lt;p&gt;&lt;strong&gt;Collecting important data about your code in dev and test has become trivial, it&amp;rsquo;s now also getting easier to put that data to use.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;{#more-103351}&lt;/p&gt;
&lt;h2 id="h2-0-tracing-debugging"&gt;Tracing &amp;gt; Debugging&lt;/h2&gt;
&lt;p&gt;There are many benefits to being able to follow what your Spring Boot code is doing using tracing. When used effectively, traces can reveal a lot about the inner workings of complex systems, or provide early feedback when you make mistakes in introducing new code changes.&lt;/p&gt;</description></item><item><title>Effective cloud native development with Open Liberty in VS Code</title><link>https://foojayio.github.io/website/today/effective-cloud-native-development-open-liberty-vs-code/</link><pubDate>Tue, 05 Dec 2023 10:25:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/effective-cloud-native-development-open-liberty-vs-code/</guid><description>&lt;p&gt;&lt;strong&gt;Open Liberty is a lightweight, open cloud-native runtime, great for building fast and efficient cloud-native Java applications. If you&amp;rsquo;re unfamiliar with Open Liberty, and want to learn more, check out the &amp;ldquo;&lt;a href="https://developer.ibm.com/articles/why-cloud-native-java-developers-love-liberty/" target="_blank" rel="noopener noreferrer"&gt;Why cloud-native Java developers love Liberty&lt;/a&gt;
&amp;rdquo; article.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;However, choosing an effective cloud-native Java runtime for your application doesn&amp;rsquo;t always directly equate to efficient creation of cloud-native applications. As developers, it&amp;rsquo;s important we use these runtimes and supporting tools effectively to enable an efficient development cycle and ensure productivity within our development teams.&lt;/p&gt;</description></item><item><title>Foojay Podcast #35: Dublin JUG</title><link>https://foojayio.github.io/website/today/foojay-podcast-35/</link><pubDate>Mon, 04 Dec 2023 14:37:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-35/</guid><description>&lt;p&gt;Once a month in this podcast, we talk about the history of a Java User Group and the people behind it.&lt;/p&gt;
&lt;p&gt;Today, we are traveling to Dublin to learn more about its Java community!&lt;/p&gt;
&lt;h2 id="h2-0-video-edit"&gt;Video edit&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/LH7TUruz28Y?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Virtual Event: JetBrains AI Launch Event</title><link>https://foojayio.github.io/website/today/jetbrains-ai-launch-event/</link><pubDate>Mon, 04 Dec 2023 11:32:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/jetbrains-ai-launch-event/</guid><description>&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t miss the online &lt;a href="https://www.jetbrains.com/" target="_blank" rel="noopener noreferrer"&gt;JetBrains&lt;/a&gt;
 AI launch event, where we&amp;rsquo;ll release our AI-powered coding companion, JetBrains AI Assistant.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With JetBrains AI, your favorite tools gain new abilities while you are empowered with more information at your fingertips.&lt;/p&gt;
&lt;p&gt;Free yourself from the routine and stay in the flow like never before!&lt;/p&gt;
&lt;p&gt;Join the &lt;a href="https://jb.gg/aihere" target="_blank" rel="noopener noreferrer"&gt;JetBrains AI launch event online&lt;/a&gt;
! &lt;strong&gt;December 6, 5:00 pm (CET) | 8:00 am (PST).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Learn more about JetBrains AI and AI Assistant from the creators themselves.
&lt;img src="https://foojayio.github.io/website/today/jetbrains-ai-launch-event/DSGN-18145_AI_Launch_Blog-Social-Share-1280x720-2x-1024x576.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>The Theory of Debugging</title><link>https://foojayio.github.io/website/today/the-theory-of-debugging/</link><pubDate>Mon, 04 Dec 2023 09:18:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-theory-of-debugging/</guid><description>&lt;p&gt;&lt;strong&gt;In the landscape of software development, bugs are an inevitable part of the journey, and debugging, albeit frustrating at times, is an integral part of the process. There&amp;rsquo;s no escaping this truth, and the sooner we embrace it, the sooner we can master the art of debugging.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the next few posts in this series, I will explain the little-known &amp;ldquo;theory&amp;rdquo; behind debugging. We all know the practice of debugging (to some degree) but there is also a theoretical underpinning that most of us never learned in University (I sure as hell didn&amp;rsquo;t). Understanding this theory will help you apply a more methodical approach to problem resolution and will improve your understanding of your code.&lt;/p&gt;</description></item><item><title>Exploring the OpenTelemetry Collector</title><link>https://foojayio.github.io/website/today/exploring-the-opentelemetry-collector/</link><pubDate>Sun, 03 Dec 2023 12:57:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-the-opentelemetry-collector/</guid><description>&lt;p&gt;The OpenTelemetry Collector sits at the center of the OpenTelemetry architecture but is unrelated to the W3C Trace Context.&lt;/p&gt;
&lt;p&gt;In my &lt;a href="https://github.com/nfrankel/opentelemetry-tracing" target="_blank" rel="noopener noreferrer"&gt;tracing demo&lt;/a&gt;
, I use Jaeger instead of the Collector.&lt;/p&gt;
&lt;p&gt;Yet, it&amp;rsquo;s ubiquitous, as in every OpenTelemetry-related post. I wanted to explore it further.&lt;/p&gt;
&lt;p&gt;In this post, I explore the different aspects of the Collector:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The data kind: logs, metrics, and traces&lt;/li&gt;
&lt;li&gt;Push and pull models&lt;/li&gt;
&lt;li&gt;Operations: reads, transformations, and writes&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-first-steps"&gt;First steps&lt;/h2&gt;
&lt;p&gt;A long time ago, &lt;em&gt;observability&lt;/em&gt; as we know it didn&amp;rsquo;t exist; what we had instead was &lt;em&gt;monitoring&lt;/em&gt;. Back then, monitoring was a bunch of people looking at screens displaying dashboards. Dashboards themselves consisted of metrics and only system metrics: mainly CPU, memory, and disk usage. For this reason, we will start with metrics.&lt;/p&gt;</description></item><item><title>Video: Vaadin Drag &amp; Drop Support. It's so easy!</title><link>https://foojayio.github.io/website/today/video-vaadin-drag-drop-support-its-so-easy/</link><pubDate>Fri, 01 Dec 2023 13:24:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/video-vaadin-drag-drop-support-its-so-easy/</guid><description>&lt;p&gt;In this video I show how simple it can be to add drag and drop to a Vaadin application! Drag and Drop can be helpful in many situations, but often it&amp;rsquo;s complicated to implement. That&amp;rsquo;s not the case with Vaadin. Vaadin makes it easy to have drag-and-drop support for all components.&lt;/p&gt;
&lt;p&gt;More information about drag and drop can be found in the &lt;a href="https://vaadin.com/docs/latest/create-ui/dnd" target="_blank" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;
.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/WIyT9PqhbqA?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;</description></item><item><title>Strategies for Managing State in Chronicle Services</title><link>https://foojayio.github.io/website/today/strategies-for-managing-state-in-chronicle-services/</link><pubDate>Fri, 01 Dec 2023 08:41:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/strategies-for-managing-state-in-chronicle-services/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In distributed, microservice-based applications, the management of state is one of the most important, yet difficult aspects of design.&lt;/p&gt;
&lt;p&gt;Ensuring the accuracy and consistency of state without introducing excessive complexity that affects performance or flexibility to support evolving requirements requires careful thought.&lt;/p&gt;
&lt;p&gt;This article discusses issues around state management and shows how the &lt;a href="https://chronicle.software/services/" title="Chronicle Services" target="_blank" rel="noopener noreferrer"&gt;Chronicle Services&lt;/a&gt;
 framework provides support to deal with these in ways that maintain a resilient and high performing microservices architecture.&lt;/p&gt;</description></item><item><title>JavaFX Links of November 2023</title><link>https://foojayio.github.io/website/today/javafx-links-of-november-2023/</link><pubDate>Thu, 30 Nov 2023 08:23:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-november-2023/</guid><description>&lt;p&gt;Have fun with this overview of the &amp;ldquo;JavaFX LinksOfTheWeek&amp;rdquo; that got published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during November!&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; shared: &amp;ldquo;JavaFX 22 will be supporting platform specific settings! E.g. dark and light mode etc.&amp;rdquo;. See &lt;a href="https://bugs.openjdk.org/browse/JDK-8319138" target="_blank" rel="noopener noreferrer"&gt;JDK-8319138: Platform preferences API&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;Also worth following: &lt;a href="https://bugs.openjdk.org/browse/JDK-8305116" target="_blank" rel="noopener noreferrer"&gt;JDK-8305116&lt;/a&gt;
: &amp;ldquo;Frosty / Milky / diffuse transparency areas showing desktop background&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is &lt;a href="https://twitter.com/dlemmermann/status/1724707717468582014" target="_blank" rel="noopener noreferrer"&gt;looking forward to the next release of JavaFX&lt;/a&gt;
: &amp;ldquo;We can hope to see CSS transitions, themes, and Platform API (dark mode, accent colors).&amp;rdquo;&lt;/li&gt;
&lt;li&gt;JavaFX Wish Lists by:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1724709050670014678" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
: removal of AWT, a tray API (tray icon),&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/LeeWyatt_7788/status/1724811343767978350" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;LeeWyatt&lt;/strong&gt;&lt;/a&gt;
: support for SVG Icons and Animations, Responsive Layout Pane/Adaptive Layout Pane&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/realThanhpv/status/1724995261305630972" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Thanhpv&lt;/strong&gt;&lt;/a&gt;
: clipping improvement&lt;/li&gt;
&lt;li&gt;And others in the same thread&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; shared &lt;a href="https://twitter.com/P_Duke/status/1724761488714240432" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Ongoing work to add CSS transitions to JavaFX&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1720073696541602138" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; shared screenshots&lt;/a&gt;
 of the initial prototype of HERO (a JavaFX app in production) and screenshots of the app after its redesign and implementation. He also shared some quick remarks about the redesign.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1719446338503671953" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; shared an impressive video of 3D rendering&lt;/a&gt;
: &amp;ldquo;Now the camera is always pointing to the airplane and it can also freely move. It&amp;rsquo;s on the Raspberry Pi and with this resolution it lags a bit with the screen recorder.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SerendigityInfo/status/1718268583208219073" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Serendipity&lt;/strong&gt; is proud&lt;/a&gt;
! &amp;ldquo;Yes, we did it! A JavaFX APP is first in the Apple Store ranking for macOS! SmartFinder number one! Another small step for all Java lovers. JavaFX write once run anywhere.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt; announced v23.3.0 of LogoRRR, the tool to analyze log files and filter out critical events or other points of interest: &amp;ldquo;&lt;a href="https://twitter.com/logorrr/status/1720139416478351834" target="_blank" rel="noopener noreferrer"&gt;Successfully resolved a significant performance issue in LogoRRR. This enhancement is the highlight of version 23.3.0&lt;/a&gt;
&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RNArtist&lt;/strong&gt; announced the availability of RNArtist 1.1.3 with the ability to define a zooming area with the left mouse button. More info and a video demo is &lt;a href="https://github.com/fjossinet/RNArtist/discussions/25" target="_blank" rel="noopener noreferrer"&gt;available here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/h4-z4_stockportfolio-inventorymanagement-javafx-activity-7128600932510007298-1fpO/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Randil Hasanga&lt;/strong&gt; shared screenshots of Book Nook&lt;/a&gt;
, a Stock Portfolio Management System.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/tharindu-nuwan-madhushanka-00b689251_java-javafx-mediaplayer-activity-7128595798606450689-MV31" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tharindu Nuwan Madhushanka&lt;/strong&gt; unveilled a Media Player App and a link to the sources&lt;/a&gt;
: &amp;ldquo;From crisp audio playback to stunning video performance, this app sets a new standard&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/YangKui7" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;GZYangKui&lt;/strong&gt; shared some tweets&lt;/a&gt;
 while working on games and successfully resolved an &lt;a href="https://twitter.com/YangKui7/status/1722603653989556386" target="_blank" rel="noopener noreferrer"&gt;audio output delay issue&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; has been very active!
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://orangomango.itch.io/tetris" target="_blank" rel="noopener noreferrer"&gt;Tetris in the browser&lt;/a&gt;
, but also for Windows, Linux, macOS, and of course Raspberry Pi.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1725496263540343228" target="_blank" rel="noopener noreferrer"&gt;RailTheWay 2.0&lt;/a&gt;
: &amp;ldquo;Major update! Guide the trains to their station and avoid collisions.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1724403696660894083" target="_blank" rel="noopener noreferrer"&gt;FlightSimulator&lt;/a&gt;
, exclusively using the JavaFX canvas.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1723077440912674834" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Update video about my Minecraft clone made with my 3D engine from scratch.&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1719746602825297991" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;&lt;a href="https://www.jfx-central.com/libraries/atlantafx" target="_blank" rel="noopener noreferrer"&gt;AtlantaFX&lt;/a&gt;
 is currently my theme of choice. It is modern looking, very elegant, very professional, well documented, supports various modes (yes, dark mode and darcula, too), comes with an auto-updating sampler app, custom skins, much simpler styling rules than Modena, etc &amp;hellip; if you haven&amp;rsquo;t done so, yet, please &lt;a href="https://github.com/mkpaz/atlantafx" target="_blank" rel="noopener noreferrer"&gt;check out the repo&lt;/a&gt;
.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1720475150032810405" target="_blank" rel="noopener noreferrer"&gt;V1.90.0 of GemsFX&lt;/a&gt;
, which includes an SVGImageView control to display SVG files. The control uses the &lt;a href="https://github.com/weisJ/jsvg" target="_blank" rel="noopener noreferrer"&gt;jsvg project&lt;/a&gt;
 to render to an AWT image, convert it, and then display it inside an ImageView.&lt;/li&gt;
&lt;li&gt;Dirk also announced the release of a new JavaFX input field for phone numbers which is utilising the libphonenumber project from Google to format and validate the numbers. The project can be found &lt;a href="https://github.com/dlsc-software-consulting-gmbh/PhoneNumberFX" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
. The main contributor is &lt;a href="https://twitter.com/gldiazcardenas" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gabriel Diaz&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Version 1.5.0 of that library &lt;a href="https://twitter.com/dlemmermann/status/1727262578551009318" target="_blank" rel="noopener noreferrer"&gt;has been refactored and greatly simplified&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mushtak Abdulqadir&lt;/strong&gt; describes several libraries in a LinkedIn post (BootstrapFX, ControlsFX, FormsFX, FXGL, Ikonli, TilesFX, ValidatorFX) and &lt;a href="https://www.linkedin.com/posts/altmemy_javafx-uiux-desktopdevelopment-activity-7127725400717209600-ozbs/" target="_blank" rel="noopener noreferrer"&gt;is asking for feedback&lt;/a&gt;
: &amp;ldquo;Which of these libraries have you used, and what has been your experience with them?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/iAbhinay/status/1723642698585059640" target="_blank" rel="noopener noreferrer"&gt;Announced by &lt;strong&gt;Abhinay Agarwal&lt;/strong&gt;&lt;/a&gt;
: release of ControlsFX v11.2.0! Baseline has been moved to JavaFX 17 and is compatible with JavaFX 21. The &lt;a href="https://github.com/controlsfx/controlsfx/releases/tag/11.2.0" target="_blank" rel="noopener noreferrer"&gt;release notes can be found here&lt;/a&gt;
 and &lt;a href="https://controlsfx.github.io/javadoc" target="_blank" rel="noopener noreferrer"&gt;JavaDoc here&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;And he is looking for advise: &lt;a href="https://twitter.com/iAbhinay/status/1723647392908751267" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Which JavaFX control would you recommend to read very large text files?&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/husker-dev/openglfx" target="_blank" rel="noopener noreferrer"&gt;V4.0 of openglfx&lt;/a&gt;
 has been released. This library adds a new element to JavaFX to render OpenGL graphics. It is optimized for each platform and includes some auxiliary functions for working with OpenGL from JavaFX.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcast-video-books"&gt;Podcast, Video, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;At J-Fall in the Netherlands, &lt;strong&gt;Frank Delporte&lt;/strong&gt; had a lot of live interviews with speakers and guests, including &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; . In &lt;a href="https://www.youtube.com/watch?v=FV1ITrl42mk" target="_blank" rel="noopener noreferrer"&gt;this short interview, they also talk about JavaFX&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;On airhacks.fm, the podcast by &lt;strong&gt;Adam Bien&lt;/strong&gt; : &lt;a href="https://adambien.blog/roller/abien/entry/how_han_solo_wrote_steelseries" target="_blank" rel="noopener noreferrer"&gt;How &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; wrote SteelSeries&lt;/a&gt;
. &amp;ldquo;A podcast episode about pixel perfect Java user interfaces, JavaFX, and Java&amp;rsquo;s portability&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Edward Nyirenda Jr&lt;/strong&gt; again published several tutorials, for instance:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coderscratchpad.com/javafx-lightin" target="_blank" rel="noopener noreferrer"&gt;JavaFX Lighting Effect&lt;/a&gt;
: &amp;ldquo;The Light.Spot represents a point light source with characteristics similar to a spotlight.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coderscratchpad.com/javafx-phone-number-input-field/" target="_blank" rel="noopener noreferrer"&gt;JavaFX Phone Number Input Field&lt;/a&gt;
: using the library &amp;ldquo;PhoneNumberFX&amp;rdquo; that just got released.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/rumbletumblekid/status/1719376674939101576" target="_blank" rel="noopener noreferrer"&gt;Screenshot by &lt;strong&gt;Rumble Tumble Kid&lt;/strong&gt; of the minimal code to run ScalaFX&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; is wondering if anyone is &lt;a href="https://www.linkedin.com/posts/carldea_upgraded-to-gradle-84-jdk-2101-openjfx-activity-7131115551858282496-9sM-/" target="_blank" rel="noopener noreferrer"&gt;interested in Java 21.0.1 &amp;amp; JavaFX 21.0.1 Scenic View&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heshan Kariyawasam&lt;/strong&gt; is working on an &lt;a href="https://github.com/heshanthenura/JavaPackageDemo" target="_blank" rel="noopener noreferrer"&gt;example project to build JavaFX executables&lt;/a&gt;
 for different platforms with Gradle, jpackage, and GitHub Actions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; is &lt;a href="https://twitter.com/orango_mango/status/1727340684498383337" target="_blank" rel="noopener noreferrer"&gt;visualizing prime numbers&lt;/a&gt;
 with JavaFX. &lt;a href="https://pastebin.com/u0nzj4bT" target="_blank" rel="noopener noreferrer"&gt;The source code is on pastebin&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A new version has been released with several utilities / tools to develop JavaFX applications: gradient editor, SVG path extractor, effects editor, pixel-to-em converter, CSS playground. &lt;a href="https://jfx-central.com/utilities" target="_blank" rel="noopener noreferrer"&gt;You can find the utilities here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Random&amp;rdquo; sorting will be added to the category pages so that every item gets the same chance to be seen or found.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1719751012318052444" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared a video&lt;/a&gt;
 showing the superfast startup of the JFX Central app, as a native app, thanks to Gluon.&lt;/li&gt;
&lt;li&gt;The summary with all the JFX Central links of October got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-october-2023/"&gt;published on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Custom Events in the Blocky World: Using JFR in Minecraft</title><link>https://foojayio.github.io/website/today/custom-events-in-the-blocky-world-using-jfr-in-minecraft/</link><pubDate>Tue, 28 Nov 2023 19:12:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/custom-events-in-the-blocky-world-using-jfr-in-minecraft/</guid><description>&lt;p&gt;I was searching for some JFR-related settings on the internet when I stumbled upon the &lt;a href="https://minecraft.fandom.com/wiki/Commands/jfr" target="_blank" rel="noopener noreferrer"&gt;&lt;code&gt;/jfr&lt;/code&gt; command&lt;/a&gt;
 that exists in &lt;a href="https://www.minecraft.net" target="_blank" rel="noopener noreferrer"&gt;Minecraft&lt;/a&gt;
:&lt;/p&gt;
&lt;figure class="aligncenter size-full is-resized"&gt;
 &lt;a target="_blank" href="https://minecraft.fandom.com/wiki/Commands/jfr"&gt;&lt;img decoding="async" src="https://mostlynerdless.de/wp-content/uploads/2023/11/image-2.png" alt="" class="wp-image-1298" style="width:614px;height:auto"&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;This, of course, intrigued me, especially as Minecraft apparently adds some custom JFR events:
&lt;a href="https://minecraft.fandom.com/wiki/Commands/jfr" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/11/image-3.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;So I had to check it out. I downloaded and started the &lt;a href="https://www.minecraft.net/en-us/download/server" target="_blank" rel="noopener noreferrer"&gt;Java server&lt;/a&gt;
, got a demo account, and connected to my local instance. &lt;em&gt;This works with a demo account when you launch the demo world, enable the cheat mode in the settings, kick yourself via &amp;ldquo;/kick @p,&amp;rdquo; and then select your own server. I found this via &lt;a href="https://bugs.mojang.com/browse/MC-138478" target="_blank" rel="noopener noreferrer"&gt;this bug report&lt;/a&gt;
.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Webinar: Harnessing the Power of AI Assistant in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/webinar-harnessing-the-power-of-ai-assistant-in-intellij-idea/</link><pubDate>Tue, 28 Nov 2023 16:38:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/webinar-harnessing-the-power-of-ai-assistant-in-intellij-idea/</guid><description>&lt;p&gt;AI Assistant provides AI-powered features for software development based on the JetBrains AI service. The service transparently connects you, the IDE user, to different large language models.&lt;/p&gt;
&lt;p&gt;In this session, Anton Arhipov will demonstrate the capabilities of AI Assistant in IntelliJ IDEA. You will learn how the tool helps you explore and improve existing code as well as write new code in different scenarios.
&lt;a href="https://info.jetbrains.com/idea-webinar-december07-2023.html" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/webinar-harnessing-the-power-of-ai-assistant-in-intellij-idea/IntelliJ_IDEA_AI_Assistant_Webinar-1024x576.jpeg" alt="Banner for IntelliJ IDEA Livestream with title &amp;ldquo;Harnassing the Power of AI Assistant in IntelliJ IDEA&amp;rdquo; featuring Anton Arhipov." loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>SpringBoot 3.2 + CRaC</title><link>https://foojayio.github.io/website/today/springboot-3-2-crac/</link><pubDate>Tue, 28 Nov 2023 13:04:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/springboot-3-2-crac/</guid><description>&lt;p&gt;Last week Spring 6.1 and &lt;a href="https://spring.io/blog/2023/11/23/spring-boot-3-2-0-available-now" title="SpringBoot 3.2" target="_blank" rel="noopener noreferrer"&gt;SpringBoot 3.2&lt;/a&gt;
 were released and they both came with full support for CRaC (Coordinated Restore at Checkpoint).&lt;/p&gt;
&lt;p&gt;If you want to learn more about CRaC, feel free to read about it &lt;a href="https://docs.azul.com/core/crac/crac-introduction" title="here" target="_blank" rel="noopener noreferrer"&gt;here&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CRaC is an &lt;a href="https://wiki.openjdk.org/display/crac" title="OpenJDK project" target="_blank" rel="noopener noreferrer"&gt;OpenJDK project&lt;/a&gt;
 that can &amp;ldquo;snapshot&amp;rdquo; a running JVM (Java Virtual Machine) and store its state, including your application, to disk. Then, at another point in time, you can restore the JVM from the saved checkpoint back to memory. With this, one can start an application, warm it up, and create a checkpoint. Restoring from the saved checkpoint back to memory mainly relies on disk I/O, which means it is really fast (in the range of milliseconds).&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Foojay Podcast #34: J-Fall Report, Part 2</title><link>https://foojayio.github.io/website/today/foojay-podcast-34/</link><pubDate>Mon, 27 Nov 2023 11:04:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-34/</guid><description>&lt;p&gt;On November 9th, we had several interviews with the speakers and guests at the J-Fall conference in the Netherlands.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://foojayio.github.io/website/today/foojay-podcast-33-j-fall-report-part-1/"&gt;Last week&lt;/a&gt;
, in episode 33 of the Foojay Podcast, you could hear discussions about the evolution of Java towards the Cloud and sustainability.&lt;/p&gt;
&lt;p&gt;In this part, we will touch on various topics related to the developers&amp;rsquo; lives.&lt;/p&gt;
&lt;h2 id="h2-0-video-report"&gt;Video Report&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/VjlaAklbZu0?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;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Custom JFR Events: A Short Introduction</title><link>https://foojayio.github.io/website/today/custom-jfr-events-a-short-introduction/</link><pubDate>Sun, 26 Nov 2023 21:08:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/custom-jfr-events-a-short-introduction/</guid><description>&lt;p&gt;&lt;strong&gt;JDK Flight Recorder (JFR) is one of the two prominent open-source profilers for the OpenJDK (besides &lt;a href="https://github.com/async-profiler/async-profiler" target="_blank" rel="noopener noreferrer"&gt;async-profiler&lt;/a&gt;
).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It offers many features (see &lt;a href="https://mostlynerdless.de/profiling-talks/" target="_blank" rel="noopener noreferrer"&gt;Profiling Talks&lt;/a&gt;
) and the ability to observe lots of information by recording over one hundred different events.&lt;/p&gt;
&lt;p&gt;If you want to know more about the existing events, visit my &lt;a href="https://sapmachine.io/jfrevents" target="_blank" rel="noopener noreferrer"&gt;JFR Event Collection&lt;/a&gt;
 website (&lt;a href="https://mostlynerdless.de/blog/2022/12/06/jfr-event-collection/" target="_blank" rel="noopener noreferrer"&gt;related blog post&lt;/a&gt;
):&lt;br&gt;
&lt;a href="https://sapmachine.io/jfrevents" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/11/image.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Besides these built-in events, JFR allows you to implement your events to record custom information directly in your profiling file.&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>Video: "If I decide to stay with Oracle Java what issues will I face?"</title><link>https://foojayio.github.io/website/today/video-if-i-decide-to-stay-with-oracle-java-what-issues-will-i-face/</link><pubDate>Thu, 23 Nov 2023 09:12:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/video-if-i-decide-to-stay-with-oracle-java-what-issues-will-i-face/</guid><description>&lt;p&gt;Simon Ritter and Gerrit Grunwald answer a question that they hear repeatedly: &lt;strong&gt;&amp;ldquo;If I decide to stay with Oracle Java (rather than migrate to an OpenJDK distribution) what issues will I face?&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/rGiIm2xdp7w?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;br /&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>Announcing the Build Server for Gradle Open-Source Repository</title><link>https://foojayio.github.io/website/today/announcing-the-bsp-repo/</link><pubDate>Tue, 21 Nov 2023 10:08:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-the-bsp-repo/</guid><description>&lt;h3 id="h3-0-build-server-for-gradle"&gt;Build Server for Gradle&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;In September, we shared that Microsoft and Gradle &lt;a href="https://devblogs.microsoft.com/java/new-build-server-for-gradle/" target="_blank" rel="noopener noreferrer"&gt;have joined forces&lt;/a&gt;
 to explore a novel approach to Gradle project import and building, based on the &lt;a href="https://build-server-protocol.github.io/" target="_blank" rel="noopener noreferrer"&gt;Build Server Protocol (BSP)&lt;/a&gt;
. The objective is address the existing Gradle issues on Visual Studio Code and improve support for Gradle projects.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Build Server for Gradle, developed in collaboration with Gradle, will delegate build tasks to the Gradle build tool, which will be responsible for compiling and generating code directly. This ensures that the results of building in Visual Studio Code will be consistent with the output obtained by running Gradle build commands.&lt;/p&gt;</description></item><item><title>Explore project structure with IntelliJ IDEA's Dependency Matrix</title><link>https://foojayio.github.io/website/today/explore-project-structure-with-intellij-ideas-dependency-matrix/</link><pubDate>Mon, 20 Nov 2023 10:28:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/explore-project-structure-with-intellij-ideas-dependency-matrix/</guid><description>&lt;p&gt;In this tutorial, we&amp;rsquo;ll look at exploring project structure with &lt;a href="https://www.jetbrains.com/idea/" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA&lt;/a&gt;
&amp;rsquo;s Dependency Matrix.&lt;/p&gt;
&lt;p&gt;When working with large, complex software projects, we need to understand the dependencies between components in your projects. IntelliJ IDEA has a feature called &lt;strong&gt;Dependency Structure Matrix&lt;/strong&gt; (&lt;strong&gt;DSM&lt;/strong&gt; ), or &lt;strong&gt;Dependency Matrix&lt;/strong&gt;, that can help us with this.&lt;/p&gt;
&lt;p&gt;When you are new to a project, the Dependency Matrix can help you get an overview of the dependencies in the project. The Dependency Matrix can also help us get an idea of how hard it will be to split a project, based on the dependencies between components. Finally, it can help us find and untangle cyclic dependencies.&lt;/p&gt;</description></item><item><title>Foojay Podcast #33: J-Fall Report, Part 1</title><link>https://foojayio.github.io/website/today/foojay-podcast-33/</link><pubDate>Mon, 20 Nov 2023 10:22:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-33/</guid><description>&lt;p&gt;A few months ago, we asked the J-Fall team if a Foojay Broadcast Room would be a good idea. And they said yes, so &lt;a href="https://foojayio.github.io/website/today/digma-apache-apisix-and-openvalue-sponsor-foojay-io-at-jfall-2023/"&gt;suddenly we found ourselves in the middle of the entrance&lt;/a&gt;
 of the Pathé cinema in Ede in the Netherlands, with a camera and microphones.&lt;/p&gt;
&lt;p&gt;During the day, we had a lot of exciting talks. There are way too many to fit in one podcast, so in the following weeks, you will get different episodes handling a lot of topics.&lt;/p&gt;</description></item><item><title>Unexpected Things That Make You a Senior Developer</title><link>https://foojayio.github.io/website/today/unexpected-things-that-make-you-a-senior-developer/</link><pubDate>Fri, 17 Nov 2023 09:33:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/unexpected-things-that-make-you-a-senior-developer/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;It&amp;rsquo;s a Friday, late in the afternoon. To end your work week in a clean way, you decide to get rid of some test data and files from your PC. You hit the enter button to drop a table from your local test database. Within a split second, you realize your error. Your body turns hot and cold at the same time. You double-check, but you already know the truth. You were connected to the production database and just deleted the table with all the customers&amp;hellip;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Preserving Software Continuity: Empowering Failover Strategies for Uninterrupted Operations</title><link>https://foojayio.github.io/website/today/preserving-software-continuity/</link><pubDate>Thu, 16 Nov 2023 07:53:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/preserving-software-continuity/</guid><description>&lt;p&gt;In today&amp;rsquo;s ever-changing and fast-paced digital landscape, maintaining uninterrupted business continuity is of utmost importance.&lt;/p&gt;
&lt;p&gt;Enter &lt;a href="https://chronicle.software/services/" title="Chronicle Service" target="_blank" rel="noopener noreferrer"&gt;Chronicle Services&lt;/a&gt;
, a robust mechanism dedicated to upholding application integrity even in the face of service disruptions.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s examine the world of failover strategies and explore how they safeguard software continuity.&lt;/p&gt;
&lt;h3 id="h3-0-stateless-vs-stateful-services"&gt;Stateless vs. Stateful Services&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s important to appreciate the difference between stateless and stateful services. Your choice of failover approach is highly influenced by this understanding, especially if the aim is to resume services seamlessly from where they were interrupted.&lt;/p&gt;</description></item><item><title>Patterns For The Design Of Microservices – Part 3</title><link>https://foojayio.github.io/website/today/patterns-for-the-design-of-microservices-part-3/</link><pubDate>Thu, 16 Nov 2023 04:35:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/patterns-for-the-design-of-microservices-part-3/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/patterns-for-the-design-of-microservices-part-1/" title="part1"&gt;part1&lt;/a&gt;
, &lt;a href="https://foojayio.github.io/website/today/patterns-for-the-design-of-microservices-part-2/" title="part2"&gt;part2&lt;/a&gt;
, we discussed several design patterns that aid in the development of microservices.&lt;/p&gt;
&lt;p&gt;This blog post will cover the subsequent design patterns.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Observability Patterns&lt;/li&gt;
&lt;li&gt;Cross-cutting Concern Patterns&lt;/li&gt;
&lt;/ul&gt;
&lt;img fetchpriority="high" decoding="async" class="size-medium wp-image-103034" src="MSPatternsOne-700x394.png" alt="Microservice Architecture" width="700" height="394"&gt;
&lt;p&gt;Microservice Architecture Patterns&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;Undoubtedly, the logging mechanism benefits troubleshooting issues that arise when executing operations or transactions on multiple deployed microservices.&lt;/p&gt;
&lt;p&gt;We can further categorize the observability patterns into six distinct patterns.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Log Aggregation&lt;/li&gt;
&lt;li&gt;Application Metrics&lt;/li&gt;
&lt;li&gt;Audit Logging&lt;/li&gt;
&lt;li&gt;Distrubuted Tracing&lt;/li&gt;
&lt;li&gt;Exception Tracking&lt;/li&gt;
&lt;li&gt;Health Check API&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the subsequent segment, we will discuss each topic separately.&lt;/p&gt;</description></item><item><title>[Unit] Testing Supabase in Kotlin using Test Containers</title><link>https://foojayio.github.io/website/today/unit-testing-supabase-in-kotlin/</link><pubDate>Wed, 15 Nov 2023 16:36:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/unit-testing-supabase-in-kotlin/</guid><description>&lt;p&gt;&lt;strong&gt;In this article, I&amp;rsquo;ll dive into several methods I&amp;rsquo;ve been looking into to unit test a Kotlin application using Supabase and why I finally decided to go for a Docker Compose / Test Containers solution.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;TL;DR : The easiest way I found to test my database service is to mimick Supabase using Docker Compose and Test Containers. &lt;a href="https://github.com/jlengrand/supabase-mock-demo-kotlin?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;Here&amp;rsquo;s the code&lt;/a&gt;
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In case you don&amp;rsquo;t know it, I&amp;rsquo;m a big fan of &lt;a href="https://supabase.com/?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;
. I love that they&amp;rsquo;re a viable alternative to Firebase. I love that they&amp;rsquo;re &lt;a href="https://github.com/supabase/supabase/blob/master/apps/docs/public/img/supabase-architecture.png?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;built on top of Open-Source&lt;/a&gt;
 pieces. I love &lt;a href="https://supabase.com/blog/chatgpt-supabase-docs?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;how innovative they are&lt;/a&gt;
, and &lt;a href="https://github.com/supabase/postgres_lsp?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;how much they give back to the community&lt;/a&gt;
. And as you already know it, I love &lt;a href="https://kotlinlang.org/?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt;
 as well.&lt;/p&gt;</description></item><item><title>Live (re)compile, (re)load, (re)execute Java code in 100 LoC</title><link>https://foojayio.github.io/website/today/live-recompile-reload-reexecute-java-code-in-100-loc/</link><pubDate>Wed, 15 Nov 2023 16:22:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/live-recompile-reload-reexecute-java-code-in-100-loc/</guid><description>&lt;p&gt;Writing your first program in Java can have quite a learning curve.&lt;/p&gt;
&lt;p&gt;Java has been trying in recent releases to make it easier to write the &lt;a href="https://openjdk.org/projects/amber/design-notes/on-ramp" target="_blank" rel="noopener noreferrer"&gt;first simple program&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Here are some changes that simplify your first Java program:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://openjdk.org/jeps/222" target="_blank" rel="noopener noreferrer"&gt;JEP 222&lt;/a&gt;
: jshell: The Java Shell (Read-Eval-Print Loop) in JDK 9&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openjdk.org/jeps/330" target="_blank" rel="noopener noreferrer"&gt;JEP 330&lt;/a&gt;
: Launch Single-File Source-Code Programs in JDK 11&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openjdk.org/jeps/445" target="_blank" rel="noopener noreferrer"&gt;JEP 445&lt;/a&gt;
: Unnamed Classes and Instance Main Methods in preview in JDK 21&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openjdk.org/jeps/458" target="_blank" rel="noopener noreferrer"&gt;JEP 458&lt;/a&gt;
: Launch Multi-File Source-Code Programs. Not released yet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll write a program (&lt;strong&gt;The Reloader&lt;/strong&gt;) to easily play with Java code without the need to know how to compile or run the code or print the result.&lt;/p&gt;</description></item><item><title>Loom is just HyperThreading in Java</title><link>https://foojayio.github.io/website/today/loom-is-just-hyperthreading-in-java/</link><pubDate>Tue, 14 Nov 2023 10:54:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/loom-is-just-hyperthreading-in-java/</guid><description>&lt;p&gt;While sitting in &lt;a href="https://horstmann.com/unblog/2023-09-19/index.html" target="_blank" rel="noopener noreferrer"&gt;Cay Horstmann&lt;/a&gt;
&amp;rsquo;s &lt;a href="https://baselone.ch/speech.html?id=BEB1A232-BA37-4619-A7F9-33802755DFEB" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Looming Changes in Java Concurrency&amp;rdquo; talk at BaselOne&lt;/a&gt;
, I had an epiphany: Aren&amp;rsquo;t virtual threads with Loom just a version of HyperThreading on the JVM?&lt;br&gt;
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/10/ht_vs_vt_pyramid-1-2000x1125.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Both try to utilize a computation resource fully, be it hardware core or platform thread, by multiplexing multiple tasks onto it, despite many tasks waiting regularly for IO operations to complete:
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/10/ht_vs_vt_interleaving-2000x560.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;When one task waits, another can be scheduled, improving overall throughput. This works especially well when longer IO operations follow short bursts of computation.&lt;/p&gt;</description></item><item><title>Digma, Apache APISIX, and OpenValue: Foojay.io at JFall 2023</title><link>https://foojayio.github.io/website/today/digma-apache-apisix-and-openvalue-sponsor-foojay-io-at-jfall-2023/</link><pubDate>Mon, 13 Nov 2023 22:19:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/digma-apache-apisix-and-openvalue-sponsor-foojay-io-at-jfall-2023/</guid><description>&lt;p&gt;&lt;strong&gt;Last week&amp;rsquo;s JFall 2023 was a high point in the evolution of Foojay.io, the place for friends of OpenJDK.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We had a very big booth right by the entrance to the venue, consisting of a large rollout banner featuring all the organizations involved in Foojay.io, a table totally covered in stickers (hundreds, maybe thousands, of Foojay.io stickers, as well as sponsor stickers, such as Digma), and a podcast zone, where Frank spent most of the day recording short podcast interviews with a very wide range of Java enthusiasts attending the event.&lt;/p&gt;</description></item><item><title>Payara Platform Surpasses 150,000 Monthly Users</title><link>https://foojayio.github.io/website/today/payara-platform-reaches-150000-monthly-users/</link><pubDate>Fri, 10 Nov 2023 11:42:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/payara-platform-reaches-150000-monthly-users/</guid><description>&lt;p&gt;&lt;a href="https://www.payara.fish/" title="Payara Services" target="_blank" rel="noopener noreferrer"&gt;Payara Services&lt;/a&gt;
, the leading provider of open source &lt;a href="https://jakarta.ee/" title="Jakarta EE" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 application server software, is proud to announce a significant milestone in the global adoption of Payara Platform.&lt;/p&gt;
&lt;p&gt;Designed for mission-critical systems in production and containerized Jakarta EE and &lt;a href="https://microprofile.io/" title="MicroProfile" target="_blank" rel="noopener noreferrer"&gt;MicroProfile&lt;/a&gt;
 applications, with over 150,000 users globally relying on Payara Platform every month, Payara has firmly established itself as a preferred choice among developers, as well as companies and institutions worldwide.&lt;/p&gt;</description></item><item><title>OpenAPI Generator: From YAML to JetBrains HTTP Client</title><link>https://foojayio.github.io/website/today/creating-an-openapi-generator-from-scratch-from-yaml-to-jetbrains-http-client/</link><pubDate>Fri, 10 Nov 2023 10:41:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-an-openapi-generator-from-scratch-from-yaml-to-jetbrains-http-client/</guid><description>&lt;h3 id="h3-0-in-this-article-i-ll-be-implementing-an-openapi-generator-from-scratch-so-you-can-too-we-ll-be-creating-a-very-simple-generator-for-the-jetbrains-http-client"&gt;&lt;strong&gt;In this article, I&amp;rsquo;ll be implementing an OpenAPI generator from scratch so you can too! We&amp;rsquo;ll be creating a very simple generator for the Jetbrains HTTP Client.&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://lengrand.fr/content/images/2023/11/F9_7HZZW4AEvcHF.jpeg" alt="Creating an OpenAPI generator from scratch : From YAML to JetBrains HTTP Client" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;This is the online version of the article with the same name I wrote for the Dutch Java Magazine.&lt;/p&gt;
&lt;p&gt;In the previous edition of the magazine, we discussed how the &lt;a href="https://www.jetbrains.com/help/idea/http-client-reference.html?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;JetBrains HTTP Client&lt;/a&gt;
 could be used to run HTTP Queries, automate them and even use them in your CI/CD pipelines. Just like &lt;a href="https://www.postman.com/?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;Postman&lt;/a&gt;
, but text based and can be part of your source code. Pretty cool.&lt;/p&gt;</description></item><item><title>Integrate executable Java code in your blog posts</title><link>https://foojayio.github.io/website/today/integrate-executable-java-code-in-your-blog-posts/</link><pubDate>Tue, 07 Nov 2023 14:49:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/integrate-executable-java-code-in-your-blog-posts/</guid><description>&lt;p&gt;While developing the &lt;a href="https://foojayio.github.io/website/java-quick-start/"&gt;Foojay Quickstart Java Tutorial&lt;/a&gt;
, I was looking for an easy way to integrate runnable Java code examples into the Foojay pages and blogs. That&amp;rsquo;s when I discovered &lt;a href="https://www.jdoodle.com/" target="_blank" rel="noopener noreferrer"&gt;jdoodle.com&lt;/a&gt;
. I started by using their online editor, but with this blog I want to show you an even easier method to integrate runnable code here on Foojay.&lt;/p&gt;
&lt;h2 id="h2-0-integration-examples"&gt;Integration examples&lt;/h2&gt;
&lt;h3 id="h3-1-single-file-code"&gt;Single file code&lt;/h3&gt;
&lt;p&gt;To integrate &amp;ldquo;plain&amp;rdquo; Java code in your post or page, use the following syntax and add it as &amp;ldquo;Custom HTML&amp;rdquo; widget:&lt;/p&gt;</description></item><item><title>How to find dead code in your Java services</title><link>https://foojayio.github.io/website/today/how-to-find-dead-code-in-your-java-services/</link><pubDate>Tue, 07 Nov 2023 10:40:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-find-dead-code-in-your-java-services/</guid><description>&lt;p&gt;&lt;strong&gt;When building solutions, the code we write can last many years. While casually browsing legacy code, we might wonder; is this still used? The missing documentation or outdated tests do not help us answer this. When asking around, nobody really knows. Let&amp;rsquo;s try to delete it, shall we? Then, chaos ensues: it turns out it is still used to support some legacy users, in case of emergency, or by that one forgotten integration everyone still uses.&lt;/strong&gt;{#2406}&lt;/p&gt;</description></item><item><title>Foojay Podcast #32: Philippines JUG</title><link>https://foojayio.github.io/website/today/foojay-podcast-32-philippines-jug/</link><pubDate>Mon, 06 Nov 2023 11:03:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-32-philippines-jug/</guid><description>&lt;p&gt;Once a month we talk about the history of a JUG and the people behind it.&lt;/p&gt;
&lt;p&gt;Today we travel to the Philippines. A new generation of developers has taken over the organization of the JUG. And in addition, they are also involved in the organization of the Softcon conference.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s talk about the history and future of the Java community in the Philippines!&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/eo8m4Kia-hU?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;h2 id="h2-0-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&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>Python "magic" methods - part 2</title><link>https://foojayio.github.io/website/today/python-magic-methods-part-2/</link><pubDate>Fri, 03 Nov 2023 09:15:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/python-magic-methods-part-2/</guid><description>&lt;p&gt;Let&amp;rsquo;s continue our exploration of Python&amp;rsquo;s magic methods in this second part of the series. This part will focus on numbers and containers, &lt;em&gt;i.e.&lt;/em&gt; , collections. You can read the first part &lt;a href="https://foojayio.github.io/website/today/python-magic-methods-part-1/"&gt;here&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-container-related-methods"&gt;Container-related methods&lt;/h2&gt;
&lt;p&gt;Python provides the usual containers, &lt;em&gt;e.g.&lt;/em&gt;, lists, sets, and dictionaries. You can use the following methods when you want to implement your own.&lt;/p&gt;
&lt;h3 id="h3-1-common-methods"&gt;Common methods&lt;/h3&gt;
&lt;p&gt;Containers have a size. Python defines two methods to implement to return the number of items in a container: &lt;code&gt;object.__len__(self)&lt;/code&gt; for the exact size and &lt;code&gt;object.__length_hint__(self)&lt;/code&gt; for an approximation. You should use the latter when getting the exact size is computationally expensive.&lt;/p&gt;</description></item><item><title>Python "magic" methods - part 1</title><link>https://foojayio.github.io/website/today/python-magic-methods-part-1/</link><pubDate>Fri, 03 Nov 2023 09:08:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/python-magic-methods-part-1/</guid><description>&lt;p&gt;Java was the first language I used professionally and is the scale by which I measure other languages I learned afterward. It&amp;rsquo;s an statically-typed language. Hence, Python feels a bit weird because of its dynamic typing approach.&lt;/p&gt;
&lt;p&gt;For example, &lt;code&gt;Object&lt;/code&gt; offers methods &lt;code&gt;equals()&lt;/code&gt;, &lt;code&gt;hashCode()&lt;/code&gt;, and &lt;code&gt;toString()&lt;/code&gt;. Because all other classes inherit from &lt;code&gt;Object&lt;/code&gt;, directly or indirectly, all objects have these methods by definition.&lt;/p&gt;
&lt;p&gt;Conversely, Python was not initially built on OOP principles and is dynamically typed. Yet, any language needs cross-cutting features on unrelated objects. In Python, these are specially-named methods: methods that the runtime interprets in a certain way but that you need to know about. You can call them magic methods.&lt;/p&gt;</description></item><item><title>Putting JFR into Context</title><link>https://foojayio.github.io/website/today/putting-jfr-into-context/</link><pubDate>Thu, 02 Nov 2023 14:03:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/putting-jfr-into-context/</guid><description>&lt;p&gt;&lt;strong&gt;Have you ever wanted to bring your JFR events into context? Adding information on sessions, user IDs, and more can improve your ability to make sense of all the events in your profile.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Currently, we can only add context by creating custom JFR events, as I presented in my &lt;a href="https://mostlynerdless.de/profiling-talks/" target="_blank" rel="noopener noreferrer"&gt;Profiling Talks&lt;/a&gt;
:&lt;/p&gt;
&lt;figure class="wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo wp-embed-aspect-16-9 wp-has-aspect-ratio"&gt;
 &lt;div class="wp-block-embed__wrapper"&gt;
 &lt;iframe title="Unleash the Power of Open Source Java Profilers - Johannes Bechberger" src="https://player.vimeo.com/video/861946709?dnt=1&amp;amp;app_id=122963" width="500" height="281" frameborder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write"&gt;&lt;/iframe&gt;
 &lt;/div&gt;
 &lt;figcaption class="wp-element-caption"&gt;
 More here: &lt;a target="_blank" href="https://mostlynerdless.de/profiling-talks/"&gt;https://mostlynerdless.de/profiling-talks/&lt;/a&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;We can use these custom events to store away the information and later relate them to all the other events by using the event&amp;rsquo;s time, duration, and thread. This works out-of-the-box but has one major problem: Relating events is quite fuzzy, as time stamps are not as accurate (see JFR Timestamps and System.nanoTime), and we do all of this in post-processing.&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>Controlling JIT Compiler Overhead to Avoid CPU Autoscaling</title><link>https://foojayio.github.io/website/today/controlling-jit-compiler-overhead-to-avoid-cpu-autoscaling/</link><pubDate>Wed, 01 Nov 2023 07:54:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/controlling-jit-compiler-overhead-to-avoid-cpu-autoscaling/</guid><description>&lt;p&gt;&lt;strong&gt;Today&amp;rsquo;s modern, containerized, elastically scaling Java clusters often rely on CPU utilization as the main trigger for scaling out new instances. Imperfect as this metric may be, it is ubiquitous to scale out new instances based on CPU utilization going over some limit. Often that limit is surprisingly low, somewhere around 40 to 50%.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.azul.com/products/prime/" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Prime&lt;/a&gt;
 replaces OpenJDK&amp;rsquo;s HotSpot C2 compiler with the Falcon JIT compiler. &lt;a href="https://docs.azul.com/prime/Falcon-Compiler" target="_blank" rel="noopener noreferrer"&gt;Falcon&lt;/a&gt;
 generates much faster code than OpenJDK, allowing you to handle more transactions in a container before hitting your CPU utilization limit. And, Prime&amp;rsquo;s smoother and more consistent execution allows you to safely raise your CPU utilization to 60-70%, resulting in massive gains in carrying capacity for each container and lower overall cloud costs to handle your total Java workload.&lt;/p&gt;</description></item><item><title>JavaFX Links of October 2023</title><link>https://foojayio.github.io/website/today/javafx-links-of-october-2023/</link><pubDate>Tue, 31 Oct 2023 13:04:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-october-2023/</guid><description>&lt;p&gt;Thanks to the Devoxx conference, there are many hours you can spend on JavaFX-related videos!&lt;/p&gt;
&lt;p&gt;But as every month, there is a lot more to read and learn about JavaFX&amp;hellip;&lt;/p&gt;
&lt;p&gt;Have fun with this overview of the &amp;ldquo;JavaFX LinksOfTheWeek&amp;rdquo; that got published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during October.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Last month Java and JavaFX 21 were released. And &lt;a href="https://mastodon.social/@johanvos/111147510047965780" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; already had an update&lt;/a&gt;
: &amp;ldquo;JavaFX 22-ea+11 has just been released to maven central (and on &lt;a href="https://gluonhq.com/products/javafx" target="_blank" rel="noopener noreferrer"&gt;gluonhq.com/products/javafx&lt;/a&gt;
). This contains the much anticipated memory improvements :)&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;This contains a major change in some CSS processing, see &lt;a href="https://github.com/openjdk/jfx/commit/5e145cc06ef68c50a4ffc95574fdafd44e054100" target="_blank" rel="noopener noreferrer"&gt;this commit by &lt;strong&gt;John Hendrikx&lt;/strong&gt;&lt;/a&gt;
, that leads to improved performance (less GC). Please test and evaluate.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kevin Rushforth&lt;/strong&gt; and &lt;a href="https://mastodon.social/@johanvos" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
 had a BOF at Devoxx in Antwerp.
&lt;ul&gt;
&lt;li&gt;During this BOF, some of the new features that could be included in JavaFX 22 were presented:&lt;/li&gt;
&lt;li&gt;Platform APIs&lt;/li&gt;
&lt;li&gt;(unlikely) CSS theming&lt;/li&gt;
&lt;li&gt;InputMap/Behavior&lt;/li&gt;
&lt;li&gt;Feedback was asked from the users regarding blocking issues in JavaFX itself to be able to build more amazing stuff:&lt;/li&gt;
&lt;li&gt;Removal of remaining AWT dependencies.&lt;/li&gt;
&lt;li&gt;Full integration with the desktop (alerts, dark/light,&amp;hellip;).&lt;/li&gt;
&lt;li&gt;Missing 3D point and line drawing methods.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;JavaFX 21.0.1 and JavaFX 17.0.9 are now available for download from the &lt;a href="https://gluonhq.com/products/javafx" target="_blank" rel="noopener noreferrer"&gt;Gluon website&lt;/a&gt;
 and from Maven Central. &amp;ldquo;&lt;a href="https://techhub.social/@gluonhq/111255546373474509" target="_blank" rel="noopener noreferrer"&gt;Enjoy Java on the client!&lt;/a&gt;
&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-scenebuilder"&gt;SceneBuilder&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Version 21 is &lt;a href="https://github.com/gluonhq/scenebuilder/releases/tag/21.0.0" target="_blank" rel="noopener noreferrer"&gt;now available&lt;/a&gt;
!
&lt;ul&gt;
&lt;li&gt;Refactored: Clean up DocumentWatchingController&lt;/li&gt;
&lt;li&gt;Uses JDK and JavaFX 21&lt;/li&gt;
&lt;li&gt;Contributors:
&lt;ul&gt;
&lt;li&gt;Abhinay Agarwal&lt;/li&gt;
&lt;li&gt;Almas Baim&lt;/li&gt;
&lt;li&gt;José Pereda&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Scene Builder 21.0.1 RC1 is &lt;a href="https://github.com/gluonhq/scenebuilder/releases" target="_blank" rel="noopener noreferrer"&gt;available for testing&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;At Devoxx we got blown away by the demos given by Florian Enner to visualize robot arms and interact with them. He wasn&amp;rsquo;t a speaker at the conference, but we sure hope he will be next year or on any other conference. Make sure to check out of few of his videos&amp;hellip;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=XxVoG1ft7w8" target="_blank" rel="noopener noreferrer"&gt;JavaFX w/ GraalVM native image (Windows)&lt;/a&gt;
: a desktop application with charts and controls, but a robot simulated in 3D.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=vjl5tz8bE90" target="_blank" rel="noopener noreferrer"&gt;JavaFX: migrating to AtlantaFX themes&lt;/a&gt;
: migrating from a custom JavaFX design to AtlantaFX themes. And even more 3D robots and charts!!!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Xac03kLqKrA" target="_blank" rel="noopener noreferrer"&gt;JavaFX 3D: Dynamic CubeWorld&lt;/a&gt;
: 3D cubes, a loooooot of cubes&amp;hellip;&lt;/li&gt;
&lt;li&gt;And these are &lt;a href="https://www.youtube.com/@florianenner7435/videos?view=0&amp;amp;sort=dd&amp;amp;shelf_id=0" target="_blank" rel="noopener noreferrer"&gt;all his YouTube videos&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/p_duke/status/1707409002026463457" target="_blank" rel="noopener noreferrer"&gt;The Hero app by &lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; has an alert/error system where the button will show as filled whenever there&amp;rsquo;s an error/alert&lt;/a&gt;
: &amp;ldquo;This immediately warns u in a subtle way that u may have things to fix. After you&amp;rsquo;ve fixed everything the alert button shows up empty.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;He also shared more info and a video about &lt;a href="https://twitter.com/P_Duke/status/1713901762027905025" target="_blank" rel="noopener noreferrer"&gt;Visual Styles in HERO&lt;/a&gt;
: &amp;ldquo;It allows the user to see properties of his CAD project quickly, at a glance.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fjossinet/RNArtist/tags" target="_blank" rel="noopener noreferrer"&gt;RNArtist has been updated&lt;/a&gt;
, mainly to run on Windows. Releases 1.0.8 and 1.0.9 are available (just restart RNArtist). 1.0.9 will just increase the maximum memory to be used (needed for Windows).
&lt;ul&gt;
&lt;li&gt;Nice new &lt;a href="https://twitter.com/rnartist_app/status/1714315738691903512" target="_blank" rel="noopener noreferrer"&gt;screenshot by &lt;strong&gt;RNArtist&lt;/strong&gt;&lt;/a&gt;
 showing: &amp;ldquo;Insight into a random RNA 2D with a size of 1kb and a pairing density of 60%. Bracket notation with colored helices in the lower part. Simple rendering of the 2D plot in the upper part.&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Here you can find &lt;a href="https://twitter.com/rnartist_app/status/1715295482195349674" target="_blank" rel="noopener noreferrer"&gt;a picture to summarize the new workflow&lt;/a&gt;
 that will be in RNArtist 1.1.0.&lt;/li&gt;
&lt;li&gt;And he shared a blog post: &lt;a href="https://fjossinet.github.io/visualize-experimental-data/" target="_blank" rel="noopener noreferrer"&gt;Visualize experimental data on your RNA 2D&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lanthale/PhotoSlide/releases/tag/v1.3.3" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Clemens Lanthaler&lt;/strong&gt; release V1.3.3 of Photoslide&lt;/a&gt;
, a simple photo management application with a modern and reactive user interface. This version brings updates to JavaFX 21/JDK21 and fixes to the filter module: &amp;ldquo;Thanks to FXGL examples the filters are now realtime and therefore I can now start implementing more filters and the edit module&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tobias Briones&lt;/strong&gt; is working on &lt;a href="https://blog.mathsoftware.engineer/leveraging-git-to-finish-my-article-2023-10-09" target="_blank" rel="noopener noreferrer"&gt;Building Slides from Screenshots App in JavaFX: &amp;ldquo;A great title where I granularly blogged the development of a powerful JavaFX desktop app&amp;rdquo;&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;And he has a &lt;a href="https://www.linkedin.com/posts/tobiasbriones_softwareengineering-machinelearning-ai-activity-7117552150427095040-uYtb/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;JavaFX app that uses Tesseract OCR to detect words in the slide images, allowing users to underline them accurately&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; shared a &lt;a href="https://youtube.com/shorts/bP25LmL8TCk" target="_blank" rel="noopener noreferrer"&gt;video showing his logic simulator app&lt;/a&gt;
. More info, link to the sources and browser version can be found on &lt;a href="https://orangomango.itch.io/logicsimulator" target="_blank" rel="noopener noreferrer"&gt;orangomango.itch.io/logicsimulator&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GZYangKui&lt;/strong&gt; has spent some time optimizing the audio and video output of his Nintendo-like game: &lt;a href="https://twitter.com/YangKui7/status/1711764945946501188" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;The results were quite satisfactory&amp;rdquo;&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;And shared a few retro game videos:&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/YangKui7/status/1715650412856893867" target="_blank" rel="noopener noreferrer"&gt;The taste of childhood&amp;hellip;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/YangKui7/status/1717077263533949406" target="_blank" rel="noopener noreferrer"&gt;Successfully supported the Nintendo MMC3 cardridge&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alessio Vinerbi&lt;/strong&gt; is making a &lt;a href="https://twitter.com/Alessio_Vinerbi/status/1710307540775354454" target="_blank" rel="noopener noreferrer"&gt;trash game&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1658565437053980691" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; shared a video&lt;/a&gt;
 after a &amp;ldquo;fruitful discussion with game dev students on how to improve the UI. Check out the new health and weapon indicators around the player. Now there is no need to look elsewhere to get this info.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pixelduke.com/2023/10/02/fxthemes-java-javafx-library-released/" target="_blank" rel="noopener noreferrer"&gt;A new library announcement by &lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt;, FXThemes&lt;/a&gt;
: &amp;ldquo;It is a Java library that contains classes to help in advanced JavaFX theme development. Right now, it contains helper classes to change the appearance of a native window frame as well as the backdrop of JavaFX native Windows.&amp;rdquo; The announcement page also contains more info about the reason of providing this functionality in a new library.
&lt;ul&gt;
&lt;li&gt;True Dark Mode on Windows10 &lt;a href="https://twitter.com/P_Duke/status/1714655184327168474" target="_blank" rel="noopener noreferrer"&gt;will be available soon in a new release of FXThemes&lt;/a&gt;
: &amp;ldquo;Win10 is the most used Windows version (Windows being the most used OS). This was a pain to implement. Native code is different from win11. On win10 this API is undocumented.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1707043072956113368" target="_blank" rel="noopener noreferrer"&gt;GemsFX 1.82.0 by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
 with:
&lt;ul&gt;
&lt;li&gt;Early access version of a TreeNodeView with many configuration options (added by &lt;a href="https://twitter.com/LeeWyatt_7788" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;LeeWyatt&lt;/strong&gt;&lt;/a&gt;
)&lt;/li&gt;
&lt;li&gt;Gives you controls / pickers for: choosing a date, choosing a date range, choosing a month, choosing a year, choosing a time, choosing a duration.&lt;/li&gt;
&lt;li&gt;See the &lt;a href="https://www.youtube.com/watch?v=n7HesjJZ7K4" target="_blank" rel="noopener noreferrer"&gt;DateRangePicker control in action here&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JPro&lt;/strong&gt; announced &lt;a href="https://www.jpro.one/docs/current/3.1/2023.3.X" target="_blank" rel="noopener noreferrer"&gt;version 2023.3.0&lt;/a&gt;
: JavaFX 21 is used by default, and many more improvements!
&lt;ul&gt;
&lt;li&gt;And &lt;a href="https://jpro.one/docs/current/3.1/2023.3.X" target="_blank" rel="noopener noreferrer"&gt;version 2023.3.1&lt;/a&gt;
 with a critical bugfix to handle bot traffic better, and a new feature regarding MimeTypes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-podcast-video-books"&gt;Podcast, Video, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Robert von Burg&lt;/strong&gt; and &lt;strong&gt;Frank Delporte&lt;/strong&gt; had some fun during a live &lt;a href="https://www.youtube.com/watch?v=eToIXACqSuY" target="_blank" rel="noopener noreferrer"&gt;video stream with LED strips and a JavaFX UI&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Presentations at Devoxx in Antwerpen, Belgium:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kevin Rushforth&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Afehjldx4yM" target="_blank" rel="noopener noreferrer"&gt;Building and Deploying Java Client Desktop Applications With JDK 21 and Beyond&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=R9yhbaN5Xxs" target="_blank" rel="noopener noreferrer"&gt;JavaFX Notebook&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/cpreisler/status/1710291345590345799" target="_blank" rel="noopener noreferrer"&gt;Remark by &lt;strong&gt;Chad Preisler&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;JavaFX Notebook would attract the scientific community to Java, because if you&amp;rsquo;re crunching large amounts of data there is nothing faster than JavaFX and Java, and scientists are usually not programmers. This needs to be easily extendable.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=eylmTHUGcks" target="_blank" rel="noopener noreferrer"&gt;Quantum Computing in Java: an exceptionential opportunity&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jvm.social/@Birdasaur" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt;&lt;/a&gt;
:&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=LYtZRWo4t4E" target="_blank" rel="noopener noreferrer"&gt;Explainable AI Analysis Visualization: Applications from Brain Computer Interfaces to ChatGPT&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;In between sessions, he &lt;a href="https://twitter.com/SeanMiPhillips/status/1709184231916573012" target="_blank" rel="noopener noreferrer"&gt;updated the dev branch for of his XAI tool Trinity&lt;/a&gt;
 to support audio file processing, playback and spectrum analysis in 3D.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.xyz/@melix" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Cédric Champeau&lt;/strong&gt;&lt;/a&gt;
:&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=j6KMOXhldEs" target="_blank" rel="noopener noreferrer"&gt;JSol&amp;rsquo;Ex : solar image processing written in Java&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paul and Gail Anderson&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=3nT8vurpmqc" target="_blank" rel="noopener noreferrer"&gt;Say the Words: Modern Java with JavaFX and GraalVM for Rich Client UIs&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thanos Stratikopoulos&lt;/strong&gt; : &lt;a href="https://www.youtube.com/watch?v=POanHvoC4qA" target="_blank" rel="noopener noreferrer"&gt;TornadoVM: Write once, run everywhere everywhere!&lt;/a&gt;
. He demonstrates an impressive performance boost with a JavaFX ray tracer using the GPU. Sources of the demo are available on &lt;a href="https://github.com/Vinhixus/TornadoVM-Ray-Tracer" target="_blank" rel="noopener noreferrer"&gt;github.com/Vinhixus/TornadoVM-Ray-Tracer&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nicolai Parlog&lt;/strong&gt; published the &lt;a href="https://www.youtube.com/watch?v=WoQJnnMIlFY" target="_blank" rel="noopener noreferrer"&gt;second half of his video report of Devoxx Belgium&lt;/a&gt;
, including an interview with &lt;strong&gt;Kevin Rushforth&lt;/strong&gt; about GUI development with Java.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Please keep an eye on &lt;strong&gt;Edward Nyirenda Jr&lt;/strong&gt; &amp;rsquo;s website as he keeps on giving! For instance, &lt;a href="https://coderscratchpad.com/javafx-with-gradle/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;JavaFX with Gradle&amp;rdquo;&lt;/a&gt;
 was published this month.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1711370140216955086" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; shares a video&lt;/a&gt;
 to illustrate that a JavaFX scene graph can handle a lot of nodes: &amp;ldquo;The view on the left is using retained mode rendering. There are more than 1k nodes visible at a time and yet without major optimizations it runs fine. Tip: No need to rush to a Canvas implementation (immediate mode).&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Impressive 3D results by &lt;strong&gt;OrangoMango&lt;/strong&gt; , considering he is running it on a Raspberry Pi: &lt;a href="https://twitter.com/orango_mango/status/1711777605702005138" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;If I render the triangles, the application runs at 5 fps.&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Homebookner&lt;/strong&gt; shared a link to an interesting project by &lt;strong&gt;Sheikah45&lt;/strong&gt; : &lt;a href="https://github.com/Sheikah45/fx2j" target="_blank" rel="noopener noreferrer"&gt;FX2J - FXML to Java Builder&lt;/a&gt;
: a post-processor that converts fxml files into Java builder source files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; &lt;a href="https://mail.openjdk.org/pipermail/openjfx-dev/2023-October/043118.html" target="_blank" rel="noopener noreferrer"&gt;reported some issues on new gnome-based desktops&lt;/a&gt;
, e.g. on Ubuntu 23: &amp;ldquo;For the JavaFX devs who use the system tray, note that there are various GTK issues. If you are using FXTrayIcon, your app will freeze.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-8-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content
&lt;ul&gt;
&lt;li&gt;Libraries&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/libraries/transit" target="_blank" rel="noopener noreferrer"&gt;Transit Theme&lt;/a&gt;
: builds upon the lessons and my work with JMetro.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/libraries/fxthemes" target="_blank" rel="noopener noreferrer"&gt;FXThemes&lt;/a&gt;
: classes to help in advanced theme development.&lt;/li&gt;
&lt;li&gt;Showcase application&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jfx-central.com/showcases/trinity" target="_blank" rel="noopener noreferrer"&gt;Trinity&lt;/a&gt;
: Explainable AI analysis tool and 3D visualization) by &lt;strong&gt;Sean Phillips&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Tutorials&lt;/li&gt;
&lt;li&gt;We already mentioned a few times the tutorials by &lt;strong&gt;Edward Nyirenda Jr&lt;/strong&gt; in these Links Of The Week. You can &lt;a href="https://www.jfx-central.com/tutorials/coderscratchpad" target="_blank" rel="noopener noreferrer"&gt;find them now in the tutorial-section&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The summary with all the JFX Central links of September got &lt;a href="https://foojayio.github.io/website/today/javafx-links-of-september-2023/"&gt;published on Foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared a &lt;a href="https://twitter.com/dlemmermann/status/1716417891371770052" target="_blank" rel="noopener noreferrer"&gt;screenshot that shows the very helpful menu&lt;/a&gt;
, provided when you locally install JFX Central.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://twitter.com/dlemmermann/status/1714227457086124072" target="_blank" rel="noopener noreferrer"&gt;first video by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
 showing JFX Central running as an app on iOS.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1715759319457665510" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Entered a first testing phase for iOS. Hopefully will be available soon in Apple&amp;rsquo;s AppStore&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;But it seems &lt;a href="https://twitter.com/dlemmermann/status/1717481578408841255" target="_blank" rel="noopener noreferrer"&gt;Apple doesn&amp;rsquo;t like it&amp;hellip;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Multiple tools will be available soon:
&lt;ul&gt;
&lt;li&gt;SVG Path Extractor&lt;/li&gt;
&lt;li&gt;Effect Designer (shadows, blurs, etc&amp;hellip;)&lt;/li&gt;
&lt;li&gt;Gradient Designer&lt;/li&gt;
&lt;li&gt;CSS Playground&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1716343834584506864" target="_blank" rel="noopener noreferrer"&gt;Pixel to EM Converter&lt;/a&gt;
 for quickly converting all your pixel values in your CSS file to em values for proper scaling.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Work is ongoing by &lt;strong&gt;Li Wang Yang&lt;/strong&gt; to bring new &amp;ldquo;Learn&amp;rdquo; sections to JFX Central:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Getting Started with JavaFX&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;JavaFX on Mobile&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;JavaFX on Raspberry Pi&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Thanks to &lt;a href="https://www.jfx-central.com/people/g.anderson" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gail Anderson&lt;/strong&gt;&lt;/a&gt;
, &lt;a href="https://www.jfx-central.com/people/p.anderson" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Paul Anderson&lt;/strong&gt;&lt;/a&gt;
, &lt;a href="https://www.jfx-central.com/people/e.nyirenda" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Edward Nyirenda Jr&lt;/strong&gt;&lt;/a&gt;
, and &lt;a href="https://www.jfx-central.com/people/f.delporte" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt;&lt;/a&gt;
 for sharing their tutorials!&lt;/li&gt;
&lt;li&gt;Check the tickets to see what is happening&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dlsc-software-consulting-gmbh/jfxcentral2/issues/512" target="_blank" rel="noopener noreferrer"&gt;#512 New main section: Learn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dlsc-software-consulting-gmbh/jfxcentral-data/issues/312" target="_blank" rel="noopener noreferrer"&gt;#312 Content for the Learn JavaFX section&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;</description></item><item><title>Everything Bad in Java is Good for You</title><link>https://foojayio.github.io/website/today/everything-bad-in-java-is-good-for-you/</link><pubDate>Tue, 31 Oct 2023 09:28:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/everything-bad-in-java-is-good-for-you/</guid><description>&lt;p&gt;Everything Bad is Good for You is a &lt;a href="https://en.wikipedia.org/wiki/Everything_Bad_Is_Good_for_You" target="_blank" rel="noopener noreferrer"&gt;pop culture book&lt;/a&gt;
 that points out that some things we assume are bad (like TV) have tremendous benefits to our well-being. I love the premise of disrupting the conventional narrative and was reminded of that constantly when debating some of the more controversial features and problems in Java. It&amp;rsquo;s a feature, not a bug&amp;hellip;&lt;/p&gt;
&lt;p&gt;One of my favorite things about Java is its tendency to move slowly and deliberately. It doesn&amp;rsquo;t give us what we want right away. The Java team understands the requirements and looks at the other implementations, then learns from them.&lt;/p&gt;</description></item><item><title>Elevating Java in Visual Studio Code: New Build Server for Gradle</title><link>https://foojayio.github.io/website/today/elevating-java-development-in-visual-studio-code-experience-the-new-build-server-for-gradle/</link><pubDate>Mon, 30 Oct 2023 15:24:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/elevating-java-development-in-visual-studio-code-experience-the-new-build-server-for-gradle/</guid><description>&lt;h3 id="h3-0-introducing-build-server-for-gradle"&gt;Introducing Build Server for Gradle&lt;/h3&gt;
&lt;p&gt;In recent years, Gradle has become one of the most popular Java build tools due to its flexibility in configuring build processes and its powerful extensibility. In Visual Studio Code, users can import Gradle projects into their workspace for development. However, there are some areas where support for Gradle projects is not entirely satisfactory, with two major issues that users have below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compiled files are output to the &amp;lsquo;bin&amp;rsquo; directory, which differs from Gradle project&amp;rsquo;s default output location.&lt;/li&gt;
&lt;li&gt;Support for code generation, such as Annotation Processing, is suboptimal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To address these issues, Microsoft and Gradle have joined forces to explore a novel approach to Gradle project import and building, based on the &lt;a href="https://build-server-protocol.github.io/" target="_blank" rel="noopener noreferrer"&gt;Build Server Protocol (BSP)&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Patterns For The Design Of Microservices – Part 2</title><link>https://foojayio.github.io/website/today/patterns-for-the-design-of-microservices-part-2/</link><pubDate>Mon, 30 Oct 2023 08:58:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/patterns-for-the-design-of-microservices-part-2/</guid><description>&lt;p&gt;In the &lt;a href="https://foojayio.github.io/website/today/patterns-for-the-design-of-microservices-part-1/" title="previous article"&gt;previous article&lt;/a&gt;
, we discussed some of the design patterns employed in the creation of microservices. In this subsequent article, we will delve into the remaining patterns that are commonly utilized in the realm of microservices.&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="size-medium wp-image-102866" src="MSPatterns-700x394.png" alt="Microservice Architecture" width="700" height="394"&gt;
&lt;p&gt;Database Patterns&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;There are seven distinct patterns that further categorize the data management.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Database per Service&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shared Database&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Saga Pattern&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Command-Query Responsiblity Segregation (CQRS)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Composition&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain Event&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Event Sourcing&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the next section, let&amp;rsquo;s discuss each pattern individually.&lt;/p&gt;</description></item><item><title>Book review: "Persistence Best Practices for Java Applications"</title><link>https://foojayio.github.io/website/today/book-review-persistence-best-practices-for-java-applications/</link><pubDate>Fri, 27 Oct 2023 08:56:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-persistence-best-practices-for-java-applications/</guid><description>&lt;p&gt;&lt;strong&gt;In todays ever-evolving world, fast and efficient data management is becoming ever more important. With the explosion of digital data and diverse data sources, selecting the right database type, whether it&amp;rsquo;s traditional relational, NoSQL, or emerging options like NewSQL, has become pivotal. This also leads us to the next challenge for us, how do we integrate with this? Do we use JPA/JOOQ/&amp;hellip; ? Where/how do we map our data? What is a polyglot setup, and should we be using it?&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>JDWP, onthrow and a mysterious error</title><link>https://foojayio.github.io/website/today/jdwp-onthrow-and-a-mysterious-error/</link><pubDate>Thu, 26 Oct 2023 13:44:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdwp-onthrow-and-a-mysterious-error/</guid><description>&lt;p&gt;&lt;strong&gt;In my previous Java-related blog post called &lt;a href="https://foojayio.github.io/website/today/level-up-your-java-debugging-skills-with-on-demand-debugging/"&gt;Level-up your Java Debugging Skills with on-demand Debugging&lt;/a&gt;
, I showed you how to use the &lt;code&gt;onthrow&lt;/code&gt; option of the JDWP agent to start the debugging session on the first throw of a specific exception.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This gave us a mysterious error in JDB:
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/10/image-3.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;And I asked if somebody had any ideas. No one had, but I was at Devoxx Belgium and happened to talk with &lt;a href="https://shipilev.net/" target="_blank" rel="noopener noreferrer"&gt;Aleksey Shipilev&lt;/a&gt;
 about it at the Corretto booth:
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/10/F7hNsheWUAA0Y46-2000x1500.jpg" alt="" loading="lazy"&gt;
 Two OpenJDK developers having fun at Devoxx: Investigating a jdb bug with Shipilev&lt;br&gt;
in the Coretto booth (&lt;a href="https://twitter.com/parttimen3rd/status/1709201492115095904" target="_blank" rel="noopener noreferrer"&gt;Tweet&lt;/a&gt;
)&lt;/p&gt;</description></item><item><title>Navigating Behaviour with Events</title><link>https://foojayio.github.io/website/today/navigating-behaviour-with-events/</link><pubDate>Wed, 25 Oct 2023 15:04:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/navigating-behaviour-with-events/</guid><description>&lt;h2 id="h2-0-two-approaches"&gt;Two Approaches&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s little doubt that modern software architectures lean towards asynchronous models for communication between distributed components (where &amp;ldquo;distributed&amp;rdquo; means components that are not part of the same process, be they on the same or on different physical machines). Synchronous models such as Remote Procedure Call (RPC) are now largely discredited [&lt;a href="https://www.researchgate.net/profile/Ellen-Isaacs/publication/220168963_Why_do_users_like_video/links/02e7e5186b67219c70000000/Why-do-users-like-video.pdf#page=89" title="Waldo" target="_blank" rel="noopener noreferrer"&gt;Waldo&lt;/a&gt;
, &lt;a href="http://steve.vinoski.net/blog/2008/07/01/convenience-over-correctness/" title="Vinoski" target="_blank" rel="noopener noreferrer"&gt;Vinoski&lt;/a&gt;
]; even asynchronous variants of these are not seen as desirable.&lt;/p&gt;
&lt;p&gt;When we strip away the layers that present the illusion that RPC is really just the same as Local Procedure Call (i.e. a normal method invocation), we find sitting above the transport some form of messaging protocol. And these days, the APIs seem more willing to expose developers to these lower-level details, making it clear to programmers that communication with a remote component is inherently more complex than making a simple procedure call.&lt;/p&gt;</description></item><item><title>Java 21 - JEP 445 - Unnamed Classes and Instance Main Methods</title><link>https://foojayio.github.io/website/today/java-21-jep-445-unnamed-classes-and-instance-main-methods/</link><pubDate>Wed, 25 Oct 2023 09:25:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-21-jep-445-unnamed-classes-and-instance-main-methods/</guid><description>&lt;p&gt;Java 21, released on September 19th, 2023, brings many new features, 8 which are fully integrated and 7 which are incubator or preview.&lt;/p&gt;
&lt;p&gt;In this article, I want to highlight one of those preview features: &lt;a href="https://openjdk.org/jeps/445" target="_blank" rel="noopener noreferrer"&gt;Java Enhancement Proposal (JEP) 445: &amp;ldquo;Unnamed Classes and Instance Main Methods&amp;rdquo;&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It&amp;rsquo;s a preview feature, meaning you need extra flags to use it. The goal of JEP 445 is to make it easier to get started with Java, as it&amp;rsquo;s all about reducing the number of keywords when you write, for instance, your very first HelloWorld Java code.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Payara Makes a Splash at Devoxx Belgium 2023</title><link>https://foojayio.github.io/website/today/payara-makes-a-splash-at-devoxx-belgium-2023/</link><pubDate>Tue, 24 Oct 2023 10:50:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/payara-makes-a-splash-at-devoxx-belgium-2023/</guid><description>&lt;p&gt;&lt;a href="https://devoxx.be/" target="_blank" rel="noopener noreferrer"&gt;Devoxx Belgium 2023&lt;/a&gt;
, the premier Java developer conference, held in Antwerp, Belgium is an event we eagerly anticipate. As representatives of Payara, a sponsor of the conference, we had the privilege of attending this year&amp;rsquo;s gathering, which took place at the iconic Kinepolis Antwerpen Cinema.
&lt;img src="https://blog.payara.fish/hubfs/image-png-Oct-12-2023-03-49-00-8874-PM.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The conference ran seamlessly, reflecting the organizers&amp;rsquo; dedication to creating a productive environment for learning, networking, and fostering our shared enthusiasm for technology. We were thrilled to participate in an event that was such a focal point for Java developers.&lt;br&gt;
&lt;img src="https://blog.payara.fish/hs-fs/hubfs/image-png-Oct-12-2023-03-55-38-8960-PM.png?width=327&amp;amp;height=347&amp;amp;name=image-png-Oct-12-2023-03-55-38-8960-PM.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Resizing images on-the-fly</title><link>https://foojayio.github.io/website/today/resizing-images-on-the-fly/</link><pubDate>Mon, 23 Oct 2023 18:01:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/resizing-images-on-the-fly/</guid><description>&lt;p&gt;As a web architect, one of the many issues is asset management. And the most significant issue in assets is images. A naive approach would be to set an image and let the browser resize the image via CSS:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="css"&gt;img {
 height: 100%;
 width: 100%;
 object-fit: contain;
}&lt;/pre&gt;
&lt;p&gt;However, it means that you download the original image. It entails two problems: the size of the original image and the suboptimal browser-based resizing.&lt;/p&gt;</description></item><item><title>Start using Java 21 in your apps on Open Liberty 23.0.0.10</title><link>https://foojayio.github.io/website/today/start-using-java-21/</link><pubDate>Mon, 23 Oct 2023 08:39:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/start-using-java-21/</guid><description>&lt;p&gt;&lt;strong&gt;Java 21 is finally here! Java 21 is the first long-term support (LTS) release since Java 17 was released two years ago. It offers some new functionality and changes that you&amp;rsquo;ll want to check out for yourself. In particular, there&amp;rsquo;s the introduction of virtual threads. And you can try it all out now on Open Liberty 23.0.0.10.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://openliberty.io/?utm_source=foojay&amp;amp;utm_medium=news&amp;amp;utm_content=java21" target="_blank" rel="noopener noreferrer"&gt;Open Liberty&lt;/a&gt;
 is a developer-friendly, fast, modular Java application runtime for the cloud. The Open Liberty project began six years ago when &lt;a href="https://openliberty.io/blog/2017/09/19/open-sourcing-liberty.html?utm_source=foojay&amp;amp;utm_medium=news&amp;amp;utm_content=java21" target="_blank" rel="noopener noreferrer"&gt;IBM open-sourced&lt;/a&gt;
 the Liberty Java runtime. IBM&amp;rsquo;s commercial Java runtime, WebSphere Liberty, is built from the Open Liberty project. You can use Open Liberty for free though.&lt;/p&gt;</description></item><item><title>Book review: “Developing Apps with GPT-4 and ChatGPT”</title><link>https://foojayio.github.io/website/today/book-review-developing-apps-with-gpt-4-and-chatgpt/</link><pubDate>Sun, 22 Oct 2023 06:05:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-developing-apps-with-gpt-4-and-chatgpt/</guid><description>&lt;p&gt;Whether you&amp;rsquo;re pro or con the usage of AI, LLMs, and ChatGPT one cannot deny that there are a plethora of possibilities now available to us.&lt;/p&gt;
&lt;p&gt;Now, given the rapid shift in this field, a lot of us are left with a lot of queries such as: what are the differences between the models, how do I query them and of course, how can I use them to my advantage?&lt;/p&gt;</description></item><item><title>Domain-Deadline-Dog-Driven Development</title><link>https://foojayio.github.io/website/today/domain-deadline-dog-driven-development/</link><pubDate>Sat, 21 Oct 2023 10:06:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/domain-deadline-dog-driven-development/</guid><description>&lt;p&gt;On Twitter - sorry, X - and Mastodon I asked the following question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;ldquo;In software development, &amp;ldquo;Domain-Driven Design&amp;rdquo; (#DDD) is one of the many great (?) ways to handle a project. But who has experienced other types of DDD in real life, like &amp;ldquo;Deadline-Driven Development&amp;rdquo; or &amp;ldquo;Disaster-Driven Development&amp;rdquo;, and wants to share her/his experience for a blog? Thanks!&amp;rdquo;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is the result of my quest&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-ddd-tdd-bdd"&gt;DDD, TDD, BDD&lt;/h2&gt;
&lt;p&gt;Every few years, a new best practice appears to structure the development of software projects. &lt;strong&gt;&lt;a href="https://en.wikipedia.org/wiki/Domain-driven_design" target="_blank" rel="noopener noreferrer"&gt;Domain-Driven Design (DDD)&lt;/a&gt;
&lt;/strong&gt; is one of them. It focuses on modeling software to match a domain according to input from that domain&amp;rsquo;s experts. Inside a DDD project, you focus first to clearly understand the problem to be solved, leading to a structure in the code that represents the solution. The example project &lt;a href="https://github.com/citerus/dddsample-core/tree/master/src/main/java/se/citerus/dddsample/domain/model" target="_blank" rel="noopener noreferrer"&gt;DDDSample based on a book by Eric Evans&lt;/a&gt;
 illustrates this by splitting the code of a shipping application into packages for cargo, handling, location, and voyage.&lt;/p&gt;</description></item><item><title>Not a Single Trace</title><link>https://foojayio.github.io/website/today/not-a-single-trace/</link><pubDate>Fri, 20 Oct 2023 07:06:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/not-a-single-trace/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-limiting-factor"&gt;The Limiting Factor&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#strength-in-numbers"&gt;Strength in Numbers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#example"&gt;Example&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#magical-apis"&gt;Magical APIs&lt;/a&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;Your team celebrates a success story where a trace identified a pesky latency issue in your application&amp;rsquo;s authentication service. A fix was swiftly implemented, and we all celebrated a quick win in the next team meeting. But the celebrations are short-lived. Just days later, user complaints surged about a related payment gateway timeout. It turns out that the fix we made did improve performance at one point but created a situation in which key information was never cached. Other parts in the software react badly to the fix and we need to revert the whole thing.&lt;/p&gt;</description></item><item><title>Beyond Pass/Fail- a Modern Approach to Java Integration Testing</title><link>https://foojayio.github.io/website/today/beyond-pass-fail-a-modern-approach-to-java-integration-testing/</link><pubDate>Wed, 18 Oct 2023 15:15:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/beyond-pass-fail-a-modern-approach-to-java-integration-testing/</guid><description>&lt;h2 id="h2-0-tests-can-run-limited-sets-of-assertions-on-your-code-or-reveal-important-insights-about-how-your-application-really-works"&gt;Tests can run limited sets of assertions on your code, or reveal important insights about how your application really works!&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/beyond-pass-fail-a-modern-approach-to-java-integration-testing/1_JAiQsj-ez608WsovCheXVQ-1024x512.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Automated testing will assuredly go down in the annals of software development history as one of these industry-changing trends. Although few actually adhere to full-metal, OCD mode, TDD discipline (I am in awe of those that do, just to be clear), most developers make sure to prioritize and include testing in their dev cycle.&lt;/p&gt;</description></item><item><title>New: JDKMonitor</title><link>https://foojayio.github.io/website/today/new-jdkmonitor/</link><pubDate>Wed, 18 Oct 2023 08:04:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-jdkmonitor/</guid><description>&lt;p&gt;During &lt;a href="https://devoxx.ma/" title="Devoxx Morocco" target="_blank" rel="noopener noreferrer"&gt;Devoxx Morocco&lt;/a&gt;
 I&amp;rsquo;ve spent some time coding a little new tool where the main reason was to have a widget on my MacOS desktop that shows the days until the next release/update of &lt;a href="https://openjdk.org/" title="OpenJDK" target="_blank" rel="noopener noreferrer"&gt;OpenJDK&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Because this alone was not enough to get it into the Mac App Store, I needed to add more functionality and so I&amp;rsquo;ve decided to also show the latest version of the last 4 LTS (Long Term Support) releases with the ability to download them either as JDK or JRE and if you like bundle JavaFX with it. At the moment that would mean JDK 8, 11, 17 and 21 with their latest versions available.&lt;/p&gt;</description></item><item><title>The Files in JDK 21</title><link>https://foojayio.github.io/website/today/the-files-in-jdk-21/</link><pubDate>Tue, 17 Oct 2023 07:21:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-files-in-jdk-21/</guid><description>&lt;p&gt;As Java developers, we all have it installed on our computer: the Java Development Kit, also known as the JDK. I remember putting the first version on a few floppy disks back in 1995. Since then it has grown multiple times. In this article, we&amp;rsquo;ll explore the files of the JDK.&lt;/p&gt;
&lt;p&gt;For this article, Eclipse Temurin &lt;a href="https://foojayio.github.io/website/today/java-21-is-available-today-and-its-quite-the-update/"&gt;JDK 21&lt;/a&gt;
 for Windows has been used.&lt;/p&gt;
&lt;h2 id="h2-0-files"&gt;Files&lt;/h2&gt;
&lt;h3 id="h3-1-the-statistics"&gt;The statistics&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Total size: 325 MB&lt;/li&gt;
&lt;li&gt;Number of files: 572&lt;/li&gt;
&lt;li&gt;Number of files including in zip files: 47,629&lt;/li&gt;
&lt;li&gt;Largest file: lib/modules with 134 MB&lt;/li&gt;
&lt;li&gt;Number of class files: 27,929 (was 27,064 in JDK 20)&lt;/li&gt;
&lt;li&gt;Number of Java files (in src.zip): 15,404 (was 15,044 in JDK 20)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/the-files-in-jdk-21/jdk21-all-files.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Level-up your Java Debugging Skills with on-demand Debugging</title><link>https://foojayio.github.io/website/today/level-up-your-java-debugging-skills-with-on-demand-debugging/</link><pubDate>Mon, 16 Oct 2023 14:21:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/level-up-your-java-debugging-skills-with-on-demand-debugging/</guid><description>&lt;p&gt;&lt;strong&gt;Debugging is one of the most common tasks in software development, so one would assume that all features of debuggers have ample coverage in tutorials and guides.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yet there are three hidden gems of the Java Debugging (JDWP) agent that allow you to delay the start of the debugging session until&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you gave orders via &lt;code&gt;jcmd&lt;/code&gt; (&lt;code&gt;onjcmd=y&lt;/code&gt; option)&lt;/li&gt;
&lt;li&gt;the program threw a specific exception (&lt;code&gt;onthrow=&amp;lt;exception&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;the program threw an uncaught exception (&lt;code&gt;onuncaught=y&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before I tell you more about the specific options, I want to start with the basics of how to apply them.&lt;/p&gt;</description></item><item><title>Foojay Podcast #31: Report of Devoxx 23 in Belgium</title><link>https://foojayio.github.io/website/today/foojay-podcast-31/</link><pubDate>Mon, 16 Oct 2023 07:16:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-31/</guid><description>&lt;p&gt;The first week of October, the 20th edition of Devoxx took place in Antwerp, Belgium.&lt;/p&gt;
&lt;p&gt;Over 3000 Java developers, speakers, and enthusiasts gathered to share their knowledge and learn from each other.&lt;/p&gt;
&lt;p&gt;I got the opportunity to walk around with a microphone and talk to visitors and speakers.&lt;/p&gt;
&lt;p&gt;Not all of them, as there were just too many people and too many exciting sessions happening simultaneously.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/VJJmoiP7e-I?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;h2 id="h2-0-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Book review: "Get Your Hands Dirty on Clean Architecture - Second Edition"</title><link>https://foojayio.github.io/website/today/book-review-get-your-hands-dirty-on-clean-architecture-second-edition/</link><pubDate>Sat, 14 Oct 2023 11:51:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-get-your-hands-dirty-on-clean-architecture-second-edition/</guid><description>&lt;p&gt;&lt;strong&gt;Clean Architecture helps us ensure a solid foundation for our applications&lt;/strong&gt; ,&lt;strong&gt;and helps keep our code organized and maintainable. Furthermore when properly applied it helps keep ones team on the same page and ensures our applications stay robust and flexible over time. Of course there are a lot of pitfalls to take into account, and a lot of pros/cons to each approach. There certainly is no one size fits all approach. But luckily this book by &lt;a href="https://www.linkedin.com/in/thombergs/" target="_blank" rel="noopener noreferrer"&gt;Tom Hombergs&lt;/a&gt;
 provides a lot of valuable practical insights.&lt;/strong&gt;&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>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>Send Your Logs To Loki</title><link>https://foojayio.github.io/website/today/send-your-logs-to-loki/</link><pubDate>Thu, 12 Oct 2023 08:00:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/send-your-logs-to-loki/</guid><description>&lt;p&gt;&lt;strong&gt;One of my current talks focuses on Observability in general and Distributed Tracing in particular, with an &lt;a href="https://opentelemetry.io/" target="_blank" rel="noopener noreferrer"&gt;OpenTelemetry&lt;/a&gt;
 implementation. In the demo, I show how you can see the traces of a simple distributed system consisting of: the Apache APISIX API Gateway, a Kotlin app with Spring Boot, a Python app with Flask, and a Rust app with Axum.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Earlier this year, I spoke and attended the Observability room at FOSDEM. One of the talks demoed the Grafana stack: Mimir for metrics, Tempo for traces, and Loki for logs. I was pleasantly surprised how one could move from one to the other. Thus, I wanted to achieve the same in my demo but via OpenTelemetry to avoid coupling to the Grafana stack.&lt;/p&gt;</description></item><item><title>Changes Included in the Stable release 23.08 of Azul Zulu Prime Builds of OpenJDK</title><link>https://foojayio.github.io/website/today/changes-included-in-the-stable-release-23-08-of-azul-zulu-prime-builds-of-openjdk/</link><pubDate>Wed, 11 Oct 2023 07:03:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/changes-included-in-the-stable-release-23-08-of-azul-zulu-prime-builds-of-openjdk/</guid><description>&lt;p&gt;&lt;em&gt;The latest Long Term Support (LTS) version of OpenJDK was released on September 19, 2023. Below is an overview of all the combined improvements in the latest Azul Prime Builds of OpenJDK, stable release, 23.08.01.0.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.azul.com/products/prime/" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Prime&lt;/a&gt;
 is a modern, TCK-compliant Java platform based on OpenJDK. It provides consistently low response latency of your Java workloads, higher total throughput and carrying capacity, faster warmup, and infrastructure savings, achieved thanks to the &lt;a href="https://www.azul.com/products/components/pgc/" target="_blank" rel="noopener noreferrer"&gt;C4 pauseless garbage collector&lt;/a&gt;
, &lt;a href="https://www.azul.com/products/components/falcon-jit-compiler/" target="_blank" rel="noopener noreferrer"&gt;Falcon JIT compiler&lt;/a&gt;
, and other technologies created by Azul. Prime Builds are available in two versions, either for evaluation or production use:&lt;/p&gt;</description></item><item><title>Patterns For The Design of Microservices</title><link>https://foojayio.github.io/website/today/patterns-for-the-design-of-microservices-part-1/</link><pubDate>Wed, 11 Oct 2023 06:11:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/patterns-for-the-design-of-microservices-part-1/</guid><description>&lt;p&gt;Design patterns plays a pivotal role in designing and solving the commonly occurring problems in software application. It is guiding principle or template to the solve any designing problems.&lt;/p&gt;
&lt;p&gt;It applies to the Microservices architectural style as well. These patterns provide a structured approach to designing and implementing Microservice architectures, ensuring &lt;strong&gt;scalability&lt;/strong&gt; , &lt;strong&gt;maintainability&lt;/strong&gt; , and &lt;strong&gt;reusability&lt;/strong&gt;. By adhering to these design patterns, developers can proficiently tackle the common challenges encountered during Microservices development.&lt;/p&gt;</description></item><item><title>Diagnose and Mitigate Pinning in Java's Virtual Thread Execution</title><link>https://foojayio.github.io/website/today/how-to-diagnose-and-mitigate-pinning-in-javas-virtual-thread-execution/</link><pubDate>Tue, 10 Oct 2023 09:08:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-diagnose-and-mitigate-pinning-in-javas-virtual-thread-execution/</guid><description>&lt;p&gt;&lt;strong&gt;In &lt;a href="https://foojayio.github.io/website/today/web-crawling-in-java-a-tale-of-classical-threads-and-virtual-threads/"&gt;our last article&lt;/a&gt;
, we highlighted the impressive performance gains achieved through the use of virtual threads. However, upon diving deeper into the code, we discovered an issue caused by the jsoup library: a phenomenon known as pinning. But before we delve into solutions, let&amp;rsquo;s take a moment to understand what pinning actually is.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-what-is-pinning"&gt;What is Pinning?&lt;/h2&gt;
&lt;p&gt;In the context of virtual threads, pinning refers to the condition where a virtual thread is &amp;ldquo;stuck&amp;rdquo; to its carrier thread (the platform thread on which it runs).&lt;/p&gt;</description></item><item><title>Debugging Tips and Tricks: A Comprehensive Guide</title><link>https://foojayio.github.io/website/today/debugging-tips-and-tricks-a-comprehensive-guide/</link><pubDate>Mon, 09 Oct 2023 07:12:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-tips-and-tricks-a-comprehensive-guide/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#rubber-ducking-the-art-of-talking-it-out"&gt;&lt;strong&gt;Rubber Ducking: The Art of Talking it Out&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#moving-the-goalposts-redefining-the-bug"&gt;&lt;strong&gt;Moving the Goalposts: Redefining the Bug&lt;/strong&gt;&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-evolution-of-a-bug"&gt;The Evolution of a Bug&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-process-of-redefinition"&gt;The Process of Redefinition&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#flipping-the-direction-multiple-angles-of-attack"&gt;&lt;strong&gt;Flipping the Direction: Multiple Angles of Attack&lt;/strong&gt;&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-linear-approach-to-debugging"&gt;The Linear Approach to Debugging&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#disruptive-environments-exposing-hidden-bugs"&gt;&lt;strong&gt;Disruptive Environments: Exposing Hidden Bugs&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#leveraging-debugging-extensions-and-tools"&gt;&lt;strong&gt;Leveraging Debugging Extensions and Tools&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#disconnect-and-reconnect-the-power-of-a-fresh-mindset"&gt;&lt;strong&gt;Disconnect and Reconnect: The Power of a Fresh Mindset&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#embrace-the-challenge-finding-joy-in-debugging"&gt;&lt;strong&gt;Embrace the Challenge: Finding Joy in Debugging&lt;/strong&gt;&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#strategies-to-embrace-the-debugging-challenge"&gt;Strategies to Embrace the Debugging Challenge&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#use-a-process"&gt;&lt;strong&gt;Use a Process&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#conclusion"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Debugging is an integral part of software development.&lt;/p&gt;</description></item><item><title>Java 21 and Jakarta EE 11: A New Era of Cloud Native Java</title><link>https://foojayio.github.io/website/today/java-21-and-the-upcoming-jakarta-ee-11-a-new-era-of-cloud-native-java/</link><pubDate>Fri, 06 Oct 2023 08:28:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-21-and-the-upcoming-jakarta-ee-11-a-new-era-of-cloud-native-java/</guid><description>&lt;p&gt;&lt;strong&gt;With Java 21 released and Jakarta EE 11 slated for release in Q1 of 2024, the landscape for Java development is evolving rapidly, particularly in the cloud-native space. Although these two are not being developed together, they are intrinsically linked: Jakarta EE 11 will have Java 21 as its base Java SE version. This blog post will explore what these two significant releases bring to the table individually and how they can collectively enhance cloud native Java development.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>OpenJDK Migration Book Review</title><link>https://foojayio.github.io/website/today/openjdk-migration-book-review/</link><pubDate>Wed, 04 Oct 2023 08:13:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/openjdk-migration-book-review/</guid><description/></item><item><title>Contributing to Foojay's Java Community Certification</title><link>https://foojayio.github.io/website/today/how-to-participate-in-the-foojay-community-certification-project/</link><pubDate>Wed, 04 Oct 2023 07:12:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-participate-in-the-foojay-community-certification-project/</guid><description>&lt;h3 id="h3-0-the-recent-announcement-of-foojay-s-intention-to-create-a-community-driven-certification-exam-for-java-software-development-has-spurred-a-lot-of-interest-this-article-explains-how-any-member-of-the-java-community-can-participate-in-the-creation-of-tasks-for-the-certification"&gt;&lt;em&gt;&lt;strong&gt;The recent announcement of Foojay&amp;rsquo;s intention to create a community-driven certification exam for Java software development has spurred a lot of interest. This article explains how any member of the Java community can participate in the creation of tasks for the certification.&lt;/strong&gt;&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;In the &lt;a href="https://foojayio.github.io/website/today/foojay-developer-certification-measure-skills/" title="previous article"&gt;previous article&lt;/a&gt;
 about the Foojay Developer Certification, we introduced the need for an objective way to measure the skills of Java developers. While there are many assessments and certifications that test the theoretical knowledge of a developer, very few measure the practical ability to write code, find and fix bugs and apply proper design principles. As a community, we have a large collection of de facto best practices and common sense about what makes a developer good at their job. That is why we need your help in creating a certificate that actually communicates a Developer&amp;rsquo;s skill.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Spring Boot and React in Harmony</title><link>https://foojayio.github.io/website/today/spring-boot-and-react-in-harmony/</link><pubDate>Tue, 03 Oct 2023 09:14:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-and-react-in-harmony/</guid><description>&lt;h3 id="h3-0-develop-clean-and-maintainable-business-apps-on-top-of-spring-boot-and-react-and-do-it-faster-using-the-hilla-framework"&gt;Develop clean and maintainable business apps on top of Spring Boot and React, and do it faster using the Hilla framework.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;For many full-stack developers, the combination of Spring Boot and React has become a staple in building dynamic business applications. Yet, while powerful, this pairing has its set of challenges. From type-related errors to collaboration hurdles, developers often find themselves navigating a maze of everyday issues.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Enter &lt;a href="https://hilla.dev/" title="Hilla" target="_blank" rel="noopener noreferrer"&gt;Hilla&lt;/a&gt;
, a framework that aims to simplify this landscape. If Hilla hasn&amp;rsquo;t crossed your radar yet, this article will provide an overview of what it offers and how it can potentially streamline your development process when working with Spring Boot and React.&lt;/p&gt;</description></item><item><title>Contributing to Open Source: Hacktoberfest</title><link>https://foojayio.github.io/website/today/contributing-to-open-source-hacktoberfest/</link><pubDate>Tue, 03 Oct 2023 09:07:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/contributing-to-open-source-hacktoberfest/</guid><description>&lt;p&gt;Quite frequently when it comes to contributing to open source I hear questions/doubts such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;where do I start&lt;/li&gt;
&lt;li&gt;how do I find projects/issues&lt;/li&gt;
&lt;li&gt;can I help out as a newbie&lt;/li&gt;
&lt;li&gt;are there other ways I can contribute besides coding&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Which is why I&amp;rsquo;d love to share a little bit about Hacktoberfest, which is an event organized by DigitalOcean that runs through the whole month of October that is celebrating its tenth anniversary this year. It&amp;rsquo;s an event encourages people from all over the world, from all walks of life and all skill levels to contribute to open source projects.&lt;/p&gt;</description></item><item><title>Released: JVector 1.0</title><link>https://foojayio.github.io/website/today/jvector-1-0/</link><pubDate>Mon, 02 Oct 2023 12:36:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/jvector-1-0/</guid><description>&lt;p&gt;JVector is a pure Java embedded vector search engine that powers &lt;a href="https://www.datastax.com/products/datastax-astra" target="_blank" rel="noopener noreferrer"&gt;DataStax Astra&lt;/a&gt;
 and is being &lt;a href="https://issues.apache.org/jira/browse/CASSANDRA-18557" target="_blank" rel="noopener noreferrer"&gt;added to Apache Cassandra&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://hackernoon.com/how-llms-and-vector-search-have-revolutionized-building-ai-applications" target="_blank" rel="noopener noreferrer"&gt;Vector search is a critical part of today&amp;rsquo;s generative AI applications&lt;/a&gt;
, allowing developers to quickly retrieve the most relevant context to give the large language model enough information to answer accurately and without hallucinating, but innovation in this space has mostly happened outside the Java ecosystem. JVector gives enterprises an easy way to capitalize on their investment in the powerful Java platform, and gives Java developers a state-of-the-art solution that is easy to embed in their applications.&lt;/p&gt;</description></item><item><title>Report of My Trip to JavaZone and Northern Germany</title><link>https://foojayio.github.io/website/today/report-of-my-trip-to-javazone-and-northern-germany/</link><pubDate>Mon, 02 Oct 2023 08:44:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/report-of-my-trip-to-javazone-and-northern-germany/</guid><description>&lt;p&gt;Between 2nd and 17th September, I gave three talks in three different cities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://2023.javazone.no/" target="_blank" rel="noopener noreferrer"&gt;JavaZone Oslo&lt;/a&gt;
, 7th September: Unleash the Power Of Open-Source Profilers (&lt;a href="https://www.infoq.com/articles/open-source-java-profilers/" target="_blank" rel="noopener noreferrer"&gt;InfoQ article&lt;/a&gt;
)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://javaforumnord.de/2023/programm/" target="_blank" rel="noopener noreferrer"&gt;Java Forum Nord&lt;/a&gt;
 Hannover, 12th September: Unleash the power of Open-Source Java Profilers&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codetalks.de/program#talk-1748?event=8" target="_blank" rel="noopener noreferrer"&gt;code.talks&lt;/a&gt;
 Hamburg, 14th September: Writing a Java Profiler in Pure Java (&lt;a href="https://mostlynerdless.de/blog/2023/03/27/writing-a-profiler-in-240-lines-of-pure-java/" target="_blank" rel="noopener noreferrer"&gt;blog post&lt;/a&gt;
)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I traveled from Karlsruhe to Oslo (via Stuttgart Airport) and from Oslo to Hanover via plane, then to Hamburg, Hanover, back to Hamburg, and the end via Bonn back to Karlsruhe via train:&lt;/p&gt;</description></item><item><title>Foojay Podcast #30: UtrechtJUG</title><link>https://foojayio.github.io/website/today/foojay-podcast-30/</link><pubDate>Mon, 02 Oct 2023 07:48:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-30/</guid><description>&lt;p&gt;On September 12th, I was invited to speak at the Utrecht JUG together with Hanno Embrechts.&lt;/p&gt;
&lt;p&gt;That was an ideal moment to grab my camera and microphones to interview the organisers and some of the guests.&lt;/p&gt;
&lt;p&gt;So, this is a bit of a special edition of the Foojay Podcast as it&amp;rsquo;s also available with video!&lt;/p&gt;
&lt;p&gt;An experiment that brought me great pleasure. I hope you like it too!&lt;/p&gt;
&lt;p&gt;So&amp;hellip; let&amp;rsquo;s time travel and get back to Utrecht when I got the organizers before the camera just minutes before the first guests arrived!&lt;/p&gt;</description></item><item><title>JavaFX Links of September 2023</title><link>https://foojayio.github.io/website/today/javafx-links-of-september-2023/</link><pubDate>Sat, 30 Sep 2023 15:21:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-september-2023/</guid><description>&lt;p&gt;This month OpenJDK and OpenJDK 21 got officially released, so links to the new downloads but also to the early access builds of the next one!&lt;/p&gt;
&lt;p&gt;Here is the overview of the JavaFX LinksOfTheWeek that got published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during September.&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://techhub.social/@gluonhq/111092296190292324" target="_blank" rel="noopener noreferrer"&gt;Announcement by &lt;strong&gt;GluonHQ&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;We&amp;rsquo;re proud to announce JavaFX 21 GA. Download the SDK/jmods from &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;gluonhq.com/products/javafx/&lt;/a&gt;
 or get the artifacts from Maven central. Release notes with many fixes and enhancements at &lt;a href="https://gluonhq.com/products/javafx/openjfx-21-release-notes/" target="_blank" rel="noopener noreferrer"&gt;gluonhq.com/products/javafx/openjfx-21-release-notes&lt;/a&gt;
. Great work by a growing number of contributors!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openjdk/jfx/blob/master/doc-files/release-notes-21.md" target="_blank" rel="noopener noreferrer"&gt;Release notes by &lt;strong&gt;Kevin Rushforth&lt;/strong&gt; on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Builds are available from java.net:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://download.java.net/java/GA/javafx21/69ca518c413e4df09f6be747a2400cf6/31/GPL/openjfx-21_linux-x64_bin-sdk.tar.gz" target="_blank" rel="noopener noreferrer"&gt;Linux / x64&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://download.java.net/java/GA/javafx21/69ca518c413e4df09f6be747a2400cf6/31/GPL/openjfx-21_macos-aarch64_bin-sdk.tar.gz" target="_blank" rel="noopener noreferrer"&gt;macOS / AArch64&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://download.java.net/java/GA/javafx21/69ca518c413e4df09f6be747a2400cf6/31/GPL/openjfx-21_macos-x64_bin-sdk.tar.gz" target="_blank" rel="noopener noreferrer"&gt;macOS / x64&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://download.java.net/java/GA/javafx21/69ca518c413e4df09f6be747a2400cf6/31/GPL/openjfx-21_windows-x64_bin-sdk.zip" target="_blank" rel="noopener noreferrer"&gt;Windows / x64&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;And on the &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;Gluon website&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@openjdk/111109621684880527" target="_blank" rel="noopener noreferrer"&gt;EA (early access) builds of JavaFX 22&lt;/a&gt;
!
&lt;ul&gt;
&lt;li&gt;JavaFX 22 Early-Access Builds are available here:&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jdk.java.net/javafx22/" target="_blank" rel="noopener noreferrer"&gt;jdk.java.net/javafx22&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;gluonhq.com/products/javafx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bugs.openjdk.org/issues/?jql=project%20%3D%20JDK%20AND%20fixversion%20%3D%20jfx22%20and%20component%20%3d%20javafx%20and%20%22resolved%20in%20build%22%20%3d%20b10%20order%20by%20component%2C%20subcomponent" target="_blank" rel="noopener noreferrer"&gt;Issues addressed in this build&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;The proposed schedule for JavaFX 22:&lt;/li&gt;
&lt;li&gt;RDP1: Jan 11, 2024 (aka &amp;ldquo;feature freeze&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;RDP2: Feb 1, 2024&lt;/li&gt;
&lt;li&gt;Freeze: Feb 29, 2024&lt;/li&gt;
&lt;li&gt;GA: Mar 19, 2024&lt;/li&gt;
&lt;li&gt;JavaFX 22-ea is designed to work with JDK 22-ea, but it is known to work with JDK 17 and later versions.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1707024018232983615" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is experimenting with 22-ea+9&lt;/a&gt;
: &amp;ldquo;Showing correct bold text on macOS and much lower initial memory consumption in our CRM software&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/111121272095237602" target="_blank" rel="noopener noreferrer"&gt;A message by &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;One of the great (non-technical) things about JavaFX is that it is not owned by a single company that tries to use it for its business strategy (e.g. like Google does with most of their &amp;ldquo;free&amp;rdquo; stuff). It is really the wide JavaFX ecosystem that drives JavaFX forward, and that allows for pure and honest innovation.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/OnkelStipe/status/1696236782885474494" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Onkel Stipe&lt;/strong&gt; shared a screenshot of SoundLab&lt;/a&gt;
: &amp;ldquo;I developed it to investigate in generating realtime virtual analog sounds. The Oscilloscope feels quite analog. It also has a realtime spectrum and a view called &amp;ldquo;klangteppich&amp;rdquo;, which nicely imitates the spectral view of audacity.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1694998831480614954" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt; is upgrading dillon-boot-fx, a Permission Management System UI&lt;/a&gt;
, to JDK 17+ and also providing jigsaw support.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/makingthematrix/status/1695108624400482636" target="_blank" rel="noopener noreferrer"&gt;Fx Calculator by &lt;strong&gt;Maciek Gorywoda&lt;/strong&gt; is now available at Google Play Store&lt;/a&gt;
! &amp;ldquo;Written in Scala 3, JavaFX, and built with GraalVM Native Image&amp;rdquo;&lt;/li&gt;
&lt;li&gt;The next version of JDKMon, the tool to keep your Java installations up-to-date, will now also show you the dates of the next OpenJDK update and the next OpenJDK release, &lt;a href="https://mastodon.social/@hansolo_/111028113635396197" target="_blank" rel="noopener noreferrer"&gt;says &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@jabref/110994245236386244" target="_blank" rel="noopener noreferrer"&gt;JabRef is using Java 21 for their new release 5.10&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://twitter.com/orango_mango/status/1698269059513462867" target="_blank" rel="noopener noreferrer"&gt;Logic simulator by &lt;strong&gt;OrangoMango&lt;/strong&gt; got updated to v1.1 update&lt;/a&gt;
: &amp;ldquo;A new web version made with WebFX, bug fix, RGB lights and some UI changes.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/surajit8017/status/1700781040779022628" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;surajit&lt;/strong&gt; completed M-AID (Retail Pharmacy Management)&lt;/a&gt;
: &amp;ldquo;With a mobile app that is always connected to the desktop app via Wi-Fi, no internet is needed for operations.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/rnartist_app" target="_blank" rel="noopener noreferrer"&gt;RNArtist by &lt;strong&gt;Fabrice Jossinet&lt;/strong&gt; offers now an undo/redo feature&lt;/a&gt;
: &amp;ldquo;It can even iterate automatically over its history. Take a look at my attempt to produce a better layout for an archaea LSU rRNA (green blinking = redo, orange = undo).&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Biometrics_Eng/status/1704443412546474137" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Biometrics Engineer&lt;/strong&gt; shared a video&lt;/a&gt;
 showing a &amp;ldquo;JavaFX Linux Biometric Time and Attendance - Staff Registration DEMO that is implemented on Ubuntu Linux using ARATEK A600 Biometric Fingerprint Scanner.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/rnartist_app/status/1702674834193252446" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;RNArtist&lt;/strong&gt; is announcing&lt;/a&gt;
: &amp;ldquo;Installers will be available next week. Thanks to the very good tool JDeploy, you will automatically get the latest version after each launch of RNArtist. Now it&amp;rsquo;s time to write some documentation&amp;hellip;&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;And shared &lt;a href="https://twitter.com/rnartist_app/status/1702641134923583639" target="_blank" rel="noopener noreferrer"&gt;screenshots of the tool 3 years ago versus now&lt;/a&gt;
, with some very nice comments and links to the project in the thread.&lt;/li&gt;
&lt;li&gt;BTW, as someone pointed out, you can maybe use this tool to design airport terminals&amp;hellip; 😉&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1703038446854345000" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; is using Trinity for&lt;/a&gt;
: &amp;ldquo;Detecting ChatGTP generated medium size text blocks using manifold approximation, polyhedral volume techniques and JavaFX 3D. Sorry not sorry bad guys.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;And &lt;a href="https://twitter.com/SeanMiPhillips/status/1703172036669972494" target="_blank" rel="noopener noreferrer"&gt;Apple M2 silicon (Arm64) builds&lt;/a&gt;
 now supported through Trinity&amp;rsquo;s GitHub Actions thanks to the magnificent CI work of samypr100!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/_MalikHamida/status/1707405711401963981" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Malik Hamida&lt;/strong&gt; is working on a micro banking system project&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/eltayeb-ibrahim-98324a193_javafx-java-javascript-activity-7113009374276526080-G99X" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Eltayeb Ibrahim&lt;/strong&gt; created a user-friendly Product Management System using JavaFX for the frontend&lt;/a&gt;
 and Node.js with Express.js framework for the backend.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Heshantk/status/1707473425395286439" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Heshan Thenura Kariyawasam&lt;/strong&gt; made a File Shredder app&lt;/a&gt;
 and shared the sources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/LondonSoftworks/status/1696427139212447753" target="_blank" rel="noopener noreferrer"&gt;London Softworks is working on a new Particle Editor and making progress with an OpenGL context being rendered to a JavaFX Canvas object (in real-time)&lt;/a&gt;
: &amp;ldquo;Making good use of FBO&amp;rsquo;s for this one. Now to sort the colour issue out&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1703057689582993815" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; announces &amp;ldquo;Chess 2.0 is finally complete&amp;rdquo;&lt;/a&gt;
: &amp;ldquo;The WebFX version is now available at &lt;a href="https://orangomango.itch.io/chess" target="_blank" rel="noopener noreferrer"&gt;orangomango.itch.io/chess&lt;/a&gt;
. Play single player against stockfish. Play multiplayer against a friend in LAN or on the server.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Always fun when &lt;a href="https://twitter.com/AlmasBaim/status/1703483255331094569" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; shares one of his experiments with FXGL&lt;/a&gt;
: &amp;ldquo;&amp;hellip; and in this episode of how to inefficiently clear the screen &amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7109933250885685248/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Ahmed Bakr&lt;/strong&gt; completed a Tic Tac Toe Game with Tiva C and JavaFX&lt;/a&gt;
: &amp;ldquo;Our primary goal in undertaking this project was to explore the integration of microcontrollers with high-powered processing computers to tackle tasks beyond the capabilities of a standalone microcontroller.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1706656526726045930" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt; made his game demo and self-made game utilities&lt;/a&gt;
 fully open source on &lt;a href="https://github.com/chengenzhao/fxcity" target="_blank" rel="noopener noreferrer"&gt;github.com/chengenzhao/fxcity&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1696149890370285877" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; released a new library, a JavaFX theme called Transit Theme&lt;/a&gt;
: &amp;ldquo;Modern look and feel, Zero tight coupling, Looks integrated on Windows, Also works well on other OSes, Light and Dark versions,&amp;hellip;&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;The announcement of this new Transit Theme &lt;a href="https://foojayio.github.io/website/today/new-javafx-theme-library-transit-released/"&gt;got published on &lt;strong&gt;Foojay.io&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pedro&lt;/strong&gt; is also working on a &lt;a href="https://twitter.com/P_Duke/status/1701577162015363556" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;dark mode&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;JavaFX Windows are always shown in Light mode (window frames with light color). This new API I&amp;rsquo;ve created will allow the developer to set dark mode on a native window. New API will also allow other changes to a window.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1704488446138454335" target="_blank" rel="noopener noreferrer"&gt;And he added a new API to FXComponents&lt;/a&gt;
: &amp;ldquo;To allow you to change the native Window frame color, native Window text color, and border. (Standard JavaFX API will always show a native Window frame with the same light color with no possibility to change it.)&amp;rdquo;&lt;/li&gt;
&lt;li&gt;The release of the new FXComponents library was also &lt;a href="https://foojayio.github.io/website/today/new-fxcomponents-library-released/"&gt;published on Foojay&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1697192575969493372" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; released version 3.0.0 of PDFViewFX&lt;/a&gt;
: &amp;ldquo;This release is based on Apache PDFBox 3, which contains an impressive list of fixes and enhancements.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1704045289743495407" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk&lt;/strong&gt; has a friendly reminder&lt;/a&gt;
: &amp;ldquo;When creating custom controls for your JavaFX project, please make sure you have a way to properly test them standalone (e.g. via &lt;a href="https://jfx-central.com/tools/fxsampler" target="_blank" rel="noopener noreferrer"&gt;FXSampler&lt;/a&gt;
).&amp;rdquo;&lt;/li&gt;
&lt;li&gt;He is also &lt;a href="https://twitter.com/dlemmermann/status/1704846555004502306" target="_blank" rel="noopener noreferrer"&gt;pimping the CalendarView control in GemsFX&lt;/a&gt;
 and adding all kinds of options: &amp;ldquo;E.g. different layout for the header and also quick picking months and years). Come and check it out, let me know what you think or I missed.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/javasunsFX/status/1696959645384839544" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;JavaSuns&lt;/strong&gt; came upon this great small pure Java library, SimplePNG&lt;/a&gt;
, for storing JavaFX images to PNG files. Great compression ratios and file sizes achieved with the use of PNGJavaFXUtils class.&lt;/li&gt;
&lt;li&gt;A new week, a &lt;a href="https://twitter.com/P_Duke/status/1698687283971432648?s=20" target="_blank" rel="noopener noreferrer"&gt;new library by &lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt;: FXComponents&lt;/a&gt;
. It contains a collection of new controls to be used in JavaFX applications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt; extended JavaFX, FXGL, and AtlantaFX to reduce function of binding, multiple game scenes support and navigation of them, enhanced animations, self-made theme,&amp;hellip; &lt;a href="https://twitter.com/WhiteWoodCity/status/1697975469965263093?s=20" target="_blank" rel="noopener noreferrer"&gt;Check the X thread&lt;/a&gt;
, as he shared the code!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/johanvos/status/1699335002599649549" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; shared a link to the GitHub project of Rich Text Area&lt;/a&gt;
: &amp;ldquo;One of the cool GluonHQ tools we are developing/maintaining&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/carldea_javafx-activity-7081463432486477824-LCev/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; is prototyping a new JavaFX-based Dockable windowing library&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@svenruppert/111064088106916273" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sven Ruppert&lt;/strong&gt; announced the release of version 4 of TestFX&lt;/a&gt;
, simple and clean testing for JavaFX. Check &lt;a href="https://github.com/TestFX/TestFX/releases/tag/v4.0.17" target="_blank" rel="noopener noreferrer"&gt;GitHub for all changes&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1700852671287107803" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; announced a new release of the special effects library LitFX&lt;/a&gt;
: lightning, radio waves/bands, line of sight lighting and shadowing, animated window and floating panes, flame convolution.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MichaelPaus/status/1701214040876323013" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Michael Paus&lt;/strong&gt; has done a basic POC for Skia integration into JavaFX&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/mark-baird-5565786_how-to-use-the-java-maps-sdk-in-a-raspberry-activity-7100825332420599808-w5P7/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mark Baird&lt;/strong&gt; released the second in a series of blog posts showing how to use the beta release of the Java Maps SDK (with support for Arm Linux devices) with a Raspberry Pi&lt;/a&gt;
 to integrate IoT data collection into your geospatial applications.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/EdwardAlgorist/status/1697359282449072213" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Edward Nyirenda Jr&lt;/strong&gt; explains how to add TextField autocompletion in JavaFX using ControlsFX&lt;/a&gt;
: &amp;ldquo;TextField autocompletion is a convenient feature that enhances user experience by providing suggestions or predictions as users type into a text field.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/EdwardAlgorist" target="_blank" rel="noopener noreferrer"&gt;Check his Twitter/X timeline for more tutorials&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Highlighting one of the many other tutorials &lt;a href="https://twitter.com/EdwardAlgorist/status/1707165031622717625" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;JavaFX Clipboard&amp;rdquo;&lt;/a&gt;
: &amp;ldquo;In the JavaFX framework, clipboard functionality is seamlessly integrated, making it easy for developers to provide a smooth and user-friendly experience.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;All Edward&amp;rsquo;s tutorials are available on his website &lt;a href="https://coderscratchpad.com/category/computer-programming/javafx/" target="_blank" rel="noopener noreferrer"&gt;coderscratchpad.com&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gluon&lt;/strong&gt; shared four new tutorial/screencasts on YouTube:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ZIvSBK66tvQ" target="_blank" rel="noopener noreferrer"&gt;Introduction to Emoji&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=aST8C2N5k4g" target="_blank" rel="noopener noreferrer"&gt;Introduction to Gluon Maps&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=E2lREX9RFa0" target="_blank" rel="noopener noreferrer"&gt;Introducing Gluon Rich Text Area&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=___Fp_vk4CY" target="_blank" rel="noopener noreferrer"&gt;Basic usage of Gluon Rich Text Area&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/jachampagne8/status/1700547961921352094" target="_blank" rel="noopener noreferrer"&gt;Part 4 of the video tutorials in French by &lt;strong&gt;Jason Champagne&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;On aborde les premiers contrôles utilisateur sur JavaFX&amp;rdquo; (First user controls in JavaFX).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@kenkousen/111035349071040667" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Ken Kousen&lt;/strong&gt; (&amp;ldquo;Tales from the jar side&amp;rdquo;) shared a video&lt;/a&gt;
: &amp;ldquo;Generate images using Java. See how to write Java to drive the Dall-E image tool. Combined text blocks, JSON parsing, records, and even a JavaFX image carousel.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edward Nyirenda Jr&lt;/strong&gt; is continuing his series of tutorials: &lt;a href="https://twitter.com/EdwardAlgorist/status/1701348814156685713" target="_blank" rel="noopener noreferrer"&gt;Internationalization in JavaFX: Building Multilingual Apps&lt;/a&gt;
: &amp;ldquo;Internationalization is the process of designing your application so that it can be easily adapted to different languages and regions without code changes.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;In Portuguese by &lt;strong&gt;Edivaldo Brito&lt;/strong&gt; : &lt;a href="https://twitter.com/edivaldobrito/status/1702468670130425979" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Como instalar o Gluon Scene Builder no Linux via Flatpak&amp;rdquo;&lt;/a&gt;
 (How to install Gluon Scene Builder on Linux via Flatpak).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1696098284002054553" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; noticed something remarkable&lt;/a&gt;
: &amp;ldquo;A JavaScript account retweeting a JavaFX tweet? 🙂 What&amp;rsquo;s next? Flying pigs? :-)&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@fthevenet/111028413815320945" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frederic Thevenet&lt;/strong&gt; wrote a long thread on Mastodon&lt;/a&gt;
 to explain why &amp;ldquo;JavaFX is a very solid piece of tech which unfortunately came to maturity at the worst possible time for a &amp;ldquo;desktop application&amp;rdquo; GUI framework.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Looking for a specific icon? Use &lt;a href="https://twitter.com/dlemmermann/status/1699812103937290590" target="_blank" rel="noopener noreferrer"&gt;JFX Central as &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; explains here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Happy to see more and more references to JavaFX when people discuss app development, like &lt;a href="https://twitter.com/t3chn01200/status/1699016124661121192" target="_blank" rel="noopener noreferrer"&gt;here by &lt;strong&gt;@t3chn01200&lt;/strong&gt;&lt;/a&gt;
 , &lt;a href="https://twitter.com/schramMedia/status/1698728400318341609" target="_blank" rel="noopener noreferrer"&gt;here by &lt;strong&gt;@schramMedia&lt;/strong&gt;&lt;/a&gt;
 and &lt;a href="https://twitter.com/Aman_Raj2241/status/1699840433596297593" target="_blank" rel="noopener noreferrer"&gt;here by &lt;strong&gt;@Aman_Raj2241&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.acm.org/@koppor/111054057514152665" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Oliver Kopp&lt;/strong&gt; shared more info about the reason to use Java 21 in JabRef&lt;/a&gt;
: &amp;ldquo;We needed to have the fix for a workaround of the 64kb limit of Java. We did not backport our fix to JDK20, but relied on a sufficient quality of JDK21 at the time of our release.&amp;rdquo; Check &lt;a href="https://bugs.openjdk.org/browse/JDK-8240567" target="_blank" rel="noopener noreferrer"&gt;JDK-8240567&lt;/a&gt;
 for more background info and a link to the merge request and code changes in OpenJDK.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1704296530117906743" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt; is combining JavaFX and JavaScript&lt;/a&gt;
: &amp;ldquo;Using #Graal polyglot in a JavaFX program.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Webswing_org" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Webswing&lt;/strong&gt;&lt;/a&gt;
, a specialized web server for running Java Swing and JavaFX based applications in a web browser, announced a &lt;a href="https://www.webswing.org/es" target="_blank" rel="noopener noreferrer"&gt;Spanish version of their website&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;From time to time, JavaFX (just like Java itself) is declared dead. Luckily, there are many fans to correct this mistake:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/JavaFX3D/status/1705089119041593691" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;JavaFX3D&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;As someone who worked on JavaFX at both Sun and Oracle, I can definitively say that JavaFX is not deprecated. Period.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/spyced/status/1704888013094834602" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jonathan Ellis&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Users hate Electron&amp;rsquo;s performance and memory footprint, but devs love it for write-once-run-anywhere. I know we stopped using Swing years ago for good reasons, but still: wouldn&amp;rsquo;t JavaFX be better than Electron?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/JavaFX3D/status/1705092556617576608" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;JavaFX3D&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;I keep seeing uninformed posts, so I&amp;rsquo;d like to set the record straight. &lt;a href="https://www.youtube.com/watch?v=FFlVaB8oTi0" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Kevin Rushforth&lt;/strong&gt; and his team at Oracle are working on JavaFX&lt;/a&gt;
. Equally importantly, &lt;strong&gt;Johan Vos&lt;/strong&gt; and his team at &lt;strong&gt;Gluon&lt;/strong&gt; are the JavaFX WORA magicians.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1703401715351904439" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;As the lead developer for several of the tools referenced in that article I can say as ground truth that JavaFX was selected as the superior tech stack due to a combination of quality, performance and cross-platform support.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SystemsInCode/status/1704796679340224546" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;SystemsInCode&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;I would love to leverage the benefits of JavaFX, but it&amp;rsquo;s a hard sell in enterprise when we need to push a critical fix&amp;hellip; It&amp;rsquo;s a shame we have to use sub optimal tech for boring practical reasons 🙂 Being able to FORCE latest version on people even with low rights is critical.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1706658008820830476" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; shared some hidden messages&lt;/a&gt;
: &amp;ldquo;Hint: squint, move your phone/monitor further away or zoom out, to see it more clearly.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/crschnick/status/1706982902951485727" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; believes JavaFX applications can always use some more Duke&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-jfx-central"&gt;JFX Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The JFX Central website is now reachable via both &lt;a href="http://jfxcentral.com" target="_blank" rel="noopener noreferrer"&gt;jfxcentral.com&lt;/a&gt;
 and &lt;a href="http://jfx-central.com" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dlsc-software-consulting-gmbh/jfxcentral2/commits/develop" target="_blank" rel="noopener noreferrer"&gt;Many improvements&lt;/a&gt;
 are going on&amp;hellip;&lt;/li&gt;
&lt;li&gt;The post by &lt;strong&gt;Frank Delporte&lt;/strong&gt; about the new version of JFX Central got republished on Foojay:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/new-user-interface-for-jfx-central-the-home-for-all-javafx-information-part-1/"&gt;Part 1: Description of the site and changes&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/new-user-interface-for-jfx-central-the-home-for-all-javafx-information-part-2/"&gt;Part 2: Interviews with some of the team members&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;New content added to JFX Central
&lt;ul&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/fxcomponents" target="_blank" rel="noopener noreferrer"&gt;FXComponents&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Showcase: &lt;a href="https://www.jfx-central.com/real_world/maid" target="_blank" rel="noopener noreferrer"&gt;M-AID&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Showcase: &lt;a href="https://www.jfx-central.com/showcases/easycashier" target="_blank" rel="noopener noreferrer"&gt;EasyCashier&lt;/a&gt;
, a POS (point of sale) system from Sweden.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Is your library on JFX Central, or book, or website, or company, or &amp;hellip;? Let the people know &lt;a href="https://twitter.com/dlemmermann/status/1699044022029811824" target="_blank" rel="noopener noreferrer"&gt;by adding a badge&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;The initial data load of JFX Central is &lt;a href="https://twitter.com/dlemmermann/status/1699103833131978953?s=20" target="_blank" rel="noopener noreferrer"&gt;reduced by 50% thanks to JGit&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1706418682170097883" target="_blank" rel="noopener noreferrer"&gt;A new feature got announced that allows you to export any icon font icon to an SVG path&lt;/a&gt;
 so that you can use it in CSS, too.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1700125468693868626" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is inviting all JavaFX developers to make their work visible on JFX Central&lt;/a&gt;
: &amp;ldquo;In the end, you will have a nice personal profile page like this. A page showing your libs, your tools, your books, your videos, your blog, your showcase apps, etc&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;More &lt;a href="https://github.com/dlsc-software-consulting-gmbh/jfxcentral-data/commits/live" target="_blank" rel="noopener noreferrer"&gt;content was added&lt;/a&gt;
 and &lt;a href="https://github.com/dlsc-software-consulting-gmbh/jfxcentral2/commits/master" target="_blank" rel="noopener noreferrer"&gt;bugs fixed and improvements integrated&lt;/a&gt;
, go &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;check it out on jfx-central.com&lt;/a&gt;
&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Web Crawling in Java: Classical Threads and Virtual Threads</title><link>https://foojayio.github.io/website/today/web-crawling-in-java-a-tale-of-classical-threads-and-virtual-threads/</link><pubDate>Fri, 29 Sep 2023 12:23:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/web-crawling-in-java-a-tale-of-classical-threads-and-virtual-threads/</guid><description>&lt;p&gt;I&lt;strong&gt;n today&amp;rsquo;s fast-paced digital world, web crawling is a cornerstone technology behind search engines, data analysis tools, and various other applications.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Java, a language known for its robustness and scalability, offers intriguing ways to implement web crawling.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yet, the thread model you choose can make a world of difference.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This article unfolds a compelling narrative around web crawling in Java, contrasting classical threads with their newer counterpart: virtual threads.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-environment-setup"&gt;&lt;strong&gt;Environment Setup&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Before diving into the code and its intricate comparisons, ensure you have JDK 21 installed on your system. If you&amp;rsquo;re using a Unix-based system, SDKMAN! It makes this simple. Just open your terminal and run &lt;code&gt;curl -s &amp;quot;https://get.sdkman.io&amp;quot; | bash&lt;/code&gt; to install SDKMAN!, followed by &lt;code&gt;source &amp;quot;$HOME/.sdkman/bin/sdkman-init.sh&amp;quot;&lt;/code&gt; to initialize it. Finally, install JDK 21 with &lt;code&gt;sdk install java 21.0.0-&amp;lt;vendor&amp;gt;&lt;/code&gt;, replacing &amp;lt;vendor&amp;gt; with your preferred vendor (e.g., zulu, adopt).&lt;/p&gt;</description></item><item><title>C2 Might Be Slowing Down Your Builds</title><link>https://foojayio.github.io/website/today/c2-might-be-slowing-down-your-builds/</link><pubDate>Thu, 28 Sep 2023 09:55:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/c2-might-be-slowing-down-your-builds/</guid><description>&lt;p&gt;&lt;strong&gt;At the JavaForumNord two weeks ago, I had a friendly chat with Karl Heinz Marbaise (Chairman of the Apache Maven Project), where he mentioned that he wanted to start profiling Maven. This sounded interesting, so I started looking into the performance and bottlenecks of Maven. I began by using the Maven build of &lt;a href="https://github.com/apache/maven" target="_blank" rel="noopener noreferrer"&gt;maven&lt;/a&gt;
 itself as a starting point (excluding the tests). The following is my first observation related to Maven builds in CIs.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>The Systemic Process of Debugging</title><link>https://foojayio.github.io/website/today/the-systemic-process-of-debugging/</link><pubDate>Thu, 28 Sep 2023 07:06:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-systemic-process-of-debugging/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-importance-of-issue-tracking"&gt;The Importance of Issue Tracking&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#avoiding-parallel-work-on-the-same-bug"&gt;Avoiding Parallel Work on the Same Bug&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-value-of-issue-over-pull-requests"&gt;The Value of Issue Over Pull Requests&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#communication-issue-tracker-vs-ephemeral-channels"&gt;Communication: Issue Tracker vs. Ephemeral Channels&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#why-we-sometimes-avoid-the-issue-tracker"&gt;Why We Sometimes Avoid the Issue Tracker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-role-of-daily-meetings"&gt;The Role of Daily Meetings&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-role-of-testing-in-debugging"&gt;The Role of Testing in Debugging&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#starting-with-unit-tests"&gt;Starting with Unit Tests&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#unit-tests-vs-integration-tests"&gt;Unit Tests vs. Integration Tests&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;&lt;strong&gt;Debugging is an integral part of software development. However, as projects grow in size and complexity, the process of debugging requires more structure and collaboration. This process is probably something you already do as this process is deeply ingrained into most teams.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Memory Management in Java: An Introduction</title><link>https://foojayio.github.io/website/today/java-memory-management/</link><pubDate>Wed, 27 Sep 2023 13:47:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-memory-management/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Understanding memory management in Java, and particularly the role of object allocation is essential when optimising system performance.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In Java, memory management is an automatic process that is managed by the Java Virtual Machine (JVM), and one that does not need explicit intervention. Java, being a block-structured language, uses a model where its memory is divided into two main types: stack and heap.&lt;/p&gt;
&lt;p&gt;Local variables and method parameters use memory based on a &amp;lsquo;stack&amp;rsquo;. This area of memory grows and shrinks automatically when a code block or method is entered or exited, respectively. In situations where a request is made to the system for an amount of memory, whose size is only known at runtime, or when creating an object, these requests are usually satisfied by an area of the process&amp;rsquo; memory known as &amp;lsquo;dynamic memory&amp;rsquo; or the &amp;lsquo;heap&amp;rsquo;. Strictly speaking &amp;ndash; there is an occasion when an object that may be destined for the heap is instead written to the stack, however we will leave this discussion for a later document.&lt;/p&gt;</description></item><item><title>Down the Rabbit Hole of an Apache APISIX Plugin</title><link>https://foojayio.github.io/website/today/down-the-rabbit-hole-of-an-apache-apisix-plugin/</link><pubDate>Wed, 27 Sep 2023 08:43:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/down-the-rabbit-hole-of-an-apache-apisix-plugin/</guid><description>&lt;p&gt;&lt;strong&gt;My demo, Evolving your APIs, features a custom Apache APISIX plugin. I believe that the process of &lt;a href="https://apisix.apache.org/docs/apisix/plugin-develop/" target="_blank" rel="noopener noreferrer"&gt;creating a custom plugin&lt;/a&gt;
 is relatively well-documented. However, I wanted to check the parameters of the &lt;code&gt;_M.access(conf, ctx)&lt;/code&gt; function, especially the &lt;code&gt;ctx&lt;/code&gt; one.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The documentation states:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The &lt;code&gt;ctx&lt;/code&gt; parameter caches data information related to the request. You can use &lt;code&gt;core.log.warn(core.json.encode(ctx, true))&lt;/code&gt; to output it to &lt;code&gt;error.log&lt;/code&gt; for viewing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unfortunately, &lt;code&gt;core.log&lt;/code&gt; ultimately depends on nginx&amp;rsquo;s logging, and its buffer is limited in size. Thanks to my colleague &lt;a href="https://twitter.com/shreemaan_abhi" target="_blank" rel="noopener noreferrer"&gt;Abhishek&lt;/a&gt;
 for finding &lt;a href="http://nginx.org/en/docs/dev/development_guide.html#logging" target="_blank" rel="noopener noreferrer"&gt;the info&lt;/a&gt;
. For this reason, the &lt;code&gt;ctx&lt;/code&gt; display is (heavily) truncated. I had to log data bit by bit; however, it was instructive.&lt;/p&gt;</description></item><item><title>How do software companies give away stuff for free?</title><link>https://foojayio.github.io/website/today/how-software-companies-give-away-stuff-for-free/</link><pubDate>Tue, 26 Sep 2023 14:34:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-software-companies-give-away-stuff-for-free/</guid><description>&lt;p&gt;&lt;a href="https://foojayio.github.io/website/Free-software-article.jpg" title="Free Software"&gt;&lt;img src="https://foojayio.github.io/website/today/how-software-companies-give-away-stuff-for-free/Free-software-article.jpg" alt="Free Software" title="Free Software" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In today&amp;rsquo;s world, it has never been easier to get your hands on a piece of software for evaluation purposes. Having worked for multiple enterprise companies, I have noticed over the years that they all take different approaches to allowing developers to get their hands dirty with their tech.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There are many different ways of doing this and in this article I will try and explain the main approaches that software companies use and the reasoning behind these methods.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Visit Azul at Devoxx!</title><link>https://foojayio.github.io/website/today/visit-azul-at-devoxx/</link><pubDate>Tue, 26 Sep 2023 07:55:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/visit-azul-at-devoxx/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://devoxx.be/?utm_medium=event&amp;amp;utm_campaign=20231003-SEV-Devoxx%20Belgium&amp;amp;utm_source=unbounce&amp;amp;utm_content&amp;amp;utm_term" target="_blank" rel="noopener noreferrer"&gt;Devoxx Belgium 2023&lt;/a&gt;
 is finally here! To mark the 20^th^ anniversary of the conference and the release of the new Azul book &lt;a href="https://www.azul.com/openjdk-migration-for-dummies/?utm_medium=event&amp;amp;utm_campaign=20231004-HEV-Dummies%20Launch%20Party%20at%20Devoxx%20BE&amp;amp;utm_source=unbounce&amp;amp;utm_content=&amp;amp;utm_term=" target="_blank" rel="noopener noreferrer"&gt;OpenJDK Migration for Dummies&lt;/a&gt;
, this post summarizes all the logistical details you need to know to get the most out of Azul at Devoxx!&lt;/strong&gt;
&lt;img src="https://foojayio.github.io/website/today/visit-azul-at-devoxx/2023-9-14b-devoxx-hero-1024x400.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Devoxx Belgium will take place on 2 &amp;ndash; 6 October 2023 at &lt;a href="https://www.google.com/maps/dir/Kinepolis&amp;#43;Antwerpen,&amp;#43;Groenendaallaan&amp;#43;394,&amp;#43;2030&amp;#43;Antwerpen,&amp;#43;Belgium/Kinepolis,&amp;#43;Groenendaallaan&amp;#43;394,&amp;#43;2030&amp;#43;Antwerp/@51.2459867,4.3338087,12z/data=!4m13!4m12!1m5!1m1!1s0x47c3f63435c044a3:0xa9fd5c643a4787c5!2m2!1d4.4162091!2d51.2459082!1m5!1m1!1s0x47c3f63435c044a3:0xa9fd5c643a4787c5!2m2!1d4.4162091!2d51.2459082?entry=ttu" target="_blank" rel="noopener noreferrer"&gt;Kinepolis&lt;/a&gt;
 in Antwerp (Belgium). This edition is set to become the most visited of the series with over 3,200 attendees expected!&lt;/p&gt;</description></item><item><title>Foojay Podcast #29: How will AI and ML Influence the Role of Developers?</title><link>https://foojayio.github.io/website/today/foojay-podcast-29/</link><pubDate>Mon, 25 Sep 2023 07:24:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-29/</guid><description>&lt;p&gt;Artificial Intelligence and ChatGPT are the talk of the town.&lt;/p&gt;
&lt;p&gt;Every conference has several talks about these technologies, and on Foojay, you can find multiple posts about it.&lt;/p&gt;
&lt;p&gt;In this podcast, we want to take a look at it from the Java point of view.&lt;/p&gt;
&lt;p&gt;How can we use AI in Java programs or our job as a developer?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/Tvk8ykfbkDU?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;h2 id="h2-0-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Book Review: Get Your Hands Dirty on Clean Architecture</title><link>https://foojayio.github.io/website/today/book-review-get-your-hands-dirty-on-clean-architecture/</link><pubDate>Sat, 23 Sep 2023 12:00:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-get-your-hands-dirty-on-clean-architecture/</guid><description>&lt;p&gt;&lt;strong&gt;I recently completed reading &amp;ldquo;Get Your Hands Dirty on Clean Architecture&amp;rdquo; authored by Tom Hombergs and I deem it an indispensable resource for developers aspiring to produce clean code and implement the Hexagonal Architecture. Consequently, I have resolved to compose a review to aid numerous individuals who harbor a fervent interest in technology!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Title:&lt;/strong&gt; Get Your Hands Dirty on Clean Architecture&lt;br&gt;
&lt;strong&gt;Author:&lt;/strong&gt; Tom Hombergs&lt;br&gt;
&lt;strong&gt;Genre:&lt;/strong&gt; Technical, Software Architecture&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/book-review-get-your-hands-dirty-on-clean-architecture/GetYourHandsDirtyOnCleanArchitecture.jpg" alt="CleanArchitecture" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In the constantly changing realm of software development, architectural principles hold a crucial position in determining the triumph and sustainability of a project. The book authored by Tom Hombergs, titled &amp;ldquo;Get Your Hands Dirty on Clean Architecture: A hands-on guide to creating clean web applications with code examples in Java,&amp;rdquo; is an exceptional guide that illuminates the importance of clean architecture, while also offering practical perspectives on its implementation through the Java programming language.&lt;/p&gt;</description></item><item><title>Mastering the Challenges of OpenJDK Migration.</title><link>https://foojayio.github.io/website/today/mastering-the-challenges-of-openjdk-migration/</link><pubDate>Fri, 22 Sep 2023 15:11:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/mastering-the-challenges-of-openjdk-migration/</guid><description>&lt;p&gt;&lt;strong&gt;Ah, the halcyon days of Java development, where coding was king and APIs were the castle! From the nitty-gritty of the Java VM and garbage collection to the euphoria of leveraging new APIs, life was straightforward. With each Java update, you could expect nothing but improvements, a far cry from other ecosystems where every new version turned into a mini-project just to keep your codebase relevant. And with DevOps in the picture, version constraints felt like a thing of the past. Come 2017, Oracle promised us an accelerated release cycle, and life was good.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Eliminating Bugs Using the Tong Motion Approach</title><link>https://foojayio.github.io/website/today/eliminating-bugs-using-the-tong-motion-approach/</link><pubDate>Fri, 22 Sep 2023 14:53:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/eliminating-bugs-using-the-tong-motion-approach/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#understanding-the-process-of-elimination-in-debugging"&gt;Understanding the Process of Elimination in Debugging&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-basics"&gt;The Basics&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#using-external-tools"&gt;Using External Tools&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-power-of-unit-tests-in-debugging"&gt;The Power of Unit Tests in Debugging&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#benefits-of-mocking-frameworks"&gt;Benefits of Mocking Frameworks&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-challenges-with-flaky-issues"&gt;The Challenges with Flaky Issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-concept-of-the-tong-motion"&gt;The Concept of the &amp;lsquo;Tong Motion&amp;rsquo;&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#applying-the-tong-motion-to-debugging"&gt;Applying the Tong Motion to Debugging&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#an-illustrative-case-debugging-a-server-performance-issue"&gt;An Illustrative Case: Debugging a Server Performance Issue&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#wrapping-up"&gt;Wrapping Up&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Software debugging can often feel like a never-ending maze. Just when you think you&amp;rsquo;re on the right track, you hit a dead-end. But, by employing the age-old technique of the process of elimination, and using the analogy of the &amp;lsquo;Tong Motion,&amp;rsquo; we can navigate this maze more effectively.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>New FXComponents Library Released</title><link>https://foojayio.github.io/website/today/new-fxcomponents-library-released/</link><pubDate>Fri, 22 Sep 2023 10:15:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-fxcomponents-library-released/</guid><description>&lt;p&gt;&lt;strong&gt;A new library for Java / JavaFX has just been released. The library&amp;rsquo;s name is FXComponents and it is a Java library that contains a collection of new controls to be used in JavaFX applications.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As of the time of writing, FXComponents is being built using Java 17 and JavaFX 20.&lt;/p&gt;
&lt;p&gt;Below is a brief description of the controls currently present in this library (more coming soon). If you want to know more, head on over to the &lt;a href="https://pixelduke.com/2023/09/04/fxcomponents-library-released/" target="_blank" rel="noopener noreferrer"&gt;documentation page&lt;/a&gt;
 for more detailed information about this library and how to start using it.&lt;/p&gt;</description></item><item><title>Using JLink to create smaller Docker images for Spring Boot apps</title><link>https://foojayio.github.io/website/today/using-jlink-to-create-smaller-docker-images-for-your-spring-boot-java-application/</link><pubDate>Thu, 21 Sep 2023 11:33:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-jlink-to-create-smaller-docker-images-for-your-spring-boot-java-application/</guid><description>&lt;p&gt;&lt;strong&gt;Containers bring new flexibility and agility to software development and deployment. However, they also introduce a new attack surface that malicious actors can exploit. A compromised container can give an attacker access to other containers and even the host system. Smaller images that contain fewer artifacts are already a great help in achieving a smaller attack surface.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll present an in-depth exploration of utilizing JLink to optimize Docker image sizes, enhancing application security and performance. We&amp;rsquo;ll showcase how to use JLink and integrate it with Docker to efficiently deploy your Spring Boot or general Java applications.&lt;/p&gt;</description></item><item><title>Monkey-patching in Java</title><link>https://foojayio.github.io/website/today/monkey-patching-in-java/</link><pubDate>Thu, 21 Sep 2023 07:34:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/monkey-patching-in-java/</guid><description>&lt;p&gt;The JVM is an excellent platform for monkey-patching.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Monkey patching is a technique used to dynamically update the behavior of a piece of code at run-time. A monkey patch (also spelled monkey-patch, MonkeyPatch) is a way to extend or modify the runtime code of dynamic languages (&lt;em&gt;e.g.&lt;/em&gt; Smalltalk, JavaScript, Objective-C, Ruby, Perl, Python, Groovy, etc.) without altering the original source code.&lt;/p&gt;
&lt;p&gt;&amp;ndash; &lt;a href="https://en.wikipedia.org/wiki/Monkey_patch" target="_blank" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I want to demo several approaches for monkey-patching in Java in this post.&lt;/p&gt;</description></item><item><title>Manage Different Java Versions on Your Machine with SDKMan!</title><link>https://foojayio.github.io/website/today/easily-manage-different-java-versions-on-your-machine-with-sdkman/</link><pubDate>Wed, 20 Sep 2023 07:05:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/easily-manage-different-java-versions-on-your-machine-with-sdkman/</guid><description>&lt;p&gt;&lt;strong&gt;So, you&amp;rsquo;re a Java developer, or maybe you&amp;rsquo;re aspiring to be one. Either way, you&amp;rsquo;ve probably faced the challenge of managing multiple versions of Java on your machine. One project requires Java 8, but another needs Java 11, yet another requires Java 17. The open-source library you&amp;rsquo;re keen on contributing to needs yet another version. What do you do? You start juggling environment variables, and before you know it, your system is a tangled mess of configurations. Not fun, right?&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Exploring the Impact of Stack Size on JVM Thread Creation: A Myth Debunked</title><link>https://foojayio.github.io/website/today/exploring-the-impact-of-stack-size-on-jvm-thread-creation-a-myth-debunked/</link><pubDate>Wed, 20 Sep 2023 06:59:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-the-impact-of-stack-size-on-jvm-thread-creation-a-myth-debunked/</guid><description>&lt;p&gt;&lt;strong&gt;Among Java developers, a prevailing assumption is that the number of native threads that can be created within the Java Virtual Machine (JVM) is linked to the stack size. To scrutinize this widespread notion, an experiment was conducted. The results revealed that stack size plays a less significant role in native thread creation than previously thought.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-the-experiment"&gt;&lt;strong&gt;The Experiment&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The experiment utilized the following Java program, which continuously creates threads and counts them using an &lt;a href="https://download.java.net/java/early_access/jdk21/docs/api/java.base/java/util/concurrent/atomic/AtomicInteger.html" target="_blank" rel="noopener noreferrer"&gt;AtomicInteger&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Java 21 Is Available Today, And It's Quite The Update</title><link>https://foojayio.github.io/website/today/java-21-is-available-today-and-its-quite-the-update/</link><pubDate>Tue, 19 Sep 2023 05:31:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-21-is-available-today-and-its-quite-the-update/</guid><description>&lt;p&gt;&lt;strong&gt;Today&amp;rsquo;s the first day of Java 21&amp;rsquo;s availability! It&amp;rsquo;s been six months since Java 20 was released, so it&amp;rsquo;s time for another fresh wave of Java features. This post takes you on a tour of the JEPs that are associated with this release and it gives you a brief introduction to each of them, and &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-28/"&gt;check out the Java 21 podcast here&lt;/a&gt;
. Where applicable the differences with Java 20 are highlighted and a few typical use cases are provided, so that you&amp;rsquo;ll be more than ready to use these features after reading this!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Foojay Podcast #28: Java 21 Has Arrived!</title><link>https://foojayio.github.io/website/today/foojay-podcast-28/</link><pubDate>Tue, 19 Sep 2023 05:27:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-28/</guid><description>&lt;p&gt;Since 2018, we get a new version of Java every 6 months.&lt;/p&gt;
&lt;p&gt;And &lt;a href="https://foojayio.github.io/website/today/java-21-is-available-today-and-its-quite-the-update/"&gt;version 21, released during today, is a long-term support version&lt;/a&gt;
 that can be used for many years.&lt;/p&gt;
&lt;p&gt;It also brings a lot of new features and improvements in both the language and the runtime.&lt;/p&gt;
&lt;p&gt;Actually, there are so many that we&amp;rsquo;ll probably not get all of them discussed in this podcast!&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see what our experts find the most important facts we need to know about Java 21.&lt;/p&gt;</description></item><item><title>Exposing your data using Spring GraphQL</title><link>https://foojayio.github.io/website/today/exposing-your-data-using-spring-graphql/</link><pubDate>Tue, 19 Sep 2023 05:25:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/exposing-your-data-using-spring-graphql/</guid><description>&lt;p&gt;&lt;strong&gt;In this article, we&amp;rsquo;ll take an introductory look at how we can use Spring GraphQL in our Java applications.&lt;/strong&gt; &lt;strong&gt;GraphQL is a query language (hence the QL) that in conjunction with a framework such as &lt;code&gt;Spring GraphQL&lt;/code&gt; can be used to efficiently manage our data, and even reuse existing services.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It has 2 core concepts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;queries: used to define which data should be fetched, and which fields thereof should be included&lt;/li&gt;
&lt;li&gt;mutations: used to manage our dataset&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It&amp;rsquo;s an alternative to REST, SOAP, or gRPC, and supports calls over HTTP, WebSocket and RSocket.&lt;/p&gt;</description></item><item><title>New User Interface for JFX Central, the Home for JavaFX – Part 2</title><link>https://foojayio.github.io/website/today/new-user-interface-for-jfx-central-the-home-for-all-javafx-information-part-2/</link><pubDate>Mon, 18 Sep 2023 05:42:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-user-interface-for-jfx-central-the-home-for-all-javafx-information-part-2/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/new-user-interface-for-jfx-central-the-home-for-all-javafx-information-part-1/"&gt;part 1 of this series&lt;/a&gt;
, we looked into the new design of &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;JFX Central&lt;/a&gt;
, the place to be for all JavaFX info.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JFX Central is a not-for-profit team effort. Many people are involved, and any issue or pull request provided by anyone from the JavaFX community helps to improve and extend the website, application, and data. I reached out to some people involved to learn about their history in Java and JavaFX development and how they are engaged in JFX Central.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>New User Interface for JFX Central, Home for JavaFX - Part 1</title><link>https://foojayio.github.io/website/today/new-user-interface-for-jfx-central-the-home-for-all-javafx-information-part-1/</link><pubDate>Mon, 18 Sep 2023 05:37:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-user-interface-for-jfx-central-the-home-for-all-javafx-information-part-1/</guid><description>&lt;p&gt;&lt;strong&gt;Just like &lt;a href="https://foojayio.github.io/website/"&gt;Foojay&lt;/a&gt;
 is the starting place for all info related to Java, &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;JFX Central&lt;/a&gt;
 is the place to be for all JavaFX info. The website is a project started by Dirk Lemmermann and has been online since 2021. The &lt;a href="https://www.jfx-central.com/team" target="_blank" rel="noopener noreferrer"&gt;team has expanded&lt;/a&gt;
 since then, and the content has been extended, partially by the team, but also thanks to many contributors from the JavaFX community. End of August, a new user interface was published to replace the initial version.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Book Review: "OpenJDK Migration for Dummies"</title><link>https://foojayio.github.io/website/today/book-review-openjdk-migration-for-dummies-3/</link><pubDate>Mon, 18 Sep 2023 04:48:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-openjdk-migration-for-dummies-3/</guid><description>&lt;p&gt;I recently read the free book &lt;a href="https://www.azul.com/openjdk-migration-for-dummies/" target="_blank" rel="noopener noreferrer"&gt;OpenJDK Migration for Dummies&lt;/a&gt;
 by &lt;a href="https://www.linkedin.com/in/siritter/" target="_blank" rel="noopener noreferrer"&gt;Simon Ritter&lt;/a&gt;
. Simon is the Deputy CTO at Azul Systems.&lt;/p&gt;
&lt;p&gt;Azul has its own OpenJDK distribution which also has commercial flavors. So, obviously, my first thought was, &amp;ldquo;Well, of course, he&amp;rsquo;s going to say nice things about Azul&amp;rsquo;s JDK distribution and try to sell it everywhere&amp;rdquo;. But, to my surprise, that wasn&amp;rsquo;t entirely true. To be fair, he does sell Azul&amp;rsquo;s JDK a bit, and the goal of the book seems to include some marketing and advocacy for Azul. However, overall the book is what it promises in the title, a guide for migrating to an OpenJDK distribution, regardless of the vendor.&lt;/p&gt;</description></item><item><title>Book Review: "Java Basics", by Shai Almog</title><link>https://foojayio.github.io/website/today/book-review-java-basics-a-practical-introduction-to-full-stack-java/</link><pubDate>Sat, 16 Sep 2023 08:43:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-java-basics-a-practical-introduction-to-full-stack-java/</guid><description>&lt;p&gt;Shai Almog&amp;rsquo;s &amp;ldquo;&lt;a href="https://www.amazon.com/Java-Basics-Practical-Introduction-Full-Stack/dp/B0CCCJ38WH" target="_blank" rel="noopener noreferrer"&gt;Java Basics: A Practical Introduction to Full Stack Java&lt;/a&gt;
&amp;rdquo; more than lives up to its title. And how could it be otherwise, with its highly Java driven and opinionated author having a track record going back to leading Java mobile efforts all the way back to Sun Microsystems.&lt;/p&gt;
&lt;figure class="wp-block-image size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="B0CCCJ38WH.01._SCLZZZZZZZ_SX500_.jpg" alt="" class="wp-image-102286" style="width:290px;height:362px" width="290" height="362"&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Thoroughness and Ambition&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The thoroughness and ambition of the book is clear from its table of contents, each chapter well laid out, in short very readable chapters, each ending with a summary and a quiz.&lt;/p&gt;</description></item><item><title>Review: OpenJDK Migration for Dummies</title><link>https://foojayio.github.io/website/today/review-openjdk-migration-for-dummies/</link><pubDate>Fri, 15 Sep 2023 18:46:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/review-openjdk-migration-for-dummies/</guid><description>&lt;p&gt;&lt;strong&gt;Have you been thinking of moving away from the Oracle JDK to OpenJDK? The book &amp;ldquo;OpenJDK Migration for Dummies&amp;rdquo;, written by Simon Ritter of Azul, provides direction for those who are looking to make the move.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In many cases, organizations develop Java applications to work on a specific version of the JDK. Oftentimes, as long as the application continues running without issue, organizations wouild not upgrade the JDK. As we well know, as with all software, as time goes on, the JDK which is in use can age and become out-of-date, exposing security vulnerabilities. Moreover, if the JDK in use is aging, then there likely have been many enhancements in more recently released JDKs which could provide performance benefits for the deployed application(s).&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>System Architecture: Move Authentication to the API Gateway</title><link>https://foojayio.github.io/website/today/system-architecture-move-authentication-to-the-api-gateway/</link><pubDate>Fri, 15 Sep 2023 07:47:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/system-architecture-move-authentication-to-the-api-gateway/</guid><description>&lt;p&gt;&lt;strong&gt;When exposing an application to the outside world, consider a Reverse-Proxy or an API Gateway to protect it from attacks. Rate Limiting comes to mind first, but it shouldn&amp;rsquo;t stop there. We can factor many features in the API Gateway and should be bold in moving them from our apps. In this post, I&amp;rsquo;ll show how to implement authentication at the Gateway API stage.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-overall-authentication-flow"&gt;Overall authentication flow&lt;/h2&gt;
&lt;p&gt;The API Gateway doesn&amp;rsquo;t authenticate but delegates authentication to an authentication provider. After authentication, the Gateway forwards the request to the app. The app checks authentication and gets the associated identity and permissions.&lt;/p&gt;</description></item><item><title>Extending availability of IBM Semeru Runtimes V11 beyond Oct 2024</title><link>https://foojayio.github.io/website/today/semeru-v11-beyond-oct-2024/</link><pubDate>Thu, 14 Sep 2023 14:17:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/semeru-v11-beyond-oct-2024/</guid><description>&lt;p&gt;&lt;strong&gt;IBM has extended the availability of IBM Semeru Runtimes V11 from Oct 2024 to Nov 2026. Semeru Runtimes is IBM&amp;rsquo;s build of OpenJDK with Eclipse OpenJ9 technology. The &lt;a href="https://www.ibm.com/support/pages/semeru-runtimes-support/" title="IBM Semeru Runtimes support page" target="_blank" rel="noopener noreferrer"&gt;IBM Semeru Runtimes support page&lt;/a&gt;
 (which includes downloads) is now updated to reflect this additional two years of availability for Version 11.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-what-is-ibm-semeru-runtimes"&gt;What is IBM Semeru Runtimes?&lt;/h2&gt;
&lt;p&gt;IBM Semeru Runtimes is a free distribution of production-ready binaries built with the OpenJDK class libraries and the Eclipse OpenJ9 JVM.&lt;/p&gt;</description></item><item><title>ArchUnit - test your architecture</title><link>https://foojayio.github.io/website/today/archunit-testing-your-architecture/</link><pubDate>Thu, 14 Sep 2023 14:09:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/archunit-testing-your-architecture/</guid><description>&lt;p&gt;&lt;a href="https://www.archunit.org/" target="_blank" rel="noopener noreferrer"&gt;ArchUnit&lt;/a&gt;
 is a library that allows us to test our architecture (layering/slicing/(naming) conventions, and more).&lt;/p&gt;
&lt;p&gt;Why does this matter? It&amp;rsquo;s all about leaving a legacy and safeguarding it. During the lifecycle of a project, people might shift roles, join the team, &amp;hellip; And might not be aware of the conventions within the team/organization.&lt;/p&gt;
&lt;p&gt;Testing your architecture is both an aid to ascertain that the architecture is being implemented consistently and also makes it easier for people onboarding to get a grasp of what that agreed architecture is.&lt;/p&gt;</description></item><item><title>OpenRewrite: Automatic Code Refactoring and More - Part 2</title><link>https://foojayio.github.io/website/today/openrewrite-automatic-code-refactoring-and-maintenance-part-2/</link><pubDate>Thu, 14 Sep 2023 06:56:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/openrewrite-automatic-code-refactoring-and-maintenance-part-2/</guid><description>&lt;p&gt;In the &lt;a href="https://foojayio.github.io/website/today/openrewrite-automatic-code-refactoring-and-maintenance/"&gt;previous article&lt;/a&gt;
, we outlined the significance of the OpenRewrite Library and its integration at an elevated level.&lt;/p&gt;
&lt;p&gt;This article explains how to improve, refactor, and move a Spring Boot application with OpenRewrite.&lt;br&gt;
&lt;img src="https://foojayio.github.io/website/today/openrewrite-automatic-code-refactoring-and-maintenance-part-2/OpenRewrite.gif" alt="Open Rewrite" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Source: OpenReWrite{#caption-attachment-102151}&lt;/p&gt;
&lt;p&gt;Before proceeding, we shall understand the various goals in the &lt;strong&gt;Maven or Gradle plugin&lt;/strong&gt; &lt;strong&gt;configuration&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;OpenRewrite Maven&lt;/strong&gt; offers the following goals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mvn rewrite:cyclonedx&lt;/code&gt; - This will generate a &lt;a href="https://cyclonedx.org/" target="_blank" rel="noopener noreferrer"&gt;Cyclonedx&lt;/a&gt;
 bill of materials describing the application/project dependencies, including &lt;a href="https://en.wikipedia.org/wiki/Transitive_dependency" target="_blank" rel="noopener noreferrer"&gt;transitive dependencies&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mvn rewrite:discover&lt;/code&gt; - Generate a report detailing the recipes that are currently available within the classpath.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mvn rewrite:dryRun&lt;/code&gt; - This precautionary command will generate a set of differences solely for the modifications made within the &lt;code&gt;/target/rewrite&lt;/code&gt; directory, which will be saved in the &lt;code&gt;rewrite.patch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mvn rewrite:dryRunNoFork&lt;/code&gt; - This precautionary command will generate a set of differences solely for the modifications made within the &lt;code&gt;/target/rewrite&lt;/code&gt; directory, which will be saved in the &lt;code&gt;rewrite.patch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mvn rewrite:run&lt;/code&gt;- This command runs the configured recipes and applies the changes locally.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mvn rewrite:runNoFork&lt;/code&gt; -This command runs the configured recipes and applies the changes locally.&lt;/li&gt;
&lt;li&gt;For &lt;code&gt;runForFork:&lt;/code&gt; This different way of doing things doesn&amp;rsquo;t split up the Maven process and could work better when using Rewrite with other Maven tasks in a continuous integration (CI) system.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;strong&gt;OpenRewrite Gradle&lt;/strong&gt; offers the following goals:&lt;/p&gt;</description></item><item><title>Chronicle Services: Building Fast Microservices with Java</title><link>https://foojayio.github.io/website/today/chronicle-services-building-fast-microservices-with-java/</link><pubDate>Wed, 13 Sep 2023 13:47:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/chronicle-services-building-fast-microservices-with-java/</guid><description>&lt;h3 id="h3-0-low-latency"&gt;Low Latency?&lt;/h3&gt;
&lt;p&gt;In computing, latency is defined as the length of time to perform some task. This could be the time it takes to respond to an interrupt from hardware or the time it takes for a message sent by one component to be available to its recipient.&lt;/p&gt;
&lt;p&gt;In many cases, latency is not seen as a primary non-functional concern when designing an application, even when considering performance. Most of the time, after all, computers seem to do their work at speeds that are well beyond human perception, typically using scales of milliseconds, microseconds, or even nanoseconds.&lt;/p&gt;</description></item><item><title>5 Ways to Identify and Manage Flaky Tests</title><link>https://foojayio.github.io/website/today/five-ways-to-use-gradle-enterprise-to-identify-and-manage-flaky-tests/</link><pubDate>Tue, 12 Sep 2023 03:57:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/five-ways-to-use-gradle-enterprise-to-identify-and-manage-flaky-tests/</guid><description>&lt;p&gt;&lt;strong&gt;Dealing with flaky tests is a significant challenge in software development. These unpredictable and inconsistent tests can pass or fail without any changes in code, casting doubt on the reliability of your toolchain and ultimately on the application itself. The presence of flaky tests can significantly impact developer confidence and productivity. To better understand why you need to address these flaky tests, read &lt;a href="https://foojayio.github.io/website/today/seven-reasons-you-should-not-ignore-flaky-tests/"&gt;Seven Reasons You Should Not Ignore Flaky Tests&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>The DiscoAPI Helps You To Find Any OpenJDK Distribution</title><link>https://foojayio.github.io/website/today/disco-api-helping-you-to-find-any-openjdk-distribution/</link><pubDate>Tue, 12 Sep 2023 03:42:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/disco-api-helping-you-to-find-any-openjdk-distribution/</guid><description>&lt;p&gt;&lt;strong&gt;Did you know Foojay is not only a human-readable OpenJDK knowledge base but also provides the Disco API that lets you search all OpenJDK distributions? And even if you didn&amp;rsquo;t know, you probably already are using it, as it&amp;rsquo;s integrated into &lt;a href="https://sdkman.io/" target="_blank" rel="noopener noreferrer"&gt;SDKMAN!&lt;/a&gt;
, &lt;a href="https://jreleaser.org/" target="_blank" rel="noopener noreferrer"&gt;JReleaser&lt;/a&gt;
, &lt;a href="https://www.jbang.dev/" target="_blank" rel="noopener noreferrer"&gt;JBang!&lt;/a&gt;
, &lt;a href="https://docs.gradle.org/current/userguide/toolchains.html" target="_blank" rel="noopener noreferrer"&gt;Gradle toolchain&lt;/a&gt;
, &lt;a href="https://paketo.io/docs/howto/java/" target="_blank" rel="noopener noreferrer"&gt;Paketo buildpacks&lt;/a&gt;
,and more.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Disco API (i.e., the short name for the Universal OpenJDK Discovery API) is a database and API with all the available OpenJDK versions from all distributors, like Corretto, Liberica, Oracle, Temurin, Zulu, and many others. In total, there are now 89352 different packages at the end of August 2023.&lt;/p&gt;</description></item><item><title>The Evolution of Bugs</title><link>https://foojayio.github.io/website/today/the-evolution-of-bugs/</link><pubDate>Tue, 12 Sep 2023 03:34:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-evolution-of-bugs/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#memory-management-the-past-and-the-present"&gt;Memory Management: The Past and The Present&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-classic-challenges-memory-leaks-and-corruption"&gt;The Classic Challenges: Memory Leaks and Corruption&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#enter-garbage-collection-a-mixed-blessing"&gt;Enter Garbage Collection: A Mixed Blessing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#memory-profiling-the-contemporary-solution"&gt;Memory Profiling: The Contemporary Solution&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#concurrency-a-double-edged-sword"&gt;Concurrency: A Double-Edged Sword&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-bright-side-predictable-threading"&gt;The Bright Side: Predictable Threading&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-murky-waters-multi-container-concurrency"&gt;The Murky Waters: Multi-Container Concurrency&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#reproducing-the-elusive-threading-bugs"&gt;Reproducing The Elusive: Threading Bugs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#race-conditions-the-ever-present-ghost"&gt;Race Conditions: The Ever-Present Ghost&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-pervasiveness-of-state-bugs"&gt;The Pervasiveness of State Bugs&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#what-are-state-bugs"&gt;What Are State Bugs?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#from-simple-variables-to-complex-data-structures"&gt;From Simple Variables to Complex Data Structures&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#interactions-and-events-where-timing-matters"&gt;Interactions and Events: Where Timing Matters&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#persistence-when-bugs-linger"&gt;Persistence: When Bugs Linger&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#concurrency-compounds-state-issues"&gt;Concurrency Compounds State Issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#tools-and-strategies-to-combat-state-bugs"&gt;Tools and Strategies to Combat State Bugs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#exceptions-the-noisy-neighbor"&gt;Exceptions: The Noisy Neighbor&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#what-are-exceptions"&gt;What Are Exceptions?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-informative-nature-of-exceptions"&gt;The Informative Nature of Exceptions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#causes-of-exceptions"&gt;Causes of Exceptions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#handling-exceptions-a-delicate-balance"&gt;Handling Exceptions: A Delicate Balance&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#proactive-prevention"&gt;Proactive Prevention&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#faults-beyond-the-surface"&gt;Faults: Beyond the Surface&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#what-constitutes-a-fault"&gt;What Constitutes a Fault?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#origins-of-faults"&gt;Origins of Faults&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#detecting-and-isolating-faults"&gt;Detecting and Isolating Faults&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#addressing-faults"&gt;Addressing Faults&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-value-of-learning-from-faults"&gt;The Value of Learning from Faults&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#thread-bugs-unraveling-the-knot"&gt;Thread Bugs: Unraveling the Knot&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#a-glimpse-into-thread-bugs"&gt;A Glimpse into Thread Bugs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-common-culprits-behind-thread-bugs"&gt;The Common Culprits Behind Thread Bugs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#diagnosing-the-tangle"&gt;Diagnosing the Tangle&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#untangling-the-knot"&gt;Untangling the Knot&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#race-conditions-always-a-step-ahead"&gt;Race Conditions: Always a Step Ahead&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#what-exactly-is-a-race-condition"&gt;What Exactly is a Race Condition?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#why-are-race-conditions-so-tricky"&gt;Why are Race Conditions so Tricky?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#guarding-against-the-unpredictable"&gt;Guarding Against the Unpredictable&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#testing-for-races"&gt;Testing for Races&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#performance-pitfalls-monitor-contention-and-resource-starvation"&gt;Performance Pitfalls: Monitor Contention and Resource Starvation&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#monitor-contention-a-bottleneck-in-disguise"&gt;Monitor Contention: A Bottleneck in Disguise&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#why-its-problematic"&gt;Why It&amp;rsquo;s Problematic&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#mitigation-strategies"&gt;Mitigation Strategies&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#resource-starvation-the-silent-performance-killer"&gt;Resource Starvation: The Silent Performance Killer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-impact"&gt;The Impact&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#solutions-to-counteract-starvation"&gt;Solutions to Counteract Starvation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-bigger-picture"&gt;The Bigger Picture&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;&lt;strong&gt;Programming, regardless of the era, has been riddled with bugs that vary in nature but often remain consistent in their basic problems. Whether we&amp;rsquo;re talking about mobile, desktop, server, or different operating systems and languages, bugs have always been a constant challenge. Here&amp;rsquo;s a dive into the nature of these bugs and how we can tackle them effectively.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>New JavaFX theme library "Transit" released</title><link>https://foojayio.github.io/website/today/new-javafx-theme-library-transit-released/</link><pubDate>Tue, 12 Sep 2023 02:56:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-javafx-theme-library-transit-released/</guid><description>&lt;p&gt;&lt;strong&gt;A new Java (JavaFX) theme has been released. This is a new theme called &amp;ldquo;Transit&amp;rdquo; and it builds upon the lessons learned while developing JMetro. The code is hosted on &lt;a href="https://github.com/dukke/Transit" target="_blank" rel="noopener noreferrer"&gt;Github&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It is not meant to be JMetro 2, it will be an entirely new theme.&lt;/p&gt;
&lt;h2 id="h2-0-strengths-and-key-principles"&gt;Strengths and Key Principles&lt;/h2&gt;
&lt;p&gt;This theme follows some of the design principles and has some of the key strengths of JMetro:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Modern look and feel;&lt;/li&gt;
&lt;li&gt;Zero tight coupling with this library:
&lt;ul&gt;
&lt;li&gt;No new controls. &amp;ldquo;Pluggable&amp;rdquo; theme. Functionality is added &amp;ldquo;behind the curtains&amp;rdquo; to existing JavaFX controls through the Skin API (FXSkins library);&lt;/li&gt;
&lt;li&gt;Setting and unsetting is seamless and easy (only 1 line of code) even on already existing apps that don&amp;rsquo;t use this theme;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Looks integrated on Windows (80%/90% of desktop users use Windows) also works well on other OSes;&lt;/li&gt;
&lt;li&gt;Light and Dark versions;&lt;/li&gt;
&lt;li&gt;Easily override and customize colors by overriding JavaFX CSS variables;&lt;/li&gt;
&lt;li&gt;Only relies on JavaFX CSS, JavaFX API and Java code (no other &amp;ldquo;foreign technologies&amp;rdquo;);&lt;/li&gt;
&lt;li&gt;Samples and theme tester app on &lt;a href="https://github.com/dukke/Transit/tree/main/transit-samples" target="_blank" rel="noopener noreferrer"&gt;samples sub-project&lt;/a&gt;
;&lt;/li&gt;
&lt;li&gt;Lots of real world, recognized Java apps already using it (NASA&amp;rsquo;s applications, applications used in the White House, etc, etc) (JMetro and Transit) &amp;ndash; check the documentation page for more real world examples;&lt;/li&gt;
&lt;li&gt;Leverages lessons learned developing JMetro theme;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I like to use the term Michael Paus (&lt;a href="https://twitter.com/MichaelPaus" target="_blank" rel="noopener noreferrer"&gt;@MichaelPaus&lt;/a&gt;
) coined when he was referring to JMetro: this is a &amp;ldquo;pluggable&amp;rdquo; JavaFX theme (like JMetro).&lt;/p&gt;</description></item><item><title>A Look at Sealed Classes, Pattern Matching, Functional Paradigms</title><link>https://foojayio.github.io/website/today/embracing-modernity-a-comprehensive-look-at-sealed-classes-pattern-matching-and-functional-paradigms-in-java/</link><pubDate>Mon, 11 Sep 2023 08:42:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/embracing-modernity-a-comprehensive-look-at-sealed-classes-pattern-matching-and-functional-paradigms-in-java/</guid><description>&lt;h3 id="h3-0-introduction"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The introduction of Sealed Classes in Java and the combination with pattern matching in switch statements has sparked a debate among software developers.&lt;/p&gt;
&lt;p&gt;The argument in question raises concerns about the real-life use cases for Sealed Classes and suggests that pattern matching with switch might promote poor coding practices.&lt;/p&gt;
&lt;p&gt;This article aims to counter these assertions by examining the principles and practical applications of Sealed Classes and pattern matching.&lt;/p&gt;</description></item><item><title>Gerrit and Ivar's North America JUG Tour!</title><link>https://foojayio.github.io/website/today/gerrit-and-ivars-north-america-jug-tour/</link><pubDate>Sun, 10 Sep 2023 07:55:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/gerrit-and-ivars-north-america-jug-tour/</guid><description>&lt;p&gt;&lt;strong&gt;Aloha, because I will be in the US this month, I decided to do a little Java User Group tour again. Ivar Grimstad from the Eclipse Foundation will join me and we will visit a couple of JUGs in the week from the 18th to the 22nd of September.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Just in case you are in the area and interested to join one of our sessions or if you only would like to meet us in person, please check out the following links to get further information about the location etc.&lt;/p&gt;</description></item><item><title>Spring's new JdbcClient API for performing database operations</title><link>https://foojayio.github.io/website/today/the-new-jdbcclient-introduced-in-spring-framework-6-1/</link><pubDate>Fri, 08 Sep 2023 06:45:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-new-jdbcclient-introduced-in-spring-framework-6-1/</guid><description>&lt;p&gt;&lt;strong&gt;Spring framework 6.1 introduced a new JdbcClient API, which is a wrapper on top of JdbcTemplate, for performing database operations using a fluent API.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Spring Boot 3.2 is going to include Spring framework 6.1, so let&amp;rsquo;s take a quick look at&lt;/p&gt;
&lt;p&gt;how we can use &lt;strong&gt;JdbcClient&lt;/strong&gt; to implement various database operations in a simplified manner.&lt;/p&gt;
&lt;p&gt;First, let&amp;rsquo;s go to &lt;a href="https://start.spring.io/" target="_blank" rel="noopener noreferrer"&gt;https://start.spring.io/&lt;/a&gt;
 and create a Spring Boot application by selecting&lt;br&gt;
&lt;strong&gt;Spring JDBC&lt;/strong&gt; , &lt;strong&gt;PostgreSQL Driver&lt;/strong&gt; , &lt;strong&gt;Flyway Migration&lt;/strong&gt; , and &lt;strong&gt;Testcontainers&lt;/strong&gt; starters.&lt;/p&gt;</description></item><item><title>Load testing - shoot your application with Gatling</title><link>https://foojayio.github.io/website/today/load-testing-shoot-your-application-with-gatling/</link><pubDate>Wed, 06 Sep 2023 09:32:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/load-testing-shoot-your-application-with-gatling/</guid><description>&lt;h2 id="_what_is_load_testing"&gt;What is load testing?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Load testing entails testing how our application performs under a significant load so we can be certain it behaves as expected when there&amp;rsquo;s an influx of users.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Or at least so we know what it can cope it, and at what point we might potentially need to take action.&lt;/p&gt;
&lt;p&gt;After all, it might not (only) be the code that&amp;rsquo;s the issue.&lt;/p&gt;
&lt;p&gt;This is a process that requires quite a bit of cooperation between testers, developers, and those using it to properly determine the scenarios, and a smooth &amp;amp; swift feedback loop is important to make sure our solutions work properly. And it will likely be some of the most expensive tests given both the people involved and the need for a testing environment that&amp;rsquo;s representative of the production configuration.&lt;/p&gt;</description></item><item><title>Ops friendly Apache APISIX</title><link>https://foojayio.github.io/website/today/ops-friendly-apache-apisix/</link><pubDate>Wed, 06 Sep 2023 06:27:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/ops-friendly-apache-apisix/</guid><description>&lt;p&gt;&lt;strong&gt;Though I always worked on the Dev side of IT, I was also interested in the Ops side. I even had a short experience being a WebSphere admin: I used it several times, helping Ops deal with the Admin console while being a developer.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Providing a single package that Ops can configure and deploy in different environments is very important. As a JVM developer, I&amp;rsquo;ve been happy using Spring Boot and its wealth of configuration options: command-line parameters, JVM parameters, files, profiles, environment variables, etc.&lt;/p&gt;</description></item><item><title>OpenRewrite: Automatic Code Refactoring and Maintenance</title><link>https://foojayio.github.io/website/today/openrewrite-automatic-code-refactoring-and-maintenance/</link><pubDate>Tue, 05 Sep 2023 17:05:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/openrewrite-automatic-code-refactoring-and-maintenance/</guid><description>&lt;p&gt;As software engineers and architects, we often face the challenge of upgrading dependencies, security patches, and framework upgrades to the latest versions. Enterprise organizations often have legacy code developed and maintained for a long time.&lt;/p&gt;
&lt;p&gt;Updating dependency versions in the build file in many build files in the software projects, and implementing large framework upgrades can be a daunting task for developers, who must manually inspect and modify class files, properties, and the build files such as &lt;code&gt;pom.xml&lt;/code&gt; or &lt;code&gt;build.gradle&lt;/code&gt; or any other build files.&lt;/p&gt;</description></item><item><title>JUG PH Continuation Report 2023</title><link>https://foojayio.github.io/website/today/jugph-continuing-the-connection-with-the-java-enthusiasts/</link><pubDate>Tue, 05 Sep 2023 06:11:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/jugph-continuing-the-connection-with-the-java-enthusiasts/</guid><description>&lt;p&gt;&lt;strong&gt;Continuing the connection with the Java Enthusiasts and the efforts of &lt;a href="https://www.meetup.com/java-user-group-ph/" title="Java User Group Philippines" target="_blank" rel="noopener noreferrer"&gt;Java User Group Philippines&lt;/a&gt;
 (JUG PH), we finished our 2nd and 3rd meetup last June and August 2023.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is the JUG PH Continuation Report of the revitalized report here: &lt;a href="https://foojayio.github.io/website/today/java-user-group-ph-report-2023/"&gt;https://foojay.io/today/java-user-group-ph-report-2023/&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The speakers of these meetups were composed of &lt;a href="https://www.linkedin.com/in/rjtmahinay/" title="Tristan Mahinay" target="_blank" rel="noopener noreferrer"&gt;Tristan Mahinay&lt;/a&gt;
, the JUG PH Leader and &lt;a href="https://www.linkedin.com/in/ykchang/" title="Yee Kang Chang" target="_blank" rel="noopener noreferrer"&gt;Yee Kang Chang&lt;/a&gt;
, an IBM Architect and Developer Advocate.&lt;/p&gt;</description></item><item><title>Foojay Podcast #27: Chicago JUG and KUG</title><link>https://foojayio.github.io/website/today/foojay-podcast-27/</link><pubDate>Mon, 04 Sep 2023 09:24:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-27/</guid><description>&lt;p&gt;Since December last year, the Foojay podcast virtually visited a Java User Group monthly.&lt;/p&gt;
&lt;p&gt;This journey has already brought us to many places around the world.&lt;/p&gt;
&lt;p&gt;And this time, we are in Chicago to learn from the Java and Kotlin user groups.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/UkCmZ02pJek?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;h2 id="h2-0-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Unlocking Java Wisdom: A Conversation with Oracle ACE Simon Martinelli</title><link>https://foojayio.github.io/website/today/unlocking-java-wisdom-a-conversation-with-oracle-ace-simon-martinelli/</link><pubDate>Fri, 01 Sep 2023 16:00:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/unlocking-java-wisdom-a-conversation-with-oracle-ace-simon-martinelli/</guid><description>&lt;figure class="alignright size-full"&gt;
 &lt;img fetchpriority="high" decoding="async" width="460" height="460" src="image-2.png" alt="" class="wp-image-102139"&gt;
&lt;/figure&gt;
&lt;p&gt;In a recent insightful interview, Simon Martinelli, an Oracle ACE associate and veteran Java developer, shares his career experiences, software development philosophies, and views on mentoring. With over two decades in the industry, Martinelli offers a perspective that combines the wisdom of experience with a focus on simplicity and constant learning.&lt;/p&gt;
&lt;h2 id="h2-0-profiles"&gt;Profiles:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🌍 Homepage:&lt;a href="https://martinelli.ch/" target="_blank" rel="noopener noreferrer"&gt;martinelli.ch&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👔 LinkedIn:&lt;a href="https://www.linkedin.com/in/simonmartinelli/?originalSubdomain=ch" target="_blank" rel="noopener noreferrer"&gt;Simon Martinelli on LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐦 Twitter:&lt;a href="https://twitter.com/simas_ch" target="_blank" rel="noopener noreferrer"&gt;@simas_ch on Twitter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📦 GitHub:&lt;a href="https://github.com/simasch" target="_blank" rel="noopener noreferrer"&gt;simasch on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-fun-fact"&gt;Fun Fact:&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Before starting my IT career, I was working as a traffic controller at Swiss Railways.&lt;/p&gt;</description></item><item><title>Book review: "OpenJDK Migration for Dummies"</title><link>https://foojayio.github.io/website/today/book-review-openjdk-migration-for-dummies-2/</link><pubDate>Fri, 01 Sep 2023 07:42:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-openjdk-migration-for-dummies-2/</guid><description>&lt;p&gt;&lt;strong&gt;In the past couple of years, there have been quite a lot of Oracle Java licensing changes which can have quite the impact on how much using the Oracle JDK will cost your organization, especially since under the latest terms it&amp;rsquo;s quite easy to have a &amp;ldquo;rogue&amp;rdquo; install cost you quite a bit.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is where the new &lt;strong&gt;free&lt;/strong&gt; book &lt;a href="https://www.azul.com/openjdk-migration-for-dummies/" target="_blank" rel="noopener noreferrer"&gt;OpenJDK Migration for Dummies&lt;/a&gt;
 by &lt;a href="https://www.linkedin.com/in/siritter/" target="_blank" rel="noopener noreferrer"&gt;Simon Ritter&lt;/a&gt;
 offers a very useful resource.&lt;/p&gt;</description></item><item><title>It's 2AM Do you Know What Your Code is Doing?</title><link>https://foojayio.github.io/website/today/its-2am-do-you-know-what-your-code-is-doing/</link><pubDate>Fri, 01 Sep 2023 06:53:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/its-2am-do-you-know-what-your-code-is-doing/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#observability-isnt-pillars"&gt;Observability isn&amp;rsquo;t Pillars&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#tracing-and-opentelemetry"&gt;Tracing and OpenTelemetry&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#background-developer-observability"&gt;Background Developer Observability&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#enough-exposition"&gt;Enough Exposition&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#how-does-this-help-at-2am"&gt;How Does This Help at 2AM?&lt;/a&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;Once we press the merge button, that code is no longer our responsibility. If it performs sub-optimally or has a bug, it is now the problem of the DevOps team, the SRE, etc. Unfortunately, those teams work with a different toolset. If my code uses up too much RAM, they will increase RAM. When the code runs slower, they will increase CPU. In case the code crashes, they will increase concurrent instances.&lt;/p&gt;</description></item><item><title>JavaFX Links of August 2023</title><link>https://foojayio.github.io/website/today/javafx-links-of-august-2023/</link><pubDate>Thu, 31 Aug 2023 15:42:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-august-2023/</guid><description>&lt;p&gt;I&amp;rsquo;ve taken a holiday this month, so probably missed a lot of the amazing JavaFX news, but still some things caught my attention and you can find them in this LinksOfTheMonth overview.&lt;/p&gt;
&lt;p&gt;But the most essential and thrilling news is the release of the new version of &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
! A complete new home for &amp;ldquo;all things JavaFX&amp;rdquo; thanks to the amazing work of a whole &lt;a href="https://www.jfx-central.com/team" target="_blank" rel="noopener noreferrer"&gt;team of JavaFX enthousiast&lt;/a&gt;
. Indeed, yes, it&amp;rsquo;s a website but actually a JavaFX application, so you can also run it as a desktop app. And what&amp;rsquo;s even more important&amp;hellip; the &lt;a href="https://github.com/dlemmermann/jfxcentral2" target="_blank" rel="noopener noreferrer"&gt;full sources are available on GitHub&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Azul Enhances ReadyNow to Solve Java’s Warmup &amp; Cloud Costs</title><link>https://foojayio.github.io/website/today/azul-enhances-readynow-to-solve-javas-warmup-problem-simplify-operations-and-optimize-cloud-costs/</link><pubDate>Wed, 30 Aug 2023 21:30:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/azul-enhances-readynow-to-solve-javas-warmup-problem-simplify-operations-and-optimize-cloud-costs/</guid><description>&lt;ul&gt;
&lt;li&gt;Azul Platform Prime&amp;rsquo;s ReadyNow technology continuously learns from application usage across fleets of Java Virtual Machines (JVMs) and automatically selects the best warmup optimization patterns.&lt;/li&gt;
&lt;li&gt;ReadyNow Orchestrator delivers the highest possible optimized code speed at warmup while making deployment easier for containerized Java workloads and CI/CD pipelines, and requires no changes to Java applications.&lt;/li&gt;
&lt;li&gt;The combination of ReadyNow and ReadyNow Orchestrator allow Azul Platform Prime customers to optimize cloud costs by improving utilization levels, reducing compute instances needed while maintaining throughput and response SLAs, and more efficiently leverage cloud elasticity.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;SUNNYVALE, Calif. &amp;mdash; August 30, 2023 &amp;mdash;&lt;/strong&gt; &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
, the only company 100% focused on Java, today announced ReadyNow Orchestrator(RNO), a new feature of Azul Platform Prime powered by ReadyNow technology that slashes warmup time for Java applications, enabling significant improvements to operational efficiencies and optimization of cloud costs. Available now, ReadyNow Orchestrator requires no changes to Java applications and is included at no additional charge for Azul Platform Prime customers.&lt;/p&gt;</description></item><item><title>Spring 6.1 - RestClient</title><link>https://foojayio.github.io/website/today/spring-6-1-restclient/</link><pubDate>Wed, 30 Aug 2023 16:23:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-6-1-restclient/</guid><description>&lt;p&gt;As you might have read in this &lt;a href="https://spring.io/blog/2023/07/13/new-in-spring-6-1-restclient" target="_blank" rel="noopener noreferrer"&gt;blogpost&lt;/a&gt;
, Spring is introducing a &lt;code&gt;RestClient&lt;/code&gt; in Spring 6.1 to interact with HTTP backends.&lt;/p&gt;
&lt;p&gt;Now some of you might be wondering as to the why, given we already have a plethora of other options such as &lt;code&gt;RestTemplate&lt;/code&gt;, &lt;code&gt;WebClient&lt;/code&gt;, &lt;code&gt;HttpUrlConnection&lt;/code&gt;, &amp;hellip;​&lt;/p&gt;
&lt;p&gt;As we can see on the &lt;a href="https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html" target="_blank" rel="noopener noreferrer"&gt;javadoc&lt;/a&gt;
 page &lt;code&gt;RestTemplate&lt;/code&gt; got quite massive over time.&lt;/p&gt;
&lt;p&gt;The Spring team drew lessons from this, and the reactive &lt;code&gt;WebClient&lt;/code&gt; was created with a fluent interface.&lt;/p&gt;</description></item><item><title>Spring Boot Configuration for Docker Images with Azul Zulu</title><link>https://foojayio.github.io/website/today/configuring-spring-boot-to-build-a-docker-image-with-azul-zulu-and-debug-options/</link><pubDate>Wed, 30 Aug 2023 16:14:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/configuring-spring-boot-to-build-a-docker-image-with-azul-zulu-and-debug-options/</guid><description>&lt;p&gt;&lt;em&gt;The Spring Boot Maven Plugin makes creating a Docker image from your application very easy! In this article, we give you some extra tips and examples for configuring Spring Boot to define the Java runtime used in such a Spring Boot Docker image and explain how to add additional environmental options to ease debugging.&lt;/em&gt;
&lt;img src="https://foojayio.github.io/website/today/configuring-spring-boot-to-build-a-docker-image-with-azul-zulu-and-debug-options/azul-zulu-springboot-docker-1024x400.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3 id="h3-0-for-this-post-i-got-the-help-of-dashaun-carter-spring-developer-advocate-who-immediately-jumped-in-when-i-raised-some-questions-about-these-configuration-options-thanks-dashaun"&gt;For this post, I got the help of &lt;a href="https://twitter.com/dashaun" target="_blank" rel="noopener noreferrer"&gt;DaShaun Carter&lt;/a&gt;
, Spring Developer Advocate, who immediately jumped in when I raised some questions about these configuration options. Thanks, DaShaun!&lt;/h3&gt;
&lt;/blockquote&gt;
&lt;h2 id="h-spring-boot-petclinic-project"&gt;Spring Boot Petclinic Project&lt;/h2&gt;
&lt;p&gt;To illustrate our approach, we&amp;rsquo;ll use the Spring Boot Petclinic project, a Spring Boot application built using Maven or Gradle, to demonstrate how a Spring Boot project is set up fully and how the code is structured and must be packaged.&lt;/p&gt;</description></item><item><title>Testable Code: A Journey Through Consideration and Refactoring</title><link>https://foojayio.github.io/website/today/writing-testable-code-a-journey-through-consideration-and-refactoring/</link><pubDate>Wed, 30 Aug 2023 06:47:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/writing-testable-code-a-journey-through-consideration-and-refactoring/</guid><description>&lt;p&gt;&lt;strong&gt;In an ideal world, every piece of code we write would be easily testable, clearly understood, and perfectly maintainable. However, reality often presents us with complex problems and solutions that aren&amp;rsquo;t always straightforward. Writing testable code sometimes requires a thoughtful approach, deep consideration of the use cases, and even refactoring to ensure that the code is robust and fully tested.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-the-challenge-of-testing"&gt;The Challenge of Testing&lt;/h2&gt;
&lt;p&gt;Imagine a scenario where you need to create an Amazon S3 client based on different credential providers. At first glance, the implementation might seem simple. However, when it comes to writing unit tests for this code, challenges arise.&lt;/p&gt;</description></item><item><title>Three Key Elements for Your Flaky Test Remediation Approach</title><link>https://foojayio.github.io/website/today/three-key-elements-to-incorporate-into-your-flaky-test-remediation-approach/</link><pubDate>Tue, 29 Aug 2023 13:32:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/three-key-elements-to-incorporate-into-your-flaky-test-remediation-approach/</guid><description>&lt;p&gt;&lt;strong&gt;Flaky tests pose substantial challenges due to their unpredictable and inconsistent nature. Effectively addressing them requires a multi-faceted approach that involves the effective integration of strategy, process and resource alignment, and a deep understanding of flaky test causality. This post will walk you through this approach.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note! This post is part of a three-part series. If you&amp;rsquo;re not sure it&amp;rsquo;s worth remediating flaky tests, read &lt;a href="https://foojayio.github.io/website/today/seven-reasons-you-should-not-ignore-flaky-tests/"&gt;Part 1: Seven Reasons You Should Not Ignore Flaky Tests&lt;/a&gt;
. Read Part 2 to understand the keys to identifying and tracking flaky tests, called 5 Ways to Use Gradle Enterprise to Identify and Manage Flaky Tests. Now, let&amp;rsquo;s explore my multi-faceted approach to fixing flaky tests.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Create a Spring Boot Application to Retrieve Data from Evernote</title><link>https://foojayio.github.io/website/today/how-to-create-a-spring-boot-application-to-retrieve-data-from-evernote/</link><pubDate>Mon, 28 Aug 2023 11:06:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-create-a-spring-boot-application-to-retrieve-data-from-evernote/</guid><description>&lt;p&gt;I recently started work on a joint project with my colleague, &lt;a href="https://twitter.com/jalakoo" target="_blank" rel="noopener noreferrer"&gt;Jason Koo&lt;/a&gt;
. For this project, we want to import data from second brain apps (such as Obsidian, Notion, Evernote, etc) to Neo4j.&lt;/p&gt;
&lt;p&gt;Since I use Evernote, I was tasked with getting my notes out of Evernote.&lt;/p&gt;
&lt;p&gt;In this article, I will show you how to use the Evernote API and SDK in a Spring Boot application to retrieve data from Evernote.&lt;/p&gt;</description></item><item><title>Spring Boot: local development enhancements, let's compose!</title><link>https://foojayio.github.io/website/today/spring-boot-local-development-enhancements-lets-compose/</link><pubDate>Fri, 25 Aug 2023 11:16:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-local-development-enhancements-lets-compose/</guid><description>&lt;p&gt;Quite often when we are developing an application we need external services such as rabbitMQ, Kafka, etc.&lt;/p&gt;
&lt;p&gt;When you are developing locally, you are quite likely using a docker-compose file to start these up, and I am certainly (hopefully) not the only one that has forgotten at least once to start these instances up.&lt;/p&gt;
&lt;p&gt;And maybe you are even already using Testcontainers for your testing.&lt;/p&gt;
&lt;p&gt;Luckily, Spring Boot 3.1 introduced some nice improvements to make our lives a bit easier.&lt;/p&gt;</description></item><item><title>Well Worth My Time: "OpenJDK Migration for Dummies"</title><link>https://foojayio.github.io/website/today/well-worth-my-time-openjdk-migration-for-dummies/</link><pubDate>Thu, 24 Aug 2023 07:51:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/well-worth-my-time-openjdk-migration-for-dummies/</guid><description>&lt;p&gt;I&amp;rsquo;ve just read the (free) &lt;a href="https://www.azul.com/openjdk-migration-for-dummies/" target="_blank" rel="noopener noreferrer"&gt;OpenJDK Migration for Dummies book&lt;/a&gt;
. It was well worth my time!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I first started using Java in 1998, so I&amp;rsquo;ve got a long history with it and feel very comfortable with the language itself. However, the licensing changes and proliferation of OpenJDK distributions are much more recent, and those aspects can be a bit confusing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The book is obviously written by a vendor, but it&amp;rsquo;s very honest about that. It does a good job of establishing the motivation for using OpenJDK, providing actionable steps for how to pursue that migration, and presenting meaningful information that a business should consider when selecting an OpenJDK vendor.&lt;/p&gt;</description></item><item><title>Debugging as a Process of Isolating Assumptions</title><link>https://foojayio.github.io/website/today/debugging-as-a-process-of-isolating-assumptions/</link><pubDate>Wed, 23 Aug 2023 08:16:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-as-a-process-of-isolating-assumptions/</guid><description>&lt;p&gt;&lt;strong&gt;Debugging is an integral part of any software development process.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It&amp;rsquo;s a systematic hunt for bugs and mistakes that may be hidden in the intricate lines of your code.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Much like a hunter and its prey, it requires a precise method and a set of specific tools.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Let&amp;rsquo;s delve deeper into the fascinating process of isolating assumptions to effectively debug your code.&lt;/strong&gt;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/Qw6coM798AE?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;Before I proceed with this week&amp;rsquo;s post if you have friends who are learning to code&amp;hellip; I &lt;a href="https://www.amazon.com/Java-Basics-Practical-Introduction-Full-Stack-ebook/dp/B0CCPGZ8W1/" target="_blank" rel="noopener noreferrer"&gt;published a new book for Java beginners&lt;/a&gt;
 with no prior knowledge (for learning programming from scratch). Each chapter also has an accompanying video and I think there&amp;rsquo;s no book quite like it for beginners. I would appreciate spreading the word on this.&lt;/p&gt;</description></item><item><title>Exploring File Storage Solutions in Spring Boot</title><link>https://foojayio.github.io/website/today/exploring-file-storage-solutions-in-spring-boot-database-local-systems-cloud-services-and-beyond/</link><pubDate>Wed, 23 Aug 2023 08:07:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-file-storage-solutions-in-spring-boot-database-local-systems-cloud-services-and-beyond/</guid><description>&lt;p&gt;&lt;strong&gt;When building a web application, managing file uploads properly is a common requirement. After receiving, files can be stored in several places: in a file system, in a database or, more commonly, in a cloud storage service.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this article, we will cover how to store files in a database using Spring Boot and discuss some alternatives.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Recently, a fellow developer who I helped in past reached out to me on Slack seeking assistance with handling file uploads in a Spring Boot application. After providing some guidance, I decided to compile this article to assist others facing similar challenges.&lt;/p&gt;</description></item><item><title>Introduction to the Tower Library</title><link>https://foojayio.github.io/website/today/introduction-tower/</link><pubDate>Tue, 22 Aug 2023 08:28:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-tower/</guid><description>&lt;p&gt;One of the components of my &lt;a href="https://github.com/nfrankel/opentelemetry-tracing" target="_blank" rel="noopener noreferrer"&gt;OpenTelemetry demo&lt;/a&gt;
 is a Rust application built with the Axum web framework. In its description, &lt;code&gt;axum&lt;/code&gt; mentions:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;axum&lt;/code&gt; doesn&amp;rsquo;t have its own middleware system but instead uses &lt;code&gt;tower::Service&lt;/code&gt;. This means &lt;code&gt;axum&lt;/code&gt; gets timeouts, tracing, compression, authorization, and more, for free. It also enables you to share middleware with applications written using &lt;code&gt;hyper&lt;/code&gt; or &lt;code&gt;tonic&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&amp;ndash; &lt;a href="https://github.com/tokio-rs/axum" target="_blank" rel="noopener noreferrer"&gt;axum README&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;So far, I was happy to let this cryptic explanation lurk in the corner of my mind, but today is the day I want to understand what it means. Like many others, this post aims to explain to me and others how to do this.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Local Development Made Simpler with Testcontainers Desktop app</title><link>https://foojayio.github.io/website/today/testing-and-local-development-made-simpler-with-testcontainers-desktop-app/</link><pubDate>Mon, 21 Aug 2023 07:52:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/testing-and-local-development-made-simpler-with-testcontainers-desktop-app/</guid><description>&lt;p&gt;&lt;strong&gt;Being able to release new features quickly is a must-have capability in today&amp;rsquo;s competitive world. In order to release your software quickly and often you should have CI/CD infrastructure that can automatically build, test, and release our software with minimal to no human intervention. A comprehensive automated test suite is the key to release your software with confidence.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://testcontainers.com" target="_blank" rel="noopener noreferrer"&gt;Testcontainers&lt;/a&gt;
 libraries help you to write integration tests using the real dependencies with the ease of writing unit tests. Let us take a quick look at how Testcontainers enables you to write tests that give confidence in your software.&lt;/p&gt;</description></item><item><title>AI-based Images generation with Quarkus and OpenAI DALL.E</title><link>https://foojayio.github.io/website/today/images-generation-with-quarkus-and-openai/</link><pubDate>Mon, 21 Aug 2023 07:38:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/images-generation-with-quarkus-and-openai/</guid><description>&lt;p&gt;&lt;strong&gt;In this article, we explore how to integrate OpenAI API with Quarkus. We will create a Quarkus application using the new REST Client Reactive to invoke the OpenAI DALL.E API for images generation.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-openai-api-overview"&gt;OpenAI API Overview&lt;/h2&gt;
&lt;p&gt;Before jumping into the code, let&amp;rsquo;s explore the OpenAI &lt;a href="https://platform.openai.com/docs/api-reference/images/create" target="_blank" rel="noopener noreferrer"&gt;Create Image&lt;/a&gt;
 API and how it works.&lt;/p&gt;
&lt;h3 id="h3-1-create-image-request"&gt;Create Image Request&lt;/h3&gt;
&lt;p&gt;The body request is made of the following parameters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;prompt&lt;/strong&gt;: the only required parameter is the description of the desired image (max 1000 characters)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;n&lt;/strong&gt;: number of desired images (from 1 to 10)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;size&lt;/strong&gt; : the size of a generated image (default 1024x1024, also admitted 256x256, 512x512)&lt;br&gt;
other parameters are:&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;response_format&lt;/strong&gt;: to specify the response image format (default url, also admitted b64_json)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;user&lt;/strong&gt;: identifier to track user activities.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To authenticate with the API, we&amp;rsquo;ll generate an &lt;a href="https://platform.openai.com/account/api-keys" target="_blank" rel="noopener noreferrer"&gt;API key&lt;/a&gt;
. We&amp;rsquo;ll set this key in the Authorization header while calling the API.&lt;/p&gt;</description></item><item><title>Is OpenJDK Just a Drop-In Replacement?</title><link>https://foojayio.github.io/website/today/is-openjdk-just-a-drop-in-replacement/</link><pubDate>Fri, 18 Aug 2023 07:58:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/is-openjdk-just-a-drop-in-replacement/</guid><description>&lt;p&gt;&lt;strong&gt;I don&amp;rsquo;t know anyone who is still using the Oracle JDK. It has been my recommendation for quite a while to just switch to an OpenJDK distribution as they are roughly drop-in replacements for Oracle&amp;rsquo;s official JDK. I&amp;rsquo;ve repeated that advice quite frequently but I guess I glossed over a lot of details that might be insignificant for hackers but can become a pretty big deal in an enterprise setting.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Taming the Bias: Unbiased Safepoint-Based Stack Walking</title><link>https://foojayio.github.io/website/today/taming-the-bias-unbiased-safepoint-based-stack-walking/</link><pubDate>Thu, 17 Aug 2023 14:00:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/taming-the-bias-unbiased-safepoint-based-stack-walking/</guid><description>&lt;p&gt;&lt;strong&gt;Walking only at safepoints has advantages. The main one is that you aren&amp;rsquo;t walking the stack in a signal handler but synchronously to the executed program. Therefore you can allocate memory, acquire locks and rematerialize virtual thread / Loom frames. The latter is significant because virtual threads are &lt;em&gt;the&lt;/em&gt; new Java feature that cannot support using signal-handler-based APIs like AsyncGetCallTrace.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article is based on the ideas of Erik Österlund, and the second one is related to these new ideas. The first one is &lt;a href="https://mostlynerdless.de/blog/2023/08/07/asyncgetcalltrace-reworked-frame-by-frame-with-an-iterative-touch/" target="_blank" rel="noopener noreferrer"&gt;AsyncGetCallTrace Reworked: Frame by Frame with an Iterative Touch!&lt;/a&gt;
, which you should read before continuing with this post. For a refresher on safepoints, please read &lt;a href="https://mostlynerdless.de/blog/2023/07/31/the-inner-workings-of-safepoints/" target="_blank" rel="noopener noreferrer"&gt;The Inner Workings of Safepoints&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Thread-Safe Counter in Java: A Comprehensive Guide</title><link>https://foojayio.github.io/website/today/thread-safe-counter-in-java-a-comprehensive-guide/</link><pubDate>Thu, 17 Aug 2023 06:59:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/thread-safe-counter-in-java-a-comprehensive-guide/</guid><description>&lt;p&gt;&lt;strong&gt;In this tutorial, we will explore the concept of thread safety in Java, specifically focusing on a simple counter.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We will start by understanding why a basic counter is not safe for multiple threads; then, we will progressively enhance its thread safety using different techniques such as synchronization, locks, Unsafe, VarHandle, and finally, AtomicInteger.&lt;/p&gt;
&lt;p&gt;We will be referencing the code from this &lt;a href="https://github.com/rokon12/counter" target="_blank" rel="noopener noreferrer"&gt;repository&lt;/a&gt;
 throughout the tutorial.&lt;/p&gt;
&lt;p&gt;Before we dive into the different implementations, let&amp;rsquo;s define a Counter interface that all our counter classes will implement.&lt;/p&gt;</description></item><item><title>Building High-Performance Java Microservices with EDA</title><link>https://foojayio.github.io/website/today/6-considerations-when-building-high-performance-java-microservices-with-eda/</link><pubDate>Wed, 16 Aug 2023 21:34:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/6-considerations-when-building-high-performance-java-microservices-with-eda/</guid><description>&lt;p&gt;&lt;strong&gt;Event-Driven Architecture (EDA) is a design principle focused on the creation, detection, and reaction to events.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Renowned for its resilience and low latency, EDA is a reliable choice for developing robust, high-performing microservices.&lt;/p&gt;
&lt;p&gt;Moreover, this method can be helpful in improving productivity and making the process of cloud migration smoother.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/6-considerations-when-building-high-performance-java-microservices-with-eda/Screenshot-2023-08-10-at-5.13.36-PM-1024x607.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In this article we will outline 6 key considerations and tactics for developing such services.&lt;/p&gt;
&lt;h3 id="h3-0-1-crafting-event-based-microservices"&gt;1) Crafting Event-Based Microservices&lt;/h3&gt;
&lt;p&gt;Within EDA, microservices interact with each other through events. An event is simply an immutable indication that something has happened. Microservices register their interest in a subset of events and perform their processing by reacting to these events when they occur. On completion of handling of an event, microservices will usually post one or more events reflecting the result of this processing, which will trigger further downstream microservices.&lt;/p&gt;</description></item><item><title>Pitest: Do You Test Your Tests?</title><link>https://foojayio.github.io/website/today/pitest-do-you-test-your-tests/</link><pubDate>Tue, 15 Aug 2023 14:32:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/pitest-do-you-test-your-tests/</guid><description>&lt;h2 id="_what_is_pitest"&gt;What is Pitest?&lt;/h2&gt;
&lt;p&gt;Pitest is a library that helps us do mutation testing.&lt;/p&gt;
&lt;p&gt;Mutation testing is a process in which random variations of the code under test are generated.&lt;/p&gt;
&lt;p&gt;Hence, our tests will run against variants of the code that we&amp;rsquo;re intending to test.&lt;/p&gt;
&lt;p&gt;If the test fails, the mutation is killed, if it still passes it lives. So in subsequent runs, you will see this mutation once again. Surviving mutations may indicate issues with our test set since application code changes should lead to different end results, and thus to failing tests. So to further reduce the survivors we will need to enhance our test cases and/or add extra.&lt;/p&gt;</description></item><item><title>My Final Take on Gradle (vs. Maven)</title><link>https://foojayio.github.io/website/today/my-final-take-on-gradle-vs-maven/</link><pubDate>Tue, 15 Aug 2023 08:37:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/my-final-take-on-gradle-vs-maven/</guid><description>&lt;p&gt;&lt;strong&gt;I tweet technical content that I consider interesting, but the funny tweets are the ones that get the most engagement.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I attended the JavaLand conference in March, stumbled upon the Gradle booth, and found this gem:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/nicolas_frankel/status/1638549568957861889" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/my-final-take-on-gradle-vs-maven/Screenshot-2023-08-05-at-10.03.59-754x1024.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Of course, at some point, a fanboy hijacked the thread and claimed the so-called superiority of Gradle. In this post, I&amp;rsquo;d like to shed some light on my stance, so I can direct people to it instead of debunking the same &amp;ldquo;reasoning&amp;rdquo; repeatedly.&lt;/p&gt;</description></item><item><title>Can't Reproduce a Bug?</title><link>https://foojayio.github.io/website/today/cant-reproduce-a-bug/</link><pubDate>Mon, 14 Aug 2023 07:09:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/cant-reproduce-a-bug/</guid><description>&lt;p&gt;The phrase &amp;ldquo;it works on my machine&amp;rdquo; can be a source of amusement, but it also represents a prevailing attitude in the world of development - an attitude that often forces users to prove bugs before we&amp;rsquo;re willing to investigate them. But in reality, we need to take responsibility and chase the issue, regardless of where it takes us.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/qGasKz-YsiU?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;h2 id="h2-0-a-two-pronged-approach-to-bug-solving"&gt;A Two-Pronged Approach to Bug Solving&lt;/h2&gt;
&lt;p&gt;Solving bugs requires a two-pronged approach. Initially, we want to replicate the environment where the issue is occurring; it could be something specific to the user&amp;rsquo;s machine. Alternatively, we may need to resort to remote debugging or use logs from the user&amp;rsquo;s machine, asking them to perform certain actions on our behalf.&lt;/p&gt;</description></item><item><title>Pi4J Operating System for Java development on Raspberry Pi</title><link>https://foojayio.github.io/website/today/pi4j-operating-system-for-java-development-on-raspberry-pi/</link><pubDate>Fri, 11 Aug 2023 10:19:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/pi4j-operating-system-for-java-development-on-raspberry-pi/</guid><description>&lt;p&gt;&lt;strong&gt;Yes, the Raspberry Pi Operating System is awesome! But the Pi4J project made it even more awesome by adding &amp;ldquo;goodies&amp;rdquo; for Java developers! Pi4J OS is not yet another OS, but the official Raspberry Pi OS, with additional tools and preconfigurations to make it the ideal OS for any Java and JavaFX developer who wants to use a Raspberry Pi.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The project is shared on &lt;a href="https://github.com/Pi4J/pi4j-os" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
 and documented on &lt;a href="https://pi4j.com/pi4j-os/" target="_blank" rel="noopener noreferrer"&gt;the Pi4J website&lt;/a&gt;
. The zip-compressed archives of released versions can be downloaded from &lt;a href="https://pi4j-download.com" target="_blank" rel="noopener noreferrer"&gt;pi4j-download.com&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Working with GitLab Merge Requests in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/working-with-gitlab-merge-requests-in-intellij-idea/</link><pubDate>Thu, 10 Aug 2023 09:57:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/working-with-gitlab-merge-requests-in-intellij-idea/</guid><description>&lt;p&gt;&lt;strong&gt;In this tutorial, we will take a look at working with GitLab Merge Requests inside IntelliJ IDEA.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When reviewing Merge Requests in a web interface, we don&amp;rsquo;t have the same support that our IDE gives us, like syntax highlighting and the context within which the code was written.&lt;/p&gt;
&lt;p&gt;IntelliJ IDEA has support for reviewing and merging GitLab Merge Requests. These features are available if the IntelliJ IDEA project has a remote that points to GitLab.&lt;/p&gt;</description></item><item><title>AsyncGetCallTrace Reworked: Frame by Frame Iterative Touch!</title><link>https://foojayio.github.io/website/today/asyncgetcalltrace-reworked-frame-by-frame-with-an-iterative-touch/</link><pubDate>Thu, 10 Aug 2023 09:43:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/asyncgetcalltrace-reworked-frame-by-frame-with-an-iterative-touch/</guid><description>&lt;p&gt;&lt;strong&gt;AsyncGetCallTrace is an API to obtain the top &lt;code&gt;n&lt;/code&gt; Java frames of a thread asynchronously in a signal handler.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This API is widely used but has its problems, see JEP 435 &lt;a href="https://foojayio.github.io/website/today/author/johannes-bechberger/"&gt;and my various articles on Foojay.io&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;My original approach with my JEP proposal was to build a replacement of the API, which could be used as a drop-in for AsyncGetCallTrace. Still a single method that populates a preallocated frame list:&lt;br&gt;
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/08/asgct_asgst-2000x1125.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Observing Java on Docker Compose Using OpenTelemetry</title><link>https://foojayio.github.io/website/today/observing-java-applications-running-via-docker-compose-using-opentelemetry/</link><pubDate>Wed, 09 Aug 2023 21:51:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/observing-java-applications-running-via-docker-compose-using-opentelemetry/</guid><description>&lt;h2 id="h2-0-an-easy-non-obtrusive-way-to-collect-data-about-your-dockerized-app-without-changing-your-existing-docker-compose-yml-or-docker-files"&gt;An easy non-obtrusive way to collect data about your dockerized app without changing your existing docker-compose.yml or docker files!&lt;/h2&gt;
&lt;p&gt;This is just a neat trick that I discovered when I was trying to collect &lt;a href="https://opentelemetry.io/docs/instrumentation/java/automatic/" target="_blank" rel="noopener noreferrer"&gt;OTEL&lt;/a&gt;
 data about my application which was running via Docker Compose. I was trying to understand more about the code using tracing. However, I definitely didn&amp;rsquo;t want to modify any of the code or deployment-related artifacts, or risk checking in any changes by mistake.&lt;/p&gt;</description></item><item><title>Sealed Interfaces &amp; Pattern Matching: Java's Modern Capabilities</title><link>https://foojayio.github.io/website/today/sealed-interfaces-and-pattern-matching-a-quick-dive-into-javas-modern-capabilities/</link><pubDate>Wed, 09 Aug 2023 07:01:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/sealed-interfaces-and-pattern-matching-a-quick-dive-into-javas-modern-capabilities/</guid><description>&lt;p&gt;&lt;strong&gt;Sealed classes in Java are a new feature that provides a way to restrict the classes that can inherit from a superclass or extend an interface. This new language feature enhances the encapsulation and provides more control to developers over their codebase.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this tutorial, we will explore sealed classes, how to use them to find all subclasses, and how to apply pattern matching in a practical context.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s start with a basic interface definition named &lt;code&gt;Shape&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>OpenRewrite: we all grow older, but do our projects really have to?</title><link>https://foojayio.github.io/website/today/we-all-grow-older-but-do-our-projects-really-have-to-openrewrite/</link><pubDate>Tue, 08 Aug 2023 09:24:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/we-all-grow-older-but-do-our-projects-really-have-to-openrewrite/</guid><description>&lt;p&gt;&lt;strong&gt;We have all likely worked on a project, that has grown quite &amp;ldquo;mature&amp;rdquo; over time, who knows we might even have forgotten to keep our dependencies up to date? Mayhap we finally got the green light to move from JDK 8 to 17?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This will quite likely entail a lot of library updates, and maybe some interesting changes (cough javax =&amp;gt; jakarta).&lt;/p&gt;
&lt;p&gt;This is where a rewrite tool like OpenRewrite can come in handy, and I would like to walk through some of the options of this tool in this article.&lt;/p&gt;</description></item><item><title>Starting Apache Kafka on Java 8, Win 10</title><link>https://foojayio.github.io/website/today/starting-apache-kafka-java-producer-consumer-windows-10/</link><pubDate>Mon, 07 Aug 2023 09:39:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/starting-apache-kafka-java-producer-consumer-windows-10/</guid><description>&lt;p&gt;This is part 2 of a two part series on Starting Apache Kafka Server, Configuring Kafka Topic, and Creating a Core Java Based Kafka Consumer, as also a Core Java Based Kafka Producer.&lt;/p&gt;
&lt;p&gt;All this is demonstrated in step-by-step examples. All of this is for Java v8.0, Apache Kafka v3.4 on Windows 10. &lt;a href="https://foojayio.github.io/website/today/starting-apache-kafka-on-windows-10-kafka-v3-4/"&gt;Part 1&lt;/a&gt;
 focused on Kafka Consumer and Kafka Producer from the Command Line. This article focuses on the Core Java counterparts. It is important that the reader reads part 1 and completes the example so that the reader has a basic foundation in Kafka.&lt;/p&gt;</description></item><item><title>Book Review: "OpenJDK Migration for Dummies"</title><link>https://foojayio.github.io/website/today/book-review-openjdk-migration-for-dummies/</link><pubDate>Fri, 04 Aug 2023 09:02:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-openjdk-migration-for-dummies/</guid><description>&lt;p&gt;&lt;strong&gt;The subject of Java licensing and OpenJDK migration is complex and vital to many software engineers.&lt;/strong&gt; &lt;strong&gt;I am no different. It&amp;rsquo;s a topic often shrouded in legal jargon and technicalities, making it difficult to approach.&lt;/strong&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&amp;ldquo;OpenJDK Migration for Dummies&amp;rdquo; by&lt;a href="https://www.linkedin.com/in/siritter/" target="_blank" rel="noopener noreferrer"&gt;Simon Ritter&lt;/a&gt;
 offers a fresh perspective, breaking down these challenges into digestible segments. (&lt;a href="https://www.azul.com/openjdk-migration-for-dummies/" target="_blank" rel="noopener noreferrer"&gt;Get it for free here.&lt;/a&gt;
)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.azul.com/openjdk-migration-for-dummies/" target="_blank" rel="noopener noreferrer"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;img decoding="async" class="alignright wp-image-101738" src="dummies-373x510.png" alt="" width="270" height="369"&gt;
&lt;p&gt;](&lt;a href="https://www.azul.com/openjdk-migration-for-dummies/" target="_blank" rel="noopener noreferrer"&gt;https://www.azul.com/openjdk-migration-for-dummies/&lt;/a&gt;
)&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;The book directly speaks to my core expertise in Java, providing clarity and guidance.&lt;/p&gt;</description></item><item><title>Temperature, humidity, and pressure in BME280 Sensors with Java</title><link>https://foojayio.github.io/website/today/reading-the-temperature-humidity-and-pressure-from-a-bme280-sensor-with-java-pi4j-i2c-spi-and-jbang/</link><pubDate>Thu, 03 Aug 2023 07:16:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/reading-the-temperature-humidity-and-pressure-from-a-bme280-sensor-with-java-pi4j-i2c-spi-and-jbang/</guid><description>&lt;p&gt;To make it as easy as possible to get started with Java on the Raspberry Pi to interact with electronic components, I started a &lt;a href="https://pi4j.com/examples/jbang/" target="_blank" rel="noopener noreferrer"&gt;new section on the Pi4J website with JBang examples&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, I want to show you how you can read the temperature, humidity, and pressure from a BME280 Sensor.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-what-is-used"&gt;What Is Used?&lt;/h2&gt;
&lt;p&gt;As explained on the websites of each project:&lt;/p&gt;
&lt;h3 id="h3-1-pi4j"&gt;Pi4J&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;A friendly object-oriented I/O API and implementation libraries for Java Programmers to access the full I/O capabilities of the Raspberry Pi platform. This project abstracts the low-level native integration and interrupt monitoring to enable Java programmers to focus on implementing their application business logic.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Preparing for JDK 21: A Comprehensive Overview of Key Features and Enhancements</title><link>https://foojayio.github.io/website/today/preparing-for-jdk-21-a-comprehensive-overview-of-key-features-and-enhancements/</link><pubDate>Wed, 02 Aug 2023 10:46:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/preparing-for-jdk-21-a-comprehensive-overview-of-key-features-and-enhancements/</guid><description>&lt;p&gt;&lt;strong&gt;As we inch closer to the release of JDK 21 in September (next month!), it&amp;rsquo;s crucial to familiarize ourselves with the transformative features and improvements this version is poised to bring to the Java ecosystem.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s embark on a comprehensive tour of the noteworthy changes and enhancements in JDK 21.&lt;/p&gt;
&lt;h2 id="h2-0-revising-the-balance-of-serviceability-and-performance-with-jep-451"&gt;Revising the Balance of Serviceability and Performance with JEP 451&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s begin with JEP 451, &amp;ldquo;Prepare to Disallow the Dynamic Loading of Agents.&amp;rdquo; Graduating to Completed status in preparation for JDK 21, this proposal doesn&amp;rsquo;t ban the dynamic loading of agents into a running JVM outright. Instead, it issues warnings when such loading happens, preparing the terrain for a future JDK release that will disallow such loading by default.&lt;/p&gt;</description></item><item><title>The Inner Workings of Safepoints</title><link>https://foojayio.github.io/website/today/the-inner-workings-of-safepoints/</link><pubDate>Wed, 02 Aug 2023 10:27:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-inner-workings-of-safepoints/</guid><description>&lt;p&gt;A Java thread in the JVM regularly checks whether it should do extra work besides the execution of the bytecode.&lt;/p&gt;
&lt;p&gt;This work is done during so-called safepoints. There are two types of safepoints: local and global.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;At thread-local safepoints, also known as thread-local handshakes, only the current thread does some work and is therefore blocked from executing the application.&lt;/li&gt;
&lt;li&gt;At global safepoints, all Java threads are blocked and do some work. At these safepoints, the state of the thread (thread-local safepoints) or the JVM (global safepoints) is fixed. This allows the JVM to do activities like method deoptimizations or stop-the-world garbage collections, where the amount of concurrency should be limited.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But this article isn&amp;rsquo;t about what (global) safepoints are. Fr this, please refer to Nitsan Wakart&amp;rsquo;s and Seetha Wenner&amp;rsquo;s articles on this topic and for thread-local safepoints, which are a relatively recent addition to JEP 312.&lt;/p&gt;</description></item><item><title>Book Review: "Designing APIs with Swagger and OpenAPI"</title><link>https://foojayio.github.io/website/today/book-review-designing-apis-with-swagger-and-openapi/</link><pubDate>Tue, 01 Aug 2023 18:21:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-designing-apis-with-swagger-and-openapi/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Disclaimer&lt;/em&gt;: this post includes affiliate links; I may receive compensation if you purchase the book from the different links provided in this post.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This review is about &lt;a href="https://www.manning.com/books/designing-apis-with-swagger-and-openapi?utm_source=frankel&amp;amp;amp;utm_medium=affiliate&amp;amp;amp;utm_campaign=affiliate&amp;amp;amp;a_aid=frankel" target="_blank" rel="noopener noreferrer"&gt;Designing APIs with Swagger and OpenAPI&lt;/a&gt;
 by Joshua S. Ponelat and Lukas L. Rosenstock from Manning.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m continuing my API journey by reading books, viewing relevant YouTube videos, and reading relevant s.&lt;/p&gt;
&lt;p&gt;Today is a book review.&lt;/p&gt;
&lt;h2 id="h2-0-facts"&gt;Facts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;21 chapters&lt;/li&gt;
&lt;li&gt;$38.39 (eBook)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-chapters"&gt;Chapters&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Part 1: Describing APIs
&lt;ol&gt;
&lt;li&gt;Introducing APIs and OpenAPI&lt;/li&gt;
&lt;li&gt;Getting set up to make API requests&lt;/li&gt;
&lt;li&gt;Our first taste of OpenAPI definitions&lt;/li&gt;
&lt;li&gt;Using Swagger Editor to write OpenAPI definitions&lt;/li&gt;
&lt;li&gt;Describing API responses&lt;/li&gt;
&lt;li&gt;Creating resources&lt;/li&gt;
&lt;li&gt;Adding authentication and authorization&lt;/li&gt;
&lt;li&gt;Preparing and hosting API documentation&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Part 2: Design first
9. Designing a web application
10. Creating an API design using OpenAPI
11. Building a change workflow around API design&amp;ndash;first
12. Implementing frontend code and reacting to changes
13. Building a backend with Node.js and Swagger Codegen
14. Integrating and releasing the web application&lt;/li&gt;
&lt;li&gt;Part 3: Extending APIs
15. Designing the next API iteration
16. Designing schemas with composition in OpenAPI
17. Scaling collection endpoints with filters and pagination
18. Supporting the unhappy path: Error handling with problem+json
19. Improving input validation with advanced JSON Schema
20. Versioning an API and handling breaking changes
21. The API prerelease checklist&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The book goes through designing a complete API via a demo project, the &lt;a href="https://github.com/designapis/farmstall" target="_blank" rel="noopener noreferrer"&gt;Farmstall API&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Book Announcement: "OpenJDK Migration Guide for Dummies"</title><link>https://foojayio.github.io/website/today/book-announcement-openjdk-migration-guide-for-dummies/</link><pubDate>Tue, 01 Aug 2023 16:15:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-announcement-openjdk-migration-guide-for-dummies/</guid><description>&lt;p&gt;For the fourth time in four years, Oracle has changed how it prices and licenses Java.&lt;/p&gt;
&lt;p&gt;Many organizations that rely on Java are switching from the Oracle JDK to OpenJDK and taking advantage of significant cost savings in the process.&lt;/p&gt;
&lt;p&gt;But if you have a variety of specialized Java applications, created at different times and running on different JDK versions, you may have some anxiety about making the switch.&lt;/p&gt;
&lt;p&gt;But, worry no more, Java Champion Simon Ritter has you covered in a new (free) book.&lt;/p&gt;</description></item><item><title>Java on Visual Studio Code – July 2023</title><link>https://foojayio.github.io/website/today/java-on-visual-studio-code-july-2023/</link><pubDate>Mon, 31 Jul 2023 07:11:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-visual-studio-code-july-2023/</guid><description>&lt;p&gt;Hi everyone, welcome to our July update for Visual Studio Code for Java!&lt;/p&gt;
&lt;p&gt;In this article, we are going to provide you an exciting update about our improved decompiler functionality.&lt;/p&gt;
&lt;p&gt;Additionally, we are going to do a deep-dive into our code completion.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s get started!&lt;/p&gt;
&lt;h3 id="h3-0-decompiler-support-upgrade"&gt;Decompiler Support Upgrade&lt;/h3&gt;
&lt;p&gt;Java decompiler is essential for understanding third-party libraries, debugging, and learning from well-written code. It helps the developer to reverse engineer compiled Java bytecode back into human-readable Java source code, enhancing the productivity and code comprehension.&lt;/p&gt;</description></item><item><title>Starting Apache Kafka v3.4 on Win 10</title><link>https://foojayio.github.io/website/today/starting-apache-kafka-on-windows-10-kafka-v3-4/</link><pubDate>Sat, 29 Jul 2023 07:43:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/starting-apache-kafka-on-windows-10-kafka-v3-4/</guid><description>&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;This is part one of a two part articles series on Running Apache Kafka Server, Configuring Kafka Topics, and Creating a Kafka Consumer and Kafka Producer.&lt;/p&gt;
&lt;p&gt;All this is demonstrated step-by-step example that works from the Command Line.&lt;/p&gt;
&lt;p&gt;All of this is for Apache Kafka v3.4 on Windows 10.&lt;/p&gt;
&lt;h3 id="h3-1-pre-requisites"&gt;Pre-Requisites&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Install Java ( v8.0 is used in this Example )&lt;/li&gt;
&lt;li&gt;Install Apache Kafka v3.4.0 from the Given Link&lt;/li&gt;
&lt;li&gt;Set Java Classpath &amp;gt; Set JAVA_HOME Correctly&lt;/li&gt;
&lt;li&gt;UnZIP/UnTAR Apache Kafka Downloaded in (2)&lt;/li&gt;
&lt;li&gt;Use a Text Editor like [ Notepad++ ] for Editing&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEhDK7xTGu-H4ZyFHWetkwEfKxIEjdMZuqYwimNrD-hIblKuBYqaW1Fttr8V_f19Q73z0MS09mNQYEhjuX8noY92cQ0dy4koVTnEmGSV76byHwHgM2uJ9ePcLSQYwFlcqBiWRI4QgXHE1nZYNsFPV3v0Nf2ozGkGc91DE3aKxOrDZV2IsPGlzFEKpNB8txrF" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>JavaFX Links of July 2023</title><link>https://foojayio.github.io/website/today/javafx-links-of-july-2023/</link><pubDate>Fri, 28 Jul 2023 07:50:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-july-2023/</guid><description>&lt;p&gt;Although I skipped a few weeks because of busy schedules, holiday interruptions, and too few hours in a day, there was still a lot to report in the two #LinksOfTheWeek that were published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 in July.&lt;/p&gt;
&lt;p&gt;Have fun reading and clicking, and see you end of August for one long #LinksOfTheMonth&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Early-Access Builds of JavaFX 21 are available from
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://jdk.java.net/javafx21/" target="_blank" rel="noopener noreferrer"&gt;jdk.java.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;gluonhq.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;JavaFX 21-ea is designed to work with JDK 21-ea, but it is known to work with JDK 17 and later versions&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;And JavaFX 22 Early-Access Builds, Build 1 is &lt;a href="https://jdk.java.net/javafx22/" target="_blank" rel="noopener noreferrer"&gt;also available&lt;/a&gt;
!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.esri.com/arcgis-blog/products/sdk-java/developers/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mark Baird&lt;/strong&gt; wrote a post to describe how the beta release of the ArcGIS Maps SDK for Java (with ARM Linux support) can be used for IoT data recording apps&lt;/a&gt;
. He uses a GPS Unit, Raspberry Pi, Pi4J, and JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/yosbits/status/1676159349377617922" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;yos&lt;/strong&gt; shared a video demonstrating a text editor engine implemented in #JavaFX (without WebView)&lt;/a&gt;
: &amp;ldquo;I&amp;rsquo;m testing loading and scrolling performance on a huge 5.4MB of source code. Scrolling is possible at 100FPS or more in the Apple M1 environment. This is one of Snowflower Controls.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Heshantk/status/1675453753863049216" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Heshan Thenura Kariyawasam&lt;/strong&gt; shared the sources of Serial Port Monitor&lt;/a&gt;
: &amp;ldquo;Monitoring data from a serial port with ease! This JavaFX app provides a user-friendly interface to set port and baud rate.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/martinpaljak/status/1677216011391565824" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Martin Paljak&lt;/strong&gt; is using NFC tags on PC&lt;/a&gt;
: &amp;ldquo;It should be as seamless as with mobile phones - tap&amp;amp;go. My small #unix-style #Java utility got a Friday 07.07 release, together with #javafx desktop tray. QR codes, tag emulation etc. If you use NFC tags, give it a look/try.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1683512470466437121" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; is working on a logic simulator&lt;/a&gt;
 with simple AND and NOT gates.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/tobiasbriones_/status/1680117927662501888" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tobias Briones&lt;/strong&gt; is working on an example application and blog&lt;/a&gt;
: &amp;ldquo;Building Slides from Screenshots App in JavaFX&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1679498134974595072" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; whipped up a Trinity easter egg for our DALLE demos&lt;/a&gt;
. Each time services request a DALLE image, it is copied to network share. Walle Dalle scans that shared directory. Each time a new image file is copied it is animated into a spot in the 3D ring.
&lt;ul&gt;
&lt;li&gt;And on Mastodon he shared more &lt;a href="https://foojay.social/@Birdasaur@jvm.social" target="_blank" rel="noopener noreferrer"&gt;Trinity screenshots&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@maehem/110743557437273863" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mark J Koch&lt;/strong&gt; is writing an application for EagleCAD schematics&lt;/a&gt;
: &amp;ldquo;Still lots of work to do (like view and print PC board files) but this is a wonderful milestone in my development of this app. Hope to open source it in about a month or two.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;His first experiments &lt;a href="https://mastodon.social/@maehem/110708951041214410" target="_blank" rel="noopener noreferrer"&gt;looked more like &amp;ldquo;generative art&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1676959035596341248" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt; made the FXGL version of zombie vs plants open source&lt;/a&gt;
 and shared the source code.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1677002981483347995" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt;: &amp;ldquo;Had a quick look, it&amp;rsquo;s awesome!&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WebFXProject/status/1676576239258042368" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WebFX&lt;/strong&gt; made FoodDice, created by &lt;strong&gt;OrangoMango&lt;/strong&gt; available online&lt;/a&gt;
. You can play it on &lt;a href="https://fooddice.webfx.dev/" target="_blank" rel="noopener noreferrer"&gt;fooddice.webfx.dev&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1679096264988696576" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; sees that FXGL is getting some interest on GitHub recently&lt;/a&gt;
.The next release (21) will match Java / JavaFX 21. What would you like to see supported?&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1678428149233639424" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; coded a game in 48h for the GMTK game jam&lt;/a&gt;
. If you get to the boss, let him know (It could be difficult).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/carldea/status/1675689706313379843" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt; is prototyping a new JavaFX-based Dockable windowing library&lt;/a&gt;
: &amp;ldquo;I&amp;rsquo;m getting the mechanics down (more on L&amp;amp;F / skins later).&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/hansolo_/status/1674799050225483779" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; extended his Charts library with a &amp;ldquo;WaferMap&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techhub.social/@gluonhq/110786277544214779" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gluon&lt;/strong&gt; is launching GluonFX&lt;/a&gt;
: &amp;ldquo;A growing set of JavaFX tools/components that we maintain on github, targeting all platforms. GPL license, free for developers. If you use them in a commercial product, we have licenses for that as well&amp;rdquo;. See &lt;a href="https://gluonhq.com/introducing-gluonfx/" target="_blank" rel="noopener noreferrer"&gt;gluonhq.com/introducing-gluonfx&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/johanvos/status/1684563837188739072" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; adds&lt;/a&gt;
: &amp;ldquo;Streamlining our software, adding consistency in approach, on github (e.g. badges, javadoc, maven approach), and licensing. Gradually, more of our software will be in this umbrella, and it will work on all platforms &amp;ndash; including mobile.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcast-video-books"&gt;Podcast, Video, Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.jetbrains.com/idea/2023/07/java-annotated-monthly-july-2023/" target="_blank" rel="noopener noreferrer"&gt;Jetbrains Java Annotated Monthly &amp;ndash; July 2023&lt;/a&gt;
 lists the &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-25/"&gt;&amp;ldquo;Foojay Podcast #25: Game Development with Java, JavaFX, and FXGL&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@frankdelporte/110790391834861143" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; discovered that an image he created for his book &amp;ldquo;Getting Started with Java on the Raspberry Pi&amp;rdquo; with a JavaFX application&lt;/a&gt;
 is used in the 2nd edition of &amp;ldquo;The Definitive Guide to Modern Java Clients with JavaFX 17&amp;rdquo; by &lt;strong&gt;Stephen Chin&lt;/strong&gt; , &lt;strong&gt;Johan Vos&lt;/strong&gt; , &lt;strong&gt;Jeames Weaver&lt;/strong&gt;, and many others.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=T4ftPFmis0E" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mukul Saini&lt;/strong&gt; shared a video&lt;/a&gt;
: &amp;ldquo;Property Binding in Javafx, How to bind one javafx property with another javafx property&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/princyvictor_16" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Princy Victor&lt;/strong&gt;&lt;/a&gt;
 wrote a tutorial about the use of &lt;a href="https://www.educba.com/javafx-timer/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;JavaFX Timer&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/jetbrains/status/1674008633770737664" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;JetBrains&lt;/strong&gt; is advising how to build self-contained standalone applications&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/GeertjanW/status/1674902079515631617" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Geertjan Wielenga&lt;/strong&gt; started a &amp;ldquo;Twitter battle&amp;rdquo; about desktop versus web&lt;/a&gt;
: &amp;ldquo;Desktop applications are dead, history, a thing of the past, except maybe for some niche use cases. Yet&amp;hellip; every time I open a browser, I&amp;rsquo;m in fact starting up&amp;hellip; a desktop application.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;If you are looking for a #JavaFX community away from Reddit, please visit: &lt;a href="https://programming.dev/c/javafx" target="_blank" rel="noopener noreferrer"&gt;programming.dev/c/javafx&lt;/a&gt;
, started by &lt;a href="https://programming.dev/u/HamsterRage" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;HamsterRage&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/cpreisler/status/1683843706988683268" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Chad Preisler&lt;/strong&gt; shared&lt;/a&gt;
: &amp;ldquo;If you&amp;rsquo;re designing an API, take a look at JavaFX. It&amp;rsquo;s built in a way that makes it easy for developers to extend. It&amp;rsquo;s a really well designed API.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;And he has been &lt;a href="https://twitter.com/cpreisler/status/1683207830910693376" target="_blank" rel="noopener noreferrer"&gt;working on a #JavaFX custom SortedList to overcome some performance issues&lt;/a&gt;
 in couple applications. Links to the code are in the video description.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1679935053541851160" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is wondering does everyone feel about another instance of the &amp;ldquo;JFX Days&amp;rdquo; this year&lt;/a&gt;
 &amp;hellip; in person &amp;hellip; in Zurich.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/C0DEDEAD/status/1677498043778605061" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;CodeDead&lt;/strong&gt; shared screenshots comparing Caspian vs AtlantaFX vs Modena&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;And &lt;a href="https://twitter.com/C0DEDEAD/status/1677397519066603528" target="_blank" rel="noopener noreferrer"&gt;managed to fully automate a GitHub Actions workflow for both testing and releasing JavaFX Applications&lt;/a&gt;
 (both portable and installers) using Gradle.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/foojayio/status/1681578734002864131" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Foojay&lt;/strong&gt; shared a list of its top 10 articles&lt;/a&gt;
: &amp;ldquo;JavaFX is well represented!&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX-Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Version 2 will let you &lt;a href="https://twitter.com/dlemmermann/status/1676201042168410113" target="_blank" rel="noopener noreferrer"&gt;perform a name-based search for individual icons in 100+ icon packs&lt;/a&gt;
. &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shares screenshots showing the search result for &amp;ldquo;arrow left&amp;rdquo;. This feature is brought to you by &lt;a href="https://twitter.com/LeeWyatt_7788" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Lee Wyatt&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Final bugs and testing are being handled before announcing V2!&lt;/li&gt;
&lt;/ul&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>The IKEA Effect</title><link>https://foojayio.github.io/website/today/the-ikea-effect/</link><pubDate>Wed, 26 Jul 2023 13:00:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-ikea-effect/</guid><description>&lt;p&gt;&lt;strong&gt;The &lt;a href="https://theconversation.com/the-ikea-effect-how-we-value-the-fruits-of-our-labour-over-instant-gratification-113647" title="IKEA effect" target="_blank" rel="noopener noreferrer"&gt;IKEA effect&lt;/a&gt;
 is a fascinating phenomenon whereby consumers place a (sometimes disproportionately) higher value on things that they have either made themselves, or to which they&amp;rsquo;ve contributed towards making.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This can have a significant influence on perceived value &amp;ndash; to the extent that people might value imperfect things they&amp;rsquo;ve helped create, more than they would value the equivalent, perfect, but ready-made, product. Those who have pained memories of tussling with Allan keys and occasionally incomprehensible schematics for self-assembly furniture will no doubt have raised eyebrows. Of course, the effect only applies to items that are successfully assembled, of course. If people fail to build an item using the instructions provided, or it takes too long or is too difficult, due either to the complexity of the instructions or the inexperience of the user, then they do not ascribe the same value to the item.&lt;/p&gt;</description></item><item><title>Real-time Stream Processing with Hazelcast and Redpanda</title><link>https://foojayio.github.io/website/today/when-speed-matters-real-time-stream-processing-with-hazelcast-and-redpanda/</link><pubDate>Tue, 25 Jul 2023 09:33:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/when-speed-matters-real-time-stream-processing-with-hazelcast-and-redpanda/</guid><description>&lt;p&gt;In this tutorial, we explore the powerful combination of Hazelcast and Redpanda to build high-performance, scalable, and fault-tolerant applications that react to real-time data.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://redpanda.com/" target="_blank" rel="noopener noreferrer"&gt;Redpanda&lt;/a&gt;
 is a streaming data platform designed to handle high-throughput, real-time data streams. Compatible with Kafka APIs, Redpanda provides a highly performant and scalable alternative to Apache Kafka. Redpanda&amp;rsquo;s unique architecture enables it to handle millions of messages per second while ensuring low latency, fault tolerance, and seamless scalability.&lt;/p&gt;</description></item><item><title>Busting Myths, Building Futures: A Conversation with Cay Horstmann on Java and Machine Learning</title><link>https://foojayio.github.io/website/today/busting-myths-building-futures-a-conversation-with-cay-horstmann-on-java-and-machine-learning/</link><pubDate>Mon, 24 Jul 2023 15:12:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/busting-myths-building-futures-a-conversation-with-cay-horstmann-on-java-and-machine-learning/</guid><description>&lt;figure class="alignright size-medium is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="cay-pfh-big-edited.jpg" alt="" class="wp-image-101427" width="503" height="356"&gt;
&lt;/figure&gt;
&lt;br /&gt;
&lt;p&gt;In our ongoing series of interviews with the movers and shakers of the software world, we bring you a conversation with Cay Horstmann, a towering figure in the Java community and a respected academic and entrepreneur.&lt;/p&gt;
&lt;p&gt;Known for his prolific contributions in the form of textbooks, online content, and courses, Cay has been instrumental in shaping the Java education landscape.&lt;/p&gt;
&lt;p&gt;In this insightful conversation, he speaks about a range of topics, including the challenges and potential for Java in the realms of data science and machine learning, the current state of the software development industry, the impact of AI on developers, and his unique perspective on learning by practice with immediate feedback. He also shares some intriguing anecdotes from his journey in academia and the software industry.&lt;/p&gt;</description></item><item><title>Getting Started With Apache Camel On Jakarta EE 10</title><link>https://foojayio.github.io/website/today/getting-started-with-apache-camel-on-jakarta-ee-10/</link><pubDate>Mon, 24 Jul 2023 10:20:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-apache-camel-on-jakarta-ee-10/</guid><description>&lt;p&gt;&lt;strong&gt;Apache Camel is an open source enterprise integration framework that helps you connect different systems and applications together with as little effort as possible. It provides a simple and powerful way to define and implement message-based routing and mediation rules. It is an implementation of the patterns described in the book Enterprise Integration Patterns by Gregor Hohpe and Bobby Woolf.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In simple terms, Apache Camel acts as a &amp;ldquo;translator&amp;rdquo; or &amp;ldquo;bridge&amp;rdquo; between different systems. It allows you to easily route, transform, and process messages as they move from one system to another. It supports a wide range of communication protocols and data formats (JSON, XML, YAML, etc.), making it easier to integrate different technologies and applications.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Building for Failure: Best Practices for Easy Production Debugging</title><link>https://foojayio.github.io/website/today/building-for-failure-best-practices-for-easy-production-debugging/</link><pubDate>Fri, 21 Jul 2023 15:29:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-for-failure-best-practices-for-easy-production-debugging/</guid><description>&lt;p&gt;&lt;strong&gt;Before going into the content of this post, check out&lt;/strong&gt; &lt;a href="https://www.amazon.com/Java-21-Explore-cutting-edge-features-ebook/dp/B0C9WW8PFL/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;my new book&lt;/strong&gt;&lt;/a&gt;
 &lt;strong&gt;which launched last week!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Quite a few years ago I was maintaining a database-driven system and ran into a weird production bug.&lt;/p&gt;
&lt;p&gt;The column I was reading from had a null value, but this wasn&amp;rsquo;t allowed in the code and there was no place where that value could have been null.&lt;/p&gt;
&lt;p&gt;The database was corrupt in a bad way and we didn&amp;rsquo;t have anything to go on.&lt;/p&gt;</description></item><item><title>Build Rot: The Hidden Technical Debt in Maven and Gradle Builds</title><link>https://foojayio.github.io/website/today/build-rot-tech-debt/</link><pubDate>Fri, 21 Jul 2023 08:14:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/build-rot-tech-debt/</guid><description>&lt;p&gt;&lt;strong&gt;Discover &amp;lsquo;Build Rot&amp;rsquo;, the hidden technical debt in Maven and Gradle builds. This article explores the impact of Build Rot on build speed and test times, offering strategies for enhanced observability and Developer Productivity Engineering to optimize build processes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Technical debt is a constant companion in the complex world of software development. It&amp;rsquo;s the price we pay for quick fixes and postponed refactoring&amp;mdash;the &amp;ldquo;we&amp;rsquo;ll do it right next time&amp;rdquo; mentality.&lt;/p&gt;</description></item><item><title>SnakeYaml 2.0: Solving the unsafe deserialization vulnerability</title><link>https://foojayio.github.io/website/today/snakeyaml-2-0-solving-the-unsafe-deserialization-vulnerability/</link><pubDate>Thu, 20 Jul 2023 07:17:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/snakeyaml-2-0-solving-the-unsafe-deserialization-vulnerability/</guid><description>&lt;p&gt;&lt;strong&gt;In December of last year, we reported &lt;a href="https://www.cve.org/CVERecord?id=CVE-2022-1471" target="_blank" rel="noopener noreferrer"&gt;++CVE-2022-1471++&lt;/a&gt;
 to you. This unsafe deserialization problem could easily lead to arbitrary code execution under the right circumstances.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the deep-dive blog post &amp;ldquo;&lt;a href="https://snyk.io/blog/unsafe-deserialization-snakeyaml-java-cve-2022-1471/" target="_blank" rel="noopener noreferrer"&gt;++Unsafe deserialization vulnerability in SnakeYaml (CVE-2022-1471)++&lt;/a&gt;
&amp;rdquo;, I explained the problems in this library and how it could be executed. The gist of the problem was that by default SnakeYaml parsed the incoming yaml to the generic object type.&lt;/p&gt;</description></item><item><title>How we developed the Eclipse OpenJ9 CRIU Support for fast Java start-up</title><link>https://foojayio.github.io/website/today/how-we-developed-the-eclipse-openj9-criu-support-for-fast-java-startup/</link><pubDate>Wed, 19 Jul 2023 15:33:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-we-developed-the-eclipse-openj9-criu-support-for-fast-java-startup/</guid><description>&lt;p&gt;&lt;strong&gt;Checkpointing and restoring the JVM makes applications run faster because all the startup work is done before deployment. This means that in serverless cloud applications, the end-user of the application perceives no delay when the application starts. You can try it out now with your own apps on Open Liberty with Eclipse OpenJ9. But if you want to know more, here&amp;rsquo;s how we tackled the technical challenges of developing the Eclipse OpenJ9 CRIU Support.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>How to Create an Open Source Pull Request (PR)</title><link>https://foojayio.github.io/website/today/creating-an-open-source-pull-request/</link><pubDate>Wed, 19 Jul 2023 11:26:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-an-open-source-pull-request/</guid><description>&lt;p&gt;&lt;strong&gt;In this tutorial, we are going to take a look at contributing to Open Source Software, specifically how to do a pull request (PR).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We will look at forking and cloning the project, making the changes, committing and pushing these changes, creating the pull request, the review and hopefully merge of your PR.&lt;/p&gt;
&lt;p&gt;The same process may apply when making contributions to a project at work that you don&amp;rsquo;t own. In this example, the project is on GitHub. Other Git code repositories may use a similar process.&lt;/p&gt;</description></item><item><title>JDK Safari: How To Find Hidden Tools in the JDK</title><link>https://foojayio.github.io/website/today/jdk-safari-how-to-find-hidden-tools-in-the-jdk/</link><pubDate>Wed, 19 Jul 2023 08:25:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdk-safari-how-to-find-hidden-tools-in-the-jdk/</guid><description>&lt;p&gt;We all have some hobby, be it sports, fishing, playing games or building compilers.&lt;/p&gt;
&lt;p&gt;One of my hobbies is regularly searching the JDK for new Java classes with executable main methods.&lt;/p&gt;
&lt;p&gt;Many years ago, during my forays through the JDK sources, I first encountered a class with a main-method I didn&amp;rsquo;t know about. That was in 2007 (oh boy).&lt;/p&gt;
&lt;p&gt;The class was Class2HTML from the BCEL (Bytecode Engineering Library) library embedded in the JDK back then.&lt;/p&gt;</description></item><item><title>Dive into the OpenJDK: Top 10 Reads on Foojay.io</title><link>https://foojayio.github.io/website/today/dive-into-the-openjdk-top-10-reads-on-foojay-io/</link><pubDate>Wed, 19 Jul 2023 07:45:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/dive-into-the-openjdk-top-10-reads-on-foojay-io/</guid><description>&lt;p&gt;Foojay.io is a community platform dedicated to the needs of Java developers (and beyond, e.g., Kotlin) who use OpenJDK and related technologies.&lt;/p&gt;
&lt;p&gt;It serves as a central hub for sharing knowledge, resources, and tools related to Java and OpenJDK.&lt;/p&gt;
&lt;p&gt;The platform offers a wide range of content, including articles, tutorials, and insights from industry experts and Java enthusiasts.&lt;/p&gt;
&lt;p&gt;Whether you&amp;rsquo;re a seasoned developer or a beginner in the world of Java, Foojay.io provides valuable information and a supportive community to help you navigate and excel in your Java development journey.&lt;/p&gt;</description></item><item><title>Effective Coding with Java Observability</title><link>https://foojayio.github.io/website/today/effective-coding-with-java-observability/</link><pubDate>Tue, 18 Jul 2023 07:02:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/effective-coding-with-java-observability/</guid><description>&lt;h2 id="h2-0-things-you-can-do-right-now-to-learn-new-and-valuable-things-that-can-improve-your-code"&gt;Things you can do right now to learn new and valuable things that can improve your code.&lt;/h2&gt;
&lt;p&gt;There are many common mistakes I&amp;rsquo;ve seen repeated over the years while trying to make observability initiatives successful. However, the most critical and fundamental of these organizational stumbles is the irresistible infatuation with technology and toolings themselves.&lt;/p&gt;
&lt;p&gt;It should not come as a surprise. Many &amp;rsquo;let&amp;rsquo;s add observability platform X&amp;rsquo; projects start off with plenty of fanfare but also a very hazy sense of direction and extremely muddled criteria for success. The vision of what effective observability can do to&lt;strong&gt;actually help&lt;/strong&gt; developers work better is suspiciously missing from the preaching of many of its commercial vendors and oracles. Ask yourself, how often do you find yourself taking your eyes off the code in the IDE to find out what you can learn from its execution data?&lt;/p&gt;</description></item><item><title>GraphQL, JavaScript, Preprocessor, SQL and more in Manifold</title><link>https://foojayio.github.io/website/today/graphql-javascript-preprocessor-sql-and-more-in-manifold/</link><pubDate>Mon, 17 Jul 2023 12:42:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/graphql-javascript-preprocessor-sql-and-more-in-manifold/</guid><description>&lt;p&gt;We reached the final installment of our Manifold series but not the end of its remarkable capabilities.&lt;/p&gt;
&lt;p&gt;Throughout this series, we have delved into various aspects of Manifold, highlighting its unique features and showcasing how it enhances Java development.&lt;/p&gt;
&lt;p&gt;In this article, we will cover some of the remaining features of Manifold, including its support for GraphQL, integration with JavaScript, and the utilization of a preprocessor.&lt;/p&gt;
&lt;p&gt;By summarizing these features and reflecting on the knowledge gained throughout the series, I hope to demonstrate the power and versatility of Manifold.&lt;/p&gt;</description></item><item><title>Reactive Database Access on the JVM</title><link>https://foojayio.github.io/website/today/reactive-database-access-on-the-jvm/</link><pubDate>Mon, 17 Jul 2023 09:18:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/reactive-database-access-on-the-jvm/</guid><description>&lt;p&gt;A couple of years ago, &lt;a href="https://en.wikipedia.org/wiki/Reactive_programming" target="_blank" rel="noopener noreferrer"&gt;Reactive Programming&lt;/a&gt;
 was all the rage, but it had one big issue: reactive stopped as soon as you accessed a SQL database.&lt;/p&gt;
&lt;p&gt;You had a nice reactive chain up to the database, defeating the whole purpose. Given the prevalence of SQL databases in existing and new apps, one couldn&amp;rsquo;t enjoy the full benefits of Reactive Programming but still pay the full price of complexity.&lt;/p&gt;
&lt;p&gt;Since then, the landscape has changed tremendously. Most importantly, it offers many reactive drivers over popular databases: PostgreSQL, MariaDB and MySQL, Microsoft SQL Server, Oracle, you name it!&lt;/p&gt;</description></item><item><title>I could write a blog post, or ...</title><link>https://foojayio.github.io/website/today/i-could-write-a-blog-post-or/</link><pubDate>Sat, 15 Jul 2023 07:09:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/i-could-write-a-blog-post-or/</guid><description>&lt;p&gt;My goal is to write a blog post every two weeks, it&amp;rsquo;s great to stick to a schedule and force yourself to publish pieces even if they are not perfect.&lt;/p&gt;
&lt;p&gt;This doesn&amp;rsquo;t mean that these blog posts are terrible, just that they could need a bit more polish or could cover a bit more of the topic. But I know many people that have dozens of half-finished blog posts in their pipeline, which aren&amp;rsquo;t just there and so they don&amp;rsquo;t publish anything for months.&lt;/p&gt;</description></item><item><title>How to Share Your Work With a Video or Podcast</title><link>https://foojayio.github.io/website/today/how-to-share-your-work-with-a-video-or-podcast/</link><pubDate>Fri, 14 Jul 2023 09:22:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-share-your-work-with-a-video-or-podcast/</guid><description>&lt;p&gt;Season 2 of the &lt;a href="https://foojayio.github.io/website/today/category/podcast/"&gt;Foojay Podcast&lt;/a&gt;
 has come to an end. Since September of &amp;lsquo;22, 22 episodes where published here on Foojay.&lt;/p&gt;
&lt;p&gt;In this article, we want to share some of the experiences of creating such podcasts, but also more generally, how you can share your work in a video with a small (or bigger) budget&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-audio"&gt;Audio&lt;/h2&gt;
&lt;p&gt;There is one fundamental rule for the audio: &amp;ldquo;Garbage in = Garbage out.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Yes, you can apply many filters and effects in a later phase, but you can&amp;rsquo;t make a bad recording sound good. &lt;strong&gt;You need a clear and good recording as a starting point&lt;/strong&gt;!&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>Journeys in Java, Level 10: Service Discovery with Eureka</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-10-service-discovery-with-eureka/</link><pubDate>Thu, 13 Jul 2023 06:39:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-10-service-discovery-with-eureka/</guid><description>&lt;p&gt;Gaining complexity in a microservices system certainly isn&amp;rsquo;t for the faint of heart (though neither is complexity in monoliths!).&lt;/p&gt;
&lt;p&gt;When there are many services that need to communicate with one another, we might need to coordinate multiple services communicating with multiple other services.&lt;/p&gt;
&lt;p&gt;We also might code for varying environments such as local, development server, or the cloud.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How do services know where to find one another?&lt;/li&gt;
&lt;li&gt;How can we avoid problems when a service is unavailable?&lt;/li&gt;
&lt;li&gt;How do we handle requests when we scale up or down certain parts of our system?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is where something like Spring Cloud Netflix Eureka comes into play.&lt;/p&gt;</description></item><item><title>Enterprise Java Applications With Jakarta EE and Vaadin</title><link>https://foojayio.github.io/website/today/enterprise-java-application-development-with-jakarta-ee-and-vaadin/</link><pubDate>Wed, 12 Jul 2023 09:26:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/enterprise-java-application-development-with-jakarta-ee-and-vaadin/</guid><description>&lt;p&gt;&lt;strong&gt;Watch this webinar recording to get an overview of the &lt;a href="https://vaadin.com/" target="_blank" rel="noopener noreferrer"&gt;Vaadin framework&lt;/a&gt;
 and learn how to use it to build modern web applications on the Jakarta EE Platform in pure Java, without any frontend framework.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Find out more about the core features of Jakarta EE, like its dependency injection (Jakarta CDI) and persistence (Jakarta Persistence) APIs. Additionally, you will learn how to use Vaadin and Jakarta EE to build responsive web applications that can run on different devices and browsers.&lt;/p&gt;</description></item><item><title>Charting the Course of Java: An Insightful Conversation with Java Champion, Sebastian Daschner</title><link>https://foojayio.github.io/website/today/charting-the-course-of-java-an-insightful-conversation-with-java-champion-sebastian-daschner/</link><pubDate>Tue, 11 Jul 2023 15:34:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/charting-the-course-of-java-an-insightful-conversation-with-java-champion-sebastian-daschner/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="Sebastian.jpeg" alt="" class="wp-image-100950" width="375" height="375"&gt;
&lt;/figure&gt;
&lt;p&gt;In this insightful interview, renowned Java Champion, Oracle Developer Champion, and JavaOne Rockstar, Sebastian Daschner, shares his journey in the field of Java enterprise software development.&lt;/p&gt;
&lt;p&gt;With a vast array of experience from being a self-employed consultant, trainer, and author to his contributions to the open-source community, Daschner provides a unique perspective on Java&amp;rsquo;s current state and future, especially in the enterprise context.&lt;/p&gt;
&lt;p&gt;He delves into his strategies for balancing his varied roles, offers tips for aspiring developers, discusses the challenges in the software development industry, and underlines the importance of continuous learning.&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>Java on Visual Studio Code – June 2023</title><link>https://foojayio.github.io/website/today/java-on-visual-studio-code-june-2023/</link><pubDate>Mon, 10 Jul 2023 12:44:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-visual-studio-code-june-2023/</guid><description>&lt;p&gt;Hi everyone, welcome to the our June update for Visual Studio Code for Java!&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;re going to provide you an update about our code completion performance improvement, user experience enhancements in both unit testing and project creation, so let&amp;rsquo;s get started!&lt;/p&gt;
&lt;h4 id="code-completion-performance-improvement"&gt;Code Completion Performance Improvement&lt;/h4&gt;
&lt;p&gt;Faster code completion is a crucial aspect of any developer tool that can greatly enhance coding productivity. In the past, we have heard from our users they felt Java code completion was slow sometimes which has impacted their work. As a result, we have been researching into how to make it faster and as a result, we have actually made significant progress.&lt;/p&gt;</description></item><item><title>Sticky sessions with Apache APISIX - the demo</title><link>https://foojayio.github.io/website/today/sticky-sessions-with-apache-apisix-the-demo/</link><pubDate>Fri, 07 Jul 2023 16:54:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/sticky-sessions-with-apache-apisix-the-demo/</guid><description>&lt;p&gt;We&amp;rsquo;ve described the concept behind &lt;a href="https://foojayio.github.io/website/today/sticky-sessions-with-apache-apisix/"&gt;sticky sessions&lt;/a&gt;
: you forward a request to the same upstream because there&amp;rsquo;s context data associated with the session on that node.&lt;/p&gt;
&lt;p&gt;However, if necessary, you should replicate the data to other upstreams because this one might go down. In this post, we are going to illustrate it with a demo.&lt;/p&gt;
&lt;h2 id="h2-0-the-overall-design"&gt;The overall design&lt;/h2&gt;
&lt;p&gt;Design options are limitless. I&amp;rsquo;ll keep myself to a familiar stack, the JVM. Also, as mentioned in the previous post, one should only implement sticky sessions with session replication.&lt;/p&gt;</description></item><item><title>Sticky sessions with Apache APISIX</title><link>https://foojayio.github.io/website/today/sticky-sessions-with-apache-apisix/</link><pubDate>Fri, 07 Jul 2023 16:51:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/sticky-sessions-with-apache-apisix/</guid><description>&lt;p&gt;Sticky sessions, also known as session affinity, is a mechanism by which a routing component that acts as a facade always routes a request to the same underlying upstream node.&lt;/p&gt;
&lt;p&gt;In this article, I&amp;rsquo;ll describe the reason behind sticky sessions, available alternatives, and how to implement them via Apache APISIX.&lt;/p&gt;
&lt;h2 id="h2-0-why-sticky-sessions"&gt;Why sticky sessions?&lt;/h2&gt;
&lt;p&gt;Sticky sessions became popular when we stored the state on the upstream node, not the database. I&amp;rsquo;ll use the example of a simplified e-commerce shop to explain further.&lt;/p&gt;</description></item><item><title>The Evolution of Java: Challenging Stereotypes and Embracing Modernity</title><link>https://foojayio.github.io/website/today/the-evolution-of-java-challenging-stereotypes-and-embracing-modernity/</link><pubDate>Fri, 07 Jul 2023 16:15:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-evolution-of-java-challenging-stereotypes-and-embracing-modernity/</guid><description>&lt;p&gt;On a flight from Zurich to Toronto, I found myself in an engaging conversation with a fellow passenger. Among various topics, our conversation navigated toward our careers and, inevitably, as I am a Java developer, towards the world of Java.&lt;/p&gt;
&lt;p&gt;This gentleman, having worked with Java some 15-20 years ago, was surprised to learn that I still actively use the language. &amp;ldquo;Isn&amp;rsquo;t it slow?&amp;rdquo; he questioned. His question echoed a stereotype that I have often encountered, one that has stuck to Java from its earlier days.&lt;/p&gt;</description></item><item><title>Understanding Security Vulnerabilities: Preventing Attacks</title><link>https://foojayio.github.io/website/today/understanding-security-vulnerabilities-a-first-step-in-preventing-attacks/</link><pubDate>Thu, 06 Jul 2023 12:49:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-security-vulnerabilities-a-first-step-in-preventing-attacks/</guid><description>&lt;p&gt;When I was a teenager, our local telephone company introduced a new service - the premium phone calls (AKA 1-900 numbers).&lt;/p&gt;
&lt;p&gt;The fun part was that we discovered a workaround to these charges by dialing the sequential local numbers which these 1-900 numbers would redirect to.&lt;/p&gt;
&lt;p&gt;If the &amp;ldquo;support number&amp;rdquo; for the 1-900 was 555-555 we would dial every number between 555-455 and 555-655 until we hit the jackpot&amp;hellip;&lt;/p&gt;
&lt;p&gt;Hours were spent dialing these numbers, leading us to make numerous calls for free. This attack is still prevalent today, and it&amp;rsquo;s called Insecure Direct Object References (IDOR).&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>Exploring the Depths of Java: A Comprehensive Conversation with Jakob Jenkov, Part-II</title><link>https://foojayio.github.io/website/today/exploring-the-depths-of-java-a-comprehensive-conversation-with-jakob-jenkov-part-ii/</link><pubDate>Wed, 05 Jul 2023 16:21:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-the-depths-of-java-a-comprehensive-conversation-with-jakob-jenkov-part-ii/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="jekov.jpeg" alt="" class="wp-image-98946" width="400" height="400"&gt;
&lt;/figure&gt;
&lt;p&gt;Welcome back to the second installment of our in-depth conversation with Jakob Jenkov, a leading figure in the world of Java. If you joined us for&lt;a href="https://foojayio.github.io/website/today/exploring-the-depths-of-java-a-comprehensive-conversation-with-jakob-jenkov-part-i/"&gt;Part I&lt;/a&gt;
, you&amp;rsquo;ll recall the insightful discussions around the evolving landscape of Java and its continuous improvements. Today, we delve even deeper into the subject. Jakob will share his thoughts on the challenges of modern software development, the impacts of artificial intelligence on developers, and much more. Get ready for another fascinating exploration into the depths of Java with Jakob Jenkov!&lt;/p&gt;</description></item><item><title>Running a CRaC Java application on Raspberry Pi</title><link>https://foojayio.github.io/website/today/running-a-crac-java-application-on-raspberry-pi/</link><pubDate>Wed, 05 Jul 2023 12:23:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/running-a-crac-java-application-on-raspberry-pi/</guid><description>&lt;p&gt;With the April release of the Zulu Build of OpenJDK, Azul announced &lt;a href="https://www.azul.com/blog/reduce-java-application-startup-and-warmup-times-with-crac/" target="_blank" rel="noopener noreferrer"&gt;the integration of CRaC in its version 17 of Java for Linux&lt;/a&gt;
. &lt;a href="https://www.azul.com/products/components/crac/" target="_blank" rel="noopener noreferrer"&gt;Coordinated Restore at Checkpoint (CRaC)&lt;/a&gt;
 is a feature introduced in OpenJDK to improve Java&amp;rsquo;s application startup and warmup times to milliseconds from seconds or even minutes, by allowing a running application to pause, snapshot its state, and restart later, even on a different machine.&lt;/p&gt;
&lt;p&gt;CRaC is the final step after previous projects by Azul in multiple client projects in the automotive and IoT industry. Infotainment systems for car, gateways in electronic systems, and other use-cases require high-speed startup of their applications running on embedded ARM32 and ARM64 systems.&lt;/p&gt;</description></item><item><title>A Dissection of Java JDBC to PostgreSQL, Part 2: Batching</title><link>https://foojayio.github.io/website/today/a-dissection-of-java-jdbc-to-postgresql-connections-part-2-batching/</link><pubDate>Tue, 04 Jul 2023 13:56:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-dissection-of-java-jdbc-to-postgresql-connections-part-2-batching/</guid><description>&lt;p&gt;This is the second part of a series where I look into how Java JDBC connections to PostgreSQL are working, to understand how to optimally implement them.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve landed on this article, it might be a good idea to read &lt;a href="https://foojayio.github.io/website/today/a-dissection-of-java-jdbc-to-postgresql-connections/" title="my first article"&gt;my first article&lt;/a&gt;
 as well, which gives an introduction and shares how JDBC communicates with &lt;a href="https://www.yugabyte.com/postgresql/" title="PostgreSQL" target="_blank" rel="noopener noreferrer"&gt;PostgreSQL&lt;/a&gt;
 using simple and extended protocols.&lt;/p&gt;
&lt;p&gt;This new article specifically explores batching. Batching for PostgreSQL JDBC is a property of the extended protocol. It uniquely allows you to send multiple statements in a single request.&lt;/p&gt;</description></item><item><title>Seven Reasons You Should Not Ignore Flaky Tests</title><link>https://foojayio.github.io/website/today/seven-reasons-you-should-not-ignore-flaky-tests/</link><pubDate>Tue, 04 Jul 2023 07:02:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/seven-reasons-you-should-not-ignore-flaky-tests/</guid><description>&lt;p&gt;Imagine the scenario: you have good automated test coverage of your application code; you run your tests locally; and you have a Continuous Integration (CI) environment which runs your tests regularly.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;re doing everything right, right?&lt;/p&gt;
&lt;p&gt;Except&amp;hellip; sometimes tests fail, and you&amp;rsquo;re not sure why. When you run the test locally, or a second time in the same environment, they pass. Whether they pass or fail doesn&amp;rsquo;t seem to be related to any code changes.&lt;/p&gt;</description></item><item><title>Foojay Status Report: July 2023</title><link>https://foojayio.github.io/website/today/foojay-status-report-july-2023/</link><pubDate>Mon, 03 Jul 2023 05:20:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-status-report-july-2023/</guid><description>&lt;p&gt;Since the start of the Friends of OpenJDK community in April 2020, we&amp;rsquo;ve had half yearly status reports, providing the highlights of the past half year, together with some stats and analysis, ending with roadmaps for the next upcoming periods.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Here are the earlier reports, from &lt;a href="https://foojayio.github.io/website/today/foojay-status-report-january-june-2021/"&gt;January - June 2021&lt;/a&gt;
, &lt;a href="https://foojayio.github.io/website/today/foojay-status-report-july-december-2021/"&gt;July - December 2021&lt;/a&gt;
, and &lt;a href="https://foojayio.github.io/website/today/foojay-status-report-january-june-2022/"&gt;January - June 2022&lt;/a&gt;
. At that stage, a much stricter cookie policy was implemented, for reasons of the EU&amp;rsquo;s GDPR and similar, so that the Google Analytics trends which had been very nice until that stage (we had as much traffic in the first half of 2022 as we had for the whole of 2021) were destroyed. Attempts were made to recover or reinstate similar methods for analyzing usage, hence the delay in reports coming out since midway through last year, though these attempts have failed. And if the method for counting usage changes as dramatically as it now has, then it becomes impossible to discuss trend comparisons from before that change and after it. In terms of trends, we now need to start from scratch. Since that is not something that can be repaired, making comparisons between different periods in the past and the current period, as in previous reports, doesn&amp;rsquo;t make sense anymore.&lt;/p&gt;</description></item><item><title>Working on An Unfamiliar Codebase</title><link>https://foojayio.github.io/website/today/working-unfamiliar-codebase/</link><pubDate>Sun, 02 Jul 2023 09:00:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/working-unfamiliar-codebase/</guid><description>&lt;p&gt;In our profession, it&amp;rsquo;s common to work on an unfamiliar codebase.&lt;/p&gt;
&lt;p&gt;It happens every time one joins a new project or even needs to work on a previously untouched part in big ones.&lt;/p&gt;
&lt;p&gt;This occurrence is not limited to a developer having to fix a bug; it can be a solution architect having to design a new feature or an OpenSource contributor working on a GitHub issue in their free time.&lt;/p&gt;</description></item><item><title>JavaFX Links of June 2023</title><link>https://foojayio.github.io/website/today/javafx-links-of-june-2023/</link><pubDate>Fri, 30 Jun 2023 09:18:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-june-2023/</guid><description>&lt;p&gt;Again a lot has been shared this month in the &lt;a href="https://www.jfx-central.com/home" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 #LinksOfTheWeek! And that website itself is &amp;ldquo;under heavy construction&amp;rdquo; as version 2 is getting a completely new design and several improvements. Your help is wanted! See the last section of this summary&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-core"&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/OpenJDK/status/1669074682505572353" target="_blank" rel="noopener noreferrer"&gt;Rampdown Phase 1 (RDP1) for JavaFX 21 starts on July 13, 2023 at 16:00 UTC (09:00 Pacific time)&lt;/a&gt;
, about four weeks from now.&lt;/li&gt;
&lt;li&gt;JavaFX 21 Early-Access Builds Build 21 is available from &lt;a href="https://jdk.java.net/javafx21/" target="_blank" rel="noopener noreferrer"&gt;jdk.java.net/javafx21&lt;/a&gt;
, addressing &lt;a href="https://bugs.openjdk.org/browse/JDK-8301312?jql=project%20%3D%20JDK%20AND%20fixversion%20%3D%20jfx21%20and%20component%20%3D%20javafx%20and%20%22resolved%20in%20build%22%20%3D%20b21%20order%20by%20component%2C%20subcomponent" target="_blank" rel="noopener noreferrer"&gt;these issues&lt;/a&gt;
. JavaFX 21-ea is designed to work with JDK 21-ea, but it is known to work with JDK 17 and later versions.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/110547534890057649" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; is planning to spend more time on Java on Mobile (OpenJDK Mobile)&lt;/a&gt;
 in the near future: &amp;ldquo;There is 0 support from big tech because they fall in 2 categories: 1/ they have no revenue on mobile, 2/ they have competing OS tech that drives devs/users to their revenue-driven cloud services. But since I&amp;rsquo;m not big tech, I can just do it.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/GluonHQ/status/1671461934049243136" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gluon&lt;/strong&gt; asks all JavaFX developers to give JavaFX 21-ea+21 a try&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://techhub.social/@gluonhq/110615181663234520" target="_blank" rel="noopener noreferrer"&gt;And is working on making their JavaFX software (libraries, tools, components) more consistent and developer-friendly&lt;/a&gt;
: &amp;ldquo;Over the past years, we learned a lot, and we&amp;rsquo;re putting that experience now in our code.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dlsc-software-consulting-gmbh/GMapsFX/issues/204" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is looking for help with a Webkit issue in JavaFX 18.0.1&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Abdelrahman_B1" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Abdelrahman Bayoumi&lt;/strong&gt;&lt;/a&gt;
 explores a solution to resolve the challenges when it comes to &lt;a href="https://dev.to/abdelrahmanbayoumi/arabic-text-rendering-issues-in-javafx-3j9i" target="_blank" rel="noopener noreferrer"&gt;rendering Arabic, being a right-to-left script&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-applications"&gt;Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1662197944718876672" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; is almost ready to make the sources of Trinity available&lt;/a&gt;
&amp;hellip;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1666617132338102273" target="_blank" rel="noopener noreferrer"&gt;He is using Trinity to distinguish between human and chatGPT altered text&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;After &lt;a href="https://twitter.com/SeanMiPhillips/status/1669087717743788033" target="_blank" rel="noopener noreferrer"&gt;teasing us&lt;/a&gt;
 for a few weeks, it finally happened! &lt;a href="https://twitter.com/SeanMiPhillips/status/1669089367694901250" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; announced&lt;/a&gt;
 that Trinity, an Explainable AI Analysis and Visualization tool written in Java and JavaFX, is now officially public and open source. His message: &amp;ldquo;Have fun you fine young cannibals.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Video demo of Trinity to &lt;a href="https://twitter.com/SeanMiPhillips/status/1668296662857424896" target="_blank" rel="noopener noreferrer"&gt;project and distinguish between human and chatGPT altered text blurbs&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;With many thanks to &lt;a href="https://twitter.com/JavaFX3D/status/1669523111484719105" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;JavaFX 3D&lt;/strong&gt; , &lt;strong&gt;Jasper Potts&lt;/strong&gt; , &lt;strong&gt;Alexander Kouznetsov&lt;/strong&gt; , &lt;strong&gt;Chien Yang&lt;/strong&gt; , &lt;strong&gt;Kevin Rushforth&lt;/strong&gt; , &lt;strong&gt;Richard Bair&lt;/strong&gt;, and many others&lt;/a&gt;
 for all their hard work on JavaFX and 3D and more!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1671682955855446016" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; shared a screenshot&lt;/a&gt;
: projecting decision manifolds from Pilot Assist AI Models for dog fighting pilots.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1671674205098704899" target="_blank" rel="noopener noreferrer"&gt;Rendering a rainbow highway&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/110566790213698291" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; is still impressed by the Devnexs keynote given by Sean&lt;/a&gt;
: &amp;ldquo;This is a very cool demonstration about Trinity, an open-source tool developed/used at John Hopkins University. It shows how Java developers can create cool, amazing and extremely useful stuff with great visualization using JavaFX.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/crschnick/status/1662109280323993600" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; improved the speed of Pdx-Unlimiter&lt;/a&gt;
 with cached dynamically generated images.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/johanvos/status/1666416554110513158" target="_blank" rel="noopener noreferrer"&gt;Deep Netts has a neural network visual weights analysis tool ready for the next release&lt;/a&gt;
. It helps to understand what&amp;rsquo;s going on inside layers, and debugging trained networks.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MaleeshaH/status/1666865457599770625" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Maleesha Herath&lt;/strong&gt; introduces &amp;ldquo;tecmis&amp;rdquo;, an Information Management System&lt;/a&gt;
 that revolutionizes how educational institutions handle data.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/tobiasbriones_/status/1666863274938204172" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tobias Briones&lt;/strong&gt; finished the implementation for Code Snipped Slides&lt;/a&gt;
 with the exact color scheme of IntelliJ, except for specific language tokens. It&amp;rsquo;s all composed with JavaFX Nodes, like Shapes.&lt;/li&gt;
&lt;li&gt;New version of &lt;a href="https://twitter.com/mapton_app/status/1667529564120023042" target="_blank" rel="noopener noreferrer"&gt;Mapton with bug fixes and minor improvements along with new WMS sources&lt;/a&gt;
. Dependencies such as NetBeans 18 platform and the bundled Java &amp;amp; JavaFX from Azul are updated too.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/crschnick/status/1672101399486951425" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; gave the welcome page of v1.2 of XPipe some personality&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1670757586260377602" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; really likes the latest version of the sample app for AtlantaFX&lt;/a&gt;
: &amp;ldquo;Very nicely polished theme and controls. Packaged with Conveyor from HydraulicDev.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/makingthematrix/status/1669374799246774278" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Maciek Gorywoda&lt;/strong&gt; shared v1.0.0 FxCalculator&lt;/a&gt;
: &amp;ldquo;It&amp;rsquo;s, well, a calculator for your Android phone.&amp;rdquo; Read the whole thread to learn more, e.g. that it&amp;rsquo;s written in Scala 3.3, JavaFX, Gluon, and built with GraalVM Native Image.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/jam_machund/status/1671102745309265920" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jamie Macaulay&lt;/strong&gt; is working on SUDUnpacker&lt;/a&gt;
 to handle SoundTraps sud files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@johanvos@mastodon.social/110461937691524803" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; stumbled into this addictive web game, written in JavaFX by &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; using WebFX: tetris.webfx.dev&lt;/a&gt;
: &amp;ldquo;It&amp;rsquo;s great to see how developers are using JavaFX to make cool stuff.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1662758757506469889" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; made Snake v1.0 available on itch&lt;/a&gt;
. Thanks to WebFX, there is now a web version that is playable in the browser (fullscreen is recommended).
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1666727933258485760" target="_blank" rel="noopener noreferrer"&gt;He extended his chess game&lt;/a&gt;
 with drag and drop, and improved the image resolution.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1671252291658055680" target="_blank" rel="noopener noreferrer"&gt;He also shared a video showing collision detection with convex shapes&lt;/a&gt;
. It resulted in a nice chat with &lt;a href="https://twitter.com/SeanMiPhillips/status/1671662634930696195" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt;&lt;/a&gt;
 and &lt;a href="https://twitter.com/carldea/status/1672041067909193734" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Carl Dea&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1673693403664764938" target="_blank" rel="noopener noreferrer"&gt;He added a teleport stone, a propeller, and rotating platforms to FoodDice&lt;/a&gt;
. New levels with those new items are coming in the next update. Also implemented the new collision system that he wrote before for these new rotating items.&lt;/li&gt;
&lt;li&gt;And he has been &lt;a href="https://twitter.com/orango_mango/status/1672648493372981249" target="_blank" rel="noopener noreferrer"&gt;experimenting with a physics engine made from scratch&lt;/a&gt;
. Right now, there are just some basic physics laws and chains.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Another &lt;a href="https://twitter.com/WebFXProject/status/1668227539154747396" target="_blank" rel="noopener noreferrer"&gt;JavaFX game has been ported to the Web with &lt;strong&gt;WebFX&lt;/strong&gt; Food Dice!&lt;/a&gt;
. It&amp;rsquo;s a plain JavaFX game written for the GMTK Game jam 2022 and was coded in 48h from scratch with no 3rd party lib. Congrats to the 16-year-old author &lt;strong&gt;OrangoMango**&lt;/strong&gt; . Play online on &lt;a href="https://fooddice.webfx.dev" target="_blank" rel="noopener noreferrer"&gt;fooddice.webfx.dev&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1671169432524316674" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; shows image mesh warping&lt;/a&gt;
: &amp;ldquo;No specific use case, but I&amp;rsquo;m sure this will come in handy for some cool effects in the future.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1664730029887037441" target="_blank" rel="noopener noreferrer"&gt;He is trying to hypnotize us&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1673700044556386304" target="_blank" rel="noopener noreferrer"&gt;And he is drawing circles with triangles and FXGL&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Last week we shared the TreeMap chart by &lt;strong&gt;Matt Coley&lt;/strong&gt; here. In a new video, you can see a &lt;a href="https://twitter.com/invokecoley/status/1663073175431675904" target="_blank" rel="noopener noreferrer"&gt;practical demo of TreeMapFX in Recaf&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@svenruppert/110436643725621744" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sven Ruppert&lt;/strong&gt; shared that work has started on TestFX 4&lt;/a&gt;
, after longer silence. You can find the project on &lt;a href="https://testfx.github.io/TestFX/" target="_blank" rel="noopener noreferrer"&gt;testfx.github.io/TestFX&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1669473442163294210" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; sees there truly is a big need for custom window decorations and found an extra one&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/JaroslavTulach/status/1449827890300915718" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jaroslav Tulach&lt;/strong&gt; is discussing JavaFX Lite&lt;/a&gt;
 and is asking for feedback: &amp;ldquo;Would you find #javafxlight - e.g. coding in #javafx &amp;amp; rendering via #HTML5 useful?&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-podcast-videos"&gt;Podcast, Videos&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7071865436115468288/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; and &lt;strong&gt;Ixchel Ruiz&lt;/strong&gt; talking at JNation&lt;/a&gt;
 about Graphical User Interfaces with Java.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/foojay-podcast-25/"&gt;Foojay Podcast #25: Game Development with Java, JavaFX, and FXGL&lt;/a&gt;
. &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; (aka _hansolo), &lt;strong&gt;Almas Baim&lt;/strong&gt; (aka the FXGL creator), and &lt;strong&gt;Chengen Zhao&lt;/strong&gt; (aka WhiteWoodCity) talk with &lt;strong&gt;Frank Delporte&lt;/strong&gt; about why Java should be on your game-development-language-list.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-tutorials"&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Coding Examples&lt;/strong&gt; uploaded new videos to &amp;ldquo;JavaFX 3D Tutorials&amp;rdquo;. For example: &lt;a href="https://www.youtube.com/watch?v=9YSor8d3Hzk" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Animation | Fade Transition&amp;rdquo;, to create a Text and make it blink using the FadeTransition class&lt;/a&gt;
. using the shape&amp;rsquo;s transparency to achieve the required effect.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/safetyvalve/status/1664349425228038144" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sten Nordström&lt;/strong&gt; got asked if there are any good JavaFX courses available?&lt;/a&gt;
: &amp;ldquo;Asker has experience with other platforms and some Java knowledge. Online, or possibly in person in Scandinavia/Northern Europe.&amp;rdquo; Who has more ideas? What should we add to &lt;a href="https://www.jfx-central.com/tutorials" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com/tutorials&lt;/a&gt;
?
&lt;ul&gt;
&lt;li&gt;This is actually a nice one 🙂 ! &lt;a href="https://twitter.com/MithinDev/status/1665709087135506432" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;MITHIN DEV&lt;/strong&gt; shared &amp;ldquo;Building Your First JavaFX App!&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Not new, but a nice reminder by &lt;a href="https://twitter.com/jjenkov/status/1666472122535886849" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jakob Jenkov&lt;/strong&gt;: &amp;ldquo;I have a tutorial covering a lot of the basics of JavaFX&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;In French: &lt;a href="https://twitter.com/jachampagne8/status/1674085894700113921" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jason Champagne&lt;/strong&gt; has a series of videos, part 2&lt;/a&gt;
: &amp;ldquo;Point essentiel en JavaFX sur l&amp;rsquo;architecture des différents composants, en particulier le Scene Graph et la gestion des fenêtres (stages)&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Not new, but just discovered: &lt;a href="https://www.youtube.com/watch?v=guXTwZpGVRk&amp;amp;list=PLoodc-fmtJNbeL8P1DizFcgjp62UjvJ3t" target="_blank" rel="noopener noreferrer"&gt;Video series by &lt;strong&gt;Jaret Wright&lt;/strong&gt; to create a JavaFX Memory Game&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/TheDonRaab/status/1662199629407027203" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Donald Raab&lt;/strong&gt; is hoping to get back to experimenting with JavaFX again this summer&lt;/a&gt;
 and to submit conference talks&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.online/@sten/110470561467745227" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sten Nordström&lt;/strong&gt; is looking for JavaFX tutorials&lt;/a&gt;
: &amp;ldquo;Asker has experience with other platforms and some Java knowledge. Online, or possibly in person in Scandinavia/Northern Europe.&amp;rdquo; Who can help him? First starting point should of course be: &lt;a href="https://www.jfx-central.com/tutorials" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com/tutorials&lt;/a&gt;
 😉&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1483fio/need_help_building_javafx_project_in_vscode/" target="_blank" rel="noopener noreferrer"&gt;A help request on Reddit to build a JavaFX project in VsCode&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-jfx-central"&gt;JFX-Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Service call to all the people who have &amp;ldquo;something&amp;rdquo; on JFX-Central (library, book, tutorial,&amp;hellip;). We are reviewing all info on the website in preparation of the new JFX-Central version. But we need your help, please contact us or make a pull request in &lt;a href="https://github.com/dlsc-software-consulting-gmbh/jfxcentral-data" target="_blank" rel="noopener noreferrer"&gt;jfxcentral-data&lt;/a&gt;
 to make sure all the info is still correct and up-to-date. Thanks!&lt;/li&gt;
&lt;li&gt;More previews of version 2 of jfx-central.com:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1663916396814761987" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is drooling with the layout&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;And &lt;a href="https://twitter.com/dlemmermann/status/1663916816794517504" target="_blank" rel="noopener noreferrer"&gt;more drooling&lt;/a&gt;
&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1662388854366560256" target="_blank" rel="noopener noreferrer"&gt;Social login capabilities were added&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;And he is having almost too much fun 🙂 &lt;a href="https://twitter.com/dlemmermann/status/1664334599319592969" target="_blank" rel="noopener noreferrer"&gt;Added banners to the tips and tricks pages&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Finding out what&amp;rsquo;s coming to the next JavaFX release &lt;a href="https://twitter.com/dlemmermann/status/1668690954876755974" target="_blank" rel="noopener noreferrer"&gt;will be super easy by visiting the new OpenJFX page on JFX-Central&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Finding that one library you recently heard about &lt;a href="https://twitter.com/dlemmermann/status/1669472701059047424" target="_blank" rel="noopener noreferrer"&gt;will be easy via JFX-Central&amp;hellip; and who wrote it, and videos showing it, and the repo coordinates, and and and&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1672975213376552964" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Lee Wyatt&lt;/strong&gt;, one of the main contributors to the new JFX-Central version&lt;/a&gt;
 added a &amp;ldquo;Credits&amp;rdquo; page, one of the many pages he created and/or improved.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; wants your opinion about a new logo for jfx-central (and JavaFX itself?)
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1666478961675862022" target="_blank" rel="noopener noreferrer"&gt;First idea with a lot of remarks and adjusted proposals by others&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1666735588500811777" target="_blank" rel="noopener noreferrer"&gt;The next proposal&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;After many iterations, &lt;a href="https://twitter.com/dlemmermann/status/1669026529429397521" target="_blank" rel="noopener noreferrer"&gt;Dirk found the perfect new logo&lt;/a&gt;
: &amp;ldquo;Work on the logo for the JFX-Central website is finished. In the end large, small, color, black, white, etc&amp;hellip;. versions were needed to make it look code in all places.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Testing the layout of the new version &lt;a href="https://twitter.com/dlemmermann/status/1666771832765132801" target="_blank" rel="noopener noreferrer"&gt;with &amp;ldquo;responsive design&amp;rdquo; mode is in Safari&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;And the new desktop version will &lt;a href="https://twitter.com/dlemmermann/status/1667169729784545280" target="_blank" rel="noopener noreferrer"&gt;come with its own custom stage when running on desktop&lt;/a&gt;
. Other improvements for the app version of the new JFX-Central:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1670798362453368840" target="_blank" rel="noopener noreferrer"&gt;A couple of screens were added for a nice bootstrap sequence&lt;/a&gt;
. When running the app for the first time it will clone its data repo (takes a while). Any launch after that will perform an update on it (fast).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1671506280026972164" target="_blank" rel="noopener noreferrer"&gt;It will also come with a tray icon for quick access to anything JavaFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1671538241952948228" target="_blank" rel="noopener noreferrer"&gt;It is now an even better citizen when running on Mac&lt;/a&gt;
. Can you spot the difference aka the &amp;ldquo;dots&amp;rdquo;?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;We have been very busy working on the new JFX-Central version&amp;hellip; Maybe you want to help out? &lt;a href="https://github.com/dlemmermann/jfxcentral2" target="_blank" rel="noopener noreferrer"&gt;The repository is now public&lt;/a&gt;
! Feel free to make contributions. Testing, and reporting bugs. All are very welcome.&lt;/li&gt;
&lt;/ul&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>Exploring the Depths of Java: A Comprehensive Conversation with Jakob Jenkov, Part-I</title><link>https://foojayio.github.io/website/today/exploring-the-depths-of-java-a-comprehensive-conversation-with-jakob-jenkov-part-i/</link><pubDate>Thu, 29 Jun 2023 13:33:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-the-depths-of-java-a-comprehensive-conversation-with-jakob-jenkov-part-i/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="jekov.jpeg" alt="" class="wp-image-98946" width="400" height="400"&gt;
&lt;/figure&gt;
&lt;p&gt;Welcome to the first part of our deep dive with Jakob Jenkov, a seasoned software developer and AWS solution architect, whose love for coding began with a Commodore 128 in the late &amp;rsquo;80s. Over the past decades, Jenkov has navigated the world of programming, with a particular emphasis on Java, making significant contributions to the community through his professional work and informative content on jenkov.com.&lt;/p&gt;
&lt;p&gt;In this exclusive interview, Jenkov shares his career journey, his thoughts on the evolving landscape of Java, and how his interest in both low-level and high-level programming intersects in his current role. His unique insights into the future of Java and its significance in today&amp;rsquo;s increasingly diverse computing environments provide a captivating read for both Java enthusiasts and the broader software development community.&lt;/p&gt;</description></item><item><title>Optimise CPU Performance Through Isolation and System Tuning</title><link>https://foojayio.github.io/website/today/how-to-optimise-cpu-performance-through-isolation-and-system-tuning/</link><pubDate>Thu, 29 Jun 2023 06:36:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-optimise-cpu-performance-through-isolation-and-system-tuning/</guid><description>&lt;h4 id="what-are-the-challenges-of-tuning-your-cpu-and-system-for-optimal-performance-with-linux-and-how-does-chronicle-tune-address-them"&gt;What are the challenges of tuning your CPU and system for optimal performance with Linux, and how does Chronicle Tune address them?&lt;/h4&gt;
&lt;p&gt;CPU isolation and efficient system management are critical for any application which requires low-latency and high-performance computing. These measures are especially important for high-frequency trading systems, where split-second decisions on buying and selling stocks must be made.&lt;/p&gt;
&lt;p&gt;To achieve this level of performance, such systems require dedicated CPU cores that are free from interruptions by other processes, together with wider system tuning.&lt;/p&gt;</description></item><item><title>Time Machine: A Look-Back at Java Sessions from NODES 2022</title><link>https://foojayio.github.io/website/today/time-machine-a-look-back-at-java-sessions-from-nodes-2022/</link><pubDate>Wed, 28 Jun 2023 07:53:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/time-machine-a-look-back-at-java-sessions-from-nodes-2022/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/time-machine-a-look-back-at-java-sessions-from-nodes-2022/nodes2023-java-scaled.jpg" alt="Base Photo by Compare Fibre on Unsplash" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Figure 1. Base Photo by Compare Fibre on Unsplash&lt;/p&gt;
&lt;p&gt;As we prepare for NODES 2023, I wanted to pull out the time machine and review the Java sessions from &lt;a href="https://neo4j.com/video/nodes-2022/" target="_blank" rel="noopener noreferrer"&gt;NODES 2022&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;I will be submitting some abstracts to the &lt;a href="https://sessionize.com/neo4j-nodes-2023" target="_blank" rel="noopener noreferrer"&gt;2023 Call for Proposal&lt;/a&gt;
 here soon, likely in the Java category, so I thought looking at last year&amp;rsquo;s sessions might give me some inspiration or ideas for gaps or continuations I might want to explore.&lt;/p&gt;</description></item><item><title>Upgrade to Jakarta EE 10 and GlassFish 7: Easier Than You Think!</title><link>https://foojayio.github.io/website/today/how-to-upgrade-to-jakarta-ee-10-and-glassfish-7-its-much-easier-than-you-think/</link><pubDate>Tue, 27 Jun 2023 07:29:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-upgrade-to-jakarta-ee-10-and-glassfish-7-its-much-easier-than-you-think/</guid><description>&lt;p&gt;Upgrading to Jakarta EE 10 from an older version of Jakarta EE or Java EE can be a bit tricky and may require some extra attention to detail. But don&amp;rsquo;t worry, we&amp;rsquo;ve got you covered!&lt;/p&gt;
&lt;p&gt;In this series of articles, we&amp;rsquo;ll explain everything you need to know before upgrading to Jakarta EE 10 and guide you to complete the upgrade successfully and in almost no time.&lt;/p&gt;
&lt;h2 id="h2-0-types-of-challenges"&gt;Types of challenges&lt;/h2&gt;
&lt;p&gt;The challenges with upgrading to Jakarta EE 10 or to Eclipse GlassFish 7 fall into these 3 main categories:&lt;/p&gt;</description></item><item><title>Debugging OpenJDK Tests in VSCode (Without Losing Your Mind)</title><link>https://foojayio.github.io/website/today/debugging-openjdk-tests-in-vscode-without-losing-your-mind/</link><pubDate>Mon, 26 Jun 2023 11:27:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-openjdk-tests-in-vscode-without-losing-your-mind/</guid><description>&lt;p&gt;Consider you want to debug a test case of the JDK like &lt;a href="https://github.com/openjdk/jdk/tree/master/test/hotspot/jtreg/serviceability/AsyncGetCallTrace" target="_blank" rel="noopener noreferrer"&gt;serviceability/AsyncGetCallTrace&lt;/a&gt;
. This test, and many others, are implemented using the &lt;em&gt;Regression Test Harness for the JDK&lt;/em&gt; (jtreg):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;jtreg&lt;/code&gt; is the test harness used by the JDK test framework. This framework is intended primarily for regression tests. It can also be used for unit tests, functional tests, and even simple product tests &amp;ndash; in other words, just about any type of test except a conformance test, which belong in a TCK.&lt;/p&gt;</description></item><item><title>Foojay Podcast #26: The Future of Source Control and CI/CD</title><link>https://foojayio.github.io/website/today/foojay-podcast-26/</link><pubDate>Mon, 26 Jun 2023 08:35:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-26/</guid><description>&lt;p&gt;As developers, we like to automate the boring parts of our job. This automation includes the source control system, build pipelines, and code analysis tools.&lt;/p&gt;
&lt;p&gt;In recent decades, we have seen evolutions from CVS to Subversion to Git. Is this the endpoint? Did we find the holy grail in version control? Or what evolutions are waiting for us?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s find out together with these fantastic guests&amp;hellip;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This is the final episode of season 2 of the Foojay Podcast. See you in September for the start of our new season with more JUGs, the launch of Java 21, and much more!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Why I prefer trunk-based development</title><link>https://foojayio.github.io/website/today/why-i-prefer-trunk-based-development/</link><pubDate>Fri, 23 Jun 2023 08:06:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-i-prefer-trunk-based-development/</guid><description>&lt;p&gt;&lt;strong&gt;Trisha summarizes the advantages of trunk-based development (as opposed to branch-based development) in this article.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These days, distributed version control systems like Git have &amp;ldquo;won the war&amp;rdquo; of version control. One of the arguments I used to hear when DVCSs were gaining traction was around how easy it is to branch and merge with a VCS like Git. However, I&amp;rsquo;m a big fan of &lt;a href="https://en.wikipedia.org/wiki/Trunk-based_development" target="_blank" rel="noopener noreferrer"&gt;Trunk-Based Development (TBD)&lt;/a&gt;
, and I want to tell you why.&lt;/p&gt;</description></item><item><title>Introducing the Foojay.io Calendar API</title><link>https://foojayio.github.io/website/today/foojay-calendar-api/</link><pubDate>Thu, 22 Jun 2023 06:40:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-calendar-api/</guid><description>&lt;p&gt;We are excited to share that Foojay is growing and offering additional resources to bring the Java and OpenJDK community together on a global scale.&lt;/p&gt;
&lt;p&gt;Several months ago, we launched the &lt;a href="https://foojayio.github.io/website/calendar"&gt;Foojay Calendar&lt;/a&gt;
, an interactive platform that allows individuals to propose Java-related and Kotlin-related and any other OpenJDK-related events and add them to the calendar.&lt;/p&gt;
&lt;p&gt;All Foojay members are welcome to submit their events. Once reviewed, the event will be included in the calendar.
&lt;img src="https://foojayio.github.io/website/today/foojay-calendar-api/calendar_preview-1024x535.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Building Custom Solutions vs. Buy-and-Build Software</title><link>https://foojayio.github.io/website/today/building-custom-solutions-vs-buy-and-build-software/</link><pubDate>Wed, 21 Jun 2023 14:41:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-custom-solutions-vs-buy-and-build-software/</guid><description>&lt;h3 id="h3-0-the-challenges-of-building-a-fix-engine"&gt;The Challenges of Building a FIX Engine&lt;/h3&gt;
&lt;p&gt;The first day I was introduced to &lt;a href="https://en.wikipedia.org/wiki/Financial_Information_eXchange" target="_blank" rel="noopener noreferrer"&gt;Financial Information eXchange (FIX)&lt;/a&gt;
 was when I worked at an investment bank in London as a developer.&lt;/p&gt;
&lt;p&gt;I was told to write a feed handler to retrieve market data.&lt;/p&gt;
&lt;p&gt;Bear in mind that at this time, I knew nothing about FIX, apart from Googling it for about 10 mins on the internet.&lt;/p&gt;
&lt;p&gt;With a touch of overconfidence and slight arrogance, I set to work coding a direct socket connection to the remote FIX endpoint, &amp;ldquo;how hard could it be?&amp;rdquo;&lt;/p&gt;</description></item><item><title>Exploring Java 21's Intriguing Additions (Part 1)</title><link>https://foojayio.github.io/website/today/exploring-java-21s-intriguing-additions-unveiling-new-features-part-1/</link><pubDate>Tue, 20 Jun 2023 13:40:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-java-21s-intriguing-additions-unveiling-new-features-part-1/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction:&lt;/h2&gt;
&lt;p&gt;Java 21 is going to introduce several intriguing additions that enhance the language&amp;rsquo;s capabilities.&lt;/p&gt;
&lt;p&gt;This article aims to discuss a few notable features that stand out, providing an overview of their functionalities and potential use cases.&lt;/p&gt;
&lt;br /&gt;
&lt;h2 id="h2-1-character-enhancements"&gt;Character Enhancements:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Character.isEmoji(int codePoint)&lt;/code&gt;: This method determines whether a character is considered an emoji based on its Unicode properties defined in Unicode Emoji (&lt;a href="https://unicode.org/reports/tr51/#Emoji_Properties_and_Data_Files" target="_blank" rel="noopener noreferrer"&gt;Unicode Emoji Technical Standard #51&lt;/a&gt;
). For example, executing &lt;code&gt;Character.isEmoji(9203)&lt;/code&gt; would return &lt;code&gt;true&lt;/code&gt; for the character ⏳, which has the code point 9203.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Character.isEmojiPresentation(int codePoint)&lt;/code&gt;: Similar to &lt;code&gt;isEmoji()&lt;/code&gt;, this method checks if a character has the Emoji Presentation property. It helps identify characters that display as emojis when rendered.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Example:&lt;/p&gt;</description></item><item><title>Manifold vs. Lombok: Enhancing Java with Property Support</title><link>https://foojayio.github.io/website/today/manifold-vs-lombok-enhancing-java-with-property-support/</link><pubDate>Mon, 19 Jun 2023 18:04:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/manifold-vs-lombok-enhancing-java-with-property-support/</guid><description>&lt;p&gt;Today, we&amp;rsquo;ll explore an intriguing aspect of Manifold: its property support.&lt;/p&gt;
&lt;p&gt;In comparison, we&amp;rsquo;ll also examine Lombok, a popular library that offers similar features.&lt;/p&gt;
&lt;p&gt;By analyzing the differences between these two projects, we can gain insight into their core philosophies and advantages.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s dive in and discover how Manifold&amp;rsquo;s property support stands out.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/z-9jSMq_Yk8?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;As always, you can find the code examples and additional resources for this post on my &lt;a href="https://github.com/shai-almog/java-book/" target="_blank" rel="noopener noreferrer"&gt;GitHub page&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Foojay Podcast #25: Game Development with Java, JavaFX, FXGL</title><link>https://foojayio.github.io/website/today/foojay-podcast-25/</link><pubDate>Mon, 19 Jun 2023 08:56:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-25/</guid><description>&lt;p&gt;Java and JavaFX are probably not the first options you consider if you want to create a game application.&lt;/p&gt;
&lt;p&gt;But the FXGL library allows you to do precisely that! Create games that run on all platforms with the same codebase as we are used to with Java.&lt;/p&gt;
&lt;p&gt;And even without an extra library, the JavaFX Components and Canvas provide many animation and gaming possibilities.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s learn from experts why Java should be on your game-development-language-list!&lt;/p&gt;</description></item><item><title>Johannes Bechberger's Tour d'Europe</title><link>https://foojayio.github.io/website/today/report-of-my-small-tour-deurope/</link><pubDate>Fri, 16 Jun 2023 17:08:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/report-of-my-small-tour-deurope/</guid><description>&lt;p&gt;Between 31st May and 14th June, I was on tour, giving seven talks in 4 cities in 3 different countries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;31st May: &lt;a href="http://www.jugmilano.it/meeting-145.html" target="_blank" rel="noopener noreferrer"&gt;JUG Milano&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;5th June: &lt;a href="https://www.meetup.com/openvaluemuenchen/events/293736106/" target="_blank" rel="noopener noreferrer"&gt;OpenValue Munich Meetup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;7th June: &lt;a href="https://jdriven.com/full-stack-conference-2023" target="_blank" rel="noopener noreferrer"&gt;JDriven Full Stack Conference in Nieuwegein&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;10th and 11th of June: &lt;a href="https://cfp.gulas.ch/gpn21/speaker/9ZMNT9/" target="_blank" rel="noopener noreferrer"&gt;Gulasch Programmier Nacht Karlsruhe&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;14th of June: &lt;a href="https://www.entwicklertag.de/2023/conference_day.html" target="_blank" rel="noopener noreferrer"&gt;Karlsruher Entwicklertag&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class="wp-block-image size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="https://mostlynerdless.de/wp-content/uploads/2023/06/image-7.png" alt="" class="wp-image-877" width="372" height="507"&gt;
 &lt;figcaption class="wp-element-caption"&gt;
 A visualization of all the cities I visited, but I took the train for all transits (except for the Arnhem to Nieuwegein route, where Ties van de Ven drove me in his Tesla).
 &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;It was an exciting trip, and I had the pleasure of visiting friends in Zurich and Augsburg and a &lt;a href="https://www.muehlen-kaiser.de/" target="_blank" rel="noopener noreferrer"&gt;grain mill shop&lt;/a&gt;
 in Munich.&lt;/p&gt;</description></item><item><title>The Anatomy of a JVM</title><link>https://foojayio.github.io/website/today/the-anatomy-of-a-jvm/</link><pubDate>Fri, 16 Jun 2023 07:57:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-anatomy-of-a-jvm/</guid><description>&lt;p&gt;Java is not only a programming language.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s an &amp;ldquo;umbrella&amp;rdquo; that covers tools, runtimes, and even a whole community.&lt;/p&gt;
&lt;p&gt;In this article, we want to look at one part under the umbrella: the &lt;strong&gt;Java Virtual Machine&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;What is it exactly, and how does it work?&lt;/p&gt;
&lt;br /&gt;
&lt;hr&gt;
&lt;h3 id="h3-0-java-is-consistently-in-the-top-of-most-popular-languages-the-real-reason-for-this-is-not-the-language-itself-but-the-jvm-and-the-power-that-it-gives-to-the-developer"&gt;&lt;em&gt;Java is consistently in the top of most popular languages. The real reason for this is not the language itself but the JVM. And the power that it gives to the developer.&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;Simon Ritter, Deputy CTO, Azul&lt;/p&gt;</description></item><item><title>Vaadin 24.1: Bringing You More Than Minor Improvements!</title><link>https://foojayio.github.io/website/today/vaadin-24-1-bringing-you-more-than-minor-improvements/</link><pubDate>Thu, 15 Jun 2023 14:58:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/vaadin-24-1-bringing-you-more-than-minor-improvements/</guid><description>&lt;p&gt;I am pleased to share with you the newest release of Vaadin 24.1.&lt;/p&gt;
&lt;p&gt;While &lt;a href="http://https://foojay.io/today/vaadin-24-java-17-jakarta-ee-10-servlet-6-spring-boot-3/" title="Vaadin 24.0" target="_blank" rel="noopener noreferrer"&gt;Vaadin 24.0&lt;/a&gt;
 was about upgrading the technology baseline and compatibility, this version brings you some new features.&lt;/p&gt;
&lt;p&gt;Here are the best of them!&lt;/p&gt;
&lt;h2 id="h2-0-visual-view-builder"&gt;Visual View Builder&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://vaadin.com/docs/latest/tools/view-builder" title="Vaadin View Builder" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://vaadin.com/docs/latest/static/37d22f0783d625059a3b94ed276b7d7a/cfb07/view-builder-start.webp" alt="Vaadin View Builder" title="Vaadin View Builder" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Built into start.vaadin.com, Visual View Builder helps you to create application prototypes using Vaadin UI components, generate Java code and share your prototypes to gather feedback.&lt;/p&gt;</description></item><item><title>Exploring Java Records In A Jakarta EE Context</title><link>https://foojayio.github.io/website/today/exploring-java-records-in-a-jakarta-ee-context/</link><pubDate>Wed, 14 Jun 2023 21:08:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-java-records-in-a-jakarta-ee-context/</guid><description>&lt;p&gt;Java Records, one of the major highlights of the Java 16 release, provides a concise and immutable way to define classes for modelling data.&lt;/p&gt;
&lt;p&gt;This conciseness lends itself useful in a typical Jakarta EE application that can have a number of layers that need to share data.&lt;/p&gt;
&lt;p&gt;For example, the data layer might want to return a subset of a given data set to a calling client through a data projection object.&lt;/p&gt;</description></item><item><title>Unique Identifiers Based on Timestamps in Distributed Applications</title><link>https://foojayio.github.io/website/today/unique-identifiers-based-on-timestamps-in-distributed-applications/</link><pubDate>Wed, 14 Jun 2023 11:22:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/unique-identifiers-based-on-timestamps-in-distributed-applications/</guid><description>&lt;p&gt;At &lt;a href="https://chronicle.software/?utm_source=website&amp;amp;amp;utm_medium=foojay&amp;amp;amp;utm_campaign=unique-identifiers" title="Chronicle" target="_blank" rel="noopener noreferrer"&gt;Chronicle&lt;/a&gt;
 we build applications that must process very high numbers of events with minimum latency. Generating unique IDs for these events using the traditional method of UUIDs introduces an unacceptable time overhead into our applications, so an alternative approach is needed.&lt;/p&gt;
&lt;p&gt;I recently wrote &lt;a href="http://blog.vanillajava.blog/2021/12/system-wide-unique-nanosecond-timestamps.html" title="an article" target="_blank" rel="noopener noreferrer"&gt;an article&lt;/a&gt;
 on how timestamps can be used as unique identifiers, as they are much cheaper to generate than other methods of generating unique identifiers, taking a fraction of a microsecond.&lt;/p&gt;</description></item><item><title>Java on Visual Studio Code – May 2023</title><link>https://foojayio.github.io/website/today/java-on-visual-studio-code-may-2023/</link><pubDate>Tue, 13 Jun 2023 11:03:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-visual-studio-code-may-2023/</guid><description>&lt;p&gt;&lt;strong&gt;Hi everyone, welcome to our May update for Visual Studio Code Java! In this article, we have tons of new features covering performance improvement, user experience as well as Spring Boot integration, so let&amp;rsquo;s get started!&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id="built-in-java-profile-templates-in-vs-code"&gt;Built-in Java Profile Templates in VS Code&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/docs/editor/profiles" target="_blank" rel="noopener noreferrer"&gt;Profiles&lt;/a&gt;
 is a recent feature from VS Code that allows you to quickly switch your editor extensions, settings, and UI layout based on your current project or task. Starting in VS Code version 1.78, we have provided two built-in Java profile template for you to use. The two Java profiles are&lt;/p&gt;</description></item><item><title>GitLab Pages Preview</title><link>https://foojayio.github.io/website/today/gitlab-pages-preview/</link><pubDate>Mon, 12 Jun 2023 08:55:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/gitlab-pages-preview/</guid><description>&lt;p&gt;When I write Apache APISIX-related blog posts, I want my colleagues to review them first. However, it&amp;rsquo;s my blog, and since I mix personal and business posts, I want to keep them from the repository. I need a preview, accessible only to a few, something like &lt;a href="https://vercel.com/docs/concepts/deployments/preview-deployments" target="_blank" rel="noopener noreferrer"&gt;Vercel&amp;rsquo;s preview&lt;/a&gt;
. I&amp;rsquo;m using GitLab Pages, and there&amp;rsquo;s no such out-of-the-box feature.&lt;/p&gt;
&lt;p&gt;I tried two methods: GitHub gists and PDFs. Both have issues.&lt;/p&gt;</description></item><item><title>Breaking the Code: How Chris Newland is Changing the Game in JVM Performance!</title><link>https://foojayio.github.io/website/today/breaking-the-code-how-chris-newland-is-changing-the-game-in-jvm-performance/</link><pubDate>Mon, 12 Jun 2023 08:44:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/breaking-the-code-how-chris-newland-is-changing-the-game-in-jvm-performance/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="chris.png" alt="" class="wp-image-98734" width="384" height="384"&gt;
&lt;/figure&gt;
&lt;p&gt;We&amp;rsquo;re excited to introduce you to Chris Newland, an industry veteran and dedicated JVM performance specialist.&lt;/p&gt;
&lt;p&gt;Chris has a long-standing history of contributing to the Java community with open-source tools aimed at enhancing Java and JVM understanding.&lt;/p&gt;
&lt;p&gt;Among his well-known tools is JITWatch, which has gained significant recognition and use in the JVM community.&lt;/p&gt;
&lt;p&gt;In this conversation, we delve into Chris&amp;rsquo;s journey, his motivations, and his thoughts on JVM performance, Java ecosystem changes, and the role of AI in software development.&lt;/p&gt;</description></item><item><title>Operator Overloading in Java</title><link>https://foojayio.github.io/website/today/operator-overloading-in-java/</link><pubDate>Sat, 10 Jun 2023 12:19:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/operator-overloading-in-java/</guid><description>&lt;p&gt;In this article, we&amp;rsquo;ll delve into the fascinating world of operator overloading in Java.&lt;/p&gt;
&lt;p&gt;Although Java doesn&amp;rsquo;t natively support operator overloading, we&amp;rsquo;ll discover how Manifold can extend Java with that functionality.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll explore its benefits, limitations, and use cases, particularly in scientific and mathematical code.&lt;/p&gt;
&lt;p&gt;We will also explore three powerful features provided by Manifold that enhance the default Java type safety while enabling impressive programming techniques.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll discuss unit expressions, type-safe reflection coding, and fixing methods like equals during compilation.&lt;/p&gt;</description></item><item><title>Preventing Cross-Site Scripting (XSS) in Java with Snyk Code</title><link>https://foojayio.github.io/website/today/preventing-cross-site-scripting-xss-in-java-applications-with-snyk-code/</link><pubDate>Fri, 09 Jun 2023 15:23:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/preventing-cross-site-scripting-xss-in-java-applications-with-snyk-code/</guid><description>&lt;p&gt;Java is a powerful backend programming language that can also be used to write HTML pages for web applications. However, developers must know the potential security risks associated with Cross-Site Scripting (XSS) attacks when creating these pages.&lt;/p&gt;
&lt;p&gt;With the rise of modern templating frameworks, preventing security attacks through proper input validation and encoding techniques has become easier.&lt;/p&gt;
&lt;p&gt;However, when developers choose to create their own HTML pages without using a templating framework, there is an increased risk of introducing vulnerabilities.&lt;/p&gt;</description></item><item><title>Upgrade a Java 8 Project to 11 or Higher</title><link>https://foojayio.github.io/website/today/upgrade-a-java-8-project-to-11-or-higher/</link><pubDate>Thu, 08 Jun 2023 15:12:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/upgrade-a-java-8-project-to-11-or-higher/</guid><description>&lt;p&gt;&lt;strong&gt;Java 8 is a Long Term Supported (LTS) version, and &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
 will maintain it until 2030 for customers with a support license. You can continue to run Java 8 applications until then on updated and secure Java runtimes. But by staying on Java 8, you miss many other improvements in runtime performance and language enhancements for your developers.&lt;/strong&gt;
&lt;img src="https://foojayio.github.io/website/today/upgrade-a-java-8-project-to-11-or-higher/6-1-23-java-8-11-higher-1024x400.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Keeping a project on Java 8 will eventually lead to running it on a non-maintained runtime.&lt;/p&gt;</description></item><item><title>Neo4j's Online Conference Is Coming In October...</title><link>https://foojayio.github.io/website/today/neo4js-online-conference-is-coming-in-october-and-youre-invited/</link><pubDate>Wed, 07 Jun 2023 08:46:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/neo4js-online-conference-is-coming-in-october-and-youre-invited/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/neo4js-online-conference-is-coming-in-october-and-youre-invited/05.03_Nodes_Banner_1200x628-1-700x366.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;NODES is back for its fifth year on October 26, 2023!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s the biggest graph community gathering dedicated to learning how to integrate graph technologies into ML and dev projects.&lt;/p&gt;
&lt;p&gt;For 24 hours nonstop, speakers from around the world will showcase their implementations, tools, models, and more &amp;ndash; sharing everything they&amp;rsquo;ve learned over this past year.&lt;/p&gt;
&lt;p&gt;Join thousands of fellow developers, data scientists, and data engineers to get firsthand knowledge from peers who will show you the ropes &amp;ndash; for free! So be sure to &lt;a href="https://neo4j.registration.goldcast.io/events/6fb85147-ca27-4310-9dec-cb345c53bd6f" title="save your seat" target="_blank" rel="noopener noreferrer"&gt;save your seat&lt;/a&gt;
!&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>Cracking Code and Conventions: An Exclusive Interview with Nicolas Fränkel</title><link>https://foojayio.github.io/website/today/cracking-code-and-conventions-an-exclusive-interview-with-nicolas-frankel/</link><pubDate>Mon, 05 Jun 2023 11:06:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/cracking-code-and-conventions-an-exclusive-interview-with-nicolas-frankel/</guid><description>&lt;figure class="alignright is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="nicols-510x510.jpeg" alt="" class="wp-image-98603" width="383" height="383"&gt;
&lt;/figure&gt;
&lt;p&gt;In this enlightening interview, we explore the unique journey of Nicolas Fränkel, a seasoned professional in the software industry. From an architecture student to a passionate software developer, Nicolas shares his candid thoughts about the current state of software development and the potential impacts of AI.&lt;/p&gt;
&lt;p&gt;Profile:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🧑‍💼LinkedIn:&lt;a href="https://www.linkedin.com/in/nicolasfrankel/" target="_blank" rel="noopener noreferrer"&gt;Nicolas Fränkel &amp;ndash; Head of Developer Experience &amp;ndash; API7.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐦Twitter:&lt;a href="https://twitter.com/nicolas_frankel" target="_blank" rel="noopener noreferrer"&gt;@nicolas_frankel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👨‍💻GitHub:&lt;a href="https://github.com/nfrankel" target="_blank" rel="noopener noreferrer"&gt;nfrankel (Nicolas Fränkel)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📝Blog:&lt;a href="https://blog.frankel.ch/" target="_blank" rel="noopener noreferrer"&gt;Nicolas Fränkel - A Java geek&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📚Medium:&lt;a href="https://nfrankel.medium.com/" target="_blank" rel="noopener noreferrer"&gt;Nicolas Fränkel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💡Hashnode:&lt;a href="https://hashnode.com/@nfrankel" target="_blank" rel="noopener noreferrer"&gt;Nicolas Fränkel&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bazlur: Can you tell us about your background and how you got started in the software industry?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Foojay Podcast #24: BeJUG, BruJUG, and how Devoxx was born</title><link>https://foojayio.github.io/website/today/foojay-podcast-24/</link><pubDate>Mon, 05 Jun 2023 08:21:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-24/</guid><description>&lt;p&gt;The &lt;a href="https://foojayio.github.io/website/today/category/podcast/"&gt;Foojay Java User Group World Tour&lt;/a&gt;
 has already brought us to a lot of different countries virtually all over the world.&lt;/p&gt;
&lt;p&gt;But for this episode, the host decided to stay at home in Belgium.&lt;/p&gt;
&lt;p&gt;The Belgium JUG (BeJUG) started in 1997 and was the birthplace of Devoxx, Devoxx4Kids, and VoxxedDays.&lt;/p&gt;
&lt;p&gt;And in our capital Brussels, we&amp;rsquo;ve been able to join Brussels JUG (BruJUG), since 2010.&lt;/p&gt;
&lt;p&gt;So there&amp;rsquo;s a lot we can talk about to learn more about communities and conferences in Belgium!&lt;/p&gt;</description></item><item><title>Class Loader Hierarchies</title><link>https://foojayio.github.io/website/today/class-loader-hierarchies/</link><pubDate>Sat, 03 Jun 2023 08:56:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/class-loader-hierarchies/</guid><description>&lt;p&gt;Understanding class loader hierarchies is essential when developing Java agents, especially if these agents are instrumenting code.&lt;/p&gt;
&lt;p&gt;In my &lt;a href="https://foojayio.github.io/website/today/instrumenting-java-code-to-find-and-handle-unused-classes/"&gt;Instrumenting Java Code to Find and Handle Unused Classes&lt;/a&gt;
 article, I instrumented all classes with an agent and used a &lt;code&gt;Store&lt;/code&gt; class in this newly added code:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A challenge here is that all instrumented classes will use the Store. We, therefore, have to put the store onto the bootstrap classpath, making it visible to all classes.&lt;/p&gt;</description></item><item><title>Java String Templates Today</title><link>https://foojayio.github.io/website/today/java-string-templates-today/</link><pubDate>Fri, 02 Jun 2023 16:28:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-string-templates-today/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/revolutionize-json-parsing-in-java-with-manifold/"&gt;our last article&lt;/a&gt;
, we introduced you to the &lt;a href="http://manifold.systems/" target="_blank" rel="noopener noreferrer"&gt;Manifold&lt;/a&gt;
 project and how it offers a revolutionary set of language extensions for Java, including the ability to parse and process JSON files seamlessly in Java.&lt;/p&gt;
&lt;p&gt;Today, we will take a look at another exciting feature of the Manifold project: &lt;strong&gt;string templates&lt;/strong&gt;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ite6a5y50yQ?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;But before we get to that, some of the feedback I got from the previous post was that I was unclear about Manifold. Manifold is a combination of an IDE plugin and plugins to Maven or Gradle.&lt;/p&gt;</description></item><item><title>FP in Kotlin: Defining a Pipe Operator</title><link>https://foojayio.github.io/website/today/fp-in-kotlin-defining-a-pipe-operator/</link><pubDate>Fri, 02 Jun 2023 15:18:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/fp-in-kotlin-defining-a-pipe-operator/</guid><description>&lt;p&gt;There&amp;rsquo;s no support for the pipe operator &lt;code&gt;|&amp;gt;&lt;/code&gt; in Kotlin, so we have to come up with a custom and clean implementation for this function.&lt;/p&gt;
&lt;h2 id="h2-0-defining-a-pipe-operator"&gt;Defining a Pipe Operator&lt;/h2&gt;
&lt;p&gt;Next, one consistent and clean implementation is given for a pipe operator in Kotlin.&lt;/p&gt;
&lt;h4 id="finding-a-suitable-symbol"&gt;Finding a Suitable Symbol&lt;/h4&gt;
&lt;p&gt;First, I wanted to use the &lt;code&gt;|&amp;gt;&lt;/code&gt; pipe symbol commonly used in functional languages, but &lt;code&gt;&amp;gt;&lt;/code&gt; is not a supported character: &lt;code&gt;Name contains illegal characters: &amp;gt;&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Java is Very Fast, If You Don’t Create Many Objects</title><link>https://foojayio.github.io/website/today/java-is-very-fast/</link><pubDate>Thu, 01 Jun 2023 04:45:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-is-very-fast/</guid><description>&lt;p&gt;This article looks at a benchmark passing events over TCP/IP at 4 billion events per minute using the net.openhft.chronicle.wire.channel package in &lt;a href="https://chronicle.software/wire/?utm_source=article&amp;amp;amp;utm_medium=foojay&amp;amp;amp;utm_campaign=java-is-fast" title="Chronicle Wire" target="_blank" rel="noopener noreferrer"&gt;Chronicle Wire&lt;/a&gt;
 and why we aim to avoid object allocations.&lt;/p&gt;
&lt;p&gt;One of the key optimisations is creating almost no garbage. Allocation is supposed to be a very cheap operation and garbage collection of very short lived objects is also very cheap.&lt;/p&gt;
&lt;p&gt;Does not allocating really make such a difference? What difference does one small object per event (44 bytes) make to the performance in a throughput test where GC pauses are amortised?&lt;/p&gt;</description></item><item><title>Resilience in Coding: Miro Wengner on Thriving in the Software Industry</title><link>https://foojayio.github.io/website/today/resilience-in-coding-miro-wengner-on-thriving-in-the-software-industry/</link><pubDate>Wed, 31 May 2023 16:24:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/resilience-in-coding-miro-wengner-on-thriving-in-the-software-industry/</guid><description>&lt;figure class="alignright size-full"&gt;
 &lt;img fetchpriority="high" decoding="async" width="426" height="426" src="miro.jpeg" alt="" class="wp-image-98571"&gt;
&lt;/figure&gt;
&lt;p&gt;In this insightful discussion, we sit down with Miro Wengner, an accomplished software engineer with a deep-rooted affinity for Java. Miro shares his professional journey, highlights the significant challenges in the field, and reflects on the key moments that shaped his career.&lt;/p&gt;
&lt;h2 id="h2-0-profile"&gt;Profile&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🐦 Twitter: &lt;a href="https://twitter.com/miragemiko" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/miragemiko&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👔 LinkedIn: &lt;a href="https://www.linkedin.com/in/mwengner/" target="_blank" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/mwengner/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 GitHub &lt;a href="https://github.com/mirage22" target="_blank" rel="noopener noreferrer"&gt;https://github.com/mirage22&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🏠Home Page: &lt;a href="https://www.wengnermiro.com/" target="_blank" rel="noopener noreferrer"&gt;https://www.wengnermiro.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Fun fact: When I was in my early 30s, I took my sister to Amsterdam. We visited almost all the museums, and I realized they kept selling me a student ticket without asking me the whole time. And it happened many more times after that. So finally, when I was 38, my wife told me I should grow a beard and that I didn&amp;rsquo;t look like a student, so I&amp;rsquo;ve had a beard ever since. So I could get a beer without showing id.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>JavaFX Links of May 2023</title><link>https://foojayio.github.io/website/today/javafx-links-of-may-2023/</link><pubDate>Wed, 31 May 2023 06:48:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-may-2023/</guid><description>&lt;p&gt;Again a busy month in JavaFX-world! Here is a nice list with links for your reading and clicking pleasure!&lt;/p&gt;
&lt;p&gt;This is the summary of the #LinksOfTheWeek as published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 in May 2023.&lt;/p&gt;
&lt;h2 id="h2-0-javafx-core"&gt;JavaFX Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://techhub.social/@gluonhq/110374163797572361" target="_blank" rel="noopener noreferrer"&gt;JavaFX 21-ea+17 is available for download from GluonHQ or from Maven central&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/110378814066039175" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; believes it&amp;rsquo;s time to deprecate Java Swing&lt;/a&gt;
: &amp;ldquo;It doesn&amp;rsquo;t make sense to maintain Swing and move JavaFX forward. Deprecation doesn&amp;rsquo;t mean it needs to be removed immediately. But let&amp;rsquo;s deprecate it. We need to move forward, and we need the resources for this.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-scenebuilder"&gt;SceneBuilder&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Raumzeitfalle/status/1657471102673715202" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Raumzeitfalle&lt;/strong&gt; is wondering if you want to conveniently install Scene Builder 20 for JavaFX&lt;/a&gt;
? You can now do this thanks to the use of JDeploy.
&lt;ul&gt;
&lt;li&gt;This new version now offers a &lt;a href="https://twitter.com/Raumzeitfalle/status/1656697093463982083" target="_blank" rel="noopener noreferrer"&gt;direct menu shortcut to jfx-central.com&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;This release uses &lt;a href="https://techhub.social/@gluonhq/110337334600751096" target="_blank" rel="noopener noreferrer"&gt;JDK 20.0.1 and JavaFX 20.0.1&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/110371523942727201" target="_blank" rel="noopener noreferrer"&gt;Shared by &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Now that Scene Builder 20 is released, it is a good moment to work on functionality/bug fixes that can make it in 21. For most projects I work on, I prefer doing major changes shortly after a release, rather than shortly before a release.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-javafx-applications"&gt;JavaFX Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Shared by &lt;a href="https://twitter.com/marsxdev/status/1656911587163410432" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;MarsX.dev&lt;/strong&gt;: Lunatics&lt;/a&gt;
, a JavaFX-based email testing tool with a dummy SMTP server that lets you test email sending applications, monitor transactions, and simulate various network conditions.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/lanthale/status/1642981173826842624" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Clemens Lanthaler&lt;/strong&gt; announced LibrawFX 1.8.4&lt;/a&gt;
 with speed updates and raw settings added, using JDK 20 and JavaFX 20.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Heimbuchner_J/status/1653019966453473280" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Homebookner&lt;/strong&gt; shared SANEScanFX, a scanner application&lt;/a&gt;
, not finished yet but already usable.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1656677709106520064" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; proudly shared that Modellus received the recommended award again this year from Mac Informer&lt;/a&gt;
 (3rd consecutive year)! It&amp;rsquo;s a freely available app used worldwide that enables students &amp;amp; teachers (high school and university) to use mathematics to create or explore models interactively.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/crschnick/status/1661349160547766272" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; is working on context menu actions for XPipe&lt;/a&gt;
. What else would you like to see added?
&lt;ul&gt;
&lt;li&gt;And he shared a &lt;a href="https://twitter.com/crschnick/status/1661340242052251650" target="_blank" rel="noopener noreferrer"&gt;video with more AtlantaFX themes plus smooth theme transitions&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Alessio_Vinerbi/status/1659864509320687619" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Alessio Vinerbi&lt;/strong&gt; seems to be working on MoonsonFX&lt;/a&gt;
, an alternative AfterEffects application. This makes me very curious as he already showed other impressive UI-work.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@juananpe/110383623013926873" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Juanan&lt;/strong&gt; seems to be working on a Mastodon client&lt;/a&gt;
, see also his other Toots on Mastodon.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fosstodon.org/@binjr/110380055859735465" target="_blank" rel="noopener noreferrer"&gt;binjr (FOSS timeseries browser) 3.12 is available&lt;/a&gt;
, with a new indexing mode for log files that makes it easy to search for arbitrary strings of character without the need for wildcards while maintaining the same level of performance, even on very large files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; shared several images and videos of Trinity, an AI / ML analysis tool.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1653721465059942401" target="_blank" rel="noopener noreferrer"&gt;By colorizing Binary Classification feature space from a deep learning model using JavaFX 3D&lt;/a&gt;
 we see decision manifolds have subgroupings.&lt;/li&gt;
&lt;li&gt;And an extra one with &lt;a href="https://twitter.com/SeanMiPhillips/status/1653492689193644032" target="_blank" rel="noopener noreferrer"&gt;Trinity&amp;rsquo;s UMAP projection cluster data maintaining references back to their hyper-dimensional vectors and imagery&lt;/a&gt;
. This demonstrates anchoring 2D nodes to Shape3D nodes as the PerspectiveCamera is rotated.&lt;/li&gt;
&lt;li&gt;Too complex to understand? I agree, but his work is just amazing and really mind-blowing 😉&lt;/li&gt;
&lt;li&gt;If you want to know more about it, this is a link to an interview of December: &lt;a href="https://foojayio.github.io/website/today/visualizing-brain-computer-interface-data-using-javafx/"&gt;&amp;ldquo;Visualizing Brain Computer Interface Data Using JavaFX&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;And in those tweets he announced Trinity will be available soon on Github!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1655678667257782272" target="_blank" rel="noopener noreferrer"&gt;UMAP projector to visualize COVID infected tissue samples, clustered by genetic sequence classification&lt;/a&gt;
. Clear distinction between brain and body tissue using the Yule metric.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1656459698302861318" target="_blank" rel="noopener noreferrer"&gt;Process, cluster and render COVID tissue samples by genetic sequence code classification&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1656462050804092928" target="_blank" rel="noopener noreferrer"&gt;Similar, using the Yule distance metric, with 2500 samples each with over 18k dimensions&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t tell anyone, but Sean is actually a time traveler, who worked (will work?!) on the StarTrek user interfaces&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-javafx-games"&gt;JavaFX Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WebFXProject/status/1661336335427182593" target="_blank" rel="noopener noreferrer"&gt;Pac-Man and Ms. Pac-Man by &lt;strong&gt;Armin Reichert&lt;/strong&gt; ported to the web with WebFX&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1659545495704928257" target="_blank" rel="noopener noreferrer"&gt;Rubik&amp;rsquo;s cube v3.0 by &lt;strong&gt;OrangoMango&lt;/strong&gt; is available on itch.io&lt;/a&gt;
 for Windows, Android, Linux and Mac.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1655259186576474112" target="_blank" rel="noopener noreferrer"&gt;He also shared his Chess game&lt;/a&gt;
: sources and executables for Windows, Linux, macOS and Android. Features: play agains stockfish or LAN multiplayer, export game as FEN and PGN, arrows, premoves, time control, and much more&amp;hellip;&lt;/li&gt;
&lt;li&gt;And a link to the &lt;a href="https://twitter.com/orango_mango/status/1652974233864085504" target="_blank" rel="noopener noreferrer"&gt;sources of his 3D engine and the Minecraft-clone&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1657718394064601089" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; shared a video of a game where the player can now use the shockwave ability&lt;/a&gt;
 once the meter is full. It allows the player to quickly clear out a safe path in front of them.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1658565437053980691" target="_blank" rel="noopener noreferrer"&gt;And he had a fruitful discussion with game dev students on how to improve the UI&lt;/a&gt;
. In the video, you can check out the new health and weapon indicators around the player, without the need to look elsewhere to get this info.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-javafx-components"&gt;JavaFX Components&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/invokecoley/status/1660951086876749825" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Matt Coley&lt;/strong&gt; made a minimal/flexible TreeMap chart&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/crschnick/status/1658174428612550671" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; is feeling magic with dynamic OS theme detection&lt;/a&gt;
! Done with jSystemThemeDetector.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1658120303539519491" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; got a lot of interest on the animated circular progress indicator&lt;/a&gt;
 he made for Trinity and uploaded a version of it along with a tester app so folks could play with it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-javafx-on-foojay-io-the-website-for-friends-of-openjdk"&gt;JavaFX on Foojay.io, the website for Friends of OpenJDK&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/presenting-xpipe/"&gt;&amp;ldquo;If the user has installed programs to connect to remote systems, why not try to use them from Java instead of via libraries?&amp;rdquo;&lt;/a&gt;
 And then, on top of that, a tool for people who work with remote shell connections? &lt;strong&gt;Christopher Schnick&lt;/strong&gt; presenting X-Pipe.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/interview-with-paul-kocian-aka-orango_mango/"&gt;Interview by &lt;strong&gt;Frank Delporte&lt;/strong&gt; with &lt;strong&gt;Paul Kocian&lt;/strong&gt; aka @Orango_Mango&lt;/a&gt;
, who shared his progress on Twitter in creating a 3D engine with JavaFX, from a Rubik&amp;rsquo;s cube in January &amp;lsquo;23, over a basic tumbling car in February, to a full Minecraft-like world in April! His age? 16!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-podcast"&gt;Podcast&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://airhacks.fm/#episode_242" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Adam Bien&lt;/strong&gt; and &lt;strong&gt;Shai Almog&lt;/strong&gt; discuss JavaFX, Codename One, Swing, Flutter, and a Bit Android&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1657027053202423808" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is about to rent 190 square meters of office space in Zurich for our Swiss subsidiary of Senapt&lt;/a&gt;
. Exciting times, and JavaFX made that happen!&lt;/li&gt;
&lt;li&gt;Help! &lt;a href="https://twitter.com/AlmasBaim/status/1652066132872896512" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; is doing strange teleportation things with the Java Duke&lt;/a&gt;
&amp;hellip;&lt;/li&gt;
&lt;li&gt;It seems GraalVM is going to &lt;a href="https://twitter.com/shaunmsmith/status/1651621631322726413" target="_blank" rel="noopener noreferrer"&gt;announce some JavaFX related news with the next feature release, expected on June 13th&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-8-jfx-central"&gt;JFX-Central&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content:
&lt;ul&gt;
&lt;li&gt;Real-world app: &lt;a href="https://www.jfx-central.com/real_world/satergo" target="_blank" rel="noopener noreferrer"&gt;Satergo&lt;/a&gt;
, a desktop wallet app for the &amp;ldquo;Ergo&amp;rdquo; cryptocurrency.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1655893575480090625" target="_blank" rel="noopener noreferrer"&gt;Sneak preview of the new website taking advantage of Safari&amp;rsquo;s unified toolbar&lt;/a&gt;
, aka &amp;ldquo;theme color&amp;rdquo; meta tag.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared a lot of previews of the upcoming new version of jfx-central.com.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1658067095664443394" target="_blank" rel="noopener noreferrer"&gt;The &amp;ldquo;skeleton&amp;rdquo; for the detail pages&lt;/a&gt;
. It will be used to list information on people, books, libraries, tools, blogs, etc&amp;hellip; Every page will be responsive and auto-adjust to large (desktop), medium (tablet) and small devices (phone).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1661055817041297409" target="_blank" rel="noopener noreferrer"&gt;The new showcases section&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1659203119136509955" target="_blank" rel="noopener noreferrer"&gt;Videos will no longer be shown in a separate overlay, but &amp;ldquo;inline&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1661325621471969281" target="_blank" rel="noopener noreferrer"&gt;Ikonli will also have a nice new home&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1661718165577953280" target="_blank" rel="noopener noreferrer"&gt;The shiny new home for the &amp;ldquo;links of the week&amp;rdquo; section&lt;/a&gt;
. Also coming soon&amp;hellip; the RSS button.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1661676012466307072" target="_blank" rel="noopener noreferrer"&gt;Having a professional designer do your app&amp;rsquo;s design is always worth the money&lt;/a&gt;
. Not only do you save time, but it will also look much better.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Boosting Similarity Search with Real-time Stream Processing</title><link>https://foojayio.github.io/website/today/boosting-similarity-search-with-real-time-stream-processing/</link><pubDate>Tue, 30 May 2023 12:42:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/boosting-similarity-search-with-real-time-stream-processing/</guid><description>&lt;p&gt;The goal of similarity search and vector databases is to find similar results to the search query for unstructured data, such as text, images and videos. The unstructured data first is vectorised, and stored in a vector format. There are publicly available tools to create vectors from unstructured data, similarly, there are vector databases to store and perform similarity searches. This is important because of the rising popularity of Large Language Models (LLMs) and their combination with vector databases.&lt;/p&gt;</description></item><item><title>Managing Data Residency: The Demo</title><link>https://foojayio.github.io/website/today/managing-data-residency-the-demo/</link><pubDate>Mon, 29 May 2023 07:33:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/managing-data-residency-the-demo/</guid><description>&lt;p&gt;I explained the concepts and theory behind Data Residency in a &lt;a href="https://foojayio.github.io/website/today/managing-data-residency-concepts-theory/"&gt;previous post&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s time to get our hands dirty and implement it in a simple demo.&lt;/p&gt;
&lt;h2 id="h2-0-the-sample-architecture"&gt;The sample architecture&lt;/h2&gt;
&lt;p&gt;In the last section of the previous post, I proposed a sample architecture where location-based routing happened at two different stages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The API Gateway checks for an existing &lt;code&gt;X-Country&lt;/code&gt; header. Depending on its value, it forwards the request to the computed upstream; If no value is found or no value matches, it forwards it to a default upstream.&lt;/li&gt;
&lt;li&gt;The application uses &lt;a href="https://shardingsphere.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Shardingsphre&lt;/a&gt;
 to route again depending on the data. If the value computed by the API Gateway is correct, the flow stays &amp;ldquo;in its lane&amp;rdquo;; if not, it&amp;rsquo;s routed to the correct database, but with a performance penalty as it&amp;rsquo;s outside its lane.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I simplified some aspects:&lt;/p&gt;</description></item><item><title>Revolutionize JSON Parsing in Java with Manifold</title><link>https://foojayio.github.io/website/today/revolutionize-json-parsing-in-java-with-manifold/</link><pubDate>Fri, 26 May 2023 17:39:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/revolutionize-json-parsing-in-java-with-manifold/</guid><description>&lt;p&gt;Java developers have often envied JavaScript for its ease of parsing JSON.&lt;/p&gt;
&lt;p&gt;Although Java offers more robustness, it tends to involve more work and boilerplate code.&lt;/p&gt;
&lt;p&gt;Thanks to the Manifold project, Java now has the potential to outshine JavaScript in parsing and processing JSON files.&lt;/p&gt;
&lt;p&gt;Manifold is a revolutionary set of language extensions for Java that completely changes the way we handle JSON (and much more&amp;hellip;).&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/AoBnGZ7q6rk?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;h2 id="h2-0-getting-started-with-manifold"&gt;Getting Started with Manifold&lt;/h2&gt;
&lt;p&gt;The code for this tutorial can be found on my &lt;a href="https://github.com/shai-almog/java-book/" target="_blank" rel="noopener noreferrer"&gt;GitHub page&lt;/a&gt;
. Manifold is relatively young but already vast in its capabilities. You can learn more about the project on their website and Slack channel.&lt;/p&gt;</description></item><item><title>Your First Vaadin Spring Application in 2023</title><link>https://foojayio.github.io/website/today/your-first-vaadin-spring-application-in-2023/</link><pubDate>Thu, 25 May 2023 12:08:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/your-first-vaadin-spring-application-in-2023/</guid><description>&lt;p&gt;Spring pun intended, but I wanted to update the guide for beginners interested in combining these two technologies.&lt;/p&gt;
&lt;p&gt;By following these steps, you&amp;rsquo;ll have a basic Vaadin-Spring Boot application up and running in no time.&lt;/p&gt;
&lt;p&gt;Recently I noticed that it is 8 years since Vaadin was first released in &lt;a href="https://start.spring.io/" title="start.spring.io" target="_blank" rel="noopener noreferrer"&gt;start.spring.io&lt;/a&gt;
. Since then, there have been many additions to both Spring boot and Vaadin.&lt;/p&gt;
&lt;p&gt;Recent upgrade to&lt;a href="https://spring.io/blog/2021/09/02/a-java-17-and-jakarta-ee-9-baseline-for-spring-framework-6" title=" Java 17 and Jakarta EE 9" target="_blank" rel="noopener noreferrer"&gt;Java 17 and Jakarta EE 9&lt;/a&gt;
 baseline. Vaadin 24 added a new &lt;a href="https://vaadin.com/docs/latest/configuration/development-mode#pre-compiled-front-end-bundle-for-faster-start-up" title="pre-compiled frontend mod" target="_blank" rel="noopener noreferrer"&gt;pre-compiled frontend mod&lt;/a&gt;
e making the initial startup matter of seconds (native compilation using GraalVM would make that even faster). And many many more. Time to grow a new project.&lt;br&gt;
&lt;img src="https://foojayio.github.io/website/today/your-first-vaadin-spring-application-in-2023/plant-lines2-691x510.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>JavaFinder: Keeping Track of Java Inventories</title><link>https://foojayio.github.io/website/today/javafinder-keeping-track-of-java-inventories/</link><pubDate>Wed, 24 May 2023 20:12:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafinder-keeping-track-of-java-inventories/</guid><description>&lt;p&gt;Do you ever wonder how many Java distributions you have installed on your machine?&lt;/p&gt;
&lt;p&gt;I not only mean versions that you use for development but also versions that come bundled with the applications you use.&lt;/p&gt;
&lt;p&gt;Last weekend I decided to write a little tool that can help me to figure that out&amp;hellip; JavaFinder.&lt;/p&gt;
&lt;p&gt;This is a simple command line tool that will search a given path, including its subfolders for any OpenJDK distribution or GraalVM derivate.&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>"Transitioning to Java": My First Book!</title><link>https://foojayio.github.io/website/today/transitioning-to-java-my-first-book/</link><pubDate>Wed, 24 May 2023 08:01:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/transitioning-to-java-my-first-book/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/transitioning-to-java-my-first-book/BookCover-407x510.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;When I retired from the classroom in 2021, I had no intention of sitting on a rocking chair on my front porch.&lt;/p&gt;
&lt;p&gt;I looked for speaking opportunities, became a member of the JCP EC, and continued thinking about ways to enhance Java teaching.&lt;/p&gt;
&lt;p&gt;I also wanted to write a book. I approached a number of publishers with my idea for a beginner&amp;rsquo;s book. I even wrote a sample chapter and publsihed it on my blog, &lt;a href="https://www.omnijava.com/2021/10/20/java-for-beginners-my-unsuccessful-book-proposal/" target="_blank" rel="noopener noreferrer"&gt;https://www.omnijava.com/2021/10/20/java-for-beginners-my-unsuccessful-book-proposal/&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>JConf Toronto 2023 and the Dawn of a New Era of Concurrency</title><link>https://foojayio.github.io/website/today/java-threads-reimagined-a-reflection-on-jconf-toronto-2023-and-the-dawn-of-a-new-era-of-concurrency/</link><pubDate>Tue, 23 May 2023 16:52:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-threads-reimagined-a-reflection-on-jconf-toronto-2023-and-the-dawn-of-a-new-era-of-concurrency/</guid><description>&lt;p&gt;&lt;a href="https://2023.jconftoronto.dev/" target="_blank" rel="noopener noreferrer"&gt;JConf Toronto&lt;/a&gt;
, held on May 3rd, 2023, was a memorable gathering of Java enthusiasts and experts from both the local and global communities.&lt;/p&gt;
&lt;p&gt;The event took place at the Chestnut Conference Center, Toronto, featuring a wide variety of in-depth sessions, interactive Q&amp;amp;As, and two insightful keynote presentations.
&lt;img src="https://foojayio.github.io/website/today/java-threads-reimagined-a-reflection-on-jconf-toronto-2023-and-the-dawn-of-a-new-era-of-concurrency/PXL_20230503_203934815-1024x771.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Notable keynote speakers included &lt;a href="https://twitter.com/venkat_s" target="_blank" rel="noopener noreferrer"&gt;Venkat Subramaniam&lt;/a&gt;
 and &lt;a href="https://nealford.com/" target="_blank" rel="noopener noreferrer"&gt;Neal Ford&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Venkat&amp;rsquo;s keynote, titled &amp;ldquo;&lt;strong&gt;Know Your Java&lt;/strong&gt;,&amp;rdquo; was a deep dive into the intricacies of Java, demonstrating that there&amp;rsquo;s always something new to learn, even in a language that&amp;rsquo;s over two decades old.&lt;/p&gt;</description></item><item><title>Foojay Developer Certification: Measure Skills!</title><link>https://foojayio.github.io/website/today/foojay-developer-certification-measure-skills/</link><pubDate>Tue, 23 May 2023 16:32:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-developer-certification-measure-skills/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Learn the why and how of a group of enthusiastic people implementing a new sort of developer certification that objectively measures dev skills. We also invite you to join our initiative if you&amp;rsquo;re interested via #certification &lt;a href="https://bit.ly/join-foojay-slack" target="_blank" rel="noopener noreferrer"&gt;on the Foojay slack&lt;/a&gt;
.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a lot of debate about what defines a &amp;lsquo;good&amp;rsquo; developer. Of course, there are different dimensions to start with. Perhaps you can say there are two main ones: soft and technical skills. Soft skills include collaboration skills, communication, organizational sensitivity, personal leadership and so on.&lt;/p&gt;</description></item><item><title>An Industry Expert's Guide to Thriving in Software Development and Security</title><link>https://foojayio.github.io/website/today/decoding-success-an-industry-experts-guide-to-thriving-in-software-development-and-security/</link><pubDate>Tue, 23 May 2023 15:14:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/decoding-success-an-industry-experts-guide-to-thriving-in-software-development-and-security/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="erik.jpeg" alt="" class="wp-image-98444" width="450" height="675"&gt;
&lt;/figure&gt;
&lt;p&gt;In today&amp;rsquo;s fast-paced tech world, understanding the intricacies of software development and product management is key to success.&lt;/p&gt;
&lt;p&gt;In this enlightening discussion, we speak with Erik Costlow, a Senior Director of Product Management at Azul, who shares valuable insights from his journey of transitioning from engineering to product management, current industry trends, challenges in software development, and advice for new programmers.&lt;/p&gt;
&lt;p&gt;With a unique perspective and wealth of experience, Erik&amp;rsquo;s insights are sure to be invaluable for anyone seeking to navigate the complex landscape of the software industry.&lt;/p&gt;</description></item><item><title>State of Java Survey</title><link>https://foojayio.github.io/website/today/state-of-java-survey/</link><pubDate>Tue, 23 May 2023 05:47:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/state-of-java-survey/</guid><description>&lt;p&gt;Do you ever wonder what OpenJDK distributions and what Java versions your peers are using? Java-based infrastructures and languages? How many are running Java applications in public clouds?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;THE SURVEY DESCRIBED BELOW IS NOW COMPLETE, NO MORE RESPONSES CAN BE ACCEPTED.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Azul has been gathering all that data from a survey of Java users, running until 6:30pm CT on June 15, 2023. If you want to participate, the survey takes about 10 minutes, and we&amp;rsquo;ll hook you up with the report after the survey is complete. Plus you&amp;rsquo;ll be helping to add to our collective knowledge. Plus you&amp;rsquo;ll be entered into a drawing to win prizes like an Apple MacBook Pro laptop or a set of AirPods.
&lt;img src="https://foojayio.github.io/website/today/state-of-java-survey/image-6-1024x272.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Announcing the Digma Beta: First Runtime Linter for Java Code</title><link>https://foojayio.github.io/website/today/announcing-the-digma-beta-first-runtime-linter-for-java-code/</link><pubDate>Mon, 22 May 2023 13:52:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-the-digma-beta-first-runtime-linter-for-java-code/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/announcing-the-digma-beta-first-runtime-linter-for-java-code/doppleware_a_hipster_developer_following_a_yarn_thread_connecte_0aadda36-bf51-4283-90c5-54ff5f976af7-1-1024x512.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-call-for-developers"&gt;Call for Developers&lt;/h2&gt;
&lt;p&gt;We are looking for senior Java developers who are interested in exploring how to use observability to improve their code to join the beta program for Digma: a free runtime linter plugin for Jetbrains/Java.&lt;br&gt;
&lt;a href="https://digma.ai" target="_blank" rel="noopener noreferrer"&gt;Digma&lt;/a&gt;
 analyzes your code in runtime, improving coding practices and confidence when working on complex Java code.&lt;/p&gt;
&lt;p&gt;The plugin runs locally and doesn&amp;rsquo;t require sharing data.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/QP8RqYLbIbs?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;We have 20 slots currently open for the beta.&lt;/p&gt;</description></item><item><title>Foojay Podcast #23: Java Profiling and Performance</title><link>https://foojayio.github.io/website/today/foojay-podcast-23/</link><pubDate>Mon, 22 May 2023 10:23:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-23/</guid><description>&lt;p&gt;How do you get the maximum performance out of your Java application?&lt;/p&gt;
&lt;p&gt;And how to use profiling to find the bottlenecks?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s learn all about it in this podcast, with Heinz Kabutz, Marcus Lagergren, Chris Newland, and Frank Delporte!&lt;/p&gt;
&lt;p&gt;Java profiling is a crucial technique for measuring and improving the performance of applications.&lt;/p&gt;
&lt;p&gt;It helps identify bottlenecks, memory leaks, and other application performance issues.&lt;/p&gt;
&lt;p&gt;There are various challenges with using Java profiling, and the need for profiling depends on the complexity of the application and the performance requirements.&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>Unlocking Reproducible Profiler Tests</title><link>https://foojayio.github.io/website/today/mastering-the-art-of-controlling-the-jit-unlocking-reproducible-profiler-tests/</link><pubDate>Fri, 19 May 2023 09:02:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/mastering-the-art-of-controlling-the-jit-unlocking-reproducible-profiler-tests/</guid><description>&lt;p&gt;In my last article, &lt;a href="https://foojayio.github.io/website/today/using-async-profiler-and-jattach-programmatically-with-ap-loader/"&gt;Using Async-Profiler and Jattach Programmatically with AP-Loader&lt;/a&gt;
, I hinted that I&amp;rsquo;m currently working on a test library for writing better profiling API tests.&lt;/p&gt;
&lt;p&gt;The library is still work-in-progress, but it already allows you to write profiling API tests in plain Java:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;private int innerASGCT2() {
 new Tracer().runASGCT().assertTrue(
 Frame.hasMethod(0, "innerASGCT2", "()I"), 
 Frame.hasMethod(1, "testRunASGCT2"));
 return 0;
}

@Test
public void testRunASGCT2() {
 innerASGCT2();
}&lt;/pre&gt;
&lt;p&gt;This test case checks that calling AsyncGetCallTrace gives the correct result in this specific example. The test library allows you to write tests comparing the returns of multiple GetStackTrace, AsyncGetCallTrace, and AsyncGetStackTrace invocations in different modes and settings. The library can be found as trace-tester on GitHub; I aim to bring it into the OpenJDK later with my JEP.&lt;/p&gt;</description></item><item><title>Enriching Kafka Applications with Contextual Data</title><link>https://foojayio.github.io/website/today/enriching-kafka-applications-with-contextual-data/</link><pubDate>Thu, 18 May 2023 15:11:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/enriching-kafka-applications-with-contextual-data/</guid><description>&lt;p&gt;Developing high-performance large-stream processing applications is a challenging task.&lt;/p&gt;
&lt;p&gt;Choosing the right tool(s) is crucial to get the job done; as developers, we tend to focus on performance, simplicity, and cost.&lt;/p&gt;
&lt;p&gt;However, the cost becomes relatively high if we end up with two or more tools to do the same task.&lt;/p&gt;
&lt;p&gt;Simply put, you need to multiply development time, deployment time, and maintenance costs by the number of tools.&lt;/p&gt;
&lt;h2 id="h2-0-kafka"&gt;Kafka&lt;/h2&gt;
&lt;p&gt;Kafka is great for event streaming architectures, continuous data integration (ETL), and messaging systems of record (database).&lt;/p&gt;</description></item><item><title>Using Pausers in Event Loops</title><link>https://foojayio.github.io/website/today/using-pausers-in-event-loops/</link><pubDate>Wed, 17 May 2023 09:25:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-pausers-in-event-loops/</guid><description>&lt;p&gt;Typically in low-latency development, a trade-off must be made between minimising latency and avoiding excessive CPU utilisation.&lt;/p&gt;
&lt;p&gt;This article explores how Chronicle&amp;rsquo;s Pausers can be used to automatically apply a back-off strategy when there is no data to be processed, providing an excellent balance between resource usage and responsive, low-latency, low-jitter applications.&lt;/p&gt;
&lt;h3 id="h3-0-description-of-the-problem"&gt;Description of the Problem&lt;/h3&gt;
&lt;p&gt;In a typical application stack multiple threads are used for servicing events, processing data, pipelining etc.&lt;/p&gt;</description></item><item><title>Write Once, Run Embedded in any IDE</title><link>https://foojayio.github.io/website/today/write-once-run-embedded-in-any-ide/</link><pubDate>Tue, 16 May 2023 13:34:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/write-once-run-embedded-in-any-ide/</guid><description>&lt;p&gt;&lt;a href="https://foojayio.github.io/website/time-zones.png"&gt;&lt;img src="https://foojayio.github.io/website/today/write-once-run-embedded-in-any-ide/time-zones-1024x192.png" alt="Same Time Zones application running in IntelliJ IDEA, Eclipse and NetBeans" title="Same application running in IntelliJ IDEA, Eclipse and NetBeans" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Having written many Java GUI applications, I thought it would be cool to run them embedded in IntelliJ IDEA, Eclipse and NetBeans. I didn&amp;rsquo;t want to write three plugins per application so I came up with this solution.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-the-embedded-panel-criteria"&gt;The embedded panel criteria&lt;/h2&gt;
&lt;p&gt;To convert my Java Swing applications to run embedded in an IDE, I had to put the user interface in a panel with minimal implementation changes. I came up with these &lt;em&gt;should ideally&lt;/em&gt; criteria:&lt;/p&gt;</description></item><item><title>Reduce Java Application Startup and Warmup Times with CRaC</title><link>https://foojayio.github.io/website/today/reduce-java-application-startup-and-warmup-times-with-crac/</link><pubDate>Tue, 16 May 2023 11:21:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/reduce-java-application-startup-and-warmup-times-with-crac/</guid><description>&lt;p&gt;When a Java application runs, the JVM goes through the process of loading, initializing, and optimizing the code used by the application, including libraries, frameworks, and other components to reach the optimal performance level.&lt;/p&gt;
&lt;p&gt;Each time the application restarts, it has no record or memory of previous times it has run and the work it performed.&lt;/p&gt;
&lt;p&gt;As a result, it has to restart, extending valuable startup and warmup times and using precious resources.&lt;/p&gt;</description></item><item><title>Announcing "Java Unscripted: An Asynchronous Exploration of Excellence</title><link>https://foojayio.github.io/website/today/announcing-java-unscripted-an-asynchronous-exploration-of-excellence/</link><pubDate>Tue, 16 May 2023 10:09:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-java-unscripted-an-asynchronous-exploration-of-excellence/</guid><description>&lt;h3 id="h3-0-itl-dr"&gt;&lt;strong&gt;ITL;DR&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Introducing &amp;ldquo;Java Unscripted,&amp;rdquo; a series featuring interviews with Java industry experts. We aim to inspire and guide new developers with these insights. Interested in participating? Fill out our &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfyZEjdUaL_NTRKO-Gfk_Y9jIhuUszka3p1Kw6cWVdRBkOESQ/viewform" target="_blank" rel="noopener noreferrer"&gt;Interview Participation Form&lt;/a&gt;
. Let&amp;rsquo;s share your story with our community!&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;br /&gt;
&lt;p&gt;In a rapidly evolving world of technology, insights from industry luminaries can act as a beacon for those looking to navigate the challenging landscape. Over the years, industry leaders have seen the technological landscape transform. As a result, they possess a treasure trove of experiences and insights that can inspire and guide the upcoming generation of professionals. This idea inspired our new interview series, &amp;ldquo;&lt;strong&gt;&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfyZEjdUaL_NTRKO-Gfk_Y9jIhuUszka3p1Kw6cWVdRBkOESQ/viewform" target="_blank" rel="noopener noreferrer"&gt;Java Unscripted: An Asynchronous Exploration of Excellence.&lt;/a&gt;
&lt;/strong&gt; &amp;quot;&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>Discovering the Secrets to Success: An Exclusive Interview with Michael</title><link>https://foojayio.github.io/website/today/discovering-the-secrets-to-success-an-exclusive-interview-with-java-champion-michael-p-redlich/</link><pubDate>Mon, 15 May 2023 17:35:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/discovering-the-secrets-to-success-an-exclusive-interview-with-java-champion-michael-p-redlich/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="michael-redlich.jpg" alt="" class="wp-image-98312" width="480" height="480"&gt;
&lt;/figure&gt;
&lt;p&gt;In this interview, we had the pleasure of speaking with Michael P. Redlich, a seasoned software developer with over 30 years of experience in the field.&lt;/p&gt;
&lt;p&gt;Michael shares his journey from learning Fortran IV to contributing to major Jakarta EE specifications and provides valuable insights for junior developers looking to succeed in the ever-evolving world of technology.&lt;/p&gt;
&lt;p&gt;He emphasizes the importance of continuous learning and adapting to new technologies, and contributing to open-source projects.&lt;/p&gt;</description></item><item><title>Monitoring Event Loops for Blockages</title><link>https://foojayio.github.io/website/today/monitoring-event-loops-for-blockages/</link><pubDate>Mon, 15 May 2023 16:42:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/monitoring-event-loops-for-blockages/</guid><description>&lt;p&gt;Chronicle&amp;rsquo;s open source &lt;a href="https://github.com/OpenHFT/Chronicle-Threads" title="Chronicle Threads " target="_blank" rel="noopener noreferrer"&gt;Chronicle Threads&lt;/a&gt;
library has a little known feature which is one of the first tools I get from my bag if a client reports that they are seeing latency outliers.&lt;/p&gt;
&lt;p&gt;The usual way that a developer will measure their system for latency hotspots is to use a profiler, and modern profilers are amazing; there are numerous commercially available, but I generally find myself using Java Flight Recorder, async-profiler, or honest-profiler. These three are engineered to avoid the &lt;a href="https://stackoverflow.com/questions/17839933/what-are-safe-points-and-safe-point-polling-in-context-of-profiling" title="safepoint bias" target="_blank" rel="noopener noreferrer"&gt;safepoint bias&lt;/a&gt;
, and thus give very accurate results.&lt;/p&gt;</description></item><item><title>Logging Best Practices Revisited</title><link>https://foojayio.github.io/website/today/logging-best-practices-revisited/</link><pubDate>Mon, 15 May 2023 13:07:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/logging-best-practices-revisited/</guid><description>&lt;p&gt;As I write this my interview on &lt;a href="https://www.youtube.com/@devcentral" target="_blank" rel="noopener noreferrer"&gt;DevCentral&lt;/a&gt;
 &lt;a href="https://www.linkedin.com/events/7062528143797952513/comments/" target="_blank" rel="noopener noreferrer"&gt;hasn&amp;rsquo;t started yet&lt;/a&gt;
 so if you subscribe to my blog or &lt;a href="https://www.youtube.com/@debugagent" target="_blank" rel="noopener noreferrer"&gt;follow&lt;/a&gt;
 &lt;a href="https://twitter.com/debugagent" target="_blank" rel="noopener noreferrer"&gt;me&lt;/a&gt;
 &lt;a href="https://www.linkedin.com/in/shai-almog-81a42/" target="_blank" rel="noopener noreferrer"&gt;on&lt;/a&gt;
 &lt;a href="https://mastodon.social/@debugagent" target="_blank" rel="noopener noreferrer"&gt;socials&lt;/a&gt;
 you might be able to catch it live. If not the recording should appear right here:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/CFL--dAX3FQ?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;Either way, this isn&amp;rsquo;t the first time I wrote about or talked about logging and the common pitfalls we see when logging in production or debugging. I covered this extensively in &lt;a href="https://talktotheduck.dev/logging-best-practices-mdc-ingestion-and-scale" target="_blank" rel="noopener noreferrer"&gt;the old blog&lt;/a&gt;
. I also &lt;a href="https://www.youtube.com/watch?v=53qCLRFcBSs" target="_blank" rel="noopener noreferrer"&gt;did a video&lt;/a&gt;
 covering these ideas. But my ideas somewhat evolved around some of the concepts I discussed.&lt;/p&gt;</description></item><item><title>Foojay Podcast #22: When Profession and Fun Overlap</title><link>https://foojayio.github.io/website/today/foojay-podcast-22/</link><pubDate>Mon, 15 May 2023 07:47:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-22/</guid><description>&lt;p&gt;Let&amp;rsquo;s talk about programming for fun. Grab your Lego and robots, and let&amp;rsquo;s talk about STEM and STEAM!&lt;/p&gt;
&lt;p&gt;As a developer, we all get frustrated occasionally when a bug messes up our schedule, and we have to dive deep into the code to find a solution.&lt;/p&gt;
&lt;p&gt;But still, many of us keep coding in our free time as we love to do it and want to create amazing stuff.&lt;/p&gt;
&lt;p&gt;In this episode of the Foojay Podcast, we talk to volunteers from different organizations where coding is used to inspire children to become engineers or at least learn to make good use of computers and the tools around them.&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>A Dissection of Java JDBC to PostgreSQL Connections</title><link>https://foojayio.github.io/website/today/a-dissection-of-java-jdbc-to-postgresql-connections/</link><pubDate>Fri, 12 May 2023 08:52:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-dissection-of-java-jdbc-to-postgresql-connections/</guid><description>&lt;p&gt;Many Java applications use a database, and many use JDBC and &lt;a href="https://www.yugabyte.com/postgresql/" title="PostgreSQL" target="_blank" rel="noopener noreferrer"&gt;PostgreSQL&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The latency of database usage is often important, yet, what exactly happens at the database level is unknown.&lt;/p&gt;
&lt;p&gt;This article explains which options are available, what happens, and why.&lt;/p&gt;
&lt;p&gt;Most importantly, it includes a small Java class that can be used and modified to execute specific database tasks, plus a description of how to use a utility (&lt;a href="https://www.wireshark.org" title="Wireshark" target="_blank" rel="noopener noreferrer"&gt;Wireshark&lt;/a&gt;
) to see what is actually happening.&lt;/p&gt;</description></item><item><title>Analyzing dependencies in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/analyzing-dependencies-in-intellij-idea/</link><pubDate>Thu, 11 May 2023 09:33:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/analyzing-dependencies-in-intellij-idea/</guid><description>&lt;p&gt;If you&amp;rsquo;re working on a real world project, you&amp;rsquo;re probably using external dependencies.&lt;/p&gt;
&lt;p&gt;You might need to analyze which dependencies your application uses.&lt;/p&gt;
&lt;p&gt;For example, you may want to find out how a particular version of a dependency ended up in your application.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take a look at how IntelliJ IDEA can help you to analyze dependencies.&lt;/p&gt;
&lt;p&gt;We can view our dependencies in the Maven or Gradle tool window.&lt;/p&gt;
&lt;p&gt;Here, we can expand dependencies to show their transitive dependencies, or collapse them again.&lt;/p&gt;</description></item><item><title>TornadoVM: Code Interoperability Mode</title><link>https://foojayio.github.io/website/today/code-interoperability-mode-for-opencl-portability-across-various-programming-languages-with-tornadovm/</link><pubDate>Thu, 11 May 2023 07:54:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/code-interoperability-mode-for-opencl-portability-across-various-programming-languages-with-tornadovm/</guid><description>&lt;p&gt;&lt;a href="https://www.tornadovm.org/" target="_blank" rel="noopener noreferrer"&gt;TornadoVM&lt;/a&gt;
 is a programming framework for accelerating Java applications on heterogeneous devices, like multi-core CPUs, GPUs and FPGAs.&lt;/p&gt;
&lt;p&gt;Java developers can use the TornadoVM API to prototype Java methods within their code bases for hardware acceleration.&lt;/p&gt;
&lt;p&gt;TornadoVM is hardware-agnostic, but the generated code (i.e., kernels) for acceleration can be executed only through the TornadoVM runtime.&lt;/p&gt;
&lt;p&gt;This blog outlines the key changes in TornadoVM to &lt;strong&gt;enable code interoperability of kernels with other programming languages beyond Java&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Tuning Java Applications for Low Latency on Linux</title><link>https://foojayio.github.io/website/today/tuning-java-applications-for-low-latency-on-linux/</link><pubDate>Wed, 10 May 2023 13:34:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/tuning-java-applications-for-low-latency-on-linux/</guid><description>&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;I have lost count of the number of times I have been told that Java is not a suitable language in which to develop applications where performance is a major consideration. My first response is usually to ask for clarification on what is actually meant by &amp;ldquo;performance&amp;rdquo; as two of the most common measures &amp;ndash; throughput and latency, sometimes conflict with each other, and approaches to optimise for one may have a detrimental effect on the other.&lt;/p&gt;</description></item><item><title>A Comprehensive Guide to Java Virtual Threads (Part 1)</title><link>https://foojayio.github.io/website/today/unleashing-the-power-of-lightweight-concurrency-a-comprehensive-guide-to-java-virtual-threads-part-1/</link><pubDate>Tue, 09 May 2023 08:33:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/unleashing-the-power-of-lightweight-concurrency-a-comprehensive-guide-to-java-virtual-threads-part-1/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Java Virtual Threads, also known as lightweight threads, is an exciting new feature introduced in Project Loom.&lt;/p&gt;
&lt;p&gt;Virtual threads aim to simplify concurrent programming in Java by providing an efficient and easy-to-use concurrency model.&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll cover the basics of Java Virtual Threads, how they work, why they are beneficial for developers, and how they overcome the limitations of traditional Java threads.&lt;/p&gt;
&lt;h2 id="h2-1-what-are-virtual-threads"&gt;What are Virtual Threads?&lt;/h2&gt;
&lt;p&gt;Java is made of threads. When we run a Java program, its main method is invoked as the first call frame of the main thread created by the Java launcher. It gives us many things: sequential control flow, local variables, exception handling, single-step debugging, and profiling.&lt;/p&gt;</description></item><item><title>Unconventional Remote Process Control in Java</title><link>https://foojayio.github.io/website/today/presenting-xpipe/</link><pubDate>Mon, 08 May 2023 14:03:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/presenting-xpipe/</guid><description>&lt;p&gt;Have you ever wanted to control a remote process from a Java application? Essentially something like a &lt;code&gt;ProcessBuilder&lt;/code&gt; for remote systems that allows you to run and configure a process on almost any system and also supports all regular features that you would expect from it.&lt;/p&gt;
&lt;p&gt;Now obviously, this isn&amp;rsquo;t a revolutionary idea. You can easily take an SSH library like the &lt;a href="https://github.com/mwiede/jsch" target="_blank" rel="noopener noreferrer"&gt;newer jsch fork&lt;/a&gt;
 and use the &lt;code&gt;exec&lt;/code&gt; or &lt;code&gt;shell&lt;/code&gt; channel to control remote processes or remote shells by just copying and pasting some tutorial code. So what is this about then?&lt;/p&gt;</description></item><item><title>Interview with Paul Kocian aka Orango_Mango</title><link>https://foojayio.github.io/website/today/interview-with-paul-kocian-aka-orango_mango/</link><pubDate>Mon, 08 May 2023 07:49:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/interview-with-paul-kocian-aka-orango_mango/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Some time ago on Twitter, I discovered &lt;a href="https://twitter.com/orango_mango" target="_blank" rel="noopener noreferrer"&gt;@Orango_Mango&lt;/a&gt;
, who shared his progress in creating a 3D engine with JavaFX. The shared videos started with a &lt;a href="https://twitter.com/orango_mango/status/1610894079654563843" target="_blank" rel="noopener noreferrer"&gt;Rubik&amp;rsquo;s cube in January &amp;lsquo;23&lt;/a&gt;
, over a &lt;a href="https://twitter.com/orango_mango/status/1620493609287172096" target="_blank" rel="noopener noreferrer"&gt;basic tumbling car in February&lt;/a&gt;
, to a &lt;a href="https://twitter.com/orango_mango/status/1646218237535813639" target="_blank" rel="noopener noreferrer"&gt;full Minecraft-like world in April&lt;/a&gt;
. Who is this @OrangoMango? And why did he take up the challenge to create a 3D engine with Java and JavaFX? Let&amp;rsquo;s find out&amp;hellip;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Spring Boot Debugging with Aspect-Oriented Programming (AOP)</title><link>https://foojayio.github.io/website/today/spring-boot-debugging-with-aspect-oriented-programming-aop/</link><pubDate>Fri, 05 May 2023 08:19:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-debugging-with-aspect-oriented-programming-aop/</guid><description>&lt;p&gt;Aspect-Oriented Programming (AOP) is a programming paradigm that aims to increase modularity by allowing the separation of cross-cutting concerns.&lt;/p&gt;
&lt;p&gt;In simple terms, it helps you keep your code clean, modular, and easy to maintain.&lt;/p&gt;
&lt;p&gt;We can leverage AOP to debug Spring Boot applications more effectively and seamlessly.&lt;/p&gt;
&lt;p&gt;In this post, we will explore how to use AOP to debug a Spring Boot application effectively.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/6kxpkcEqssw?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;h2 id="h2-0-aop-concepts"&gt;AOP Concepts&lt;/h2&gt;
&lt;p&gt;Before diving into debugging with AOP, it is essential to understand the core concepts. AOP lets us write code that executes before or after a method. It includes the following common terms:&lt;/p&gt;</description></item><item><title>Using Async-Profiler and Jattach Programmatically with AP-Loader</title><link>https://foojayio.github.io/website/today/using-async-profiler-and-jattach-programmatically-with-ap-loader/</link><pubDate>Thu, 04 May 2023 11:45:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-async-profiler-and-jattach-programmatically-with-ap-loader/</guid><description>&lt;p&gt;Using &lt;a href="https://github.com/jvm-profiling-tools/async-profilerhttps://github.com/jvm-profiling-tools/async-profiler" target="_blank" rel="noopener noreferrer"&gt;async-profiler&lt;/a&gt;
 and jattach can be quite a hassle. First, you have to download the proper archive from GitHub for your OS and architecture; then, you have to unpack it and place it somewhere.&lt;/p&gt;
&lt;p&gt;It gets worse if you want to embed it into your library, agent, or application. Library developers cannot just use maven dependency but have to create wrapper code and build scripts that deal with packaging the binaries themselves, or worse, they depend on a preinstalled version which they do not control.&lt;/p&gt;</description></item><item><title>The Unix Philosophy for Low Latency</title><link>https://foojayio.github.io/website/today/the-unix-philosophy-for-low-latency/</link><pubDate>Thu, 04 May 2023 08:03:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-unix-philosophy-for-low-latency/</guid><description>&lt;p&gt;Unix has been around for more than 50 years, and the original design principles must be good enough for it (and its derivative, Linux) to be the most widely used Operating System on the planet &amp;ndash; &lt;a href="https://en.wikipedia.org/wiki/Usage_share_of_operating_systems" target="_blank" rel="noopener noreferrer"&gt;80% of servers&lt;/a&gt;
, &lt;a href="https://en.wikipedia.org/wiki/Usage_share_of_operating_systems#Supercomputers" target="_blank" rel="noopener noreferrer"&gt;most supercomputers&lt;/a&gt;
, and the most &lt;a href="https://en.wikipedia.org/wiki/Usage_share_of_operating_systems" target="_blank" rel="noopener noreferrer"&gt;deployed OS (Android&lt;/a&gt;
). It is also the most popular OS on Mars!&lt;/p&gt;
&lt;p&gt;Much of Unix&amp;rsquo;s success can be attributed to the &amp;ldquo;&lt;a href="https://en.wikipedia.org/wiki/Unix_philosophy" target="_blank" rel="noopener noreferrer"&gt;Unix Philosophy&lt;/a&gt;
&amp;rdquo; which can be very briefly summarised as:&lt;/p&gt;</description></item><item><title>Hidden and Not-So-Hidden Gems In Java 20</title><link>https://foojayio.github.io/website/today/hidden-and-not-so-hidden-gems-in-java-20/</link><pubDate>Wed, 03 May 2023 14:32:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/hidden-and-not-so-hidden-gems-in-java-20/</guid><description>&lt;p&gt;&lt;strong&gt;Let&amp;rsquo;s see the preview and incubator JEPs in Java 20, as well as many smaller enhancements, bug fixes, and deprecations.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;March 2023 marked the latest feature release of the Java platform, which was delivered on time through the six-month release cadence as Java 20. Like Java 19, which became generally available in September 2022, Java 20 targeted JEPs&amp;mdash;seven, in this case&amp;mdash;from the &lt;a href="https://openjdk.org/projects/panama/" target="_blank" rel="noopener noreferrer"&gt;Panama&lt;/a&gt;
, &lt;a href="https://openjdk.org/projects/amber/" target="_blank" rel="noopener noreferrer"&gt;Amber&lt;/a&gt;
, and &lt;a href="https://wiki.openjdk.org/display/loom" target="_blank" rel="noopener noreferrer"&gt;Loom&lt;/a&gt;
 projects.&lt;/p&gt;
&lt;p&gt;I am using the Java 20 jshell tool to demonstrate the code in this article. To follow along, &lt;a href="https://foojayio.github.io/website/download/"&gt;download JDK 20&lt;/a&gt;
, fire up your terminal, check your version, and run jshell. Note that you might see a newer version of the JDK; that&amp;rsquo;s okay.&lt;/p&gt;</description></item><item><title>Timefold is the fork of OptaPlanner</title><link>https://foojayio.github.io/website/today/optaplanner-continues-as-timefold/</link><pubDate>Tue, 02 May 2023 15:12:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/optaplanner-continues-as-timefold/</guid><description>&lt;p&gt;&lt;strong&gt;OptaPlanner is an Open Source project used globally to optimize operational planning. Every day, it saves thousands of organizations time, money and resources.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Today, OptaPlanner is entering a new chapter.&lt;/p&gt;
&lt;p&gt;The project I created and worked on for seventeen years has matured under Red Hat&amp;rsquo;s wings for the past ten years. Last year, when Red Hat&amp;rsquo;s strategy changed, it became apparent that the project needed a new, sustainable future. Therefore, we founded a company around it. A company that &lt;em&gt;lives and breathes planning optimization&lt;/em&gt; , to further nurture the Open Source project to its fullest potential, under a new name. &lt;strong&gt;&lt;a href="https://timefold.ai" target="_blank" rel="noopener noreferrer"&gt;Timefold&lt;/a&gt;
 is the continuation of OptaPlanner.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Leverage the Richness of HTTP Status Codes</title><link>https://foojayio.github.io/website/today/leverage-the-richness-of-http-status-codes/</link><pubDate>Tue, 02 May 2023 09:34:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/leverage-the-richness-of-http-status-codes/</guid><description>&lt;p&gt;If you&amp;rsquo;re not a REST expert, you probably use the same HTTP codes over and over in your responses, mostly 200, 404, and 500.&lt;/p&gt;
&lt;p&gt;If using authentication, you might perhaps add 401 and 403; if using redirects 301 and 302, that might be all.&lt;/p&gt;
&lt;p&gt;But the range of possible status codes is much broader than that and can improve semantics a lot.&lt;/p&gt;
&lt;p&gt;While many discussions about REST focus on entities and methods, using the correct response status codes can make your API stand out.&lt;/p&gt;</description></item><item><title>Foojay Podcast #21: Brazil SouJava</title><link>https://foojayio.github.io/website/today/foojay-podcast-21/</link><pubDate>Mon, 01 May 2023 08:08:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-21/</guid><description>&lt;p&gt;Once a month, the Foojay Podcast virtually visits a JUG to talk with the people behind it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SouJava, the Brazil JUG&lt;/strong&gt;, was founded in 1999, and according to Wikipedia, is recognized as the world&amp;rsquo;s largest Java User Group with 40,000 members.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a lot we can learn from the people who have achieved this!&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/qzDjJljbN6w?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>JavaFX Links of April 2023</title><link>https://foojayio.github.io/website/today/javafx-links-of-april-2023/</link><pubDate>Sat, 29 Apr 2023 13:57:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-april-2023/</guid><description>&lt;h2 id="h2-0-javafx-core"&gt;JavaFX Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/GluonHQ/status/1649078581887205377" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gluon&lt;/strong&gt; announced JavaFX update releases&lt;/a&gt;
: 20.0.1 (latest release), 17.0.7 (latest LTS), and for Gluon LTS customers 11.0.19.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=f8TOo8TL4-k" target="_blank" rel="noopener noreferrer"&gt;In this video with &lt;strong&gt;Kevin Rushforth&lt;/strong&gt; he talks about JavaFX 20 and beyond&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1648267569663492096" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; tweeted some of the highlights&lt;/a&gt;
 like RichTextArea, ideas for future releases,&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/f8TOo8TL4-k?t=1240" target="_blank" rel="noopener noreferrer"&gt;The Notebook demo is looking really nice&lt;/a&gt;
 to learn JavaFX in an easy way.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-conferences"&gt;Conferences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;As announced a few weeks ago, &lt;strong&gt;Sean Phillips&lt;/strong&gt; was one of the keynote speakers at DevNexus in Atlanta. And his talk did not go unnoticed&amp;hellip;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/ixchelruiz/status/1643970024015556608" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Ixchel Ruiz&lt;/strong&gt;: &amp;ldquo;Blowing the ceiling of technology, passion, visualization&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/johanvos/status/1644239933274574849" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt;: &amp;ldquo;Innovation by and for devs/humans. Great to see all of this coming together&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/vincentmayers/status/1643970564925673474" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Vincent Mayers&lt;/strong&gt;: &amp;ldquo;It&amp;rsquo;s clear that JavaFX is AMAZING! Thank you GluonHQ and Johan Vos for all your work and support for this&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;And &lt;a href="https://twitter.com/search?q=%40SeanMiPhillips&amp;amp;src=typed_query&amp;amp;f=live" target="_blank" rel="noopener noreferrer"&gt;many more&amp;hellip;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://www.reddit.com/r/JavaFX/comments/12biesq/matrix_1_end_scene_special_effect_of_digital_rain/" target="_blank" rel="noopener noreferrer"&gt;intro animation of his talk was shared on Reddit&lt;/a&gt;
 and shows the creators of the libraries used in his application as if they are trapped in the Matrix&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-building-apps"&gt;Building apps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/C0DEDEAD" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;CodeDead&lt;/strong&gt;&lt;/a&gt;
 shared a GitHub Actions workflow for the people that are using JDK 20, Gradle and JavaFX 20 &lt;a href="https://www.reddit.com/r/JavaFX/comments/129mkmx/javafx_20_jdk20_gradle_github_actions" target="_blank" rel="noopener noreferrer"&gt;on Reddit&lt;/a&gt;
 to test, build and package your JavaFX application on Windows, Linux and macOS when creating a pull request on either the main/master or development branches of your GIT project.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-javafx-scene-builder"&gt;JavaFX Scene Builder&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Version 20 is about ready. Feel free to test the &lt;a href="https://github.com/gluonhq/scenebuilder/releases/tag/early-access" target="_blank" rel="noopener noreferrer"&gt;latest snapshots&lt;/a&gt;
 and report blocking issues.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/cpreisler/status/1643748294898896897" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Chad Preisler&lt;/strong&gt; shared a video&lt;/a&gt;
 on how to use GemsFX in Scene Builder.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-bumped-to-java-and-javafx-20"&gt;Bumped to Java and JavaFX 20:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/lanthale/status/1643943442945306625" target="_blank" rel="noopener noreferrer"&gt;LibHEIF 1.2.3&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@jabref/110148247312318923" target="_blank" rel="noopener noreferrer"&gt;JabRef with speed improvements on macOS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/C0DEDEAD/status/1642571326639538176" target="_blank" rel="noopener noreferrer"&gt;Opal v1.1.0&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/lanthale/status/1642981173826842624" target="_blank" rel="noopener noreferrer"&gt;LibrawFX 1.8.4&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-regular-guests"&gt;Regular guests&lt;/h2&gt;
&lt;h3 id="h3-6-orangomango"&gt;OrangoMango&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1642948896484737025" target="_blank" rel="noopener noreferrer"&gt;Found a performance problem in his 3D engine&lt;/a&gt;
, thanks to &lt;strong&gt;Almas Baim&lt;/strong&gt; and VisualVM.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1645098431046725640" target="_blank" rel="noopener noreferrer"&gt;Added transparent blocks&lt;/a&gt;
 to his 3D engine.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1650868150836113409" target="_blank" rel="noopener noreferrer"&gt;Is creating a chess game&lt;/a&gt;
 and shares the code on GitHub. You can play chess in LAN (Java sockets) and export a game to FEN and PGN.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-7-almas-baim"&gt;Almas Baim&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1642661319668031488" target="_blank" rel="noopener noreferrer"&gt;Adding hex support for tiled .tmx maps to FXGL&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1642277058033139712" target="_blank" rel="noopener noreferrer"&gt;Playing with a cat and PixelBuffer on April 1st&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1649067406877155330" target="_blank" rel="noopener noreferrer"&gt;FXGL is also catching the Stable Diffusion train&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1648769210175086604" target="_blank" rel="noopener noreferrer"&gt;Combining a black hole with a rasengan&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1646896969783156736" target="_blank" rel="noopener noreferrer"&gt;Messing around with a TextArea and physics&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1645908147217870848" target="_blank" rel="noopener noreferrer"&gt;Taking the term &amp;ldquo;physically based rendering&amp;rdquo; to a whole new level&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1651351553578500097" target="_blank" rel="noopener noreferrer"&gt;Shared a video showing a game with many subtle visual effects&lt;/a&gt;
. Go fullscreen to see all details!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1649882265986424832" target="_blank" rel="noopener noreferrer"&gt;And he is also trying to hypnotize you&amp;hellip;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-8-gerrit-grunwald"&gt;Gerrit Grunwald&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/hansolo_/status/1648381819052589056" target="_blank" rel="noopener noreferrer"&gt;Created a PoincarePlots while being on a plane&lt;/a&gt;
 and added it to &lt;a href="https://twitter.com/hansolo_/status/1648383683202523141" target="_blank" rel="noopener noreferrer"&gt;version 17.1.35 of his charts library&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-9-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/tobiasbriones_/status/1648576020293771265" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Tobias Briones&lt;/strong&gt; is using math to draw flowers&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;And in an oher tweet it&amp;rsquo;s &lt;a href="https://twitter.com/tobiasbriones_/status/1650900771263717377" target="_blank" rel="noopener noreferrer"&gt;not a bird, not a cat: It&amp;rsquo;s the bird cat&lt;/a&gt;
!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.xyz/@melix/110202202449191947" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Cédric Champeau&lt;/strong&gt; is working on an astronomy toy project&lt;/a&gt;
: a collection of libraries and applications for astronomy image processing in Java.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://melix.github.io/blog/2023/04-22-introducing-astro4j.html" target="_blank" rel="noopener noreferrer"&gt;A blog post with more info and screenshots and video demos is available&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MariuszMaterna/status/1645901773515939841" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mariusz Materna&lt;/strong&gt; announced a new version of LogViewFX&lt;/a&gt;
, a desktop application that makes viewing logs easier.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/ArturSkowronski/status/1645421150883786753" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Artur Skowronski&lt;/strong&gt;&lt;/a&gt;
 asked for RSS for this LinksOfTheWeek, and it will be &lt;a href="https://github.com/dlsc-software-consulting-gmbh/jfxcentral-data/pull/231" target="_blank" rel="noopener noreferrer"&gt;available soon&lt;/a&gt;
&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/C0DEDEAD/status/1645201801589710848" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;CodeDead&lt;/strong&gt; is rebuilding a .NET desktop application&lt;/a&gt;
 to improve the performance and make it cross-platform.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MalikHmaida/status/1649140308796403714" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Malik&lt;/strong&gt; happily shared his first JavaFX application&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/timeline_code/status/1646933681057964048" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Smith Ayo&lt;/strong&gt; is creating an Oware game&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/brunoborges/status/1650998712339156992" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Bruno Borges&lt;/strong&gt; is looking into his crystal ball for 2024&lt;/a&gt;
: &amp;ldquo;Oracle announces FxWeb, a framework for building WebAssembly UI with JavaFX, so you can code Java in both client and server side.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/crschnick/status/1650522935101145088" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Christopher Schnick&lt;/strong&gt; is enhancing the gameplay experience of Paradox Grand Strategy games&lt;/a&gt;
 with JavaFX through the Pdx-Unlimiter and releases it with JReleaser.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke/status/1651574017193566208" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt; shared a testimonial of Fortune 500 company choosing for Java and JavaFX&lt;/a&gt;
 (place 171) with headquarters in New York, a world leader in its sector.&lt;/li&gt;
&lt;li&gt;On Reddit a &lt;a href="https://www.reddit.com/r/Pacman/comments/12v706w/pacman_ms_pacman_2d3d_javafx/" target="_blank" rel="noopener noreferrer"&gt;video with 2D and 3D Pacman&lt;/a&gt;
 was published.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/siedlerchr/status/1649518550996987911" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;siedlerchr&lt;/strong&gt; shared a link to an excellent article explaining the concepts of Bindings&lt;/a&gt;
, it&amp;rsquo;s from 2020 but still very valid.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jeannot-muller.com/javafx-or-swing-in-2023" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jeannot Muller&lt;/strong&gt; wrote about &amp;ldquo;JavaFX or Swing in 2023&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-10-about-jfx-central-com"&gt;About jfx-central.com&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New content: &lt;a href="https://www.jfx-central.com/real_world/xpipe" target="_blank" rel="noopener noreferrer"&gt;X-Pipe&lt;/a&gt;
: a flexible connection manager and remote file explorer.&lt;/li&gt;
&lt;li&gt;Coding for &lt;a href="https://twitter.com/dlemmermann/status/1646587048957018119" target="_blank" rel="noopener noreferrer"&gt;version 2 of the jfx-central has started&lt;/a&gt;
, check the Twitter thread if you want to join the development team.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>The Basis of Virtual Threads: Continuations</title><link>https://foojayio.github.io/website/today/the-basis-of-virtual-threads-continuations/</link><pubDate>Fri, 28 Apr 2023 13:38:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-basis-of-virtual-threads-continuations/</guid><description>&lt;p&gt;&lt;strong&gt;Virtual threads are lightweight implementations of java.lang.Thread and they promise to write highly scalable concurrent applications. This article turns the spotlight on the Continuations that are the basis of Virtual threads.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://openjdk.org/projects/loom/" target="_blank" rel="noopener noreferrer"&gt;Project Loom&lt;/a&gt;
 has been the focus of attention in the Java community since the day it was announced. Java developers were excited by Loom&amp;rsquo;s promise that, with virtual threads, they could write highly scalable applications that may utilize the hardware optimally, without changing their habits.&lt;/p&gt;</description></item><item><title>Developer vs. ChatGPT Part I: Writing a Spring Boot Microservice</title><link>https://foojayio.github.io/website/today/java-developer-vs-chatgpt-part-i-writing-a-spring-boot-microservice/</link><pubDate>Thu, 27 Apr 2023 15:25:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-developer-vs-chatgpt-part-i-writing-a-spring-boot-microservice/</guid><description>&lt;h3 id="h3-0-we-pit-a-seasoned-java-developer-against-the-all-knowing-generative-ai-to-find-out-once-and-for-all-can-an-ai-generate-a-java-microservice-end-to-end"&gt;We pit a seasoned Java developer against the all-knowing generative AI to find out once and for all: Can an AI generate a Java microservice end-to-end?&lt;/h3&gt;
&lt;p&gt;There&amp;rsquo;s a lot of buzz around Generative AI tools for code generation. It&amp;rsquo;s no secret that the future of developer productivity goes alongside tools such as &lt;a href="https://github.com/features/copilot" target="_blank" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt;
 and &lt;a href="https://openai.com/blog/chatgpt" target="_blank" rel="noopener noreferrer"&gt;OpenAI&amp;rsquo;s ChatGPT&lt;/a&gt;
 to enable us, developers, to produce code better and faster. These tools can learn from our existing code and suggest new code based on the desired functionality, most importantly, they can even write documentation and tests!&lt;/p&gt;</description></item><item><title>Creating Scalable OpenAI GPT Applications in Java</title><link>https://foojayio.github.io/website/today/creating-scalable-openai-gpt-applications-in-java/</link><pubDate>Thu, 27 Apr 2023 14:18:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-scalable-openai-gpt-applications-in-java/</guid><description>&lt;p&gt;One of the more notable aspects of ChatGPT is its engine, which not only powers the web-based chatbot but can also be integrated into your Java applications.&lt;/p&gt;
&lt;p&gt;Whether you prefer reading or watching, let&amp;rsquo;s review how to start using the OpenAI GPT engine in your Java projects in a scalable way, by sending prompts to the engine only when necessary:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/8bpIXrz7xJw?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;Imagine you want to visit a city and have a specific budget in mind. How should you spend the money and make your trip memorable? This is an excellent question to delegate to the OpenAI engine.&lt;/p&gt;</description></item><item><title>Approaches to Durability in Low Latency Messaging Queues</title><link>https://foojayio.github.io/website/today/comparing-approaches-to-durability-in-low-latency-messaging-queues/</link><pubDate>Wed, 26 Apr 2023 13:17:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/comparing-approaches-to-durability-in-low-latency-messaging-queues/</guid><description>&lt;p&gt;A significant feature of &lt;a href="https://chronicle.software/queue-enterprise/?utm_source=foojay&amp;amp;amp;utm_medium=article&amp;amp;amp;utm_campaign=comparing-approaches" title="Chronicle Queue Enterprise" target="_blank" rel="noopener noreferrer"&gt;Chronicle Queue Enterprise&lt;/a&gt;
 is support for TCP replication across multiple servers to ensure high availability of application infrastructure.&lt;/p&gt;
&lt;p&gt;I have generally held the view that replicating data to a secondary system is faster than sync-ing to disk, assuming the round trip network delay wasn&amp;rsquo;t high due to quality networks and co-located redundant servers.&lt;/p&gt;
&lt;p&gt;This is the first time I have benchmarked it with a realistic example.&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>Couldn’t we just Use AsyncGetCallTrace in a Separate Thread?</title><link>https://foojayio.github.io/website/today/couldnt-we-just-use-asyncgetcalltrace-in-a-separate-thread/</link><pubDate>Tue, 25 Apr 2023 05:31:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/couldnt-we-just-use-asyncgetcalltrace-in-a-separate-thread/</guid><description>&lt;p&gt;I&amp;rsquo;m keenly interested in everything related to profiling on the JVM, especially if it is related to AsyncGetCallTrace, this tiny unofficial API that powers most profilers out there, heck, I&amp;rsquo;m even in the process of adding an &lt;a href="https://mostlynerdless.de/blog/2023/01/19/asyncgetstacktrace-a-better-stack-trace-api-for-the-jvm/" target="_blank" rel="noopener noreferrer"&gt;improved version to the OpenJDK&lt;/a&gt;
, AsyncGetStackTrace.&lt;/p&gt;
&lt;p&gt;During the discussions on the related JDK enhancement proposal and PRs fixing AsyncGetCallTrace bugs, one thing often arises: Why is AsyncGetCallTrace always called in the signal handler on top of the stack that we want to walk (like in my &lt;a href="https://mostlynerdless.de/blog/tag/writing-a-profiler-from-scratch/" target="_blank" rel="noopener noreferrer"&gt;Writing a Profiler from Scratch&lt;/a&gt;
 series)?&lt;br&gt;
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/04/wall-clock-sampling-sequence.drawio-1.svg" alt="" loading="lazy"&gt;
 Interaction between the wall-clock sampler thread and the different signal handlers, as currently implemented in async-profiler.&lt;/p&gt;</description></item><item><title>Relearning Java Thread Primitives</title><link>https://foojayio.github.io/website/today/relearning-java-thread-primitives/</link><pubDate>Tue, 25 Apr 2023 05:26:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/relearning-java-thread-primitives/</guid><description>&lt;p&gt;I&amp;rsquo;ve coded in Java since the first beta, even back then threads were at the top of my list of favorite features.&lt;/p&gt;
&lt;p&gt;Java was the first language to introduce thread support in the language itself, it was a controversial decision back then.&lt;/p&gt;
&lt;p&gt;In the past decade, every language raced to include async/await and &lt;a href="https://github.com/awaitility/awaitility" target="_blank" rel="noopener noreferrer"&gt;even Java had some third-party support for that&lt;/a&gt;
&amp;hellip;&lt;/p&gt;
&lt;p&gt;But Java zigged instead of zagging and introduced the far superior &lt;a href="https://www.youtube.com/watch?v=4mf24mzm0ks" target="_blank" rel="noopener noreferrer"&gt;virtual threads (project Loom)&lt;/a&gt;
. This article isn&amp;rsquo;t about that.&lt;/p&gt;</description></item><item><title>Foojay Podcast #20: Functional Programming: "The Good, the Bad, and the Ugly"</title><link>https://foojayio.github.io/website/today/foojay-podcast-20/</link><pubDate>Mon, 24 Apr 2023 11:30:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-20/</guid><description>&lt;p&gt;Functional programming&amp;hellip; it seems you either love it or you hate it.&lt;/p&gt;
&lt;p&gt;But, like everything in software engineering, it is a trade-off.&lt;/p&gt;
&lt;p&gt;So for today, let&amp;rsquo;s focus on the good, the bad, and the ugly parts of functional programming!&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/AYZMzyKjtoM?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Fearless Distroless</title><link>https://foojayio.github.io/website/today/fearless-distroless/</link><pubDate>Fri, 21 Apr 2023 08:59:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/fearless-distroless/</guid><description>&lt;p&gt;With the rise of Docker came a new focus for engineers: optimizing the build to reach the smallest image size possible.&lt;/p&gt;
&lt;p&gt;A couple of options are available.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-stage builds.&lt;/strong&gt; A &lt;code&gt;Dockerfile&lt;/code&gt; can consist of multiple steps, each having a different Docker base image. Each step can copy files from any of the previous build steps. Only the last one will receive a tag; the others will be left untagged.This approach separates one or more build steps and a run step. On the JVM, it means that the first step includes compiling and packaging, based on a JDK, and the second step comprises running, based on a JRE.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choosing the smallest base image size.&lt;/strong&gt; The smaller the base image, the smaller the resulting image.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this post, I&amp;rsquo;m going to focus on the second point.&lt;/p&gt;</description></item><item><title>How to Automatically Create Microservices Architecture Diagrams</title><link>https://foojayio.github.io/website/today/automatically-creating-microservices-architecture-diagrams/</link><pubDate>Thu, 20 Apr 2023 08:01:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/automatically-creating-microservices-architecture-diagrams/</guid><description>&lt;p&gt;In application development, microservices is an architectural style where larger applications are structured as a collection of smaller, independent, yet interconnected services.&lt;/p&gt;
&lt;p&gt;While this allows for highly maintainable and testable applications (as each service can be maintained independent of the larger application), the problem with this method is the inherent complexity of interactions between microservices.&lt;/p&gt;
&lt;p&gt;It can be difficult for developers and team members to visualise how these microservices are connected to each other. We have been looking for ways to produce architectural diagrams that illustrate these interactions.&lt;/p&gt;</description></item><item><title>Java User Group PH Revitalization Report 2023</title><link>https://foojayio.github.io/website/today/java-user-group-ph-report-2023/</link><pubDate>Wed, 19 Apr 2023 07:47:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-user-group-ph-report-2023/</guid><description>&lt;p&gt;The &lt;a href="https://www.meetup.com/java-user-group-ph/" title="Java User Group Philippines" target="_blank" rel="noopener noreferrer"&gt;Java User Group Philippines&lt;/a&gt;
 &lt;strong&gt;(JUG PH)&lt;/strong&gt; held its &lt;strong&gt;revitalized&lt;/strong&gt; meetup group last April 11 with the support of &lt;a href="https://www.facebook.com/groups/238711806163696" title="PinoyJUG" target="_blank" rel="noopener noreferrer"&gt;PinoyJUG&lt;/a&gt;
 by &lt;a href="https://www.facebook.com/orangeandbronze" title="O &amp;amp;amp; B Philippines" target="_blank" rel="noopener noreferrer"&gt;O &amp;amp; B Philippines&lt;/a&gt;
, the Foojay.io community, and &lt;a href="https://www.azul.com/" title="Azul" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;A three hour lunch and learn session was done with activities and prizes.&lt;/p&gt;
&lt;h2 id="h2-0-how-did-the-revitalization-start"&gt;How did the revitalization start?&lt;/h2&gt;
&lt;p&gt;The revitalization started last January 2023 when Geertjan Wielenga connected the Java User Group PH &lt;a href="https://www.facebook.com/groups/jugph" title="Facebook Page" target="_blank" rel="noopener noreferrer"&gt;Facebook page&lt;/a&gt;
 together with the Philippine JUG Leaders and Java enthusiasts.&lt;/p&gt;</description></item><item><title>A Java Library’s New Approach To Observability</title><link>https://foojayio.github.io/website/today/not-your-grandfathers-logs-a-java-librarys-new-approach-to-observability/</link><pubDate>Tue, 18 Apr 2023 08:10:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/not-your-grandfathers-logs-a-java-librarys-new-approach-to-observability/</guid><description>&lt;h3 id="h3-0-how-a-java-library-is-taking-a-completely-new-approach-to-understanding-what-the-code-does-and-why-it-makes-perfect-developer-sense"&gt;How a Java library is taking a completely new approach to understanding what the code does, and why it makes perfect developer sense.&lt;/h3&gt;
&lt;p&gt;A while back, I &lt;a href="https://medium.com/gitconnected/breaking-the-fourth-wall-in-coding-189055955c85" title="wrote" target="_blank" rel="noopener noreferrer"&gt;wrote&lt;/a&gt;
 about the fact that logs need an overhaul, and that practices that were relevant when logs were still text messages in files may no longer be relevant in an age when logs traces and metrics are as artifacts and observations stored in cloud platforms.&lt;/p&gt;</description></item><item><title>Foojay Podcast #19: Working Free For Fun Brings Fame &amp; Fortune</title><link>https://foojayio.github.io/website/today/foojay-podcast-19/</link><pubDate>Mon, 17 Apr 2023 12:35:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-19/</guid><description>&lt;p&gt;Many developers spend a lot of their time on side projects. It&amp;rsquo;s an opportunity to learn new techniques and get involved in communities.&lt;/p&gt;
&lt;p&gt;But sometimes it can also lead to a new job.&lt;/p&gt;
&lt;p&gt;Or even starting a business based on such a project.&lt;/p&gt;
&lt;p&gt;Today we are talking to people who achieved such a transition and became famous and rich, or at least some of each&amp;hellip;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/FDOFRTj1UVI?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Boldness in Refactoring!</title><link>https://foojayio.github.io/website/today/boldness-in-refactoring/</link><pubDate>Fri, 14 Apr 2023 08:09:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/boldness-in-refactoring/</guid><description>&lt;p&gt;The old engineering adage: &amp;ldquo;don&amp;rsquo;t touch it, it works&amp;rdquo;. Is terrible. Don&amp;rsquo;t listen to it. It might be OK at a small scale but as time goes by the bit rot spreads through your code and servers polluting everything.&lt;/p&gt;
&lt;p&gt;Large swaths of your system become &amp;ldquo;no-man&amp;rsquo;s-land&amp;rdquo;. As you&amp;rsquo;re developing a new system, you must always &amp;ldquo;touch it&amp;rdquo; and make sure we hire engineers who aren&amp;rsquo;t afraid to do so.&lt;/p&gt;
&lt;p&gt;Yes, I get it. I said that sentence frequently in the past. I understand the motivation. Management doesn&amp;rsquo;t care about the bit rot in our future. They care about the here and now. Why are you wasting time on this feature?&lt;/p&gt;</description></item><item><title>Replacing Postman with the Jetbrains HTTP Client</title><link>https://foojayio.github.io/website/today/replacing-postman-with-the-jetbrains-http-client/</link><pubDate>Thu, 13 Apr 2023 06:59:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/replacing-postman-with-the-jetbrains-http-client/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;TL;DR: I&amp;rsquo;ve created the first version of an openapi-generator for the JetBrains HTTP Client, and together with the CLI runner it allows you to play against APIs without ever going out of your terminal and it can even run in your CI/CD pipeline.&lt;/strong&gt; &lt;a href="https://github.com/jlengrand/dotaClient" title="See repository here" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;See repository here&lt;/strong&gt;&lt;/a&gt;
&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I work a lot with APIs, whether for an app I develop myself, or to interact with others. Most people I know tend to use Postman for this. But &lt;a href="https://twitter.com/jlengrand/status/1620343955127689216" title="I personally don&amp;#39;t quite like the product any more" target="_blank" rel="noopener noreferrer"&gt;I personally don&amp;rsquo;t quite like the product any more&lt;/a&gt;
, and it forces me to move out of my IntelliJ environment which really kills my productivity.&lt;/p&gt;</description></item><item><title>Chronicle FIX: Much More Than a Quick Fix</title><link>https://foojayio.github.io/website/today/chronicle-fix-much-more-than-a-quick-fix/</link><pubDate>Wed, 12 Apr 2023 13:55:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/chronicle-fix-much-more-than-a-quick-fix/</guid><description>&lt;p&gt;Many of our customers have upgraded from QuickFIX/J to &lt;a href="https://chronicle.software/fix-engine/" target="_blank" rel="noopener noreferrer"&gt;Chronicle FIX&lt;/a&gt;
 and this article provides some background as to why.&lt;/p&gt;
&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.quickfixj.org/" target="_blank" rel="noopener noreferrer"&gt;QuickFIX/J&lt;/a&gt;
 is free, accessible, supports the FIX standard and is therefore often chosen by the IT team for a first FIX engine.&lt;/p&gt;
&lt;p&gt;However, when the business grows, its limitations become clear. The reasons most commonly given to us are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Throughput and latency&lt;/li&gt;
&lt;li&gt;HA/DR functionality&lt;/li&gt;
&lt;li&gt;Advanced features e.g. routing and message translation&lt;/li&gt;
&lt;li&gt;Global commercial support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, some customers engage with us because they already use our open source products e.g. Chronicle Queue, or our enterprise products e.g., Chronicle Queue Enterprise replication, or Chronicle Services EDA/Microservices accelerator.&lt;/p&gt;</description></item><item><title>Getting Started With Jakarta EE 10 - Jakarta REST</title><link>https://foojayio.github.io/website/today/getting-started-with-jakarta-ee-10-jakarta-rest/</link><pubDate>Wed, 12 Apr 2023 07:42:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-jakarta-ee-10-jakarta-rest/</guid><description>&lt;p&gt;Jakarta EE 10 was released in September of 2022 as the first major release of the venerable Enterprise Java development platform since it was moved to the Eclipse Foundation.&lt;/p&gt;
&lt;p&gt;As a major release, it did come with a slew of updates to almost all the major specifications, including &lt;a href="https://blog.payara.fish/whats-new-in-jakarta-rest-3.1-in-jakarta-ee-10" target="_blank" rel="noopener noreferrer"&gt;Jakarta REST.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;In this article, we take a look at how to get started developing RESTful web services on the Jakarta EE Platform using the Jakarta REST API.&lt;/p&gt;</description></item><item><title>Hidden Beauties of Java Enums</title><link>https://foojayio.github.io/website/today/hidden-beauties-of-java-enums/</link><pubDate>Tue, 11 Apr 2023 07:02:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/hidden-beauties-of-java-enums/</guid><description>&lt;p&gt;Let&amp;rsquo;s take a look at the power and beauty of what Java Enums can provide&amp;hellip;&lt;/p&gt;
&lt;p&gt;I also created a video describing the same topics based on this article, so you can follow along combining both the video and this post.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/U09ZQ3kjuqM?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;h2 id="h2-0-what-is-an-enum"&gt;What is an Enum?&lt;/h2&gt;
&lt;p&gt;Enums are the preferred way to define fixed values you want to use in your code. They are a special type of Java class and contain a group of unchangeable variables.&lt;/p&gt;</description></item><item><title>Introducing Bld: A New Pure Java Build System</title><link>https://foojayio.github.io/website/today/introducing-bld-a-new-pure-java-build-system/</link><pubDate>Mon, 10 Apr 2023 20:12:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-bld-a-new-pure-java-build-system/</guid><description>&lt;p&gt;&lt;a href="https://rife2.com/bld" target="_blank" rel="noopener noreferrer"&gt;RIFE2&amp;rsquo;s &lt;code&gt;bld&lt;/code&gt;&lt;/a&gt;
 is a new build system that allows you to write your build logic in pure Java.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bld&lt;/code&gt; was initially created for RIFE2 web applications, but has already moved outside of that narrow focus and is now used for non-web projects also, like the &lt;a href="https://rife2.com" target="_blank" rel="noopener noreferrer"&gt;RIFE2 framework&lt;/a&gt;
 itself and our &lt;a href="https://github.com/gbevin/urlencoder" target="_blank" rel="noopener noreferrer"&gt;URL Encoder for Java library&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;We created &lt;code&gt;bld&lt;/code&gt; because we&amp;rsquo;re not really interested in build tools. We use them because we have to, but we&amp;rsquo;d rather just get on with coding the real stuff.&lt;/p&gt;</description></item><item><title>My First Firefox Extension</title><link>https://foojayio.github.io/website/today/my-first-firefox-extension/</link><pubDate>Mon, 10 Apr 2023 18:36:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/my-first-firefox-extension/</guid><description>&lt;p&gt;A couple of weeks ago, I spent the weekend creating another submission helper in the form of a Firefox extension.&lt;/p&gt;
&lt;p&gt;It was not a walk in the park.&lt;/p&gt;
&lt;p&gt;To help others who may be interested in doing the same (and my future self), here&amp;rsquo;s my journey!&lt;/p&gt;
&lt;h2 id="h2-0-context"&gt;Context&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve written multiple posts about my &lt;a href="https://blog.frankel.ch/automating-conference-submission-workflow/" target="_blank" rel="noopener noreferrer"&gt;conference submission workflow&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;To sum up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Everything is based on a Trello board&lt;/li&gt;
&lt;li&gt;I created an app that registered a webhook on the board&lt;/li&gt;
&lt;li&gt;When I move a conference from one lane to another, it starts or continues a workflow on the app side&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I source the board by looking at websites, mainly &lt;a href="https://www.papercall.io/events?cfps-scope=open&amp;amp;amp;keywords=" target="_blank" rel="noopener noreferrer"&gt;Papercall&lt;/a&gt;
 and &lt;a href="https://sessionize.com/" target="_blank" rel="noopener noreferrer"&gt;Sessionize&lt;/a&gt;
, and manually copying conference data on cards. Two automation options are available:&lt;/p&gt;</description></item><item><title>Unlocking Java Secrets with Frank Delporte Foojay.io Today</title><link>https://foojayio.github.io/website/today/unlocking-java-secrets-with-frank-delporte-insights-stories-and-tips-for-success/</link><pubDate>Mon, 10 Apr 2023 13:48:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/unlocking-java-secrets-with-frank-delporte-insights-stories-and-tips-for-success/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="Frank-7-XS.jpg" alt="" class="wp-image-57087" width="450" height="413"&gt;
&lt;/figure&gt;
&lt;p&gt;Welcome to our exclusive interview with &lt;a href="https://www.linkedin.com/in/frankdelporte/" target="_blank" rel="noopener noreferrer"&gt;Frank Delporte&lt;/a&gt;
, a Senior Technical Writer at Azul, Java Champion, and a passionate advocate for all things related to Java and Java on &lt;a href="https://www.raspberrypi.org/" target="_blank" rel="noopener noreferrer"&gt;Raspberry Pi&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;With extensive experience in the software industry, Frank has dedicated his career to making Java accessible to beginners and experienced developers alike.&lt;/p&gt;
&lt;p&gt;In this interview, we will explore his journey in the software world, his work at &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
, his contributions to the Java community, and the valuable advice he has for newcomers who have just started learning Java.&lt;/p&gt;</description></item><item><title>Time Zone and Currency Database in JDK</title><link>https://foojayio.github.io/website/today/time-zone-and-currency-database-in-jdk/</link><pubDate>Sat, 08 Apr 2023 13:39:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/time-zone-and-currency-database-in-jdk/</guid><description>&lt;p&gt;There is a saying that you aren&amp;rsquo;t a real developer until you have done programming involving dates, times, daylight savings, and time zones.&lt;/p&gt;
&lt;p&gt;Luckily the JDK contains multiple methods to assist you.&lt;/p&gt;
&lt;p&gt;Related to this topic, it is essential to understand that each new JDK release includes a new version of the time zone and currency database.&lt;/p&gt;
&lt;p&gt;As we will discover, you can get correct output by just switching to the most up-to-date version of Java &amp;ndash; without changing code!&lt;/p&gt;</description></item><item><title>Instrumenting Java Code to Find and Handle Unused Classes</title><link>https://foojayio.github.io/website/today/instrumenting-java-code-to-find-and-handle-unused-classes/</link><pubDate>Sat, 08 Apr 2023 13:26:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/instrumenting-java-code-to-find-and-handle-unused-classes/</guid><description>&lt;p&gt;In this article, let&amp;rsquo;s take a look at writing a Java agent and instrumentation code to find unused classes and dependencies in your project.&lt;/p&gt;
&lt;p&gt;Knowing which classes and dependencies are not used in your application can save you from considering the bugs and problems in these dependencies and classes if you remove them.&lt;/p&gt;
&lt;p&gt;There a multiple tools out there, for gradle and maven (thanks, Marit), that do this statically or dynamically (like the one described in the paper Coverage-Based Debloating for Java Bytecode, thanks, Wolfram).&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>Cherry-Pick: Move a Commit to a Different Branch</title><link>https://foojayio.github.io/website/today/cherry-pick-move-a-commit-to-a-different-branch/</link><pubDate>Wed, 05 Apr 2023 13:53:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/cherry-pick-move-a-commit-to-a-different-branch/</guid><description>&lt;p&gt;There are several reasons why you might want to move a commit to a different branch.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take a look at some of them.&lt;/p&gt;
&lt;h2 id="h2-0-committed-to-the-wrong-branch"&gt;Committed to the wrong branch&lt;/h2&gt;
&lt;p&gt;You&amp;rsquo;re working on a new feature, but an urgent bug came in.&lt;/p&gt;
&lt;p&gt;You fixed the bug and committed the fix, but oops&amp;hellip; you forgot to create a new branch for the bugfix!&lt;/p&gt;
&lt;p&gt;Now this bugfix is on the wrong branch. How do we fix this?
&lt;img src="https://foojayio.github.io/website/today/cherry-pick-move-a-commit-to-a-different-branch/CommitOnWrongBranch-1024x575.png" alt="IntelliJ IDEA Git log window showing a bugfix commit on a new-feature branch" loading="lazy"&gt;
 Bugfix commit is on the wrong branch&lt;/p&gt;</description></item><item><title>DevOps For Developers: Continuous Integration, GitHub Actions</title><link>https://foojayio.github.io/website/today/devops-for-developers-continuous-integration-github-actions-and-sonar-cloud/</link><pubDate>Tue, 04 Apr 2023 07:35:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/devops-for-developers-continuous-integration-github-actions-and-sonar-cloud/</guid><description>&lt;p&gt;I first ran into the concept of Continuous Integration (CI) when the Mozilla project launched.&lt;/p&gt;
&lt;p&gt;It included a rudimentary build server as part of the process and this was revolutionary at the time.&lt;/p&gt;
&lt;p&gt;I was maintaining a C++ project that took 2 hours to build and link.&lt;/p&gt;
&lt;p&gt;We rarely went through a clean build which created compounding problems as bad code was committed into the project.&lt;/p&gt;
&lt;p&gt;A lot has changed since those old days.&lt;/p&gt;</description></item><item><title>Unlocking the Secrets to a Successful Software Engineering Career: An Interview with Otavio Santana</title><link>https://foojayio.github.io/website/today/unlocking-the-secrets-to-a-successful-software-engineering-career-an-interview-with-otavio-santana/</link><pubDate>Mon, 03 Apr 2023 11:55:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/unlocking-the-secrets-to-a-successful-software-engineering-career-an-interview-with-otavio-santana/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="otavio-edited.webp" alt="" class="wp-image-65618" width="481" height="481"&gt;
&lt;/figure&gt;
&lt;p&gt;In this exclusive interview, we had the pleasure of speaking with &lt;a href="https://www.linkedin.com/in/otaviojava/" target="_blank" rel="noopener noreferrer"&gt;Otavio Santana&lt;/a&gt;
, a Java Champion and passionate software engineer and architect dedicated to empowering fellow engineers to deliver efficient, scalable software on the Cloud.&lt;/p&gt;
&lt;p&gt;Otavio shares valuable insights from his journey in the open-source world, highlighting the importance of mentorship and open-source contributions for career growth.&lt;/p&gt;
&lt;p&gt;With &lt;a href="https://otaviojava.com/awards/" target="_blank" rel="noopener noreferrer"&gt;numerous awards and recognitions&lt;/a&gt;
 under his belt, Otavio discusses his current projects, the concept of evolutionary architecture, and the impact of simplicity on software development.&lt;/p&gt;</description></item><item><title>Foojay Podcast #18: Atlanta JUG and DevNexus</title><link>https://foojayio.github.io/website/today/foojay-podcast-18/</link><pubDate>Mon, 03 Apr 2023 05:48:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-18/</guid><description>&lt;p&gt;The Foojay Podcast Java User Group World Tour has already brought us to the UK, US, Dubai, and Japan.&lt;/p&gt;
&lt;p&gt;Today we travel back to the US to learn more about the Atlanta JUG, mainly because this week, they are organizing the DevNexus conference!&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s learn about the challenges of organizing both a Java User Group and an entire conference&amp;hellip;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/fVq5YHjzmVk?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Analyzing &amp; Tuning Warm-up: Azul Zulu Prime Builds of OpenJDK</title><link>https://foojayio.github.io/website/today/analyzing-and-tuning-warm-up-of-the-jvm-with-azul-zulu-prime-builds-of-openjdk/</link><pubDate>Sat, 01 Apr 2023 16:35:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/analyzing-and-tuning-warm-up-of-the-jvm-with-azul-zulu-prime-builds-of-openjdk/</guid><description>&lt;p&gt;&lt;strong&gt;Warm-up is the time taken for the Java application to reach the optimum compiled code performance&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It is the task of the Just-in-Time (JIT) compiler to deliver optimal performance by producing optimized compiled code from application bytecode. This article will give you a basic understanding of how JIT compilation works and how to optimize warm-up using Azul Zulu Prime Builds of OpenJDK (Azul Zulu Prime JDK).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This post has been reviewed and extended on July 20th of 2023 thanks to the contributions of Matt Van Order.&lt;/p&gt;</description></item><item><title>Coroutines on the RaspberryPi (Pi4J-Kotlin)</title><link>https://foojayio.github.io/website/today/coroutines-on-the-raspberrypi-pi4j-kotlin/</link><pubDate>Sat, 01 Apr 2023 09:05:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/coroutines-on-the-raspberrypi-pi4j-kotlin/</guid><description>&lt;p&gt;If you didn&amp;rsquo;t know already, &lt;a href="https://pi4j.com/" target="_blank" rel="noopener noreferrer"&gt;Pi4J&lt;/a&gt;
 has had a &lt;a href="https://pi4j.com/kotlin/" target="_blank" rel="noopener noreferrer"&gt;Kotlin DSL&lt;/a&gt;
 for quite some time now.&lt;/p&gt;
&lt;p&gt;And I&amp;rsquo;m here to announce the &lt;a href="https://github.com/Pi4J/pi4j-kotlin/releases/tag/2.4.0" target="_blank" rel="noopener noreferrer"&gt;latest release &lt;code&gt;v2.4.0&lt;/code&gt;&lt;/a&gt;
 with a sack of additions and to tell you about all the good stuff that&amp;rsquo;s been added since the &lt;a href="https://foojayio.github.io/website/today/kotlin-on-the-raspberrypi-pi4j-kotlin/"&gt;first release&lt;/a&gt;
.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Coroutines {#h2-0-1-coroutines}&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;If the &lt;code&gt;pi4j { ... }&lt;/code&gt; wasn&amp;rsquo;t good enough for ya, and you want to use coroutines instead of weaving fat threads on your precious precious Pi, you can now use the new &lt;code&gt;pi4jAsync { ... }&lt;/code&gt; block&amp;mdash;It can do everything &lt;code&gt;pi4j { ... }&lt;/code&gt; does + you can run &lt;code&gt;suspend&lt;/code&gt;ed functions within.&lt;/p&gt;</description></item><item><title>JavaFX Links of March 2023</title><link>https://foojayio.github.io/website/today/javafx-links-of-march-2023/</link><pubDate>Fri, 31 Mar 2023 12:56:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-march-2023/</guid><description>&lt;p&gt;Already the end of March, so time to look back at the JavaFX Links Of The Week that were published on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;https://www.jfx-central.com/&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-javafx-core"&gt;JavaFX Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/110011897804267729" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; is working on backports for JavaFX 17.0.7&lt;/a&gt;
 to guarantee quality and long-term support.
&lt;ul&gt;
&lt;li&gt;And he announced &lt;a href="https://mastodon.social/@johanvos/110033625841149774" target="_blank" rel="noopener noreferrer"&gt;JavaFX 20 could be released in the week of March 20th&lt;/a&gt;
. As planned.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Together with the &lt;a href="https://foojayio.github.io/website/today/its-java-20-release-day-heres-whats-new/"&gt;release of OpenJDK 20&lt;/a&gt;
, we also got the release of OpenJFX 20. Both right on schedule, as always!
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@gluonhq@techhub.social/110061453814740449" target="_blank" rel="noopener noreferrer"&gt;Announcement by &lt;strong&gt;Gluon&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Downloads are also provided via &lt;a href="https://mastodon.social/@openjdk/110073623815076629" target="_blank" rel="noopener noreferrer"&gt;OpenJDK on jdk.java.net&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Important message &lt;a href="https://github.com/openjdk/jfx/blob/jfx20/doc-files/release-notes-20.md" target="_blank" rel="noopener noreferrer"&gt;in the release notes&lt;/a&gt;
: &amp;ldquo;JavaFX 20 is compiled with &amp;ndash;release 17 and thus requires JDK 17 or later in order to run. If you attempt to run with an older JDK, the Java launcher will exit with an error message indicating that the javafx.base module cannot be read.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/johanvos/status/1638168304664694787" target="_blank" rel="noopener noreferrer"&gt;Most important highlight for &lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;apps created many years ago still run on the latest JavaFX with latest OS. That is far from trivial, require lots of work, and not very common in client frameworks.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;And another &lt;a href="https://mastodon.social/@johanvos/110061627191368710" target="_blank" rel="noopener noreferrer"&gt;quote from &lt;strong&gt;Johan&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;I remember people and companies telling me 5 years ago they love Java and JavaFX, but they were pretty sure JavaFX would not be around in 2 years from them. So they used other client technologies&amp;hellip; which don&amp;rsquo;t exist anymore today&amp;hellip; while JavaFX&amp;hellip; keeps moving forward. With less hype, and less marketing power than other client frameworks, but with dedication and focus on quality, stability and community. And with tons of stuff todo, I 100% realize that.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;You can already start experimenting with JavaFX 21 Early-Access Builds!
&lt;ul&gt;
&lt;li&gt;Get it from &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;Gluon&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Or &lt;a href="https://mastodon.social/@openjdk/110078557118569030" target="_blank" rel="noopener noreferrer"&gt;OpenJDK&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://twitter.com/Raumzeitfalle/status/1638993956796239873" target="_blank" rel="noopener noreferrer"&gt;request by &lt;strong&gt;Raumzeitfalle&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;If you like Java and JavaFX, give Scene Builder Leadinge Edge a try. Its latest version runs with Java 20 using JavaFX 20 and it combines many of the pending PRs so that one can test the functionality. Feel free to share your feedback on Github.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-javafx-and-game-development"&gt;JavaFX and Game Development&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/hansolo_/status/1629506318389198850" target="_blank" rel="noopener noreferrer"&gt;17.0.13 of JArkanoid by &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
 adds the ability to shoot enemies.
&lt;ul&gt;
&lt;li&gt;He describes in a &lt;a href="https://foojayio.github.io/website/today/porting-an-existing-javafx-app-to-ios/"&gt;Foojay post how to turn an existing application to an iPhone app&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;And he started with a new game, &lt;a href="https://twitter.com/hansolo_/status/1629224660259811332" target="_blank" rel="noopener noreferrer"&gt;as you can see in this first screenshot of loderunner&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/hansolo_/status/1635543158153965569" target="_blank" rel="noopener noreferrer"&gt;He shared the first version of a Tetris clone&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;This is &lt;a href="https://twitter.com/hansolo_/status/1634889764565585921" target="_blank" rel="noopener noreferrer"&gt;a screenshot&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;You can play it online, &lt;a href="https://twitter.com/WebFXProject/status/1635959116127404032" target="_blank" rel="noopener noreferrer"&gt;thanks to &lt;strong&gt;WebFX&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.online/@myfear/109947358052519976" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Markus Eisele&lt;/strong&gt; shared a link to the GitHub project of pacman-javafx&lt;/a&gt;
: a JavaFX UI (2D+3D) for Pac-Man / Ms. Pac-Man, a project by &lt;strong&gt;Armin Reichert&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Another Minecraft-like world, in the &lt;a href="https://twitter.com/orango_mango/status/1631715021200687104" target="_blank" rel="noopener noreferrer"&gt;self-made 3D engine of &lt;strong&gt;OrangoMango&lt;/strong&gt;&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1636401197039984640" target="_blank" rel="noopener noreferrer"&gt;It got extended with more Minecraft-like functions&lt;/a&gt;
: block breaking/placing, terrain generation, chunk system, and overall performance improvements.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1636834800127586310" target="_blank" rel="noopener noreferrer"&gt;He added some new block types and fixed some issues with block breaking/placing in his Minecraft-like world&lt;/a&gt;
, and now has a small home made out of wood and coal blocks.&lt;/li&gt;
&lt;li&gt;It also has &lt;a href="https://twitter.com/orango_mango/status/1639660431160532993" target="_blank" rel="noopener noreferrer"&gt;Minecraft-like trees&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1638332315163082753" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; - being a JavaFX 3D expert - finds his work awesome&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1630151049486159874" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt; shared a video with the combination of 2D and 3D&lt;/a&gt;
 game sub scenes.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1638528428440944640" target="_blank" rel="noopener noreferrer"&gt;Another video of a rougelike game prototype&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;And shared how he created a &lt;a href="https://twitter.com/WhiteWoodCity/status/1636904813228331010" target="_blank" rel="noopener noreferrer"&gt;pseudo 3D effect like Street of Rage, Dragon&amp;rsquo;s Crown&lt;/a&gt;
 with two GameSubScene and two entities of each GameWorld, and binding their properties with very clean and neat code.&lt;/li&gt;
&lt;li&gt;His game got &lt;a href="https://twitter.com/WhiteWoodCity/status/1635963164096598016" target="_blank" rel="noopener noreferrer"&gt;bumped to Graal and Java 20&lt;/a&gt;
. Yes, indeed, already before the official release of Java 20!&lt;/li&gt;
&lt;li&gt;And shared how he created a &lt;a href="https://twitter.com/WhiteWoodCity/status/1635143145456553984" target="_blank" rel="noopener noreferrer"&gt;dynamic shadow effect of a jump action with a Shape and Binding&lt;/a&gt;
 in less than 40 lines of code.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; has been very active on this month&amp;hellip;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1635417926823198720" target="_blank" rel="noopener noreferrer"&gt;He discovered another FXGL game&lt;/a&gt;
: &amp;ldquo;The Last Cowboy Game - UTFPR&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;And he shared a &lt;a href="https://twitter.com/AlmasBaim/status/1634541388128821249" target="_blank" rel="noopener noreferrer"&gt;screenshot showing FXGL is available in IntelliJIDEA&lt;/a&gt;
 when creating a new JavaFX project.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1641412978992902144" target="_blank" rel="noopener noreferrer"&gt;Announcing version 17.3 of FXGL&lt;/a&gt;
: improve A* performance, isometric support for .tmx, 3D updates (lookAt, direction, rotation, .obj models), propertyMap convenience API.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1639608367516729349" target="_blank" rel="noopener noreferrer"&gt;Pathfinding solution added to FXGL that outperforms the existing one by up to 80%&lt;/a&gt;
, by replacing ArrayList with HashSet in critical code.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1639349553496293377" target="_blank" rel="noopener noreferrer"&gt;Another video with the FXGL engine pathfinding in action&lt;/a&gt;
. This demo shows large red areas that are not passable, while dynamic entities are ignored and can be passed through.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1639017161455960064" target="_blank" rel="noopener noreferrer"&gt;Video showing physics sandboxes are never not fun&lt;/a&gt;
! You can now pick up any entity as seen in this sample.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1639804091609088002" target="_blank" rel="noopener noreferrer"&gt;Video of text animations with particles&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1640102122350944257" target="_blank" rel="noopener noreferrer"&gt;Video with particles, one as &amp;ldquo;lead&amp;rdquo;&lt;/a&gt;
, and other particles following with min and max distance, ensuring all particles are connected while the lead moves.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1640474477258760192" target="_blank" rel="noopener noreferrer"&gt;Isometric tile support in FXGL has had significant interest over the years&lt;/a&gt;
. The maths looks straightforward but the architecture, as per usual, will need some careful pondering.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1640802453288353792" target="_blank" rel="noopener noreferrer"&gt;Screenshot of initial progress towards having first-class support for isometric levels&lt;/a&gt;
 in FXGL.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1641582312730030082" target="_blank" rel="noopener noreferrer"&gt;Video showing the new sliders in FXGL&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1637915086571606016" target="_blank" rel="noopener noreferrer"&gt;He is throwing grenades&amp;hellip;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-javafx-in-science"&gt;JavaFX in Science&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/rnartist_app/status/1629862954127568897" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Fabrice Jossinet&lt;/strong&gt; shared an impressive preview video&lt;/a&gt;
 of a new tool to visualize the folding pathways of an RNA during its transcription. Pathways are computed with a Rust algorithm. Visualization and GUI are made with Kotlin, JavaFX and his rnartistcore library.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/rnartist_app/status/1637923762438918150" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;RNArtist&lt;/strong&gt; shared again an impressive video&lt;/a&gt;
 showing RNA visualization with JavaFX.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/rnartist_app/status/1637912428276072448" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;In RNAStudio, you can animate the transcription process&lt;/a&gt;
 along one of the computed folding pathways. When a new helix pops, it is first highlighted then added to the 2D. You can stop/restart the animation, go backwards/forwards.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-miscellanous"&gt;Miscellanous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/shannah78/status/1629515948637188096" target="_blank" rel="noopener noreferrer"&gt;jdeploy by &lt;strong&gt;Steve Hannah&lt;/strong&gt; now produces signed apps for Windows installers&lt;/a&gt;
. This should make Windows Defender more pleasant to be around.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; has also been very active&amp;hellip;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1640703431638753283" target="_blank" rel="noopener noreferrer"&gt;TableView replacement based on GridPane. No virtualisation&lt;/a&gt;
. Very useful for small datasets. Will be added to GemsFX very soon.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1640636273239916547" target="_blank" rel="noopener noreferrer"&gt;Screenshot of an answer on GitHub explaining there is only one codebase&lt;/a&gt;
 for jfxcentral website and desktop app, thanks to &lt;a href="https://twitter.com/jpro_one" target="_blank" rel="noopener noreferrer"&gt;@jpro_one&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1639262929752129544" target="_blank" rel="noopener noreferrer"&gt;The TimePicker in GemsFX has been improved by @cpreisler&lt;/a&gt;
. It can now also display and edit seconds and milliseconds.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1641025184248348672" target="_blank" rel="noopener noreferrer"&gt;He&amp;rsquo;s looking back at something he implemented almost 20 years ago with Java 5 and Swing&lt;/a&gt;
, and it still works perfectly nowadays with Java 19 &amp;hellip; just a whole lot faster!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1631259318195462151" target="_blank" rel="noopener noreferrer"&gt;He showed a custom tooltip implementation for charts&lt;/a&gt;
. The tooltips show the values of all y-values for the same x-value whenever the mouse cursor hovers over one of the data points.&lt;/li&gt;
&lt;li&gt;In a &lt;a href="https://twitter.com/dlemmermann/status/1631331619498860547" target="_blank" rel="noopener noreferrer"&gt;comment tweet, he shows code&lt;/a&gt;
 to illustrate that each data point in a JavaFX chart is also a node that allows us to integrate such a feature.&lt;/li&gt;
&lt;li&gt;Read the comments to learn pro/contra of this approach and alternatives for large datasets.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1635263143155757057" target="_blank" rel="noopener noreferrer"&gt;He added a YearMonthPicker control to GemsFX&lt;/a&gt;
. It&amp;rsquo;s included in version 1.67.0.&lt;/li&gt;
&lt;li&gt;It was the result of a &lt;a href="https://twitter.com/dlemmermann/status/1634576422629961728" target="_blank" rel="noopener noreferrer"&gt;deep-dive into how to customize a ComboBox&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Fahim_FBA/status/1631352990719426561" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Fahim Bin Amin&lt;/strong&gt; shows in a 1,5h video&lt;/a&gt;
 how to create your own full-fledged project from scratch using JavaFX and Maven.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/logorrr/status/1630942843853258753" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt; shared exciting news&lt;/a&gt;
. LogoRRR is now officially available on the Apple Store!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/tomosan119/status/1630562520229646337" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;工房奥谷&lt;/strong&gt; shared a video showing a 3D-CAD application&lt;/a&gt;
 to fit clothing patterns.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@juananpe/109989844101182399" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Juanan&lt;/strong&gt; shared an example to learn how to use a REST API in Java&lt;/a&gt;
 with a JavaFX Pokemon viewer. He added links to multiple videos demonstrating the code. Sources are available &lt;a href="https://github.com/juananpe/pokemon-viewer" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/JavaFX3D/status/1632612728664911872" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;JavaFX 3D&lt;/strong&gt; is asking who wants to contribute an importer for FBX or USDZ or GLB / glTF&lt;/a&gt;
 to FXyz. It already has 3D model importers for OBJ and Maya.
&lt;ul&gt;
&lt;li&gt;He already found a &lt;a href="https://twitter.com/JavaFX3D/status/1632613330920800256" target="_blank" rel="noopener noreferrer"&gt;starting point in an existing java project&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/jjenkov/status/1632112292597751809" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jakob Jenkov&lt;/strong&gt; and &lt;strong&gt;Andres Almiray&lt;/strong&gt; are talking about packaging a JavaFX app with JReleaser&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MhamadHarmush/status/1633840863435714562" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;MhamadHarmush&lt;/strong&gt; shared Java and JavaFX tutorials in Arabic&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1635661530867060736" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt; shared a screenshots of NotificationFX&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/JavaFX3D/status/1635821978430103552" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;JavaFX3D&lt;/strong&gt; shared an article about 3DViewer by &lt;strong&gt;ChrisNahr&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;JavaFX at DevNexus in Atlanta (4-6 April):
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/devnexus/status/1636031079973830657" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gail Anderson&lt;/strong&gt; and &lt;strong&gt;Paul Anderson&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Modern Java with JavaFX for Rich Client UIs&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1636040045206405121" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Harnessing the Hyper-dimensional Mind: Visualizing Brain-Computer Interfaces&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@juananpe/110022581081582129" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Juanan Pereira&lt;/strong&gt; published a new video for his Software Engineering class&lt;/a&gt;
: How to display custom items in JavaFX ListView&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/aalmiray/status/1634931119828393986" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Andres Almiray&lt;/strong&gt; updated the JavaFX plasma application to reflect changes brought by JReleaser 1.5.1&lt;/a&gt;
, along with instructions for building.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/logorrr/status/1634213339470393345" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt; wrote a blog post about LogoRRR&amp;rsquo;s journey to the Apple App Store&lt;/a&gt;
 using JPackage.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/invokecoley/status/1637693418192228352" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Matt Coley&lt;/strong&gt; has a long Twitter thread about new the Recaf UI JavaFX work&lt;/a&gt;
, starting with a &amp;lsquo;please wait while the decompiler runs&amp;rsquo; animation that pulls hex dumps from the class being decompiled, and many more each with a video.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/shannah78/status/1605922584310452225" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Steve Hannah&lt;/strong&gt; shared a GitHub action&lt;/a&gt;
 to generate native installers for Java desktop apps.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SerendigityInfo/status/1639293098227388416" target="_blank" rel="noopener noreferrer"&gt;SmartFinder by &lt;strong&gt;Serendipity&lt;/strong&gt; version 1.7.3 now runs with JavaFX 20&lt;/a&gt;
! It&amp;rsquo;s a Desktop Search Tool APP fully developed with Java and JavaFX technology.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; again shared a lot of JavaFX library and other info:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;If any of you work on &lt;a href="https://twitter.com/dlemmermann/status/1638910874261000192" target="_blank" rel="noopener noreferrer"&gt;planning and scheduling applications I can highly recommend #FlexGanttFX for visualizing plans / schedules&lt;/a&gt;
. Yes, it is a commercial library.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;If your JavaFX application requires an &lt;a href="https://twitter.com/dlemmermann/status/1638903750726418432" target="_blank" rel="noopener noreferrer"&gt;on-screen keyboard, you might wanna check out KeyboardFX&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A screenshot of the new market data portal he is creating, &lt;a href="https://twitter.com/dlemmermann/status/1638854795074338816" target="_blank" rel="noopener noreferrer"&gt;running in a browser&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;The new &lt;a href="https://twitter.com/dlemmermann/status/1638103850107260930" target="_blank" rel="noopener noreferrer"&gt;calendar view in GemsFX now also supports &amp;ldquo;date range&amp;rdquo; selection&lt;/a&gt;
 (and single date, multiple dates selection).&lt;/li&gt;
&lt;li&gt;Thanks to &lt;a href="https://twitter.com/dlemmermann/status/1638107356188798977" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Florian Kirmaier&lt;/strong&gt;, GemsFX has been extended with a great utility class for synchronous scrolling of two VirtualFlow instances&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;And he&amp;rsquo;s worried about his job as &lt;a href="https://twitter.com/dlemmermann/status/1638137320846106625" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;ChatGPT &amp;ldquo;generates&amp;rdquo; a JavaFX app based on requirements&amp;rdquo;&lt;/a&gt;
. That&amp;rsquo;s probably thanks to the stability of the API over the last years!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>My Evaluation of the Scaleway Cloud Provider</title><link>https://foojayio.github.io/website/today/my-evaluation-of-the-scaleway-cloud-provider/</link><pubDate>Fri, 31 Mar 2023 09:54:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/my-evaluation-of-the-scaleway-cloud-provider/</guid><description>&lt;p&gt;A couple of years ago, I developed an app that helped me manage my conference submission workflow.&lt;/p&gt;
&lt;p&gt;Since then, I have been a happy user of the free Heroku plan.&lt;/p&gt;
&lt;p&gt;Last summer, Heroku&amp;rsquo;s owner, Salesforce, announced that it would stop the free plan in November 2022.&lt;/p&gt;
&lt;p&gt;I searched for a new hosting provider and found &lt;a href="https://www.scaleway.com/" target="_blank" rel="noopener noreferrer"&gt;Scaleway&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;In this article, I&amp;rsquo;d like to explain my requirement, why I chose them, and my experience using them.&lt;/p&gt;</description></item><item><title>Writing a Profiler in 240 Lines of Pure Java</title><link>https://foojayio.github.io/website/today/writing-a-profiler-in-240-lines-of-pure-java/</link><pubDate>Thu, 30 Mar 2023 07:14:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/writing-a-profiler-in-240-lines-of-pure-java/</guid><description>&lt;p&gt;A few months back, I started writing a profiler from scratch, and the code since became the base of my profiler validation tools.&lt;/p&gt;
&lt;p&gt;The only problem with this project: I wanted to write a proper non-safepoint-biased profiler from scratch.&lt;/p&gt;
&lt;p&gt;This is a noble effort, but it requires lots C/C++/Unix programming which is finicky, and not everyone can read C/C++ code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;For people unfamiliar with safepoint bias: A safepoint is a point in time where the JVM has a known defined state, and all threads have stopped. The JVM itself needs safepoints to do major garbage collections, Class definitions, method deoptimizations, and more. Threads are regularly checking whether they should get into a safepoint, for example, at method entry, exit, or loop backjumps. A profiler that only profiles at a safepoint have an inherent bias because it only includes frames from the locations inside methods where Threads check for a safepoint. The only advantage is that the stack-walking at safepoints is slightly less error-prone, as there are fewer mutations of heap and stack.&lt;/em&gt; &lt;em&gt;For more information, consider reading the excellent article &lt;a href="https://seethawenner.medium.com/java-safepoint-and-async-profiling-cdce0818cd29" target="_blank" rel="noopener noreferrer"&gt;Java Safepoint and Async Profiling&lt;/a&gt;
 by Seetha Wenner, the &lt;a href="http://Why%20JVM%20modern%20profilers%20are%20still%20safepoint%20biased?" target="_blank" rel="noopener noreferrer"&gt;more technical one by JP Bempel&lt;/a&gt;
, or the classic article &lt;a href="http://psy-lob-saw.blogspot.com/2015/12/safepoints.html" target="_blank" rel="noopener noreferrer"&gt;Safepoints: Meaning, Side Effects and Overheads&lt;/a&gt;
 by Nitsan Wakart. To conclude: Safepoint-biased profilers don&amp;rsquo;t give you a holistic view of your application, but can still be helpful to analyze major performance issues where you look at the bigger picture.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Debate on the Future of Java and Kotlin on Foojay.io Today</title><link>https://foojayio.github.io/website/today/competing-for-the-crown-a-friendly-debate-on-the-future-of-java-and-kotlin-on-foojay-io-today/</link><pubDate>Wed, 29 Mar 2023 13:50:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/competing-for-the-crown-a-friendly-debate-on-the-future-of-java-and-kotlin-on-foojay-io-today/</guid><description>&lt;p&gt;&lt;strong&gt;Java and Kotlin are two of the most popular programming languages on the Java Virtual Machine. But both languages have pros and cons, and developers often have to choose between them based on the needs of their project, the people on their team, and their own preferences.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Recently, a conversation took place in &lt;a href="https://join.slack.com/t/foojay/shared_invite/zt-jnkc9y5x-vS05~nb37oq9pSp1sgDGvA" title="Foojay&amp;#39;s Slack channel" target="_blank" rel="noopener noreferrer"&gt;Foojay&amp;rsquo;s Slack channel&lt;/a&gt;
, where participants discussed the comparison of Java and Kotlin. Foojay.io is a central place for the Java community to get daily information.&lt;/p&gt;</description></item><item><title>Chronicle Wire: Object Marshalling</title><link>https://foojayio.github.io/website/today/chronicle-wire-object-marshalling/</link><pubDate>Wed, 29 Mar 2023 13:35:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/chronicle-wire-object-marshalling/</guid><description>&lt;p&gt;At &lt;a href="https://chronicle.software/?utm_source=foojay&amp;amp;amp;utm_medium=article&amp;amp;amp;utm_campaign=jasmine-article" title="Chronicle" target="_blank" rel="noopener noreferrer"&gt;Chronicle&lt;/a&gt;
, we know that efficient code doesn&amp;rsquo;t just run faster; if it&amp;rsquo;s using less compute-resource, it may also be cheaper to run.&lt;/p&gt;
&lt;p&gt;In particular, distributed cloud applications can benefit from fast, lightweight serialisation.&lt;/p&gt;
&lt;p&gt;In this article, we will demonstrate the efficiencies of using Chronicle Wire to encode small Strings into long primitives, with a few step-by-step examples of object marshalling, and show how this can improve the performance of your application&amp;rsquo;s serialisation.&lt;/p&gt;</description></item><item><title>Getting started with OpenAPI Generators : tips and tricks</title><link>https://foojayio.github.io/website/today/getting-started-with-openapi-generators-tips-tricks/</link><pubDate>Tue, 28 Mar 2023 15:50:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-openapi-generators-tips-tricks/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;TL;DR: In this article, I&amp;rsquo;m sharing some tips and tricks on how to get productive creating OpenAPI generators.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Lately, I&amp;rsquo;ve started dabbling more and more with &lt;a href="http://https://github.com/OAI/OpenAPI-Specification" title="OpenAPI" target="_blank" rel="noopener noreferrer"&gt;OpenAPI&lt;/a&gt;
. The OpenAPI specification is a super useful way to describe the API that you&amp;rsquo;re exposing to your users, both internally and externally.&lt;/p&gt;
&lt;p&gt;Some of you may also have heard about those under the name of &amp;ldquo;Swagger files&amp;rdquo;. They&amp;rsquo;re both kinda the same in the common speak, though OpenAPI is an open standard (lead with the OpenAPI Initiative) and Swagger is a set of tools built by a company (&lt;a href="https://smartbear.com/" title="SmartBear" target="_blank" rel="noopener noreferrer"&gt;SmartBear&lt;/a&gt;
).&lt;/p&gt;</description></item><item><title>Ingesting Data from Kafka into the QuestDB time-series database</title><link>https://foojayio.github.io/website/today/ingesting-time-series-events-from-kafka-into-questdb/</link><pubDate>Tue, 28 Mar 2023 09:38:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/ingesting-time-series-events-from-kafka-into-questdb/</guid><description>&lt;p&gt;If you are working on a project with fast or streaming data, chances are Apache Kafka is already &lt;a href="https://kafka.apache.org/powered-by#:~:text=Today%2C%20Kafka%20is%20used%20by,80%25%20of%20the%20Fortune%20100." target="_blank" rel="noopener noreferrer"&gt;part of your pipeline&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;But if you want to analyse your data, you will need to ingest from Kafka into some destination.&lt;/p&gt;
&lt;p&gt;For time-series data, QuestDB can be an excellent choice.&lt;/p&gt;
&lt;p&gt;For those of you who are not yet familiar with &lt;a href="https://github.com/questdb/questdb" title="QuestDB" target="_blank" rel="noopener noreferrer"&gt;QuestDB&lt;/a&gt;
, it is an Apache 2.0 licensed database designed for high throughput ingestion and fast SQL queries.&lt;/p&gt;</description></item><item><title>Navigating the Challenges of Modern Software Development: An Exclusive Interview with Shai Almog</title><link>https://foojayio.github.io/website/today/navigating-the-challenges-of-modern-software-development-an-exclusive-interview-with-shai-almog/</link><pubDate>Mon, 27 Mar 2023 16:39:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/navigating-the-challenges-of-modern-software-development-an-exclusive-interview-with-shai-almog/</guid><description>&lt;figure class="alignleft size-full"&gt;
 &lt;img fetchpriority="high" decoding="async" width="474" height="474" src="shai-almog.jpg" alt="" class="wp-image-61677"&gt;
&lt;/figure&gt;
&lt;p&gt;Welcome to our exclusive interview with &lt;a href="https://www.linkedin.com/in/shai-almog-81a42/" target="_blank" rel="noopener noreferrer"&gt;Shai Almog&lt;/a&gt;
, an accomplished entrepreneur, author, blogger, and Java expert with over two decades of experience in the software industry.&lt;/p&gt;
&lt;p&gt;Shai has been instrumental in developing innovative tools and solutions at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;Codename One&lt;/a&gt;
 and &lt;a href="https://lightrun.com/" target="_blank" rel="noopener noreferrer"&gt;Lightrun&lt;/a&gt;
, significantly impacting how Java applications are debugged and monitored in production.&lt;/p&gt;
&lt;p&gt;In this fascinating conversation, Shai shares his journey, from his early exposure to programming to his growth as a developer and entrepreneur.&lt;/p&gt;</description></item><item><title>Using Bots to Keep Dependencies Updated</title><link>https://foojayio.github.io/website/today/using-bots-to-keep-dependencies-updated/</link><pubDate>Mon, 27 Mar 2023 15:18:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-bots-to-keep-dependencies-updated/</guid><description>&lt;p&gt;Any real world Java project will likely use external dependencies.&lt;/p&gt;
&lt;p&gt;As we&amp;rsquo;ve seen over the last few years, it&amp;rsquo;s important to keep these dependencies up to date. We used to have to manually check for updates, but fortunately these days there are tools available that can help us with this. Because, let&amp;rsquo;s be honest, most developers don&amp;rsquo;t enjoy maintaining applications.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;d much rather be using cool new tools and/or language features, and solving interesting problems. Sorry, I mean: delivering business value! But we are responsible for keeping our dependencies up to date, so let&amp;rsquo;s make that as easy as possible.&lt;/p&gt;</description></item><item><title>Foojay Podcast #17: Execute Java Code with TornadoVM</title><link>https://foojayio.github.io/website/today/foojay-podcast-17/</link><pubDate>Mon, 27 Mar 2023 08:45:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-17/</guid><description>&lt;p&gt;TornadoVM is a programming and execution framework for offloading and running JVM applications on multi-core CPUs, GPUs, and FPGAs.&lt;/p&gt;
&lt;p&gt;With the same code, some of your existing program code can be executed hundreds of times faster!&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/4Y-3qZNSkfM?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Watch Area and Renderers</title><link>https://foojayio.github.io/website/today/watch-area-and-renderers/</link><pubDate>Sat, 25 Mar 2023 07:25:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/watch-area-and-renderers/</guid><description>&lt;p&gt;This is it. The &lt;a href="https://www.amazon.com/dp/1484290410/" target="_blank" rel="noopener noreferrer"&gt;debugging book is live&lt;/a&gt;
. I would really appreciate reviews and feedback!&lt;/p&gt;
&lt;p&gt;I also finished recording and editing the &lt;a href="https://course.debugagent.com/" target="_blank" rel="noopener noreferrer"&gt;entire course&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;There are 50 total videos which total in 7 hours&amp;hellip; I also recorded additional videos for the two other free courses &lt;a href="https://www.youtube.com/watch?v=1Bum2gYETUQ&amp;amp;amp;list=PL8GhfcywW9YMucwRw2IbpeCp1FBMEgsmk" target="_blank" rel="noopener noreferrer"&gt;for beginners&lt;/a&gt;
 and for &lt;a href="https://www.youtube.com/watch?v=3oNT_VRrfqE&amp;amp;amp;list=PL8GhfcywW9YNuNHrG0FAg5xiprfYcYyuL" target="_blank" rel="noopener noreferrer"&gt;modern Java&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;So keep an eye on those!&lt;/p&gt;
&lt;h2 id="h2-0-renderers"&gt;Renderers&lt;/h2&gt;
&lt;p&gt;In today&amp;rsquo;s video we discuss one of my favorite obscure IDE features: renderers. Very few people are aware of them. I explained them in the past but I feel I didn&amp;rsquo;t properly explain why they are so much better than any other alternative. This time I think I got the explanation right.&lt;/p&gt;</description></item><item><title>Control your Arduino with Spring</title><link>https://foojayio.github.io/website/today/control-your-arduino-with-spring/</link><pubDate>Sat, 25 Mar 2023 07:21:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/control-your-arduino-with-spring/</guid><description>&lt;p&gt;Have you ever wanted to control your Arduino board from a Raspberry Pi, or your computer, using only Java and not the Arduino language?&lt;/p&gt;
&lt;p&gt;In this article, I show how I created a web app to control my Arduino with a Raspberry PI using Spring. And so this is another article about Java on Raspberry PI or perhaps this time I can say Java and Arduino.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/control-your-arduino-with-spring/Arduino_spring01.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h3 id="h3-0-idea"&gt;Idea&lt;/h3&gt;
&lt;p&gt;A simple Spring app where I can create a REST interface to control one of the Arduino GPIOs. I can plug a LED and build a simple blink LED example.&lt;/p&gt;</description></item><item><title>How to Build and Deploy a Real-time Cloud-based Logging System</title><link>https://foojayio.github.io/website/today/how-to-build-and-deploy-a-real-time-cloud-based-logging-system/</link><pubDate>Fri, 24 Mar 2023 15:04:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-build-and-deploy-a-real-time-cloud-based-logging-system/</guid><description>&lt;p&gt;Logs and traces generated by applications are valuable sources of information that can help detect issues and improve performance.&lt;/p&gt;
&lt;p&gt;However, they are often treated separately from other data, even though they are no different from the data an application works with.&lt;/p&gt;
&lt;p&gt;In this tutorial, we will explore a different approach: treating logs and traces as part of a scalable cloud storage repository that can be analysed with the same techniques used for big data.&lt;/p&gt;</description></item><item><title>Failover Client with the Hazelcast Viridian Serverless</title><link>https://foojayio.github.io/website/today/how-to-create-a-failover-client-using-the-hazelcast-viridian-serverless/</link><pubDate>Fri, 24 Mar 2023 14:55:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-create-a-failover-client-using-the-hazelcast-viridian-serverless/</guid><description>&lt;p&gt;Failover is an important feature of systems that rely on near-constant availability.&lt;/p&gt;
&lt;p&gt;In Hazelcast, a failover client automatically redirects its traffic to a secondary cluster when the client cannot connect to the primary cluster.&lt;/p&gt;
&lt;p&gt;Consider using a failover client with WAN replication as part of your disaster recovery strategy.&lt;/p&gt;
&lt;p&gt;In this tutorial, you&amp;rsquo;ll update the code in a Java client to automatically connect to a secondary, failover cluster if it cannot connect to its original, primary cluster.&lt;/p&gt;</description></item><item><title>Java Security: Log4J, the SecurityManager, and Funding</title><link>https://foojayio.github.io/website/today/java-security-log4j-the-securitymanager-and-funding/</link><pubDate>Fri, 24 Mar 2023 09:28:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-security-log4j-the-securitymanager-and-funding/</guid><description>&lt;p&gt;A demonstration of log4j exploits, which defenses people tried, and which worked.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll cover how groups responded effectively to patch to see what was common.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll also look at open source funding models, subscriptions, and bug bounty programs to see why it&amp;rsquo;s sometimes hard to donate.&lt;/p&gt;
&lt;p&gt;This talk uses actual exploit code that takes over systems through their log messages to open calculators.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/0mi9mTMd_5I?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;</description></item><item><title>Mitigating Path Traversal Vulnerabilities in Java</title><link>https://foojayio.github.io/website/today/mitigating-path-traversal-vulnerabilities-in-java/</link><pubDate>Fri, 24 Mar 2023 07:57:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/mitigating-path-traversal-vulnerabilities-in-java/</guid><description>&lt;p&gt;Path traversal is a type of security vulnerability that can occur when a web application or service allows an attacker to access server files or directories that are outside the intended directory structure.&lt;/p&gt;
&lt;p&gt;This can lead to the unauthorized reading or modification of sensitive data.&lt;/p&gt;
&lt;p&gt;In the context of file uploads, a path traversal vulnerability can occur when an application fails to properly validate the file path specified by the user, which can allow the attacker to upload a malicious file with a filename that gives them access to restricted files on the server.&lt;/p&gt;</description></item><item><title>Predicting Secure Java Projects on Maven Central</title><link>https://foojayio.github.io/website/today/predicting-secure-java-projects-on-maven-central/</link><pubDate>Thu, 23 Mar 2023 14:10:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/predicting-secure-java-projects-on-maven-central/</guid><description>&lt;p&gt;If you&amp;rsquo;ve searched for &lt;a href="http://central.sonatype.com" title="Maven Central components" target="_blank" rel="noopener noreferrer"&gt;Maven Central components&lt;/a&gt;
 in the last six months, you may have noticed some pretty big changes to the website, including a UI facelift and some new component analysis tools like &lt;a href="https://bomdoctor.sonatype.com/#/home" title="BOM Doctor" target="_blank" rel="noopener noreferrer"&gt;BOM Doctor&lt;/a&gt;
 and the Sonatype Safety Rating.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s no coincidence that many of these changes are security related. Maven Central, along with public code repositories, are the first line of defense when it comes to supply chain security.&lt;/p&gt;</description></item><item><title>Event-Driven Order Processing Program</title><link>https://foojayio.github.io/website/today/event-driven-order-processing-program/</link><pubDate>Thu, 23 Mar 2023 09:27:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/event-driven-order-processing-program/</guid><description>&lt;p&gt;Following the &lt;a href="https://foojayio.github.io/website/today/event-driven-hello-world-program/" title="Hello World example"&gt;Hello World example&lt;/a&gt;
 of a simple, independently deployable real-time Event-Driven Microservice, this article looks at a more realistic example of an Order Processor with a New Order Single in and an Execution Report out.&lt;/p&gt;
&lt;p&gt;A &lt;a href="https://www.onixs.biz/fix-dictionary/4.4/msgtype_d_68.html" title="New Order Single" target="_blank" rel="noopener noreferrer"&gt;New Order Single&lt;/a&gt;
 is a standard message type for the order of one asset in the FIX protocol used widely by financial institutions such as banks.&lt;/p&gt;
&lt;p&gt;The reply is typically one or more &lt;a href="https://www.onixs.biz/fix-dictionary/4.2/msgtype_8_8.html" title="Execution Reports" target="_blank" rel="noopener noreferrer"&gt;Execution Reports&lt;/a&gt;
 updating the status of that order.&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>Vaadin 24: Java 17, Jakarta EE 10, Servlet 6, Spring Boot 3</title><link>https://foojayio.github.io/website/today/vaadin-24-java-17-jakarta-ee-10-servlet-6-spring-boot-3/</link><pubDate>Wed, 22 Mar 2023 09:22:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/vaadin-24-java-17-jakarta-ee-10-servlet-6-spring-boot-3/</guid><description>&lt;p&gt;Vaadin 24 delivers a significant step forward with a new technology baseline that includes Java 17, Jakarta EE 10, Servlet 6.0, Spring 6.0, and Spring Boot 3.&lt;/p&gt;
&lt;p&gt;This ensures you can continue building Vaadin Flow apps with the latest Java technologies.&lt;/p&gt;
&lt;p&gt;It also provides several exciting improvements that help you build Java applications even faster. Let me introduce some of them.&lt;/p&gt;
&lt;h2 id="h2-0-faster-build-times"&gt;Faster build times&lt;/h2&gt;
&lt;p&gt;You can now experience significantly improved build and start-up times during development.&lt;/p&gt;</description></item><item><title>Java on Visual Studio Code Update</title><link>https://foojayio.github.io/website/today/java-on-visual-studio-code-update-february-2023/</link><pubDate>Tue, 21 Mar 2023 15:47:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-visual-studio-code-update-february-2023/</guid><description>&lt;p&gt;Hi everyone, welcome to our February update!&lt;/p&gt;
&lt;p&gt;In this article, we will bring you new features related to JUnit 5 parallel testing as well as new filter widget for Spring Boot dashboard.&lt;/p&gt;
&lt;p&gt;There is also some exciting news from GitHub Copilot, so let&amp;rsquo;s get started.&lt;/p&gt;
&lt;h4 id="junit-5-parallel-testing-support"&gt;JUnit 5 Parallel Testing Support&lt;/h4&gt;
&lt;p&gt;JUnit 5 is a popular testing framework for Java developers, known for its comprehensive support for unit, integration, and functional testing. One of the significant improvements in JUnit 5 is its ability to execute tests in parallel, making testing faster and more efficient.&lt;/p&gt;</description></item><item><title>It's Java 20 Release Day! Here's What's New | foojay.io Today</title><link>https://foojayio.github.io/website/today/its-java-20-release-day-heres-whats-new/</link><pubDate>Tue, 21 Mar 2023 06:40:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/its-java-20-release-day-heres-whats-new/</guid><description>&lt;p&gt;This will be a good day, because it&amp;rsquo;s Java 20 release day!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been six months since Java 19 was released, and so it&amp;rsquo;s time for another fresh wave of Java features.&lt;/p&gt;
&lt;p&gt;In this article, we will take you on a tour through all JEPs that come with this release and give you a brief introduction of each one of them.&lt;/p&gt;
&lt;p&gt;Where applicable the differences with Java 19 are highlighted and a few typical use cases are provided, so that you&amp;rsquo;ll be more than ready to use these features after you&amp;rsquo;ve finished reading!&lt;/p&gt;</description></item><item><title>From Assembler to Chat-GPT: Steve Poole on the Shifting Landscape of Programming</title><link>https://foojayio.github.io/website/today/from-assembler-to-chat-gpt-steve-poole-on-the-shifting-landscape-of-programming/</link><pubDate>Mon, 20 Mar 2023 11:56:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/from-assembler-to-chat-gpt-steve-poole-on-the-shifting-landscape-of-programming/</guid><description>&lt;figure class="alignright size-large is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="image-4-921x1024.png" alt="" class="wp-image-63004" width="461" height="512"&gt;
&lt;/figure&gt;
&lt;p&gt;Welcome to our exclusive interview with &lt;a href="https://www.linkedin.com/in/noregressions/" target="_blank" rel="noopener noreferrer"&gt;Steve Poole&lt;/a&gt;
, a seasoned Java developer, leader, and evangelist with a lot of experience in the tech industry.&lt;/p&gt;
&lt;p&gt;As a Developer Advocate for &lt;a href="https://www.sonatype.com/" target="_blank" rel="noopener noreferrer"&gt;Sonatype&lt;/a&gt;
, Steve has been deeply involved in Java SDKs and JVMs since Java was less than version 1.&lt;/p&gt;
&lt;p&gt;In his long and successful career, he has had many roles, such as being a representative or lead on different &lt;a href="https://jcp.org/en/jsr/overview" target="_blank" rel="noopener noreferrer"&gt;Java Specification Requests&lt;/a&gt;
 (JSRs), committing to many open-source projects at &lt;a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache&lt;/a&gt;
, &lt;a href="https://www.eclipse.org/org/foundation/" target="_blank" rel="noopener noreferrer"&gt;Eclipse&lt;/a&gt;
, and &lt;a href="https://openjdk.org/" target="_blank" rel="noopener noreferrer"&gt;OpenJDK&lt;/a&gt;
, and actively taking part in the &lt;a href="https://adoptium.net/en-GB/" target="_blank" rel="noopener noreferrer"&gt;Adopt OpenJDK group&lt;/a&gt;
 to promote community involvement.&lt;/p&gt;</description></item><item><title>Foojay Podcast #16: Welcome to Java 20!</title><link>https://foojayio.github.io/website/today/foojay-podcast-16/</link><pubDate>Mon, 20 Mar 2023 08:00:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-16/</guid><description>&lt;p&gt;Since 2018, we get a new version of Java every 6 months.&lt;/p&gt;
&lt;p&gt;Some are long-term supported versions that can be used for many years, while others are only maintained for a short time. Version 20 is such a short-term supported version.&lt;/p&gt;
&lt;p&gt;So, what new features does this version bring? And why should we use it? And what can we expect from the next version, 21, in September that will be a long-term supported version?&lt;/p&gt;</description></item><item><title>Book Review: "API Design Patterns"</title><link>https://foojayio.github.io/website/today/book-review-api-design-patterns/</link><pubDate>Sun, 19 Mar 2023 15:20:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-api-design-patterns/</guid><description>&lt;p&gt;&lt;em&gt;Disclaimer: this post includes affiliate links; I may receive compensation if you purchase the book from the different links provided in this post.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This review is about &lt;a href="https://www.manning.com/books/api-design-patterns?utm_source=frankel&amp;amp;amp;utm_medium=affiliate&amp;amp;amp;utm_campaign=affiliate&amp;amp;amp;a_aid=frankel" target="_blank" rel="noopener noreferrer"&gt;API Design Patterns&lt;/a&gt;
 by JJ Geewax from Manning.&lt;/p&gt;
&lt;p&gt;I &lt;a href="https://blog.frankel.ch/structured-errors-http-apis/" target="_blank" rel="noopener noreferrer"&gt;already mentioned&lt;/a&gt;
 how I&amp;rsquo;m trying to get to speed in the API world: reading books, viewing relevant YouTube videos and reading relevant s.&lt;/p&gt;
&lt;h2 id="h2-0-facts"&gt;Facts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;30 chapters, $35.00&lt;/li&gt;
&lt;li&gt;The author is a Principal Software Engineer at Google&lt;/li&gt;
&lt;li&gt;He&amp;rsquo;s also the author behind&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-chapters"&gt;Chapters&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Design principles
3. Naming
4. Resource scope and hierarchy
5. Data types and defaults&lt;/li&gt;
&lt;li&gt;Fundamentals
6. Resource identification: How to identify resources in an API
7. Standard methods: The set of standard methods for use in resource-oriented APIs
8. Partial updates and retrievals: How to interact with portions of resources
9. Custom methods: Using custom (non-standard) methods in resource-oriented APIs
10. Long-running operations: How to handle methods that are not instantaneous
11. Rerunnable jobs: Running repeated custom functionality in an API&lt;/li&gt;
&lt;li&gt;Resource relationships
12. Singleton sub-resources: Isolating portions of resource data
13. Cross references: How to reference other resources in an API
14. Association resources: How to manage many-to-many relationships with metadata
15. Add and remove custom methods: How to manage many-to-many relationships &lt;em&gt;without&lt;/em&gt; metadata
16. Polymorphism: Designing resources with dynamically-typed attributes&lt;/li&gt;
&lt;li&gt;Collective operations
17. Copy and move: Duplicating and relocating resources in an API
18. Batch operations: Extending methods to apply to groups of resources atomically
19. Criteria-based deletion: Deleting multiple resources based on a set of filter criteria
20. Anonymous writes: Ingesting unaddressable data into an API
21. Pagination: Consuming large amounts of data in bite-sized chunks
22. Filtering: Limiting result sets according to a user-specified filter
23. Importing and exporting: Moving data into or out of an API by interacting directly with a storage system&lt;/li&gt;
&lt;li&gt;Safety and security
24. Versioning and compatibility: Defining compatibility and strategies for versioning APIs
25. Soft deletion: Moving resources to the &amp;ldquo;API recycle bin&amp;rdquo;
26. Request deduplication: Preventing duplicate work due to network interruptions in APIs
27. Request validation: Allowing API methods to be called in &amp;ldquo;safe mode&amp;rdquo;
28. Resource revisions: Tracking resource change history
29. Request retrial: Algorithms for safely retrying API requests
30. Request authentication: Verifying that requests are authentic and untampered with&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each &lt;em&gt;design pattern&lt;/em&gt; chapter follows the same structure:&lt;/p&gt;</description></item><item><title>How to create SBOMs in Java with Maven and Gradle</title><link>https://foojayio.github.io/website/today/how-to-create-sboms-in-java-with-maven-and-gradle/</link><pubDate>Fri, 17 Mar 2023 09:08:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-create-sboms-in-java-with-maven-and-gradle/</guid><description>&lt;p&gt;When building applications in Java, we highly depend on external libraries and frameworks. And each Java package that is imported likely also depends on more libraries. This means that the amount of Java packages included in your application is often not really transparent.&lt;/p&gt;
&lt;p&gt;As a developer, these nested (transitive) dependencies create the problem that you probably do not know all the libraries you are actually using.&lt;/p&gt;
&lt;p&gt;Recently, we discussed why and how we should maintain our dependencies carefully. In the article &lt;a href="https://snyk.io/blog/best-practices-for-managing-java-dependencies/" target="_blank" rel="noopener noreferrer"&gt;Best practices for managing Java dependencies&lt;/a&gt;
, I discussed the options and tools available for setting up a dependency management strategy.&lt;/p&gt;</description></item><item><title>Book review - Practical Design Patterns for Java Developers</title><link>https://foojayio.github.io/website/today/book-review-practical-design-patterns-for-java-developers/</link><pubDate>Fri, 17 Mar 2023 08:27:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-practical-design-patterns-for-java-developers/</guid><description>&lt;h2 id="h2-0-hone-your-software-design-skills-by-implementing-popular-design-patterns-in-java"&gt;Hone your software design skills by implementing popular design patterns in Java&lt;/h2&gt;
&lt;p&gt;This book is for sale on &lt;a href="https://www.amazon.de/dp/180461467X" target="_blank" rel="noopener noreferrer"&gt;Amazon in Kindle and Paperback editions&lt;/a&gt;
.&lt;/p&gt;
&lt;figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex"&gt;
 &lt;figure class="wp-block-image size-large"&gt;
 &lt;img fetchpriority="high" decoding="async" width="830" height="1024" data-id="62853" src="practical-cover-830x1024.jpg" alt="" class="wp-image-62853"&gt;
 &lt;/figure&gt;
 &lt;figure class="wp-block-image size-large"&gt;
 &lt;img decoding="async" width="600" height="740" data-id="62852" src="practical-backside.jpg" alt="" class="wp-image-62852"&gt;
 &lt;/figure&gt;
 &lt;figure class="wp-block-image size-large"&gt;
 &lt;img decoding="async" width="426" height="426" data-id="62851" src="miro.jpg" alt="" class="wp-image-62851"&gt;
 &lt;/figure&gt;
&lt;/figure&gt;
&lt;p&gt;We&amp;rsquo;ll start this post with the personal verdict of two avid readers of this book:&lt;/p&gt;
&lt;h2 id="h2-1-frank-delporte-s-verdict"&gt;Frank Delporte&amp;rsquo;s Verdict&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve been programming since I was 10y old, but I graduated from film school as a video editor, so I never learned the &amp;ldquo;official&amp;rdquo; way to be a programmer. It was only by following courses and, most importantly, learning from colleagues that I started making &amp;ldquo;readable and maintainable&amp;rdquo; code, which is precisely the topic of this book.&lt;/p&gt;</description></item><item><title>Validating Java Profiling APIs</title><link>https://foojayio.github.io/website/today/validating-java-profiling-apis/</link><pubDate>Thu, 16 Mar 2023 14:43:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/validating-java-profiling-apis/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/do-you-trust-profilers-i-once-did-too/"&gt;my last article&lt;/a&gt;
, I covered a correctness bug in the fundamental Java profiling API AsyncGetCallTrace that I found just by chance.&lt;/p&gt;
&lt;p&gt;Now the question is: could we find such bugs automatically?&lt;/p&gt;
&lt;p&gt;Potentially uncovering more bugs or being more confident in the absence of errors.&lt;/p&gt;
&lt;p&gt;I already wrote code to test the stability of the profiling APIs, testing for the lack of fatal errors, in my &lt;a href="https://github.com/parttimenerd/jdk-profiling-tester" target="_blank" rel="noopener noreferrer"&gt;jdk-profiling-tester&lt;/a&gt;
 project.&lt;/p&gt;
&lt;p&gt;Such tools are invaluable when modifying the API implementation or adding a new API.&lt;/p&gt;</description></item><item><title>Comparing Map.of() and new HashMap() in Java</title><link>https://foojayio.github.io/website/today/speed-test-comparing-map-of-new-hashmap/</link><pubDate>Thu, 16 Mar 2023 08:16:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/speed-test-comparing-map-of-new-hashmap/</guid><description>&lt;p&gt;Java is a popular programming language used for developing a wide range of applications, including web, mobile, and desktop applications.&lt;/p&gt;
&lt;p&gt;It provides many useful data structures for developers to use in their programs, one of which is the &lt;code&gt;Map&lt;/code&gt; interface.&lt;/p&gt;
&lt;p&gt;The Map interface is used to store data in key-value pairs, making it an essential data structure for many applications.&lt;/p&gt;
&lt;p&gt;In this article, we will discuss the use of &lt;code&gt;Map.of()&lt;/code&gt; and new &lt;code&gt;HashMap&amp;lt;&amp;gt;()&lt;/code&gt; in Java, the difference between them, and the benefits of using Map.of().&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>How Gradle Works: Inside the Daemon</title><link>https://foojayio.github.io/website/today/how-gradle-works-inside-the-daemon/</link><pubDate>Tue, 14 Mar 2023 11:27:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-gradle-works-inside-the-daemon/</guid><description>&lt;p&gt;Previously in the &lt;em&gt;How Gradle Works&lt;/em&gt;series:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/how-gradle-works-startup/"&gt;How Gradle Works: Startup&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is the second article of the series &lt;em&gt;How Gradle Works&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll explain what happens inside the &lt;code&gt;Gradle Daemon JVM&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="h2-0-why-do-we-need-gradle-daemon"&gt;Why Do We Need Gradle Daemon?&lt;/h2&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/how-gradle-works-startup/"&gt;the last article&lt;/a&gt;
, we mentioned that Gradle starts a &lt;code&gt;Gradle Daemon JVM&lt;/code&gt; (&amp;ldquo;the daemon&amp;rdquo;) to run the build.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.gradle.org/current/userguide/gradle_daemon.html" target="_blank" rel="noopener noreferrer"&gt;The userguide&lt;/a&gt;
 explains why we need the daemon.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Daemon is a long-lived background process that reduces the time it takes to run a build. The Daemon reduces build times by caching project information across builds, running in the background so every Gradle build doesn&amp;rsquo;t have to wait for JVM startup, benefiting from continuous runtime optimization in the JVM, and watching the file system to calculate exactly what needs to be rebuilt before you run a build.&lt;/p&gt;</description></item><item><title>From Law Degree to Java Champion: Geertjan Wielenga on the Success of Java and Navigating the Software Industry</title><link>https://foojayio.github.io/website/today/from-law-degree-to-java-champion-geertjan-wielenga-on-the-success-of-java-and-navigating-the-software-industry/</link><pubDate>Mon, 13 Mar 2023 11:07:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/from-law-degree-to-java-champion-geertjan-wielenga-on-the-success-of-java-and-navigating-the-software-industry/</guid><description>&lt;figure class="alignright size-large is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="https://media.licdn.com/dms/image/C4E03AQHPaOIko7idtg/profile-displayphoto-shrink_800_800/0/1598955813161?e=1683763200&amp;amp;v=beta&amp;amp;t=-F4XJx_E2F68XRT8-aQu982KIxiA8BJ43HuReoUgAMo" alt="" width="394" height="394"&gt;
&lt;/figure&gt;
&lt;p&gt;In this interview, we chat with&lt;a href="https://www.linkedin.com/in/geertjanwielenga/" target="_blank" rel="noopener noreferrer"&gt;Geertjan Wielenga&lt;/a&gt;
, a Java Champion and developer advocate at &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
. Geertjan talks about how he unusually got into the software industry and what it was like to work with Java and its community.&lt;/p&gt;
&lt;p&gt;He talks about what has made Java so successful, the problems developers face in a constantly changing industry, and how important it is for people to work together and be involved in the community.&lt;/p&gt;</description></item><item><title>Getting Started with IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/getting-started-with-intellij-idea/</link><pubDate>Mon, 13 Mar 2023 08:26:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-intellij-idea/</guid><description>&lt;p&gt;First up, I have&lt;a href="https://www.jetbrains.com/idea/guide/tutorials/getting-started-intellij-idea/" target="_blank" rel="noopener noreferrer"&gt;created a tutorial on the IntelliJ IDEA Guide&lt;/a&gt;
 if you want to view the content with videos. I&amp;rsquo;ll concentrate on text-based for this article.&lt;/p&gt;
&lt;p&gt;When someone new joins your team, it can be quite an overwhelming experience.&lt;/p&gt;
&lt;p&gt;There are lots of people to meet, new technologies to learn, different processes to learn and of course, an IDE to learn!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s helpful to remember what every new starter wants, they want to make a difference, they want to add value, they want to &lt;em&gt;move the needle&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>DevOps for Developers - Introduction and Version Control</title><link>https://foojayio.github.io/website/today/devops-for-developers-introduction-version-control/</link><pubDate>Sun, 12 Mar 2023 09:13:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/devops-for-developers-introduction-version-control/</guid><description>&lt;p&gt;I start some of my talks with a joke: back in my day we didn&amp;rsquo;t have monitoring or observability. We&amp;rsquo;d go to the server and give it a kick. Hear the HD spin? It&amp;rsquo;s working!&lt;/p&gt;
&lt;p&gt;We didn&amp;rsquo;t have DevOps. If we were lucky we had some admins and a technician to solve hardware issues. That&amp;rsquo;s it.&lt;/p&gt;
&lt;p&gt;In a small company, we would do all of that ourselves. Today this is no longer practical. The complexity of deployment and scale is so big, it&amp;rsquo;s hard to imagine a growing company without an engineer dedicated to the operations.&lt;/p&gt;</description></item><item><title>9 Outdated Ideas About Java</title><link>https://foojayio.github.io/website/today/9-outdated-ideas-about-java/</link><pubDate>Sat, 11 Mar 2023 08:56:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/9-outdated-ideas-about-java/</guid><description>&lt;p&gt;Since the first release of Java in 1995, a lot has changed in both software and hardware, and each evolution impacts the next.&lt;/p&gt;
&lt;p&gt;Powerful processors and cheaper memory allow software to do more and do it faster.&lt;/p&gt;
&lt;p&gt;As Azul Deputy CTO Simon Ritter says, &amp;ldquo;&lt;em&gt;&lt;strong&gt;Java shows no danger of becoming the new COBOL. By adding new features to the platform under the six-month release cadence, we are seeing Java evolve faster than ever before.&lt;/strong&gt;&lt;/em&gt;&amp;rdquo;&lt;/p&gt;</description></item><item><title>How to Get Started with the Hazelcast Viridian Serverless</title><link>https://foojayio.github.io/website/today/streaming-real-time-data-on-the-hazelcast-viridian-serverless/</link><pubDate>Fri, 10 Mar 2023 10:28:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/streaming-real-time-data-on-the-hazelcast-viridian-serverless/</guid><description>&lt;p&gt;In this tutorial, you&amp;rsquo;ll learn how to build real-time streaming applications with the Hazelcast Viridian Serverless using SQL.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll also learn how to build a materialized view from streaming data and contextual data in Hazelcast.&lt;/p&gt;
&lt;p&gt;Streaming data is data that is continuously generated in small sizes.&lt;/p&gt;
&lt;p&gt;Streaming data includes a wide variety of sources such as retail purchases, financial trades, or telemetry from connected vehicles.&lt;/p&gt;
&lt;p&gt;This data isn&amp;rsquo;t usually useful by itself because of its size.&lt;/p&gt;</description></item><item><title>How to Best Use Java Records as DTOs in Spring Boot 3</title><link>https://foojayio.github.io/website/today/how-to-best-use-java-records-as-dtos-in-spring-boot-3/</link><pubDate>Thu, 09 Mar 2023 17:06:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-best-use-java-records-as-dtos-in-spring-boot-3/</guid><description>&lt;p&gt;With the Spring 6 and Spring Boot 3 releases, &lt;a href="https://spring.io/blog/2022/11/16/spring-framework-6-0-goes-ga" title="Java 17&amp;#43; became the baseline framework" target="_blank" rel="noopener noreferrer"&gt;Java 17+ became the baseline framework&lt;/a&gt;
 version.&lt;/p&gt;
&lt;p&gt;So now is a great time to start using compact &lt;a href="https://docs.oracle.com/en/java/javase/14/language/records.html" title="Java Records" target="_blank" rel="noopener noreferrer"&gt;Java Records&lt;/a&gt;
 as Data Transfer Objects (&lt;a href="https://en.wikipedia.org/wiki/Data_transfer_object" title="DTOs" target="_blank" rel="noopener noreferrer"&gt;DTOs&lt;/a&gt;
) for various database and API calls.&lt;/p&gt;
&lt;p&gt;Whether you prefer reading or watching, let&amp;rsquo;s review a few approaches for using Java records as DTOs that apply to Spring Boot 3 with Hibernate 6 as the persistence provider.&lt;/p&gt;</description></item><item><title>Java Performance: Ahead-Of-Time versus Just-In-Time</title><link>https://foojayio.github.io/website/today/java-performance-ahead-of-time-versus-just-in-time/</link><pubDate>Thu, 09 Mar 2023 08:00:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-performance-ahead-of-time-versus-just-in-time/</guid><description>&lt;p&gt;Recently the &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
 team attended Devoxx Belgium, one of the biggest Java conferences with over 3,200 visitors.&lt;/p&gt;
&lt;p&gt;We talked with many developers and DevOps engineers, and one of the recurring questions was about the difference between Just-In-Time (JIT) and Ahead-Of-Time (AOT) execution of applications.&lt;/p&gt;
&lt;p&gt;More specifically, about better JIT performance compared to a native compiled AOT application.&lt;/p&gt;
&lt;p&gt;In this post, I give a quick update on both strategies to clarify why you will get different performance results.&lt;/p&gt;</description></item><item><title>Authenticate with OpenID Connect and Apache APISIX</title><link>https://foojayio.github.io/website/today/authenticate-with-openid-connect-and-apache-apisix/</link><pubDate>Thu, 09 Mar 2023 07:51:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/authenticate-with-openid-connect-and-apache-apisix/</guid><description>&lt;p&gt;Lots of companies are eager to provide their identity provider: Twitter, Facebook, Google, etc. For smaller businesses, not having to manage identities is a benefit. However, we want to avoid being locked into one provider.&lt;/p&gt;
&lt;p&gt;In this article, I want to demo how to use OpenID Connect using Google underneath and then switch to Azure.&lt;/p&gt;
&lt;h2 id="h2-0-openid-connect"&gt;OpenID Connect&lt;/h2&gt;
&lt;p&gt;The idea of an &lt;em&gt;authorization&lt;/em&gt; open standard started with &lt;a href="https://en.wikipedia.org/wiki/OAuth" target="_blank" rel="noopener noreferrer"&gt;OAuth&lt;/a&gt;
 around 2006. Because of a security issue, OAuth 2.0 superseded the initial version. OAuth 2.0 became an in 2012:&lt;/p&gt;</description></item><item><title>Exhaustive JUnit5 Testing: Combinations, Permutations, Products</title><link>https://foojayio.github.io/website/today/exhaustive-junit5-testing-with-combinations-permutations-and-products/</link><pubDate>Wed, 08 Mar 2023 10:08:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/exhaustive-junit5-testing-with-combinations-permutations-and-products/</guid><description>&lt;p&gt;Unit testing constitutes an integral part of the process of providing high-quality software.&lt;/p&gt;
&lt;p&gt;But, how can one write tests covering all variants of several operations?&lt;/p&gt;
&lt;p&gt;Read this article and learn how to use JUnit5 in conjunction with combinations, permutations, and products.&lt;/p&gt;
&lt;h3 id="h3-0-test-support-libraries"&gt;Test Support Libraries&lt;/h3&gt;
&lt;p&gt;There are many libraries that make testing better in different aspects. Here are some of them:&lt;/p&gt;
&lt;h4 id="agitar-one"&gt;Agitar One&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.agitar.com/solutions/products/software_agitation.html" title="Agitator" target="_blank" rel="noopener noreferrer"&gt;Agitator&lt;/a&gt;
 automatically creates dynamic test cases, synthesizes sets of input data, and analyzes the results.&lt;/p&gt;</description></item><item><title>Using Bookmarks in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/using-bookmarks-in-intellij-idea/</link><pubDate>Tue, 07 Mar 2023 15:07:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-bookmarks-in-intellij-idea/</guid><description>&lt;p&gt;In this tutorial, we&amp;rsquo;re going to take a look at using bookmarks in &lt;a href="https://www.jetbrains.com/idea/" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Bookmarks can come in handy while navigating a codebase, when you see something interesting that you want to come back to later.&lt;/p&gt;
&lt;p&gt;You could use Recent Files (&lt;strong&gt;⌘E&lt;/strong&gt; on macOS, or &lt;strong&gt;Control+E&lt;/strong&gt; on Windows/Linux) to find it, but then you have to remember which file it was. This is where bookmarks come in handy.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take a look!&lt;/p&gt;</description></item><item><title>Making SBOMs, Threats, and Modelling Them a Piece of Cake!</title><link>https://foojayio.github.io/website/today/making-sboms-threats-and-modelling-them-a-piece-of-cake/</link><pubDate>Tue, 07 Mar 2023 09:15:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/making-sboms-threats-and-modelling-them-a-piece-of-cake/</guid><description>&lt;p&gt;The third in a series of SBOMs, software supply chains, the government and you (you too, no exceptions).&lt;/p&gt;
&lt;p&gt;Yes, just like the previous articles, we have cake this time too - this one is a three tiered extravaganza!&lt;/p&gt;
&lt;figure class="aligncenter size-thumbnail"&gt;
 &lt;img fetchpriority="high" decoding="async" width="300" height="260" src="Unknown-300x260.jpg" alt="" class="wp-image-62771"&gt;
&lt;/figure&gt;
&lt;p&gt;So&amp;hellip; still with us? Good!&lt;/p&gt;
&lt;p&gt;Earlier, Steve Poole showed us his digital mixing bowl, &lt;a href="https://foojayio.github.io/website/today/sboms-first-steps-in-a-new-journey-for-developers/"&gt;telling us how applications and their dependencies were like ingredients to a fancy cake&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Jamie Coleman then made sure there were no soggy bottoms (one for the Mary Berry fans), by explaining how &lt;a href="https://foojayio.github.io/website/today/sboms-and-software-composition-analysis/"&gt;SCA tools and SBOMs can work together to prevent vulnerabilities&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>My Adventures at ConFoo Conference in Montreal</title><link>https://foojayio.github.io/website/today/java-friends-and-cold-weather-my-adventure-at-confoo-conference/</link><pubDate>Mon, 06 Mar 2023 19:16:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-friends-and-cold-weather-my-adventure-at-confoo-conference/</guid><description>&lt;p&gt;I attended the &lt;a href="https://confoo.ca/en/2023" target="_blank" rel="noopener noreferrer"&gt;ConFoo conference in Montreal&lt;/a&gt;
, which covered a range of technologies like cloud computing, Java and JVM technologies, Javascript, DevOps, architecture and design patterns, PHP, security, test and quality, management, UX and UI, and more.&lt;/p&gt;
&lt;p&gt;The conference took place over three days at the Bonaventure Hotel in Montreal, but I could only attend on the second day.&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="alignnone size-medium wp-image-62703" src="PXL_20230223_204517242-700x394.jpg" alt="" width="700" height="394"&gt;
&lt;br /&gt;
&lt;p&gt;To make it possible, I requested the organizers schedule both of my talks on the same day, so I could fly in from Toronto in the morning and leave in the evening. I was grateful to them for accommodating my request.&lt;/p&gt;</description></item><item><title>Foojay Podcast #15: Japan JUG</title><link>https://foojayio.github.io/website/today/foojay-podcast-15/</link><pubDate>Mon, 06 Mar 2023 08:30:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-15/</guid><description>&lt;p&gt;Last month we were in the US, and this time we travel to the other side of the world as we spoke with the organizers of the Japan JUG!&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/y_RDJvuM6ME?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://open.spotify.com/show/6CpTfgn9LirzJGAtc4ICdQ" target="_blank" rel="noopener noreferrer"&gt;Spotify&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://podcasts.apple.com/be/podcast/foojay-io-the-friends-of-openjdk/id1652281304" target="_blank" rel="noopener noreferrer"&gt;Apple Podcasts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;And most others&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-guests"&gt;Guests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Shin Tanimoto
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/cero_t%20" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/cero_t&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/shintanimoto/" target="_blank" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/shintanimoto/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ayana Yokota
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/ihcomega" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/ihcomega&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/ayana-yokota-ihcomega/" target="_blank" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ayana-yokota-ihcomega/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Maaya Ishida
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/maaya8585" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/maaya8585&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/maaya-ishida-5486b7109/%20" target="_blank" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/maaya-ishida-5486b7109/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-host"&gt;Host&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Frank Delporte (&lt;a href="https://foojay.social/@frankdelporte" target="_blank" rel="noopener noreferrer"&gt;@[email protected]&lt;/a&gt;
, &lt;a href="https://twitter.com/frankdelporte" target="_blank" rel="noopener noreferrer"&gt;@frankdelporte&lt;/a&gt;
)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;JJUG (Japan JUG)
&lt;ul&gt;
&lt;li&gt;Contact: &lt;a href="https://jjug.doorkeeper.jp/contact/new" target="_blank" rel="noopener noreferrer"&gt;https://jjug.doorkeeper.jp/contact/new&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/JJUG" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/JJUG&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://facebook.com/japanjug" target="_blank" rel="noopener noreferrer"&gt;https://facebook.com/japanjug&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;JOnsen: &lt;a href="https://jonsen.jp" target="_blank" rel="noopener noreferrer"&gt;https://jonsen.jp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;JJUG CCC 2023 Spring: &lt;a href="https://sessionize.com/jjug-ccc-spring-2023/" target="_blank" rel="noopener noreferrer"&gt;https://sessionize.com/jjug-ccc-spring-2023/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Javajo (Java women user group)
&lt;ul&gt;
&lt;li&gt;Contact: &lt;a href="https://javajo.doorkeeper.jp/contact/new%20" target="_blank" rel="noopener noreferrer"&gt;https://javajo.doorkeeper.jp/contact/new&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/java_women%20" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/java_women&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://facebook.com/groups/javajo%20" target="_blank" rel="noopener noreferrer"&gt;https://facebook.com/groups/javajo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://instagram.com/javajo_tokyo/" target="_blank" rel="noopener noreferrer"&gt;https://instagram.com/javajo_tokyo/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-content"&gt;Content&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;00'00 Intro and music&lt;/li&gt;
&lt;li&gt;00'13 About the topic of this podcast&lt;/li&gt;
&lt;li&gt;00'58 Introduction of the guests and host&lt;/li&gt;
&lt;li&gt;02'46 The start of JJUG and Jajavo
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.seasar.org" target="_blank" rel="noopener noreferrer"&gt;https://www.seasar.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.seasar.org/en/" target="_blank" rel="noopener noreferrer"&gt;https://www.seasar.org/en/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/seasarorg" target="_blank" rel="noopener noreferrer"&gt;https://github.com/seasarorg&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;05'21 Personal reasons to organise a JUG&lt;/li&gt;
&lt;li&gt;08'14 How many events are organised&lt;/li&gt;
&lt;li&gt;09'08 Which speakers come to the events&lt;/li&gt;
&lt;li&gt;09'57 Impact of Covid&lt;/li&gt;
&lt;li&gt;12'59 The number and mix of attendees at Japanese events&lt;/li&gt;
&lt;li&gt;14'26 Trends in popular topics&lt;/li&gt;
&lt;li&gt;16'27 Plans for the future
&lt;ul&gt;
&lt;li&gt;JOnsen: &lt;a href="https://jonsen.jp" target="_blank" rel="noopener noreferrer"&gt;https://jonsen.jp&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;19'17 Questions for the listeners&lt;/li&gt;
&lt;li&gt;20'56 Outro&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Migrating Applications to TornadoVM v0.15 (Part 2)</title><link>https://foojayio.github.io/website/today/migrating-applications-to-tornadovm-v0-15-part-2/</link><pubDate>Sat, 04 Mar 2023 18:38:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/migrating-applications-to-tornadovm-v0-15-part-2/</guid><description>&lt;p&gt;In the &lt;a href="https://foojayio.github.io/website/today/migrating-applications-to-tornadovm-v0-15-part-1/"&gt;previous blog&lt;/a&gt;
, we discussed the TornadoVM programming model and showed how programmers can define the parts of their Java applications to be offloaded for hardware acceleration via the TornadoVM API (v0.15).&lt;/p&gt;
&lt;p&gt;In this article, we will spotlight all the TornadoVM configurations/operations that regard the execution on the hardware device.&lt;/p&gt;
&lt;p&gt;In particular, this blog has the following objectives:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Provide guidelines regarding how programmers can trigger TornadoVM-specific configurations that regard the execution on hardware accelerators.&lt;/li&gt;
&lt;li&gt;Provide examples on how to exploit the new operations that are exposed by the new TornadoVM API.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Prerequisites {#h2-0-1-prerequisites}&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;This blog begins with a prerequisite that a snapshot of a user-defined TaskGraph is captured to an immutable state. This was the final point of the &lt;a href="https://foojayio.github.io/website/today/migrating-applications-to-tornadovm-v0-15-part-1/"&gt;previous blog&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Java Serialization Filtering: Prevent 0-day Security Vulnerabilities</title><link>https://foojayio.github.io/website/today/java-serialization-filtering-prevent-0-day-security-vulnerabilities/</link><pubDate>Fri, 03 Mar 2023 16:04:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-serialization-filtering-prevent-0-day-security-vulnerabilities/</guid><description>&lt;p&gt;I&amp;rsquo;ve been a Java developer long enough to remember the excitement when Sun introduced the concept of serialization in the JVM.&lt;/p&gt;
&lt;p&gt;In the world of C, we could just write a struct into a file but this was always problematic. It wasn&amp;rsquo;t portable and had many issues. But for Java we could just write the class and it &amp;ldquo;worked&amp;rdquo;. This was pure magic!&lt;/p&gt;
&lt;p&gt;Java was still mostly in use in the client side and when we thought about security, we had different vulnerabilities in mind. The sandbox occupied most of our security discussions.&lt;/p&gt;</description></item><item><title>Is it Time to go Back to the Monolith?</title><link>https://foojayio.github.io/website/today/is-it-time-to-go-back-to-the-monolith/</link><pubDate>Fri, 03 Mar 2023 15:58:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/is-it-time-to-go-back-to-the-monolith/</guid><description>&lt;p&gt;History repeats itself. Everything old is new again and I&amp;rsquo;ve been around long enough to see ideas discarded, rediscovered and return triumphantly to overtake the fad.&lt;/p&gt;
&lt;p&gt;In recent years SQL has made a tremendous comeback from the dead. We love relational databases all over again. I think the Monolith will have its space odyssey moment again. Microservices and serverless are trends pushed by the cloud vendors, designed to sell us more cloud computing resources.&lt;/p&gt;</description></item><item><title>Event Driven Hello World Program</title><link>https://foojayio.github.io/website/today/event-driven-hello-world-program/</link><pubDate>Thu, 02 Mar 2023 16:34:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/event-driven-hello-world-program/</guid><description>&lt;p&gt;&lt;strong&gt;Event-driven microservices&lt;/strong&gt; can be straightforward to describe before they are implemented, tested and maintained.&lt;/p&gt;
&lt;p&gt;They are also highly responsive to new information in real time, with latencies in Java of below 10 microseconds 99.99% of the time depending on the functionality of the small independently deployable microservice.&lt;/p&gt;
&lt;p&gt;In this introductory article, we use an example &lt;a href="https://chronicle.software/how-to-develop-event-driven-architectures/" title="event-driven" target="_blank" rel="noopener noreferrer"&gt;event-driven&lt;/a&gt;
&lt;a href="https://en.wikipedia.org/wiki/%22Hello,_World!%22_program" title=" Hello World" target="_blank" rel="noopener noreferrer"&gt;Hello World&lt;/a&gt;
 program (a programming paradigm where the program flow is determined by events) to step through &lt;a href="https://chronicle.software/how-bdd-works-well-with-eda/" title="behaviour-driven development" target="_blank" rel="noopener noreferrer"&gt;behaviour-driven development&lt;/a&gt;
, where we describe the behaviour the business needs first as test data, and writing a very simple &lt;a href="https://en.wikipedia.org/wiki/Microservices" title="microservice" target="_blank" rel="noopener noreferrer"&gt;microservice&lt;/a&gt;
 which turns input events like this:&lt;/p&gt;</description></item><item><title>Do you trust profilers? I once did too!</title><link>https://foojayio.github.io/website/today/do-you-trust-profilers-i-once-did-too/</link><pubDate>Wed, 01 Mar 2023 13:14:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/do-you-trust-profilers-i-once-did-too/</guid><description>&lt;p&gt;Profilers are great tools in your toolbox, like debuggers, when solving problems with your Java application (I&amp;rsquo;ve been &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-14/"&gt;on a podcast on this topic&lt;/a&gt;
 recently).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll tell you some of their problems and a technique to cope with them in this article.&lt;/p&gt;
&lt;p&gt;There are many open-source profilers, most notably JFR/JMC, and async-profiler, that help you to find and fix performance problems.&lt;/p&gt;
&lt;p&gt;But they are just software themselves, interwoven with a reasonably large project, the OpenJDK (or OpenJ9, for that matter), and thus suffer from the same problems as the typical problems of the applications they are used to profile:&lt;/p&gt;</description></item><item><title>JavaFX Links of February 2023</title><link>https://foojayio.github.io/website/today/javafx-links-of-february-2023/</link><pubDate>Tue, 28 Feb 2023 11:24:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-february-2023/</guid><description>&lt;p&gt;February is a short month, but this list seems to be longer than ever&amp;hellip;&lt;/p&gt;
&lt;p&gt;A lot of game and 3D development, releases, interesting ongoing development, and so much more to read. Enjoy reading and clicking!&lt;/p&gt;
&lt;p&gt;This is a summary of the Links Of The Week as published on &lt;a href="https://www.jfx-central.com" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during February.&lt;/p&gt;
&lt;h3 id="h3-0-javafx-openjfx-core"&gt;JavaFX/OpenJFX Core&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kevin Rushforth&lt;/strong&gt; of Oracle announced on the mailinglist &amp;ldquo;As a reminder, JavaFX 20 is now in Rampdown Phase Two (RDP2). Now that we are in RDP2, the goal is to stabilize what is there&amp;rdquo;. So we will soon get a new version of JavaFX being released!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/cpreisler/status/1620893592435978240" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Chad Preisler&lt;/strong&gt; wants to thank all JavaFX maintainers&lt;/a&gt;
: &amp;ldquo;The people that maintain and enhance #JavaFX are great. They fixed an issue with Mac back in December, and today when a dev got a M1 all we needed to do was update the JavaFX dependencies. Everything runs great now.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/GluonHQ/status/1623680620315529216" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gluon&lt;/strong&gt; announced public access to its JavaFX 17 builds&lt;/a&gt;
, including 17.0.6 and subsequent versions.
&lt;ul&gt;
&lt;li&gt;With an important note regarding version compatibility: &amp;ldquo;&lt;strong&gt;As the development of JavaFX 20 picks up momentum, it&amp;rsquo;s important to note a key change &amp;ndash; JavaFX 20 will require Java 17 or later.&lt;/strong&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/johanvos/status/1623958106387410945" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; of Gluon also shared&lt;/a&gt;
: &amp;ldquo;Gluon leverages GraalVM in Gluon Substrate, allowing JavaFX apps to be converted into native client apps for desktop, mobile and embedded.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techhub.social/@gluonhq/109902223934756469" target="_blank" rel="noopener noreferrer"&gt;They announced improved sound support&lt;/a&gt;
 for iOS in Gluon Attach.&lt;/li&gt;
&lt;li&gt;And thank &lt;a href="https://twitter.com/salmon_bruno" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Bruno Salmon&lt;/strong&gt;&lt;/a&gt;
 for a great contribution by adding the iOSAudioService.&lt;/li&gt;
&lt;li&gt;See the &lt;a href="https://github.com/gluonhq/attach/pull/347" target="_blank" rel="noopener noreferrer"&gt;code changes in the pull request&lt;/a&gt;
, optimised for games that may play sounds simultaneously frequently, without degrading performances.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Polypragmatist/status/1623457419404914690" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dave Barrett&lt;/strong&gt; is a big fan of JavaFX + Kotlin&lt;/a&gt;
: &amp;ldquo;it&amp;rsquo;s a match made in heaven. Kotlin gives you the tools to streamline your layout code in ways you never could in Java.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/cpreisler/status/1623174913891659777" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Chad Preisler&lt;/strong&gt; shared a 5 minute about property binding&lt;/a&gt;
: &amp;ldquo;JavaFX makes getting data from your form controls into your model very easy.&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/hansolo_/status/1621651332011642881" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; warns about the JavaFX Canvas being really nice and fast, but&lt;/a&gt;
 &amp;ldquo;be beware of effects&amp;hellip; Using one simple dropshadow in a GraphicsContext can really bring down performance&amp;hellip; Just as a reminder.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-1-scene-builder"&gt;Scene Builder&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Raumzeitfalle/status/1627038605225955329" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Raumzeitfalle&lt;/strong&gt; shared an update for Scene Builder Leading Edge&lt;/a&gt;
: preview of unofficial and features-in-progress. February 2023 brings us support to create controllers in Scala and JRuby and a Chinese translation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-2-ui-development"&gt;UI Development&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt;&lt;/a&gt;
 shared a lot of JavaFX news:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1621461727681589248" target="_blank" rel="noopener noreferrer"&gt;He found this impressive video of VFX&lt;/a&gt;
, a JavaFX UI &lt;a href="https://www.bilibili.com/video/BV1c24y1B7jg/" target="_blank" rel="noopener noreferrer"&gt;framework&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://github.com/wkgcass/vfx" target="_blank" rel="noopener noreferrer"&gt;sources of VFX are available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://twitter.com/WhiteWoodCity/status/1618947794638884866" target="_blank" rel="noopener noreferrer"&gt;video of a self-made new JavaFX UI by &lt;strong&gt;WhiteWoodCity&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1622774096957431808" target="_blank" rel="noopener noreferrer"&gt;How to use of VFX components to decorate a JavaFX application&lt;/a&gt;
 with a link to video and sources.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1624978159996407811" target="_blank" rel="noopener noreferrer"&gt;A video of a nice JavaFX UI&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;In the previous edition of this list, a link was included to Matt Coley sharing his wish-list to extend RichText. There is a &lt;a href="https://github.com/FXMisc/RichTextFX/issues/1167" target="_blank" rel="noopener noreferrer"&gt;GitHub issue by &lt;strong&gt;Andy Goryachev&lt;/strong&gt; of Oracle asking for &amp;ldquo;Any missing APIs in JavaFX which are needed for RichTextFX&amp;rdquo;&lt;/a&gt;
 to gather feedback.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1628819152122019841" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; spotted a JavaFX user interface&lt;/a&gt;
 on a transparent Science- Fiction-like screen.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-3-javafx-libraries"&gt;JavaFX Libraries&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/FrankDelporte/status/1622870327301746688" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; shared it is still a long way to go, but Lottie4J can now read both fixed and animated beziers&lt;/a&gt;
. It includes a screenshot of the very first result of a loaded animation with colors, strokes, fills&amp;hellip; being the next step.
&lt;ul&gt;
&lt;li&gt;And shared a &lt;a href="https://foojay.social/@lottie4j/109839719108396708" target="_blank" rel="noopener noreferrer"&gt;link to an article&lt;/a&gt;
 why it could become important to have a JavaFX implementation of LottieFiles: &amp;ldquo;4.7 Million Motion Graphics Designers and Developers Turn to Lottie for Efficient Animation Workflow.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@lottie4j/109909075718845055" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Lottie4J&lt;/strong&gt; is making small progress&lt;/a&gt;
 in bringing LottieFiles animations to JavaFX with a first correctly colored stroke width and color.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1628069536074280964" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; created a new project on GitHub called LayoutFX&lt;/a&gt;
 and would like to use it to collect interesting layout solutions for JavaFX. If you have any custom panes with fancy approaches to laying out scene graph nodes and would like to contribute, then please feel free to add it.
&lt;ul&gt;
&lt;li&gt;And he&amp;rsquo;s &lt;a href="https://twitter.com/dlemmermann/status/1628745308296425473" target="_blank" rel="noopener noreferrer"&gt;adding a custom control to GemsFX that allows to horizontally position and scroll multiple cells based on an items list&lt;/a&gt;
. The control fades out to the left and right.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-4-javafx-applications"&gt;JavaFX Applications&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/hansolo_/status/1623028117219450881" target="_blank" rel="noopener noreferrer"&gt;JDKMon by &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; got downloaded 10k times&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1621512306311200769" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; is facing another nice design challenge for his CRM for the energy market&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;He also spotted &lt;a href="https://twitter.com/dlemmermann/status/1628342392964239360" target="_blank" rel="noopener noreferrer"&gt;JavaFX in the wild, in the online presence of an office supplies company&lt;/a&gt;
, running in the browser via Jpro.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/frankgreco/status/1623701464362229760" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Greco&lt;/strong&gt; plans to create a JavaFX ChatGPT application this weekend&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@java_discussions/109849881898714868" target="_blank" rel="noopener noreferrer"&gt;The first alpha of X-Pipe, a new remote connection tool created with Java(FX)&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Alessio_Vinerbi/status/1628098767160213525" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Alessio Vinerbi&lt;/strong&gt; shared a video&lt;/a&gt;
 showing the interaction between his visual modeler and FXML.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@jabref/109836297203164251" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;JabRef&lt;/strong&gt; now has a dark theme created by &lt;strong&gt;Joel Maximilian Mai&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/11a36yv/windirstat_in_javafx/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;trinaryoperator&lt;/strong&gt; created a JavaFX version of WinDirStat to do a cleanup of some directories&lt;/a&gt;
. In the future it will have actual tools to help hard drive clean-up.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/cpreisler/status/1628752475434909702" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Chad Preisler&lt;/strong&gt; built a very basic Kafka topic viewer&lt;/a&gt;
 and shared a 7-minute video with a link to the source code in the video description.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-5-game-development"&gt;Game Development&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1620569177928142848" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; shared a fancy particle effect demo&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1621649400052211715" target="_blank" rel="noopener noreferrer"&gt;And he is practising his &amp;ldquo;summing skills&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1624788479686180864" target="_blank" rel="noopener noreferrer"&gt;Shared a video of a fishing game made with FXGL&lt;/a&gt;
 shared on YouTube. Does anyone know the creator?&lt;/li&gt;
&lt;li&gt;He also shared &lt;a href="https://twitter.com/AlmasBaim/status/1624475188942319617" target="_blank" rel="noopener noreferrer"&gt;a quick 20 LoC prototype with absolutely horrible UX&lt;/a&gt;
. However, it shows with a bit of refinement here and there, you could totally build yet another Minecraft clone.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/jhonnygoransson/status/1620563738347847682" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jhonny Göransson&lt;/strong&gt; managed to mix JavaFX nodes with raw OpenGL calls&lt;/a&gt;
 from native cpp via drift-fx.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/ParrotMan18/status/1621884694081204225" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;ParrotMan&lt;/strong&gt; shared a project created 2 years ago&lt;/a&gt;
: &amp;ldquo;I made the soundtracks, pixel art sprites, and almost all of the underlying systems from scratch. It looks janky as heck but it was a worthwhile learning experience.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/YangKui7/status/1622748759309570050" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;GZYanKui&lt;/strong&gt; share a video with a game&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;We&amp;rsquo;re looking forward to the blogpost &lt;a href="https://twitter.com/hansolo_/status/1620132608205266945" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; will write on how to run a JavaFX application on iOS using Gluon&lt;/a&gt;
 with his sample application will JArkanoid.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/hansolo_/status/1621905556075077634" target="_blank" rel="noopener noreferrer"&gt;He spent a weekend with some JArkanoid coding&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/hansolo_/status/1621905661012353025" target="_blank" rel="noopener noreferrer"&gt;And finished JArkanoid levels 4 - 7&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/hansolo_/status/1622151570119852033" target="_blank" rel="noopener noreferrer"&gt;And will build it with GitHub Actions&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/hansolo_/status/1625344281849352192" target="_blank" rel="noopener noreferrer"&gt;Implemented the last levels missing in JArkanoid.&lt;/a&gt;
. It now has all 32 levels of the original except the very last level. &lt;a href="https://github.com/HanSolo/jarkanoid" target="_blank" rel="noopener noreferrer"&gt;You can download the sources and builds for various systems from GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;And he &lt;a href="https://twitter.com/hansolo_/status/1626220741065850882" target="_blank" rel="noopener noreferrer"&gt;thanks José Pereda from Gluon&lt;/a&gt;
 to help him to get sound working on iPhone.&lt;/li&gt;
&lt;li&gt;You can &lt;a href="https://twitter.com/hansolo_/status/1628055233094991873" target="_blank" rel="noopener noreferrer"&gt;also run JArkanoid on Raspberry Pi&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Gerrit &lt;a href="https://twitter.com/hansolo_/status/1627022312808513536" target="_blank" rel="noopener noreferrer"&gt;thanks &lt;strong&gt;Gluon&lt;/strong&gt; to make porting to mobile sooooooo easy&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WebFXProject/status/1627654253253722113" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WebFX&lt;/strong&gt; announced a web version&lt;/a&gt;
 that can be played &lt;a href="https://jarkanoid.webfx.dev/" target="_blank" rel="noopener noreferrer"&gt;online at jarkanoid.webfx.dev&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/maxandersen/status/1627453787412594688" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Max Rydahl Andersen&lt;/strong&gt; created a JBang version&lt;/a&gt;
 that can be simply started with &amp;ldquo;jbang jarkanoid@maxandersen&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/YangKui7/status/1627317531966058499" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;GZYangKui&lt;/strong&gt; shared an other retro game&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1627302125960302594" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt; is using FXGL to simplify the code of UI applications&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;And &lt;a href="https://twitter.com/WhiteWoodCity/status/1628316669268606976" target="_blank" rel="noopener noreferrer"&gt;migrated his game fully to FXGL&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-6-3d"&gt;3D&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1620493609287172096" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; keeps experimenting with 3D&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;And what is really impressive&amp;hellip; &lt;a href="https://twitter.com/orango_mango/status/1620827009646759937" target="_blank" rel="noopener noreferrer"&gt;it is running on a Raspberry Pi with 2GB of memory&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1621578572895854595" target="_blank" rel="noopener noreferrer"&gt;A rotating light that simulates the sun&lt;/a&gt;
, only with matrices and vectors in a self-made 3D engine.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1625759767464484864" target="_blank" rel="noopener noreferrer"&gt;Improved shadows and performance by adding cache (video)&lt;/a&gt;
, in a self-made 3D engine from scratch.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1627331295536680960" target="_blank" rel="noopener noreferrer"&gt;Experimenting with chess pieces&lt;/a&gt;
 with his 3D engine.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-7-podcast"&gt;Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AdamBien/status/1619811640802955265" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Adam Bien&lt;/strong&gt; talked in his podcast with &lt;strong&gt;Karol Harezlak&lt;/strong&gt;&lt;/a&gt;
 briefly about JavaFX.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-8-miscellaneous"&gt;Miscellaneous&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Not directly JavaFX related, but nice to know&amp;hellip; &lt;a href="https://mastodon.social/@HeinzKabutz/109799634014176668" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Heinz Kabutz&lt;/strong&gt; shared graphs&lt;/a&gt;
 showing that a lot of the work in recent Java versions was to stabilize and improve the platform, rather than just adding hundreds of new classes. The number of lines of code might even decrease in the future.&lt;/li&gt;
&lt;li&gt;The research team of &lt;a href="https://twitter.com/AlmasBaim/status/1627783341805117447" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt; completed basic initialization and setup steps&lt;/a&gt;
 for UI and robot interaction. The hype is real at the Robotics AI Lab.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-9-jobs"&gt;Jobs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://remotewant.com/job/javafx-developer-2/" target="_blank" rel="noopener noreferrer"&gt;JavaFX Developer (Remote)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://germantechjobs.de/jobs/Honeypot-GmbH-Java-Entwickler" target="_blank" rel="noopener noreferrer"&gt;Java Entwickler (Berlin), including JavaFX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://remotewant.com/job/lead-javafx-application-developer/" target="_blank" rel="noopener noreferrer"&gt;Lead JavaFX Application Developer (Remote)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-10-new-releases"&gt;New Releases&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/DaveJarvis/keenwrite" target="_blank" rel="noopener noreferrer"&gt;3.2.0 of KeenWrite by &lt;strong&gt;Dave Jarvis&lt;/strong&gt;&lt;/a&gt;
, a free, open-source, cross-platform desktop Markdown editor that can produce beautifully typeset PDFs.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DaveJarvis/KeenType" target="_blank" rel="noopener noreferrer"&gt;2.2.1 of KeenType used in KeenWrite&lt;/a&gt;
 with modernized DANTE e.V.&amp;rsquo;s Java-based NTS system for rendering TeX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/binjr_app/status/1620873802522701824" target="_blank" rel="noopener noreferrer"&gt;3.11 of binjr&lt;/a&gt;
, a standalone time series browser that renders data produced by other applications as dynamically editable views and provides advanced features to navigate the data smoothly and efficiently.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/PDFsamOSS/status/1620779451146719232" target="_blank" rel="noopener noreferrer"&gt;5, 5.0.1 and 5.0.2 of PDFsam&lt;/a&gt;
 a powerful and professional PDF editor.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/david_m_gilbert/status/1625034499355561984" target="_blank" rel="noopener noreferrer"&gt;v2.1.4 of FXGraphics2D by &lt;strong&gt;David Gilbert&lt;/strong&gt;&lt;/a&gt;
. This enables drawing on the JavaFX Canvas using the Java2D APIs. The update includes great contributions from &lt;a href="https://twitter.com/laurent_bourges" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Laurent Bourges&lt;/strong&gt;&lt;/a&gt;
 to fix clipping issues and boost performance!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-11-new-content-on-jfx-central-com"&gt;New content on jfx-central.com:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Company added: &lt;a href="https://www.jfx-central.com/companies" target="_blank" rel="noopener noreferrer"&gt;Intechcore&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Make Your Security Policy Auditable</title><link>https://foojayio.github.io/website/today/make-your-security-policy-auditable/</link><pubDate>Tue, 28 Feb 2023 11:14:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/make-your-security-policy-auditable/</guid><description>&lt;p&gt;Following from my previous article, I wrote about &lt;a href="https://foojayio.github.io/website/today/the-right-feature-at-the-right-place/"&gt;putting the right feature at the right place&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;I used rate limiting as an example, moving it from a library inside the application to the API Gateway.&lt;/p&gt;
&lt;p&gt;Today, I&amp;rsquo;ll use another example: authentication and authorization.&lt;/p&gt;
&lt;h2 id="h2-0-securing-a-spring-boot-application"&gt;Securing a Spring Boot application&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ll keep using Spring Boot in the following because I&amp;rsquo;m familiar with it. The Spring Boot application offers a REST endpoint to check employees&amp;rsquo; salaries.&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>42 Practical Java Design Patterns: Builder and More</title><link>https://foojayio.github.io/website/today/42-practical-java-design-patterns-builder-and-more/</link><pubDate>Mon, 27 Feb 2023 08:27:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/42-practical-java-design-patterns-builder-and-more/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/42-practical-java-design-patterns-builder-and-more/book_cover-414x510.jpeg" alt="Figure 1: Hone your software design skills" loading="lazy"&gt;
 &lt;strong&gt;Figure 1&lt;/strong&gt;.: Hone your software design skills&lt;/p&gt;
&lt;p&gt;The aim of the article is to introduce my newly published book &amp;ldquo;Practical Design Pattern for Java Developers&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Together, we&amp;rsquo;ll explore today&amp;rsquo;s application development challenges and dive deeper into some of Java&amp;rsquo;s new language enhancements by exploring the &lt;strong&gt;Builder&lt;/strong&gt; Design pattern in more detail.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T&lt;/strong&gt;he days when applications were developed &amp;ldquo;ad hoc&amp;rdquo; seem to have ended only on paper.&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>Journeys in Java, Level 9: Docker compose all the things</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-9-docker-compose-all-the-things/</link><pubDate>Sun, 26 Feb 2023 10:02:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-9-docker-compose-all-the-things/</guid><description>&lt;p&gt;Our microservices project contains quite a few pieces now.&lt;/p&gt;
&lt;p&gt;We have two databases, three API services, a user-view service for books, and a service to host our configuration.&lt;/p&gt;
&lt;p&gt;With so many pieces to manage, it would be nice to have something that orchestrates the individual services into a system, such as Docker Compose.&lt;/p&gt;
&lt;p&gt;Back in our &lt;a href="https://foojayio.github.io/website/today/journeys-in-java-level-5-building-an-empire-of-microservices/"&gt;Level 5&lt;/a&gt;
 rendition, we did exactly this for our smaller version of the project.&lt;/p&gt;
&lt;p&gt;Now that we have expanded our services, we need to add those new pieces into the existing Docker Compose management umbrella.&lt;/p&gt;</description></item><item><title>Porting an Existing JavaFX App to iOS</title><link>https://foojayio.github.io/website/today/porting-an-existing-javafx-app-to-ios/</link><pubDate>Fri, 24 Feb 2023 11:42:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/porting-an-existing-javafx-app-to-ios/</guid><description>&lt;p&gt;Sometimes there are JavaFX apps that I would also like to use on my iPhone but I wrote them for the desktop and it&amp;rsquo;s always the question how to do that?&lt;/p&gt;
&lt;p&gt;These days the simple answer is use &lt;a href="https://gluonhq.com/products/mobile/" target="_blank" rel="noopener noreferrer"&gt;Gluon Mobile&lt;/a&gt;
. But the real question remains&amp;hellip; how to do it?&lt;/p&gt;
&lt;p&gt;To give you an idea, I will take my little game called JArkanoid (a clone of the game &lt;a href="https://github.com/HanSolo/jarkanoid" target="_blank" rel="noopener noreferrer"&gt;Arkanoid&lt;/a&gt;
 from Taito from 1986) as an example.&lt;/p&gt;</description></item><item><title>Update or Upgrade Java... and Which Version Should You Use?</title><link>https://foojayio.github.io/website/today/should-you-update-java-or-upgrade-and-which-version-should-you-use/</link><pubDate>Thu, 23 Feb 2023 09:12:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/should-you-update-java-or-upgrade-and-which-version-should-you-use/</guid><description>&lt;h2 id="h2-0-update-versus-upgrade-what-s-the-difference-and-what-are-the-consequences-of-your-decision"&gt;&lt;em&gt;Update versus Upgrade: what&amp;rsquo;s the difference and what are the consequences of your decision?&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;Since 2018, every six months we get an upgrade to a new OpenJDK version, and this year versions 20 and 21 will be released.&lt;/p&gt;
&lt;p&gt;Next to these six-month releases, OpenJDK distributor Azul, amongst others, provides four critical patch updates (CPU) and patch set updates (PSU) per year.&lt;/p&gt;
&lt;p&gt;So what&amp;rsquo;s the difference between a Java upgrade and an update?&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>Is There a Best OS to Develop a Java Application on?</title><link>https://foojayio.github.io/website/today/is-there-a-best-os-to-develop-a-java-application-on/</link><pubDate>Wed, 22 Feb 2023 11:43:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/is-there-a-best-os-to-develop-a-java-application-on/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;One subject that often evokes a lot of debate is which is the best OS to develop a Java application on. This article gives my view on the issue.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Java runs very well on Windows, macOS and Linux Distributions.&lt;/p&gt;
&lt;p&gt;I work for &lt;a href="https://ga-dev-tools.web.app/campaign-url-builder/" title="Chronicle Software" target="_blank" rel="noopener noreferrer"&gt;Chronicle Software&lt;/a&gt;
, and much of our software is open-source Java libraries, so we don&amp;rsquo;t, or rather we can&amp;rsquo;t, require our customers to run on a particular operating system. You may be surprised to hear that we don&amp;rsquo;t mandate which operating system our staff should use either. We let them use the one that causes the least friction, the one that they are most productive with.&lt;/p&gt;</description></item><item><title>How to Get Started with the Hazelcast Viridian Serverless</title><link>https://foojayio.github.io/website/today/how-to-get-started-with-the-hazelcast-viridian-serverless/</link><pubDate>Wed, 22 Feb 2023 08:13:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-get-started-with-the-hazelcast-viridian-serverless/</guid><description>&lt;p&gt;Hazelcast Serverless means that Hazelcast manages your Cloud infrastructure for you.&lt;/p&gt;
&lt;p&gt;Each Viridian Serverless cluster is an independent deployment of Hazelcast Platform in a Kubernetes container.&lt;/p&gt;
&lt;p&gt;This design guarantees resource isolation, prevents resource stealing, and provides isolated network access.&lt;/p&gt;
&lt;p&gt;Viridian Serverless clusters come in two types:1) Development: Capped storage.&lt;/p&gt;
&lt;p&gt;You can store at most 1 GiB of data; and 2) Production: Uncapped storage.&lt;/p&gt;
&lt;p&gt;The cluster scales as you add or remove data. In this tutorial, you&amp;rsquo;ll learn how to connect a client to a cluster and use SQL to query data in the cluster.&lt;/p&gt;</description></item><item><title>Web App Startup in 3ms with RIFE2 and GraalVM</title><link>https://foojayio.github.io/website/today/web-app-startup-in-3ms-with-rife2-and-graalvm/</link><pubDate>Tue, 21 Feb 2023 09:12:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/web-app-startup-in-3ms-with-rife2-and-graalvm/</guid><description>&lt;p&gt;&lt;a href="https://rife2.com" target="_blank" rel="noopener noreferrer"&gt;RIFE2&lt;/a&gt;
 applications already launch quickly with a regular JVM thanks merely calling Java methods, lambdas and doing object instantiations at startup. There are no annotations to scan for, nor any declarations or config files to parse and resolve.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/gbevin/rife2/releases/tag/1.3.0" target="_blank" rel="noopener noreferrer"&gt;RIFE2 v1.3.0 release&lt;/a&gt;
 introduced experimental support for GraalVM Ahead-Of-Time compilation with native-image, reducing the startup time of the bootstrap project from 177ms to an incredible 3ms.&lt;/p&gt;
&lt;h2 id="h2-0-try-it-out-yourself"&gt;Try it out yourself&lt;/h2&gt;
&lt;p&gt;In order to try this out, you can download the latest &lt;a href="https://www.graalvm.org/downloads/" target="_blank" rel="noopener noreferrer"&gt;GraalVM&lt;/a&gt;
 JDK 19 distribution, and follow the steps to install &lt;a href="https://www.graalvm.org/dev/reference-manual/native-image/" target="_blank" rel="noopener noreferrer"&gt;native-image&lt;/a&gt;
 on your machine.&lt;/p&gt;</description></item><item><title>An Introduction to Scoped Values in Java</title><link>https://foojayio.github.io/website/today/an-introduction-to-scoped-values-in-java/</link><pubDate>Mon, 20 Feb 2023 11:32:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/an-introduction-to-scoped-values-in-java/</guid><description>&lt;p&gt;After moving to the six-month release cadence, the Java language has entered a rapid development process.&lt;/p&gt;
&lt;p&gt;While the process introduces many new features, these new features sometimes cause updates to existing APIs and sometimes result in the development of new APIs.&lt;/p&gt;
&lt;p&gt;An example of the second is &lt;a href="https://openjdk.org/jeps/429" title="Scoped Values" target="_blank" rel="noopener noreferrer"&gt;Scoped Values&lt;/a&gt;
 which has been included in the JDK since Java 20 as an incubator API.&lt;/p&gt;
&lt;h3 id="h3-0-why-were-scoped-values-proposed"&gt;Why were Scoped Values proposed?&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://openjdk.org/jeps/425" title="Virtual threads" target="_blank" rel="noopener noreferrer"&gt;Virtual threads&lt;/a&gt;
 became a part of JDK as a preview feature in Java 19.&lt;/p&gt;</description></item><item><title>Java Sealed Classes: Building Robust and Secure Applications</title><link>https://foojayio.github.io/website/today/java-sealed-classes-in-action-building-robust-and-secure-applications/</link><pubDate>Mon, 20 Feb 2023 11:11:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-sealed-classes-in-action-building-robust-and-secure-applications/</guid><description>&lt;p&gt;Java sealed classes were introduced in Java 15 as a way to restrict the inheritance hierarchy of a class or interface.&lt;/p&gt;
&lt;p&gt;A sealed class or interface restricts the set of classes that can implement or extend it, which can help prevent bugs and make code more maintainable.&lt;/p&gt;
&lt;p&gt;Suppose you&amp;rsquo;re building an e-commerce application that supports different payment methods, such as credit cards, PayPal, and Bitcoin. You could define a sealed class called PaymentMethod that permits various subclasses for each payment method:&lt;/p&gt;</description></item><item><title>Foojay Podcast #14: Debugging Tools and Skills for Fun and Profit</title><link>https://foojayio.github.io/website/today/foojay-podcast-14/</link><pubDate>Mon, 20 Feb 2023 08:29:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-14/</guid><description>&lt;p&gt;Let&amp;rsquo;s talk about debugging and observability.&lt;/p&gt;
&lt;p&gt;We work with debugging all the time, but how well do we know this common practice?&lt;/p&gt;
&lt;p&gt;Observability, monitoring, and debugging at scale for your production&amp;hellip;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ozcC3scY0Ig?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://open.spotify.com/show/6CpTfgn9LirzJGAtc4ICdQ" target="_blank" rel="noopener noreferrer"&gt;Spotify&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://podcasts.apple.com/be/podcast/foojay-io-the-friends-of-openjdk/id1652281304" target="_blank" rel="noopener noreferrer"&gt;Apple Podcasts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;And most others&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-guests"&gt;Guests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A lot of rubber ducks&lt;/li&gt;
&lt;li&gt;Johannes Bechberger
&lt;ul&gt;
&lt;li&gt;JVM and profiler developer&lt;/li&gt;
&lt;li&gt;Worked on the JDWP protocol and profiling&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/parttimenerd" target="_blank" rel="noopener noreferrer"&gt;https://github.com/parttimenerd&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/parttimen3rd" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/parttimen3rd&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@parttimenerd" target="_blank" rel="noopener noreferrer"&gt;https://mastodon.social/@parttimenerd&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mostlynerdless.de/blog/2023/01/19/asyncgetstacktrace-a-better-stack-trace-api-for-the-jvm/" target="_blank" rel="noopener noreferrer"&gt;AsyncGetStackTrace: A better Stack Trace API for the JVM&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mostlynerdless.de/blog/2022/12/27/a-short-primer-on-java-debugging-internals/" target="_blank" rel="noopener noreferrer"&gt;A short primer on Java debugging internals&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Marit van Dijk
&lt;ul&gt;
&lt;li&gt;Developer Advocate at JetBrains&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maritvandijk.com/" target="_blank" rel="noopener noreferrer"&gt;https://maritvandijk.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MaritvanDijk77" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/MaritvanDijk77&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@maritvandijk" target="_blank" rel="noopener noreferrer"&gt;https://mastodon.social/@maritvandijk&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ties van de Ven
&lt;ul&gt;
&lt;li&gt;Software Engineer @ JDriven, Coach @ Jcore&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tiesvandeven.nl/" target="_blank" rel="noopener noreferrer"&gt;https://www.tiesvandeven.nl/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/ties_ven" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/ties_ven&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.jdriven.com/2017/10/6-steps-to-help-you-debug-your-application/" target="_blank" rel="noopener noreferrer"&gt;6 Steps to help you debug your application&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-host"&gt;Host&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Shai Almog
&lt;ul&gt;
&lt;li&gt;Author of &amp;ldquo;&lt;a href="https://www.amazon.com/dp/1484290410/" target="_blank" rel="noopener noreferrer"&gt;Practical Debugging at Scale&lt;/a&gt;
&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://debugagent.com/" target="_blank" rel="noopener noreferrer"&gt;https://debugagent.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@debugagent" target="_blank" rel="noopener noreferrer"&gt;https://mastodon.social/@debugagent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/debugagent" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/debugagent&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-producer"&gt;Producer&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Frank Delporte
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@frankdelporte" target="_blank" rel="noopener noreferrer"&gt;https://foojay.social/@frankdelporte&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/frankdelporte" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/frankdelporte&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-content"&gt;Content&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;00'00 Intro and music&lt;/li&gt;
&lt;li&gt;00'24 About the topic of this podcast&lt;/li&gt;
&lt;li&gt;00'58 Introduction of the guests and host&lt;/li&gt;
&lt;li&gt;05'14 Debugging with IntelliJ IDEA and discoverability of tools
&lt;ul&gt;
&lt;li&gt;YouTube: &lt;a href="https://www.youtube.com/watch?v=59RC8gVPlvk&amp;amp;list=PLPZy-hmwOdEUWF85MuwrKV8YVWLmZW4ZA" target="_blank" rel="noopener noreferrer"&gt;Debugger playlist&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;YouTube: &lt;a href="https://www.youtube.com/watch?v=OQcyAtukps4" target="_blank" rel="noopener noreferrer"&gt;Profiling tools&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;YouTube: &lt;a href="https://www.youtube.com/watch?v=TDpbt4thECc" target="_blank" rel="noopener noreferrer"&gt;Profiling live stream&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;13'27 JDWP protocol
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dzone.com/articles/remote-debugging-java-applications-with-jdwp" target="_blank" rel="noopener noreferrer"&gt;DZone: Remote Debugging Java Applications With JDWP&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/psa-the-risks-of-remote-jdwp-debugging/"&gt;Foojay: PSA: The Risks of Remote JDWP Debugging&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/a-short-primer-on-java-debugging-internals/"&gt;Foojay: A Short Primer on Java Debugging Internals&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;19'43 Exception breakpoints
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/exception-breakpoint-that-doesnt-suck-and-a-real-use-case-for-method-breakpoints/"&gt;Foojay: Exception Breakpoint that Doesn&amp;rsquo;t Suck and a Real Use Case for Method Breakpoints&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;20'34 External debugging tools
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://rubberduckdebugging.com/" target="_blank" rel="noopener noreferrer"&gt;https://rubberduckdebugging.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;26'55 Observability
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://istio.io/latest/about/service-mesh/" target="_blank" rel="noopener noreferrer"&gt;https://istio.io/latest/about/service-mesh/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.redhat.com/en/topics/microservices/what-is-a-service-mesh" target="_blank" rel="noopener noreferrer"&gt;https://www.redhat.com/en/topics/microservices/what-is-a-service-mesh&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openjdk.org/jeps/435" target="_blank" rel="noopener noreferrer"&gt;https://openjdk.org/jeps/435&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;37'58 What information should you look for while debugging&lt;/li&gt;
&lt;li&gt;45'46 Be aware of tunnel vision while debugging&lt;/li&gt;
&lt;li&gt;49'33 What to do if you don&amp;rsquo;t know where to search for the bug
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-bisect" target="_blank" rel="noopener noreferrer"&gt;https://git-scm.com/docs/git-bisect&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/understand-the-root-cause-of-regressions-with-git-bisect/"&gt;Foojay: External Debugging Tools 2: git bisect&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;57'05 Outro&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>What are you Missing by Debugging in VS Code?</title><link>https://foojayio.github.io/website/today/what-are-you-missing-by-debugging-in-vs-code/</link><pubDate>Fri, 17 Feb 2023 16:20:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-are-you-missing-by-debugging-in-vs-code/</guid><description>&lt;p&gt;In the first chapter of my debugging book, I discuss IDE debugging.&lt;/p&gt;
&lt;p&gt;In that chapter, I mostly talk about IntelliJ/IDEA.&lt;/p&gt;
&lt;p&gt;People often ask me why I didn&amp;rsquo;t write as much about VS Code&amp;hellip;&lt;/p&gt;
&lt;p&gt;The reason is that there isn&amp;rsquo;t much to write about. Its debugger is simpler for better and for worse. It isn&amp;rsquo;t as powerful as other IDEs. I created the following video that covers the content of this post:&lt;/p&gt;</description></item><item><title>Moving Security into the JVM</title><link>https://foojayio.github.io/website/today/moving-security-into-the-jvm/</link><pubDate>Fri, 17 Feb 2023 11:15:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/moving-security-into-the-jvm/</guid><description>&lt;p&gt;The threat model for Java applications is changing, with modern risk coming from the widespread scope and usage of Java and library vulnerabilities.&lt;/p&gt;
&lt;p&gt;There are so many different versions of Java (both major and minor versions) and so many systems and libraries that it&amp;rsquo;s complex to know what everything is, where everything is, and if it&amp;rsquo;s what&amp;rsquo;s &amp;ldquo;out there&amp;rdquo; poses any security risk.&lt;/p&gt;
&lt;p&gt;The new &lt;a href="https://www.azul.com/products/vulnerability-detection" target="_blank" rel="noopener noreferrer"&gt;Azul Vulnerability Detection&lt;/a&gt;
 product by &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
 is designed to help organizations deal with this evolving threat and manage the large scope of their Java environments.&lt;/p&gt;</description></item><item><title>A Quick Look At Faces (JSF) 4.0 In Jakarta EE 10</title><link>https://foojayio.github.io/website/today/a-quick-look-at-faces-jsf-4-0-in-jakarta-ee-10/</link><pubDate>Fri, 17 Feb 2023 09:07:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-quick-look-at-faces-jsf-4-0-in-jakarta-ee-10/</guid><description>&lt;p&gt;Jakarta EE 10 shipped with the fourth major release of its component based web framework Jakarta Faces.&lt;/p&gt;
&lt;p&gt;Hitherto known as Jakarta Server Faces, and Java Server Faces before that, &lt;a href="https://blog.payara.fish/getting-started-with-jakarta-ee-9-jakarta-faces-jsf" target="_blank" rel="noopener noreferrer"&gt;Jakarta Faces&lt;/a&gt;
, or just Faces, &lt;a href="https://jakarta.ee/specifications/faces/4.0/" target="_blank" rel="noopener noreferrer"&gt;version 4.0&lt;/a&gt;
 is the first major version with API change since version 2.3 in Java EE 8.&lt;/p&gt;
&lt;p&gt;Among the major changes in this version are the following.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/eclipse-ee4j/faces-api/issues/1581" target="_blank" rel="noopener noreferrer"&gt;Issue #1581&lt;/a&gt;
: New API to programmatically create Facelets&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eclipse-ee4j/faces-api/issues/1508" target="_blank" rel="noopener noreferrer"&gt;Issue #1508&lt;/a&gt;
: New automatic extensionless mapping&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eclipse-ee4j/faces-api/issues/1509" target="_blank" rel="noopener noreferrer"&gt;Issue #1509&lt;/a&gt;
: New annotation @ClientWindowScoped&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eclipse-ee4j/faces-api/issues/1555" target="_blank" rel="noopener noreferrer"&gt;Issue #1555&lt;/a&gt;
: New attribute &amp;lt;h:inputFile multiple=&amp;quot;&amp;hellip;&amp;quot;&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eclipse-ee4j/faces-api/issues/1556" target="_blank" rel="noopener noreferrer"&gt;Issue #1556&lt;/a&gt;
: New attribute &amp;lt;h:inputFile accept=&amp;quot;&amp;hellip;&amp;quot;&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eclipse-ee4j/faces-api/issues/1559" target="_blank" rel="noopener noreferrer"&gt;Issue #1559&lt;/a&gt;
: New tag &amp;lt;f:selectItemGroups&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eclipse-ee4j/faces-api/issues/1560" target="_blank" rel="noopener noreferrer"&gt;Issue #1560&lt;/a&gt;
: New attribute &amp;lt;h:inputText type=&amp;quot;&amp;hellip;&amp;quot;&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eclipse-ee4j/faces-api/issues/1563" target="_blank" rel="noopener noreferrer"&gt;Issue #1563&lt;/a&gt;
: New tag &amp;lt;f:selectItemGroup&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eclipse-ee4j/faces-api/issues/1565" target="_blank" rel="noopener noreferrer"&gt;Issue #1565&lt;/a&gt;
: Skip type attribute from &amp;lt;link&amp;gt; and &amp;lt;script&amp;gt; when doctype is HTML5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There were also some pruning of the API such as:&lt;/p&gt;</description></item><item><title>Schedule your 2038 holiday and experiment with dates in jshell!</title><link>https://foojayio.github.io/website/today/still-time-to-schedule-your-holiday-for-2038/</link><pubDate>Thu, 16 Feb 2023 15:54:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/still-time-to-schedule-your-holiday-for-2038/</guid><description>&lt;p&gt;It&amp;rsquo;s still more or less the beginning of the year, where you may want to start scheduling your holidays until the end of it. And I decided to go a step further and I&amp;rsquo;ve already planned those for 2038!&lt;/p&gt;
&lt;p&gt;Why? Well, some time ago I gave a presentation to students, when I realized they had no idea what I was talking about when mentioning the Y2K-problem. Most of them weren&amp;rsquo;t even born in the year 2000!&lt;/p&gt;</description></item><item><title>Migrating Applications to TornadoVM v0.15 (Part 1)</title><link>https://foojayio.github.io/website/today/migrating-applications-to-tornadovm-v0-15-part-1/</link><pubDate>Thu, 16 Feb 2023 07:58:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/migrating-applications-to-tornadovm-v0-15-part-1/</guid><description>&lt;p&gt;TornadoVM 0.15 introduced changes at the API level with the aim of making the exposed operations more comprehensive to the programmers.&lt;/p&gt;
&lt;p&gt;It is imperative after all to get an understanding of how to use the TornadoVM API, as it includes very powerful operations, such as expressing parallelism, chaining Java methods (tasks) for deployment on heterogeneous hardware, configuration of the data transfers, etc.&lt;/p&gt;
&lt;p&gt;This article has the following objectives:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Give an overview of the TornadoVM programming model.&lt;/li&gt;
&lt;li&gt;Provide guidelines on how to define what to run on a device.&lt;/li&gt;
&lt;li&gt;Provide guidelines on how existing TornadoVM programs can migrate to use the TornadoVM v0.15 API.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;TornadoVM Programming Model {#h2-0-1-tornadovm-programming-model}&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;TornadoVM uses a programming model that derives from the state-of-the-art programming models of heterogeneous hardware accelerators, such as OpenCL, Level Zero, and CUDA. A key aspect for software applications that require to offload computations for hardware acceleration is that they are composed of two parts:&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>Null Safety: Kotlin vs. Java</title><link>https://foojayio.github.io/website/today/null-safety-kotlin-vs-java/</link><pubDate>Mon, 13 Feb 2023 12:12:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/null-safety-kotlin-vs-java/</guid><description>&lt;p&gt;Last week, I was at the &lt;a href="https://fosdem.org/" target="_blank" rel="noopener noreferrer"&gt;FOSDEM&lt;/a&gt;
 conference. FOSDEM is specific in that it has multiple rooms, each dedicated to a different theme and organized by a team. I had two talks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://fosdem.org/2023/schedule/event/tracing/" target="_blank" rel="noopener noreferrer"&gt;Practical Introduction to OpenTelemetry Tracing&lt;/a&gt;
, in the &lt;em&gt;Monitoring and Observability&lt;/em&gt; devroom&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fosdem.org/2023/schedule/event/miss/" target="_blank" rel="noopener noreferrer"&gt;What I miss in Java, the perspective of a Kotlin developer&lt;/a&gt;
, in the &lt;em&gt;Friends of OpenJDK&lt;/em&gt; devroom&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The second talk is from &lt;a href="https://blog.frankel.ch/miss-in-java-kotlin-developer/" target="_blank" rel="noopener noreferrer"&gt;an earlier post&lt;/a&gt;
. Martin Bonnin did a tweet from a single slide, and it created quite a stir, even attracting Brian Goetz.&lt;/p&gt;</description></item><item><title>How to Find &amp; Fix Vulnerabilities with IntelliJ IDEA Ultimate</title><link>https://foojayio.github.io/website/today/package-checker-find-fix-vulnerabilities-with-intellij-idea-ultimate/</link><pubDate>Mon, 13 Feb 2023 09:09:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/package-checker-find-fix-vulnerabilities-with-intellij-idea-ultimate/</guid><description>&lt;p&gt;In this article, we&amp;rsquo;re going to take a look at the &lt;a href="https://plugins.jetbrains.com/plugin/18337-package-checker" target="_blank" rel="noopener noreferrer"&gt;Package Checker plugin&lt;/a&gt;
, that&amp;rsquo;s bundled with &lt;a href="https://www.jetbrains.com/idea/" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA Ultimate&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll have a look at how to view known vulnerabilities in your Maven or Gradle projects, how to get more information about the known vulnerabilities in a specific dependency and how to remediate these vulnerabilities inside IntelliJ IDEA Ultimate if a new version with a fix is available.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://foojayio.github.io/website/plugin.png" title="Package Checker plugin"&gt;&lt;img src="https://foojayio.github.io/website/today/package-checker-find-fix-vulnerabilities-with-intellij-idea-ultimate/plugin.png" alt="Package Checker plugin" title="Package Checker plugin" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Securing Admin Access to Apache APISIX</title><link>https://foojayio.github.io/website/today/securing-admin-access-to-apache-apisix/</link><pubDate>Sat, 11 Feb 2023 16:34:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/securing-admin-access-to-apache-apisix/</guid><description>&lt;p&gt;API Gateways are critical components in one&amp;rsquo;s infrastructure.&lt;/p&gt;
&lt;p&gt;If an attacker could change the configuration of routes, they could direct traffic to their infrastructure.&lt;/p&gt;
&lt;p&gt;Consequences could range from data theft to financial losses.&lt;/p&gt;
&lt;p&gt;Worse, data theft could only be noticed after a long time by mirroring the load.&lt;/p&gt;
&lt;p&gt;Hence, protecting your API Gateway is of utmost importance.&lt;/p&gt;
&lt;p&gt;In this short article, I&amp;rsquo;ll list a couple of ways to secure your Apache APISIX admin access.&lt;/p&gt;</description></item><item><title>Remote Debugging Dangers and Pitfalls</title><link>https://foojayio.github.io/website/today/remote-debugging-dangers-and-pitfalls/</link><pubDate>Fri, 10 Feb 2023 10:14:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/remote-debugging-dangers-and-pitfalls/</guid><description>&lt;p&gt;This is the last part of the debugging series, to learn the rest you&amp;rsquo;ll need to get &lt;a href="https://www.amazon.com/dp/1484290410/" target="_blank" rel="noopener noreferrer"&gt;the book&lt;/a&gt;
 or &lt;a href="https://course.debugagent.com/" target="_blank" rel="noopener noreferrer"&gt;the course&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;One of the most frequently asked questions I receive is: can we do these things in VS Code?&lt;/p&gt;
&lt;p&gt;The answer is unfortunately no. But I elaborate on the debugging capabilities of VS Code in &lt;a href="https://www.youtube.com/watch?v=OBgLeRwjlAc" target="_blank" rel="noopener noreferrer"&gt;this video&lt;/a&gt;
. I&amp;rsquo;ll do a blog post that covers that next week.&lt;/p&gt;
&lt;p&gt;Below is the last video in the series:&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 8: Add MongoDB to Spring Cloud Config</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-8-add-mongodb-to-spring-cloud-config/</link><pubDate>Thu, 09 Feb 2023 16:56:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-8-add-mongodb-to-spring-cloud-config/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/journeys-in-java-level-7-externalize-microservice-configuration/"&gt;our last article&lt;/a&gt;
, we used Spring Cloud Config to provide database credentials to a microservice application connecting to a cloud-hosted Neo4j database. This post will backport this concept to our existing MongoDB database instance and its related microservices.&lt;/p&gt;
&lt;p&gt;We will add our MongoDB credentials to the config server, so that it will be the central place for both our Neo4j and MongoDB database access. However, each service only has access to the credentials that it needs to operate, which provides some level of security through &amp;ldquo;separation of concerns&amp;rdquo; (versus universal access).&lt;/p&gt;</description></item><item><title>How Gradle Works: Startup</title><link>https://foojayio.github.io/website/today/how-gradle-works-startup/</link><pubDate>Thu, 09 Feb 2023 08:45:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-gradle-works-startup/</guid><description>&lt;p&gt;This is the first article of a series &lt;em&gt;How Gradle Works&lt;/em&gt;, which includes the following topics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How Gradle starts up&lt;/li&gt;
&lt;li&gt;How many JVMs are involved in a Gradle build&lt;/li&gt;
&lt;li&gt;What happens in each JVM during the build&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&amp;rsquo;ll explain the first topic &lt;em&gt;How Gradle Starts Up&lt;/em&gt; in this blog.&lt;/p&gt;
&lt;p&gt;Before reading on, we assume you are familiar with basic JVM/Gradle concepts (jar, classpath, wrapper, daemon, project, task, etc.).&lt;/p&gt;
&lt;h2 id="h2-0-how-gradle-starts-up"&gt;How Gradle Starts Up&lt;/h2&gt;
&lt;p&gt;There are many ways to start a Gradle build:&lt;/p&gt;</description></item><item><title>JFR Timestamps and System.nanoTime Foojay.io</title><link>https://foojayio.github.io/website/today/jfr-timestamps-and-system-nanotime/</link><pubDate>Wed, 08 Feb 2023 15:33:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/jfr-timestamps-and-system-nanotime/</guid><description>&lt;p&gt;Did you ever wonder whether JFR timestamps use the same time source as &lt;code&gt;System.nanoTime&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;This is important when you have miscellaneous logging besides JFR events; otherwise, you would not be able to match JFR events and your logging properly.&lt;/p&gt;
&lt;p&gt;We assume here that you use &lt;code&gt;System.nanoTime&lt;/code&gt; and not less-suited timing information from &lt;code&gt;System.currentTimeMillis&lt;/code&gt;&lt;strong&gt;()&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The journey into this started with a question on the JDK Mission Control slack channel, which led me into a rabbit hole:&lt;/p&gt;</description></item><item><title>Which is the Fastest JVM: OpenJDK or GraalVM?</title><link>https://foojayio.github.io/website/today/which-is-the-fastest-jvm-openjdk-or-graalvm/</link><pubDate>Wed, 08 Feb 2023 10:51:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/which-is-the-fastest-jvm-openjdk-or-graalvm/</guid><description>&lt;p&gt;How is a high-performance, low-latency Java application affected by the JVM version used?&lt;/p&gt;
&lt;p&gt;Every nanosecond counts for trading and other applications where messages between two different threads are exchanged in about 250ns!&lt;/p&gt;
&lt;p&gt;Read this article and find out which JDK variant comes out at the top!&lt;/p&gt;
&lt;h3 id="h3-0-benchmarks"&gt;Benchmarks&lt;/h3&gt;
&lt;p&gt;This article will use open-source &lt;a href="https://bit.ly/3wWnXy8" target="_blank" rel="noopener noreferrer"&gt;Chronicle Queue&lt;/a&gt;
 to exchange 256-byte messages between two threads whereby all messages are also stored in shared memory (/dev/shm is used to minimise the impact of the disk subsystem).&lt;/p&gt;</description></item><item><title>Getting Started with RIFE2 Java Web Framework v1.0.0</title><link>https://foojayio.github.io/website/today/getting-started-with-rife2-java-web-framework-v1-0-0/</link><pubDate>Tue, 07 Feb 2023 07:44:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-rife2-java-web-framework-v1-0-0/</guid><description>&lt;p&gt;RIFE2 is a very recently released and completely re-imagined version of my RIFE framework from 10 years ago.&lt;/p&gt;
&lt;p&gt;You can find all the details on the &lt;a href="https://rife2.com" title="project website" target="_blank" rel="noopener noreferrer"&gt;project website&lt;/a&gt;
 and on &lt;a href="https://github.com/gbevin/rife2" title="GitHub" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-what-is-rife2"&gt;What is RIFE2?&lt;/h2&gt;
&lt;p&gt;RIFE2 provides an opinionated full stack web framework, without external dependencies, in a 2MB jar. It is designed as a whole to make the creation of dynamic web applications and REST web services very fast while preserving maintainability and leveraging the strengths of the Java platform. You can still pull in other Java libraries and frameworks, of course, however, the layers of RIFE2&amp;rsquo;s full stack have knowledge about each-other, which provides many convenient features and shortcuts.&lt;/p&gt;</description></item><item><title>Announcing Real-time Stream Processing Unconference</title><link>https://foojayio.github.io/website/today/announcing-real-time-stream-processing-unconference/</link><pubDate>Tue, 07 Feb 2023 07:20:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-real-time-stream-processing-unconference/</guid><description>&lt;p&gt;I&amp;rsquo;m happy to share &lt;a href="https://hazelcast.com/lp/unconference/" target="_blank" rel="noopener noreferrer"&gt;Hazelcast will be kicking off 2023&lt;/a&gt;
 by hosting #RTSPUnconf to connect with community members and industry experts on the Future of Real-Time Stream Processing.&lt;/p&gt;
&lt;p&gt;Interested in joining our Stream Processing Fundamentals workshop in-person at CodeNode in London? Connect with other developers and receive a digital badge.&lt;/p&gt;
&lt;p&gt;Sign-up here: &lt;a href="https://hazelcast.com/lp/unconference/" target="_blank" rel="noopener noreferrer"&gt;https://hazelcast.com/lp/unconference/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why Attend:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gain valuable insight into the future of real-time stream processing from industry experts and peers&lt;/li&gt;
&lt;li&gt;Network and connect with like-minded professionals in the community through networking opportunities&lt;/li&gt;
&lt;li&gt;To learn and enhance your skills in building real-time stream processing applications&lt;/li&gt;
&lt;li&gt;Have an amazing time with new and old friends from the community!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Are you interested in speaking or joining the Real-Time Stream Processing Roundtable?&lt;/p&gt;</description></item><item><title>Foojay.io at FOSDEM 2023 Trip Report</title><link>https://foojayio.github.io/website/today/foojay-io-at-fosdem-2023-trip-report/</link><pubDate>Mon, 06 Feb 2023 20:58:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-io-at-fosdem-2023-trip-report/</guid><description>&lt;h3 id="h3-0-what-if-simon-ritter-s-friends-of-openjdk-keynote-session-at-fosdem-entitled-after-nearly-30-years-how-is-java-so-popular-ends-up-being-held-in-an-empty-room"&gt;&amp;ldquo;What if Simon Ritter&amp;rsquo;s Friends of OpenJDK keynote session at FOSDEM entitled &amp;lsquo;&lt;a href="https://fosdem.org/2023/schedule/event/javapopularity/" target="_blank" rel="noopener noreferrer"&gt;After Nearly 30 Years, How Is Java So Popular?&lt;/a&gt;
&amp;rsquo; ends up being held&amp;hellip; in an empty room?&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;In a nutshell, this was my worst case scenario slash biggest &amp;lsquo;concern&amp;rsquo; over the past weeks, narrowly followed by the image of someone taking a pic of Simon in an empty room talking about Java&amp;rsquo;s popularity.&lt;/p&gt;
&lt;p&gt;After all, it&amp;rsquo;s been several years since the last in-person &lt;a href="https://fosdem.org/" target="_blank" rel="noopener noreferrer"&gt;FOSDEM&lt;/a&gt;
 was held in Brussels, Belgium, so maybe there wouldn&amp;rsquo;t be that many people. Secondly, the abovementioned keynote session was scheduled at 09:00 AM on a Sunday morning. Also, thirdly, is Java at all still a hot enough topic to attract people at FOSDEM, where there are multiple rooms and tracks competing for attention and attendance, with lots of young fresh faced developers who might prefer spending time in any of the other many rooms.&lt;/p&gt;</description></item><item><title>Foojay Podcast #13: Denver and Boulder JUG</title><link>https://foojayio.github.io/website/today/foojay-podcast-13/</link><pubDate>Mon, 06 Feb 2023 09:25:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-13/</guid><description>&lt;p&gt;We started the Foojay Podcast JUG World Tour &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-8/"&gt;in Manchester&lt;/a&gt;
 last December.&lt;/p&gt;
&lt;p&gt;Last month &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-10/"&gt;we were in Dubai&lt;/a&gt;
&amp;hellip; and now we are on the other side of the world in the US to meet the people behind the Denver and Boulder JUG.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/iHzmxTAWckM?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Using Firefox Profiler beyond the web</title><link>https://foojayio.github.io/website/today/using-firefox-profiler-beyond-the-web/</link><pubDate>Fri, 03 Feb 2023 15:28:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-firefox-profiler-beyond-the-web/</guid><description>&lt;p&gt;&lt;em&gt;This blog post is the base for the second half of my upcoming talk at FOSDEM 2023 on the topic &amp;ldquo;&lt;a href="http://%22https://fosdem.org/2023/schedule/event/mozilla_firefox_profiler_beyond_the_web/" target="_blank" rel="noopener noreferrer"&gt;Firefox Profiler beyond the web: Using Firefox Profiler to view Java profiling data&lt;/a&gt;
.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I detailed in &lt;a href="https://mostlynerdless.de/?p=628" target="_blank" rel="noopener noreferrer"&gt;my last blog post&lt;/a&gt;
 how the Firefox Profiler can be used to view Java profiling data:
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/01/Screenshot-2023-01-27-at-12.34.45-1-2000x1201.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;But I&amp;rsquo;m of course not the only one who uses Firefox Profiler beyond the web because using it has many advantages: You&amp;rsquo;re essentially getting a prototypical visualization for your data in an afternoon.&lt;/p&gt;</description></item><item><title>Memory Allocation Pacing in Azul Zulu Prime builds of OpenJDK</title><link>https://foojayio.github.io/website/today/explained-memory-allocation-pacing-in-azul-zulu-prime-builds-of-openjdk/</link><pubDate>Fri, 03 Feb 2023 13:29:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/explained-memory-allocation-pacing-in-azul-zulu-prime-builds-of-openjdk/</guid><description>&lt;p&gt;The Java Virtual Machine (JVM) that runs your Java applications has a Garbage Collector (GC) responsible for recycling memory objects that are no longer needed.&lt;/p&gt;
&lt;p&gt;The GC operates by cycles, and running a cycle takes some time.&lt;/p&gt;
&lt;p&gt;Azul Zulu Prime uses the &lt;a href="https://www.azul.com/products/components/pgc/" target="_blank" rel="noopener noreferrer"&gt;C4 Garbage Collector&lt;/a&gt;
, which runs concurrently with your Java application.&lt;/p&gt;
&lt;p&gt;During the GC cycle, the application may outrun the GC and exhaust the memory before the GC completes.&lt;/p&gt;</description></item><item><title>What to Know About Garbage Collection as a Java Developer!</title><link>https://foojayio.github.io/website/today/what-should-i-know-about-garbage-collection-as-a-java-developer/</link><pubDate>Fri, 03 Feb 2023 13:20:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-should-i-know-about-garbage-collection-as-a-java-developer/</guid><description>&lt;p&gt;The Garbage Collector is a crucial part of the Java Virtual Machine (JVM) that has an impact on the performance and reliability of your application.&lt;/p&gt;
&lt;p&gt;But what is it exactly, and why is it important to understand how it works? If you&amp;rsquo;re a Java developer, you might ask, &amp;ldquo;What should I know about Garbage Collection?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Since I joined Azul as technical writer, it was a real discovery to talk to the engineers who develop such GCs and help companies get the most out of their Java systems.&lt;/p&gt;</description></item><item><title>Memory Debugging - a Deep Level of Insight</title><link>https://foojayio.github.io/website/today/memory-debugging-a-deep-level-of-insight/</link><pubDate>Fri, 03 Feb 2023 10:08:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/memory-debugging-a-deep-level-of-insight/</guid><description>&lt;p&gt;When I mention memory debugging the first thing that comes to the minds of many developers is the profiler. That isn&amp;rsquo;t wrong but it&amp;rsquo;s still a partial picture. Profilers are amazing at mapping that &amp;ldquo;big picture&amp;rdquo; but when you want to understand the domain, they fall short.&lt;/p&gt;
&lt;p&gt;Modern debuggers let us gain a level of insight into the application that&amp;rsquo;s unrivaled. We can inspect and locate a specific object instance with surgical precision.&lt;/p&gt;</description></item><item><title>Debugging Threads and Asynchronous Code</title><link>https://foojayio.github.io/website/today/debugging-threads-and-asynchronous-code/</link><pubDate>Fri, 03 Feb 2023 10:07:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-threads-and-asynchronous-code/</guid><description>&lt;p&gt;I&amp;rsquo;m doing a community interview in the &lt;a href="https://coderanch.com/f/157/Cloud-Virtualization" target="_blank" rel="noopener noreferrer"&gt;Code Ranch&lt;/a&gt;
 drop by and ask a question to win a free book!&lt;/p&gt;
&lt;p&gt;This week we&amp;rsquo;ll discuss one of the harder problems in programming: threading. For many cases threading issues aren&amp;rsquo;t as difficult to debug. At least not in higher abstractions.&lt;/p&gt;
&lt;p&gt;Asynchronous programming is supposed to simplify the threading model but oftentimes it makes a bad situation worse by detaching us from the core context.&lt;/p&gt;</description></item><item><title>Firefox Profiler Beyond the Web: IntelliJ plugin for JFR</title><link>https://foojayio.github.io/website/today/firefox-profiler-beyond-the-web/</link><pubDate>Thu, 02 Feb 2023 13:13:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/firefox-profiler-beyond-the-web/</guid><description>&lt;p&gt;&lt;em&gt;This blog post is the base of the first half of my upcoming talk at FOSDEM 2023 on the topic &amp;ldquo;&lt;a href="https://fosdem.org/2023/schedule/event/mozilla_firefox_profiler_beyond_the_web/" target="_blank" rel="noopener noreferrer"&gt;Firefox Profiler beyond the web: Using Firefox Profiler to view Java profiling data&lt;/a&gt;
.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;For the impatient:&lt;/strong&gt; Take a look at my &lt;a href="https://plugins.jetbrains.com/plugin/20937-java-jfr-profiler" target="_blank" rel="noopener noreferrer"&gt;Java JFR Profiler&lt;/a&gt;
 IntelliJ plugin to easily profile your application and view JFR files directly in your IDE.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I got involved in the &lt;a href="https://profiler.firefox.com/" target="_blank" rel="noopener noreferrer"&gt;Firefox Profiler&lt;/a&gt;
 development, spending significant portions of my time at SAP in the last half year on it. It has been an exciting ride. I learned a lot and contributed a few features. So I was essentially developing React code when I wasn&amp;rsquo;t working on ASGST or other OpenJDK-related tools.&lt;/p&gt;</description></item><item><title>Why Core-to-Core Latency Matters</title><link>https://foojayio.github.io/website/today/why-core-to-core-latency-matters/</link><pubDate>Thu, 02 Feb 2023 11:16:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-core-to-core-latency-matters/</guid><description>&lt;p&gt;A few years ago we had a global shortage of microchips; now, I feel there is a worldwide shortage of software developers.&lt;/p&gt;
&lt;p&gt;Like many other software companies, &lt;a href="https://bit.ly/3JE97nx" title="Chronicle Software" target="_blank" rel="noopener noreferrer"&gt;Chronicle Software&lt;/a&gt;
 is rapidly expanding and interviewing candidates. We usually ask candidates to demonstrate &lt;em&gt;a good knowledge of core Java&lt;/em&gt;, then we cover slightly more advanced concepts, such as the use of volatile memory, memory barriers and fences.&lt;/p&gt;
&lt;p&gt;While it is important to have a high-level understanding of these concepts when writing concurrent code, it&amp;rsquo;s surprising how few Java developers with 10+ years of experience have a deep knowledge of the underlying hardware. An initial goal of Java was to &amp;ldquo;write once, run anywhere&amp;rdquo;, but does that mean we should not be sympathetic to the hardware?&lt;/p&gt;</description></item><item><title>How to Run a Java Application with CRaC in a Docker Container</title><link>https://foojayio.github.io/website/today/how-to-run-a-java-application-with-crac-in-a-docker-container/</link><pubDate>Wed, 01 Feb 2023 09:41:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-run-a-java-application-with-crac-in-a-docker-container/</guid><description>&lt;p&gt;CRaC (Coordinated Restore at Checkpoint) is &lt;a href="https://openjdk.org/projects/crac/" target="_blank" rel="noopener noreferrer"&gt;an OpenJDK project&lt;/a&gt;
 that was &lt;a href="https://www.azul.com/blog/aws-snapstart-builds-momentum-for-the-crac-api/" target="_blank" rel="noopener noreferrer"&gt;developed by Azul&lt;/a&gt;
 to solve the problem of &amp;ldquo;slow&amp;rdquo; startup times of the Java Virtual Machine in a microservice environment.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The most up-to-date guidelines can be found on &amp;ldquo;&lt;a href="https://docs.azul.com/core/crac/crac-guidelines.html#running-crac-in-a-virtualized-environment-docker" target="_blank" rel="noopener noreferrer"&gt;Coordinated Restore at Checkpoint Usage Guidelines&lt;/a&gt;
&amp;rdquo; in the Azul Docs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When the JVM runs your application code, it does things like interpreting, compiling and optimizing code to make your application run as fast as possible under the given workload. This is great but can take some time and especially when you run short lived microservices you don&amp;rsquo;t want to wait until the JVM has produced the most optimized code.&lt;/p&gt;</description></item><item><title>Real-time Stream Processing with Hazelcast and StreamNative</title><link>https://foojayio.github.io/website/today/real-time-stream-processing-with-hazelcast-and-streamnative/</link><pubDate>Wed, 01 Feb 2023 09:09:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/real-time-stream-processing-with-hazelcast-and-streamnative/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;One of the most useful features of real-time stream processing is to combine the strengths and advantages of various technologies to provide a unique developer experience and an efficient way of processing data in real time at scale.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hazelcast&lt;/strong&gt; is a real-time distributed computation and storage platform for consistently low latency queries, aggregation and stateful computation against real-time event streams and traditional data sources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apache Pulsar&lt;/strong&gt; is a real-time multitenant geo-replicated distributed pub-sub messaging and streaming platform for real-time workloads handling millions of events per hour.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However, real-time stream processing is not an easy task, especially when combining multiple live streams with large volumes of data stored in external data storages to provide context and instant results.&lt;/p&gt;</description></item><item><title>Optional in Java: A Swiss Army Knife for Handling Nulls and Improving Code Quality</title><link>https://foojayio.github.io/website/today/optional-in-java-a-swiss-army-knife-for-handling-nulls-and-improving-code-quality/</link><pubDate>Wed, 01 Feb 2023 05:29:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/optional-in-java-a-swiss-army-knife-for-handling-nulls-and-improving-code-quality/</guid><description>&lt;p&gt;In Java, dealing with null values can be a real headache. Nulls can cause all sorts of problems in your code, from NullPointerExceptions to convoluted if statements and error-prone logic. Fortunately, Java 8 introduced the Optional class, which offers a simple and powerful way to handle nulls and improve code quality. Optional is a container object that may or may not contain a non-null value and provides a range of practical methods for working with its contents. In this article, we&amp;rsquo;ll explore the many use cases of Optional in Java and show you how to use this powerful class to write cleaner, more expressive, and more resilient code.&lt;/p&gt;</description></item><item><title>More Foojay.io FOSDEM Speaker Predictions for 2023</title><link>https://foojayio.github.io/website/today/more-foojay-io-fosdem-speaker-predictions-for-2023/</link><pubDate>Tue, 31 Jan 2023 08:28:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/more-foojay-io-fosdem-speaker-predictions-for-2023/</guid><description>&lt;p&gt;Following on &lt;a href="https://foojayio.github.io/website/today/foojay-io-fosdem-speaker-predictions-for-2023/"&gt;from the first part in this series&lt;/a&gt;
, covering Simon Ritter and several more, here is the next set of reflections on 2022 and expectations for this year, from speakers who will be in the Foojay.io developer room at FOSDEM on Sunday, 5 February.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What&amp;rsquo;s going to happen this year? In the software supply chain arena, it&amp;rsquo;s pretty clear that 2023 will be the year of SBOMs, Government legislation and (of course) a continued exponential increase in supply chain attacks.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 7: Externalize Microservice Configuration</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-7-externalize-microservice-configuration/</link><pubDate>Mon, 30 Jan 2023 15:43:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-7-externalize-microservice-configuration/</guid><description>&lt;p&gt;Our decided next step for this project takes us in a new direction by adding externalized configuration for our applications.&lt;/p&gt;
&lt;p&gt;We already saw how to do something similar with &lt;a href="https://jmhreif.com/blog/microservices-level5/" target="_blank" rel="noopener noreferrer"&gt;MongoDB database credentials in Docker Compose&lt;/a&gt;
 to access a local database container, but what do we do when the database is hosted on public cloud or contains sensitive data?&lt;/p&gt;
&lt;p&gt;We probably don&amp;rsquo;t want to publish our credentials anywhere or even prevent accidental publishing.&lt;/p&gt;</description></item><item><title>JavaFX Links of January 2023</title><link>https://foojayio.github.io/website/today/javafx-links-of-january-2023/</link><pubDate>Mon, 30 Jan 2023 09:14:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-january-2023/</guid><description>&lt;p&gt;2023 has taken off with a flying start in JavaFX-world!&lt;/p&gt;
&lt;p&gt;Here is a summary of the Links Of The Week that were published in January on &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-javafx-versions"&gt;JavaFX Versions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://techhub.social/@gluonhq/109710794664474768" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gluon&lt;/strong&gt; announced the first set of JavaFX releases in 2023&lt;/a&gt;
:
&lt;ul&gt;
&lt;li&gt;JavaFX 19.0.2: public release containing some updates and security patches to JavaFX 19.&lt;/li&gt;
&lt;li&gt;JavaFX 11.0.18 and JavaFX 17.0.6: for LTS customers who keep supporting the development, and who make it possible to move JavaFX forward.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-podcast"&gt;Podcast&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;This was already mentioned the last time, but maybe you missed this 😉 Here on &lt;a href="https://twitter.com/foojayio" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Foojay.io&lt;/strong&gt;&lt;/a&gt;
, we published the podcast &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-9/"&gt;&amp;ldquo;The State of JavaFX Framework, Libraries, and Projects&amp;rdquo;&lt;/a&gt;
. Pedro Duque Vieira, Sean Phillips, Johan Vos, Gail Anderson, Dirk Lemmermann, and Frank Delporte spoke about the JavaFX framework itself, but also about the libraries and applications that are built with it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1610762162850463744" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt;&lt;/a&gt;
 started the new year with eco-friendly fireworks. Powered by the FXGL particle system.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=UAGRgntpliI" target="_blank" rel="noopener noreferrer"&gt;He also published a video tutorial&lt;/a&gt;
 in which he uses snow particles to outline an arbitrary String.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/status/1616901694582931456" target="_blank" rel="noopener noreferrer"&gt;And a video illustrating how modifying an entity&amp;rsquo;s TransformComponent&lt;/a&gt;
 will now correctly update the entity&amp;rsquo;s 3D direction and vice versa in FXGL.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/YangKui7/status/1609091899562004480?t=Y7LQ24JEmEgcNwKRbQ8YMQ&amp;amp;s=09" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;GZYangKui&lt;/strong&gt; shared a video of nes4j&lt;/a&gt;
 - The Nintendo Red and White Machine Simulator - and a link to the sources.
&lt;ul&gt;
&lt;li&gt;And another video &lt;a href="https://twitter.com/YangKui7/status/1610948697453662211" target="_blank" rel="noopener noreferrer"&gt;with Super Mario&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/zy69bk/gilded_sols_brief_overview/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Peter Pietri&lt;/strong&gt;&lt;/a&gt;
 shared info and a video via Reddit of &amp;ldquo;Gilded Sols&amp;rdquo;, a game based on chess but with fantasy elements.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1607564075625779200" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt;&lt;/a&gt;
 promotes FXGL to create games.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@hansolo_/109678192185507846" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; is modifying the SpaceFX mobile build&lt;/a&gt;
 so that it runs again on iPhone, including an update of the readme regarding the build.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/HbotondS/status/1615328894382473219" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Botond Hegyi&lt;/strong&gt; already had some experience with JavaFX game development&lt;/a&gt;
, but he found out working with &lt;a href="https://twitter.com/AlmasBaim" target="_blank" rel="noopener noreferrer"&gt;FXGL by &lt;strong&gt;Almas Baim&lt;/strong&gt;&lt;/a&gt;
 is sooo much easier.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1618642823074705410" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; posted a video of snake bot&lt;/a&gt;
 using a pathfinding algorithm.
&lt;ul&gt;
&lt;li&gt;The sources &lt;a href="https://github.com/OrangoMango/Snake" target="_blank" rel="noopener noreferrer"&gt;are available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;And &lt;a href="https://twitter.com/orango_mango/status/1617918969025015809" target="_blank" rel="noopener noreferrer"&gt;another video&lt;/a&gt;
 showing a 3D animation only using matrices and vectors.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-javafx-applications"&gt;JavaFX Applications&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/zsevarac/status/1610634951321346050" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Zoran Sevarac&lt;/strong&gt;&lt;/a&gt;
 shared a screenshot of a Neural network visual Weights Analysis tool under development for the next DeepNetts release. It helps understanding what&amp;rsquo;s going on inside layers, and debugging trained networks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mohammed Saied&lt;/strong&gt; demonstrates a &lt;a href="https://www.youtube.com/shorts/fA56jf05M84" target="_blank" rel="noopener noreferrer"&gt;JavaFX GUI to control a car (via YouTube Shorts)&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@pilhuhn/109609291776854983" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Heiko Rupp&lt;/strong&gt;&lt;/a&gt;
 is making progress with a Java/JavaFX Mastodon application.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/LeeWyatt_7788/status/1608797264096657414" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;LeeWyatt&lt;/strong&gt;&lt;/a&gt;
 tweeted a short video introduction on how to use beta 2 of FXTools.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/helmiarkan/status/1608669184560631808" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hilmi&lt;/strong&gt;&lt;/a&gt;
 made a hospital queue app for his final homework on Data Structures Practicum. Video and link to the sources.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/desmond__neba/status/1607500047255576581" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Neba Desmond&lt;/strong&gt;&lt;/a&gt;
 shared a video of a nice sidebar navigation.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/PatrikKarlstrom/status/1607359050555052032" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Patrik Karlström&lt;/strong&gt;&lt;/a&gt;
 is making progress moving Yaya from Swing to JavaFX using WorkbenchFX as the base for the UI.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Tksrajan/status/1610985730200989701" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sundar Krishnamachari&lt;/strong&gt;&lt;/a&gt;
 shared a small project that creates a UI client for communication over MQ Telemetry Transport or MQTT, a messaging protocol popular in IOT devices.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/JavaFX3D/status/1612944735752310784" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;JavaFX3D&lt;/strong&gt; found a nice Car Rental System&lt;/a&gt;
 with a JavaFX user interface. Code with screenshots and videos is &lt;a href="https://github.com/yuenci/Java-Car-Rental-System" target="_blank" rel="noopener noreferrer"&gt;available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-javafx-development"&gt;JavaFX Development&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Setting up your JavaFX development environment can be challenging. &lt;a href="https://twitter.com/a_fester/status/1606385362728849415" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Andreas Fester&lt;/strong&gt;&lt;/a&gt;
 shared the solution that helped him to fix &amp;ldquo;Module not found&amp;rdquo;, thanks to &lt;a href="https://twitter.com/JPeredaDnr" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;José Pereda&lt;/strong&gt;&lt;/a&gt;
 and &lt;a href="https://twitter.com/kleopatra_jx" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jeanette Winzenburg&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/johanvos/status/1611354561863614465" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt; is looking for help with the JavaFX plugin for Eclipse 2022-12&lt;/a&gt;
: &amp;ldquo;Who has #Eclipse experience and wants to help the #JavaFX community?&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-to-read"&gt;To Read&amp;hellip;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/nikosvg/status/1603462643670519823" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Nikos Vaggalis&lt;/strong&gt;&lt;/a&gt;
 wrote an article about WebFX, a new way to develop modern web-based Java applications with rich desktop-like GUIs.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/autumo" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Autumo&lt;/strong&gt;&lt;/a&gt;
 shared an article on Foojay: &lt;a href="https://foojayio.github.io/website/today/building-javafx-with-gradle/"&gt;&amp;ldquo;Modular and non-modular Gradle build scripts for JavaFX-based projects&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MetacodesPro/status/1612477239249047552" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Siegfried Steiner&lt;/strong&gt; wrote a very detailed, clear, step-by-step post&lt;/a&gt;
: &amp;ldquo;Write once, run anywhere: An Android game using JavaFX and the GraalVM&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/jessals04/status/1611842000965505025" target="_blank" rel="noopener noreferrer"&gt;Another step-by-step by &lt;strong&gt;Jesse Watson&lt;/strong&gt;&lt;/a&gt;
 on how to start a JavaFX project using Eclipse IDE and SceneBuilder. &lt;a href="https://www.jessejwatson.com/posts/javafx-how-i-made-my-first-java-gui" target="_blank" rel="noopener noreferrer"&gt;Read it here&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/realThanhpv/status/1610996195182415874" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Thanhpv&lt;/strong&gt;&lt;/a&gt;
 is impressed by the performance of JavaFX on a 10y old computer. The screen recorder couldn&amp;rsquo;t catch up&amp;hellip;&lt;/li&gt;
&lt;li&gt;According to ChatGPT &lt;a href="https://twitter.com/lofidewanto/status/1610646563285524481" target="_blank" rel="noopener noreferrer"&gt;there are several advantages to using JavaFX over Swing or SWT&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;You want more information about the OpenJFX project than you can find here on jfx-central.com? Visit &lt;a href="https://github.com/mkpaz/aboutfx" target="_blank" rel="noopener noreferrer"&gt;mkpaz/aboutfx on GitHub&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;According to the &amp;ldquo;2022 Q4&amp;rdquo; chart on &lt;a href="https://www.infoq.com/articles/java-jvm-trends-2022/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Java InfoQ Trends Report - December 2022&amp;rdquo;&lt;/a&gt;
, OpenJFX is now considered a software development topic for the Innovators! So a call-out to all innovative people reading this&amp;hellip; JavaFX is the way to go! 🙂&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MichaelPaus" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;MichaelPaus&lt;/strong&gt;&lt;/a&gt;
 shared this valuable link: &amp;ldquo;A very informative, but little known, source of information is the JavaFX tag info on stackoverflow: &lt;a href="https://stackoverflow.com/tags/javafx/info" target="_blank" rel="noopener noreferrer"&gt;stackoverflow.com/tags/javafx/info&lt;/a&gt;
. The FAQs cover all the things that are frequently asked on SO and actually should be consulted first before posting a question.&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MichaelPaus/status/1612385027760734208" target="_blank" rel="noopener noreferrer"&gt;He also shared that he crossed the 10K reputation limit on Stackoverflow&lt;/a&gt;
 (which gives you access to the moderator tools), by answering mostly JavaFX related questions!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=2Mjzw_fKqbM" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Matthew Wheeler&lt;/strong&gt; (via YouTube) uses JavaFX 3D&lt;/a&gt;
 to randomly generate galaxies.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1612469114127147010" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; shared a teaser&lt;/a&gt;
 of the new layout for jfx-central.com.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/JavaFX3D/status/1615214627868246016" target="_blank" rel="noopener noreferrer"&gt;Shared by &lt;strong&gt;JavaFX3D&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Go from Figma to a fully Responsive JavaFX Application with support for navigation, responsive sizes, images and more.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WhiteWoodCity/status/1615311572397883395" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WhiteWoodCity&lt;/strong&gt; shared a video&lt;/a&gt;
 of a self-made TableView.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1615385837432184832" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; replied this is actually an important tweet&lt;/a&gt;
. as many JavaFX developers think they &amp;ldquo;have to&amp;rdquo; use the TableView, and then complain about its limitations. Using GridPane you can create your own custom table view, as most HTML devs do for tables.&lt;/li&gt;
&lt;li&gt;And &lt;a href="https://twitter.com/WhiteWoodCity/status/1614644198187347970" target="_blank" rel="noopener noreferrer"&gt;another video showing a HDFS management system created with JavaFX&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MattColey6/status/1614826723127836672" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Matt Coley&lt;/strong&gt; discovered that JavaFX CSS allows you to effectively create borders&lt;/a&gt;
 just with the background color/insets property. This fixes the effect of changes in the component when you add a border, and padding changes are needed.
&lt;ul&gt;
&lt;li&gt;And he shared a &lt;a href="https://twitter.com/MattColey6/status/1616044636199440384" target="_blank" rel="noopener noreferrer"&gt;preview of the new attach window in Recaf (Java bytecode editor)&lt;/a&gt;
, that shows remote process properties and JMX beans, and indicates which JVM you&amp;rsquo;re attached to with highlighted components.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1614054671684886528" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt; announced that the master branch of FXyz3D&lt;/a&gt;
 has been updated to build with Gradle 7.6 and JDK 17 thanks to &lt;a href="https://twitter.com/JPeredaDnr" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;José Pereda&lt;/strong&gt;&lt;/a&gt;
, and is working on several fixes and updates coming soon for the release of version 5.5.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1618021863481040897" target="_blank" rel="noopener noreferrer"&gt;He will provide a Keynote presentation at Devnexus 2023&lt;/a&gt;
, the largest Java conference in the USA: &amp;ldquo;Harnessing the Hyper-dimensional Mind: Visualizing Brain Computer Interfaces.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango/status/1616139988952825857" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt; shared a video of a rendering of an .obj file&lt;/a&gt;
 with only the use of the JavaFX canvas, including camera movement and rotation.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@frankdelporte/109745863000952226" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt; announced he started working on a new Java library to load and save #LottieFiles and #dotLottie, plus a #JavaFX player&lt;/a&gt;
. The very early steps are taken with a website, Mastodon account, different Lottie JSON files can already be loaded and saved back to the same JSON, and a very first visual output shows there is some valid data being handled. Maybe you have ideas how to move on with visualizing and animating in JavaFX and want to contribute?
&lt;ul&gt;
&lt;li&gt;He also made his Udemy course &lt;a href="https://twitter.com/FrankDelporte/status/1616445015269556227" target="_blank" rel="noopener noreferrer"&gt;to learn how to use JavaFX on the Raspberry Pi available for FREE&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;During the JChampions Conference, &lt;a href="https://twitter.com/gail_asgteach" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gail Anderson&lt;/strong&gt;&lt;/a&gt;
 and &lt;a href="https://twitter.com/Paul_ASGTeach" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Paul Anderson&lt;/strong&gt;&lt;/a&gt;
 presented &lt;a href="https://www.youtube.com/watch?v=I2p4ojzV5TE" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Say the Words: Modern Java with JavaFX for Rich Client UIs&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MattColey6/status/1618550397198827520" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Matt Coley&lt;/strong&gt; shared his wish-list to extend RichText&lt;/a&gt;
. You want to join the discussion?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-7-new-releases"&gt;New releases&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@hansolo_@mastodon.social/109743119204551594" target="_blank" rel="noopener noreferrer"&gt;17.0.45 of JDKMon by &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
: minor bugfix.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SerendigityInfo/status/1616487713074446355" target="_blank" rel="noopener noreferrer"&gt;1.6.4 of SmartFinder by &lt;strong&gt;Serendipity&lt;/strong&gt;&lt;/a&gt;
 with a new quick search view: filter the search results by categories (Documents, Ebooks, Images,&amp;hellip;).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/rladstaetter/status/1615025146015645708" target="_blank" rel="noopener noreferrer"&gt;23.1.0 of LogoRRR by &lt;strong&gt;Robert Ladstätter&lt;/strong&gt;&lt;/a&gt;
: builds for Linux, visual improvements, autoscroll support,&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1614939333244452866" target="_blank" rel="noopener noreferrer"&gt;11.12.4 of CalendarFX by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
: very important fixes related to memory leaks that can happen when constantly recreating calendar views.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/david_m_gilbert/status/1612140104734089219?t=_DrlFGujAC-b0GMEYa8lmQ&amp;amp;s=09" target="_blank" rel="noopener noreferrer"&gt;1.5.4 of JFreeChart by &lt;strong&gt;David Gilbert&lt;/strong&gt;&lt;/a&gt;
, a project he started in 1999 and although he doesn&amp;rsquo;t spend much time on it these days, he made a new release. And got very nice feedback on this message!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1613501135247101955" target="_blank" rel="noopener noreferrer"&gt;11.0.7 of GMapsFX by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
 is on Maven Central. No new features or bug fixes, simply updated jaxb version from 2 to 4.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1613565091110158337" target="_blank" rel="noopener noreferrer"&gt;11.55.0 of GemsFX by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@hansolo_/109675689095015969" target="_blank" rel="noopener noreferrer"&gt;GlucoStatusFX by &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
 with a minor bugfix.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Quest for REST</title><link>https://foojayio.github.io/website/today/quest-for-rest/</link><pubDate>Fri, 27 Jan 2023 14:48:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/quest-for-rest/</guid><description>&lt;p&gt;Since I started working for &lt;a href="https://apisix.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache APISIX&lt;/a&gt;
, I have tried to deepen my understanding of REST via various means. Did you read my review of &lt;a href="https://blog.frankel.ch/api-design-patterns" target="_blank" rel="noopener noreferrer"&gt;API Design Patterns book&lt;/a&gt;
?&lt;/p&gt;
&lt;p&gt;In the current literature, REST is generally promoted as the best thing since sliced bread. Yet, it comes with lots of challenges. In 2010(!), Martin Fowler wrote a post on the &lt;a href="https://martinfowler.com/articles/richardsonMaturityModel.html" target="_blank" rel="noopener noreferrer"&gt;glory of REST&lt;/a&gt;
. He lists three steps for an API to become &lt;em&gt;truly&lt;/em&gt; REST:&lt;/p&gt;</description></item><item><title>How Java Litters Beyond the Heap: Solid-State Drives</title><link>https://foojayio.github.io/website/today/how-java-litters-beyond-the-heap-part-3-solid-state-drives/</link><pubDate>Fri, 27 Jan 2023 10:54:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-java-litters-beyond-the-heap-part-3-solid-state-drives/</guid><description>&lt;p&gt;A Java application dutifully executes your logic, leaving behind footprints in the Java heap in the form of dead objects.&lt;/p&gt;
&lt;p&gt;A garbage collector will then step in and clean out the memory for the new data. This cycle repeats until the app is stopped. This is well known.&lt;/p&gt;
&lt;p&gt;But, the Java heap is one of many places where your app can generate garbage.&lt;/p&gt;
&lt;p&gt;The application can also litter other parts of the software stack. It&amp;rsquo;s not done deliberately, but because some stack components also take advantage of garbage collection.&lt;/p&gt;</description></item><item><title>AsyncGetStackTrace: A better Stack Trace API for the JVM</title><link>https://foojayio.github.io/website/today/asyncgetstacktrace-a-better-stack-trace-api-for-the-jvm/</link><pubDate>Thu, 26 Jan 2023 09:16:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/asyncgetstacktrace-a-better-stack-trace-api-for-the-jvm/</guid><description>&lt;p&gt;&lt;em&gt;This article is the basis for my upcoming talk at&lt;/em&gt; &lt;a href="https://fosdem.org/2023/schedule/event/asyncgetstacktrace_the_improved_version_of_asyncgetcalltrace_jep_435/" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;FOSDEM 2023,&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;&amp;ldquo;AsyncGetStackTrace: The Improved Version Of AsyncGetCallTrace (JEP 435),&lt;a href="https://fosdem.org/2023/schedule/event/asyncgetstacktrace_the_improved_version_of_asyncgetcalltrace_jep_435/" target="_blank" rel="noopener noreferrer"&gt;&amp;rdquo;&lt;/a&gt;
 and is based on JEP Candidate 435.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Consider you want to write a profiler to profile Java applications. Why? Because you think that the existing ones &lt;a href="http://psy-lob-saw.blogspot.com/2016/02/why-most-sampling-java-profilers-are.html" target="_blank" rel="noopener noreferrer"&gt;&amp;quot;[&amp;hellip;] Are Fucking Terrible&amp;quot;&lt;/a&gt;
 or &lt;a href="https://youtu.be/7IkHIqPeFjY?list=PLLLT4NxU7U1QYiqanOw48h0VUjlUvqCCv&amp;amp;t=919" target="_blank" rel="noopener noreferrer"&gt;&amp;quot;[&amp;hellip;] Broken&amp;quot;&lt;/a&gt;
. &lt;em&gt;Or you want to start a &lt;a href="https://mostlynerdless.de/blog/tag/writing-a-profiler-from-scratch/" target="_blank" rel="noopener noreferrer"&gt;blog series&lt;/a&gt;
&lt;/em&gt; on writing a profiler from scratch to learn their inner workings (hi there,**regular readers)&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Modular Monolithic in Practice</title><link>https://foojayio.github.io/website/today/modular-monolithic-in-practice/</link><pubDate>Wed, 25 Jan 2023 08:01:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/modular-monolithic-in-practice/</guid><description>&lt;p&gt;With the usage of microservices in application modernization, we have seen both the advantages and disadvantages of maintaining such software development styles.&lt;/p&gt;
&lt;p&gt;When we create applications mostly in enterprise organizations, the first thing that comes to our mind now is how to decouple our applications.&lt;/p&gt;
&lt;p&gt;But there will be times when creating too many microservices is not the best way and may cost you time and money.&lt;/p&gt;
&lt;p&gt;Because of that, one alternative is to leverage the use of modules.&lt;/p&gt;</description></item><item><title>"The More You Say, the Less People Remember...</title><link>https://foojayio.github.io/website/today/the-more-you-say-the-less-people-remember/</link><pubDate>Wed, 25 Jan 2023 07:56:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-more-you-say-the-less-people-remember/</guid><description>&lt;h2 id="h2-0-the-fewer-the-words-the-greater-the-profit"&gt;&amp;hellip;The Fewer the Words, the Greater the Profit.&amp;quot;&lt;/h2&gt;
&lt;p&gt;These wise words were written by François Fénelon, a writer and theologian living during the 17th century.&lt;/p&gt;
&lt;p&gt;This is an article summarising different approaches to the development of IT solutions. Learn why the above quote is very relevant for developers in the 21st century.&lt;/p&gt;
&lt;h3 id="h3-1-business-driven-development"&gt;Business Driven Development&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Business-driven_development" title="Business-driven development " target="_blank" rel="noopener noreferrer"&gt;Business-driven development&lt;/a&gt;
is a meta-methodology for developing IT solutions that directly satisfy &lt;a href="https://en.wikipedia.org/wiki/Requirement" title="business requirements" target="_blank" rel="noopener noreferrer"&gt;business requirements&lt;/a&gt;
. This leads to increased flexibility and shorter turnaround times when changing the business and adapting the IT systems.&lt;/p&gt;</description></item><item><title>Java Bytecode: Journey to the Wonderland (Part 3)</title><link>https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-3/</link><pubDate>Tue, 24 Jan 2023 15:27:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-3/</guid><description>&lt;p&gt;Our &lt;a href="https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-2/" title="previous article"&gt;previous article&lt;/a&gt;
 unpacked Bytecode further and discussed ConstantPool, today I&amp;rsquo;ll go through several resources for working with it now.&lt;/p&gt;
&lt;p&gt;Java bytecode is the Java Virtual Machine&amp;rsquo;s (JVM) intermediate representation of Java code. While Java bytecode is not meant to be human-readable, it may be edited and manipulated for several reasons. This article examines the tools and methods used to change and work with Java bytecode.&lt;/p&gt;
&lt;p&gt;Changing Java bytecode is often done to add new features to a Java program that already exists. This can be done with a bytecode injector, a tool that lets you add bytecode to a Java class file that has already been compiled. Bytecode injectors are often used for logging or debugging information and for allowing runtime updates like A/B testing or feature flags.&lt;/p&gt;</description></item><item><title>Vaadin, OAuth2, and Keycloak</title><link>https://foojayio.github.io/website/today/vaadin-oauth2-and-keycloak/</link><pubDate>Tue, 24 Jan 2023 09:34:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/vaadin-oauth2-and-keycloak/</guid><description>&lt;p&gt;This article shows how to configure Vaadin and Spring Security to use OAuth2 with Keycloak.&lt;/p&gt;
&lt;h2 id="h2-0-keycloak"&gt;Keycloak&lt;/h2&gt;
&lt;p&gt;First, we must start Keycloak and configure a realm. The easiest way is to start Keycloak with Docker.&lt;br&gt;
&lt;em&gt;Caution: This is just for development purposes. Don&amp;rsquo;t use the setup in production.&lt;/em&gt;&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;docker run -d -p 8180:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin \ 
 quay.io/keycloak/keycloak:20.0.1 start-dev&lt;/pre&gt;
&lt;p&gt;Now you can log in to the admin console: &lt;a href="http://localhost:8180/admin" target="_blank" rel="noopener noreferrer"&gt;http://localhost:8180/admin&lt;/a&gt;
 (user: admin, password: admin)&lt;/p&gt;</description></item><item><title>Foojay Podcast #12: State and Future of the IDEs</title><link>https://foojayio.github.io/website/today/foojay-podcast-12/</link><pubDate>Mon, 23 Jan 2023 10:14:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-12/</guid><description>&lt;p&gt;In this podcast, we are talking to some of the key people working on different IDEs, Integrated Development Environments.&lt;/p&gt;
&lt;p&gt;Those are applications that provide tools to computer programmers for software development.&lt;/p&gt;
&lt;p&gt;An IDE typically consists of at least a source code editor, build automation tools, and a debugger.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s learn how these tools evolved, and the challenges they face to stay up-to-date with the many evolutions in Java and all other programming languages.&lt;/p&gt;</description></item><item><title>Foojay.io FOSDEM Speaker Predictions for 2023</title><link>https://foojayio.github.io/website/today/foojay-io-fosdem-speaker-predictions-for-2023/</link><pubDate>Fri, 20 Jan 2023 13:40:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-io-fosdem-speaker-predictions-for-2023/</guid><description>&lt;p&gt;&lt;a href="https://fosdem.org/" target="_blank" rel="noopener noreferrer"&gt;FOSDEM&lt;/a&gt;
 is around the corner and &lt;a href="https://fosdem.org/2023/schedule/track/friends_of_openjdk/" target="_blank" rel="noopener noreferrer"&gt;a group of great speakers is lined up to talk about the OpenJDK&lt;/a&gt;
 and the many different ways in which to make use of it.&lt;/p&gt;
&lt;p&gt;Each comes from a different part of the OpenJDK ecosystem, with different perspectives, and therefore unique insights into what to expect for this year.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;&amp;mdash;in each expectation/prediction for 2023 below, click the author&amp;rsquo;s name and you&amp;rsquo;ll be brought to information about their session that you can attend, all for free, at FOSDEM on Sunday, 5 February, in the Foojay.io room.&lt;/p&gt;</description></item><item><title>Friends of OpenJDK Schedule at FOSDEM 2023</title><link>https://foojayio.github.io/website/today/friends-of-openjdk-schedule-at-fosdem-2023/</link><pubDate>Thu, 19 Jan 2023 14:42:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/friends-of-openjdk-schedule-at-fosdem-2023/</guid><description>&lt;p&gt;Again, i.e., following on from good times in &lt;a href="https://foojayio.github.io/website/today/friends-of-openjdk-schedule-at-fosdem-2022/"&gt;2022&lt;/a&gt;
 and &lt;a href="https://foojayio.github.io/website/today/friends-of-openjdk-schedule-at-fosdem-2021/"&gt;2021&lt;/a&gt;
, we have a really great schedule with inspiring speakers for FOSDEM in Brussels, on Sunday, February 5, providing a place for friends of OpenJDK in the Foojay.io Developer Room.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s all free and fun and we&amp;rsquo;re also organizing a get together with drinks and food the evening before, on Saturday, February 4.
&lt;a href="https://fosdem.org/2023/schedule/track/friends_of_openjdk/" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/friends-of-openjdk-schedule-at-fosdem-2023/image-1024x621.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Click the pic above or here to get to the place on the FOSDEM site, check out the sessions, speakers, and be there, it will be educational and fun, as always. 🙂&lt;/p&gt;</description></item><item><title>How Does Kafka Perform When You Need Low Latency?</title><link>https://foojayio.github.io/website/today/how-does-kafka-perform-when-you-need-low-latency/</link><pubDate>Wed, 18 Jan 2023 10:12:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-does-kafka-perform-when-you-need-low-latency/</guid><description>&lt;p&gt;Most Apache Kafka benchmarks appear to test high throughput but not low latency.&lt;/p&gt;
&lt;p&gt;Kafka was traditionally used for high throughput rather than latency-sensitive messaging, but it does have a low-latency configuration. (Mostly setting linger.ms=0 and reducing buffer sizes).&lt;/p&gt;
&lt;p&gt;In this configuration, you can get below 1-millisecond latency a good percentage of the time for modest throughputs.&lt;/p&gt;
&lt;p&gt;Benchmarks tend to focus on clustering Kafka, in a high-throughput configuration.&lt;/p&gt;
&lt;p&gt;While this is perhaps the most common use case, how does it perform if you need lower latencies?&lt;/p&gt;</description></item><item><title>Release with JReleaser to Maven Central with GitHub Actions</title><link>https://foojayio.github.io/website/today/how-to-release-a-java-module-with-jreleaser-to-maven-central-with-github-actions/</link><pubDate>Wed, 18 Jan 2023 08:55:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-release-a-java-module-with-jreleaser-to-maven-central-with-github-actions/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This guide is outdated since 2024. There is a new version here: &lt;a href="https://foojayio.github.io/website/_wp_link_placeholder"&gt;https://foojay.io/today/how-to-publish-a-java-maven-project-to-maven-central-using-jreleaser-and-github-actions-2025-guide/&lt;/a&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;{#more-61688}&lt;/p&gt;
&lt;p&gt;This article is a tutorial that guides you through the process of releasing a Java module with &lt;a href="https://jreleaser.org/" target="_blank" rel="noopener noreferrer"&gt;JReleaser&lt;/a&gt;
 to Maven Central with Github Actions.&lt;/p&gt;
&lt;p&gt;JReleaser is a tool that streamlines the release process for Java projects, allowing developers to quickly and efficiently publish their modules to Maven Central.&lt;/p&gt;
&lt;p&gt;If you just want to publish your Maven project by hand, then you can follow &lt;a href="https://foojayio.github.io/website/today/how-to-publish-a-java-maven-project-to-the-maven-central-repository/" title="How to Publish a Java Maven Project to the Maven Central Repository"&gt;How to Publish a Java Maven Project to the Maven Central Repository&lt;/a&gt;
 by @&lt;a href="https://foojayio.github.io/website/today/author/tobias-briones/" title="Tobias Briones"&gt;Tobias Briones&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>JTest: Roll Out Your Own JUnit-Like Testing Framework</title><link>https://foojayio.github.io/website/today/jtest-roll-your-own-junit-like-testing-framework/</link><pubDate>Tue, 17 Jan 2023 16:11:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/jtest-roll-your-own-junit-like-testing-framework/</guid><description>&lt;p&gt;In this interactive tutorial and educational project, you&amp;rsquo;ll be helped in your understanding of the following.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A basic insight into &lt;a href="https://github.com/junit-team/junit4" target="_blank" rel="noopener noreferrer"&gt;JUnit&lt;/a&gt;
 internals.&lt;/li&gt;
&lt;li&gt;The usage of Java annotations and reflection.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You are given minimum &lt;a href="https://github.com/wlnirvana/jtest" target="_blank" rel="noopener noreferrer"&gt;starter code&lt;/a&gt;
 (~20 loc), and will have to develop a simple yet self-contained framework that can be used to write real-world unit tests.&lt;/p&gt;
&lt;p&gt;Are you ready? Let&amp;rsquo;s go! 🚀&lt;/p&gt;
&lt;h2 id="h2-0-task-0-the-big-picture"&gt;Task 0: The Big Picture&lt;/h2&gt;
&lt;p&gt;Before getting your hands dirty, it is a good idea to get a big picture of what you will code up.&lt;/p&gt;</description></item><item><title>Foojay Podcast #11: Looking Back to 2022</title><link>https://foojayio.github.io/website/today/foojay-podcast-11/</link><pubDate>Mon, 16 Jan 2023 09:31:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-11/</guid><description>&lt;p&gt;A few weeks ago, Ted Neward &lt;a href="http://blogs.newardassociates.com/blog/2023/2023-tech-predictions.html" target="_blank" rel="noopener noreferrer"&gt;published a post&lt;/a&gt;
 in which he reviewed the predictions he made one year ago and added a long list of predictions for 2023.&lt;/p&gt;
&lt;p&gt;In this Foojay Podcast episode, we talk about these predictions, and we even found an analogy between what has happened at Twitter in the last months and the history of Java!&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/xP4By-Nsdh0?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Debugging Streams and Collections</title><link>https://foojayio.github.io/website/today/debugging-streams-and-collections/</link><pubDate>Fri, 13 Jan 2023 14:59:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-streams-and-collections/</guid><description>&lt;p&gt;I will run a book giveaway promotion on the &lt;a href="https://coderanch.com/wiki/660305/Book-Promotions-Schedule" target="_blank" rel="noopener noreferrer"&gt;Code Ranch on January 17th&lt;/a&gt;
. Be sure to be there and let your friends know. It would be great to answer your questions about debugging. I&amp;rsquo;m very excited by this and by the feedback I&amp;rsquo;m getting for &lt;a href="https://course.debugagent.com/" target="_blank" rel="noopener noreferrer"&gt;the course&lt;/a&gt;
 and new videos.&lt;/p&gt;
&lt;p&gt;I also launched a &lt;a href="https://www.youtube.com/playlist?list=PL8GhfcywW9YMucwRw2IbpeCp1FBMEgsmk" target="_blank" rel="noopener noreferrer"&gt;free new Java course for complete beginners&lt;/a&gt;
. No prior knowledge needed. This is probably not the audience for this course. But if you know someone that might be interested I&amp;rsquo;ll appreciate a share. I hope people find it useful and learn a bit about Java. I&amp;rsquo;m working on a cadence of one video per week in this beginner course.&lt;/p&gt;</description></item><item><title>The Massive Hidden Power of Breakpoints</title><link>https://foojayio.github.io/website/today/the-massive-hidden-power-of-breakpoints/</link><pubDate>Fri, 13 Jan 2023 14:58:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-massive-hidden-power-of-breakpoints/</guid><description>&lt;p&gt;It&amp;rsquo;s been a big week. I&amp;rsquo;m currently reviewing the final draft of &lt;a href="https://www.amazon.com/dp/1484290410/" target="_blank" rel="noopener noreferrer"&gt;my upcoming debugging book&lt;/a&gt;
. This is always a sobering, and exciting moment. A moment in which all of a sudden all the months of work become &amp;ldquo;real&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I also recorded 9 videos for youtube bringing up the total videos in the course to 29 (with many more on the way). I&amp;rsquo;m starting two additional free courses &lt;a href="https://www.youtube.com/playlist?list=PL8GhfcywW9YMucwRw2IbpeCp1FBMEgsmk" target="_blank" rel="noopener noreferrer"&gt;one targeted at absolute beginners&lt;/a&gt;
. Another one about modern Java programming which I&amp;rsquo;ll launch really soon. Both will be free on &lt;a href="https://youtube.com/@debugagent" target="_blank" rel="noopener noreferrer"&gt;my youtube channel&lt;/a&gt;
 (obligatory &amp;ldquo;like, subscribe and share&amp;rdquo;).&lt;/p&gt;</description></item><item><title>Writing a Profiler from Scratch: The Profiling Loop</title><link>https://foojayio.github.io/website/today/writing-a-profiler-from-scratch-the-profiling-loop/</link><pubDate>Thu, 12 Jan 2023 15:26:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/writing-a-profiler-from-scratch-the-profiling-loop/</guid><description>&lt;br /&gt;
&lt;blockquote&gt;
&lt;p&gt;This is the second post in the series, building a profiler from scratch using AsyncGetCallTrace. Today, we&amp;rsquo;re covering wall-clock profiling and how to collect the obtain stack traces. If you&amp;rsquo;re unfamiliar with AsyncGetCallTrace, please check out my previous article in the series &lt;a href="https://foojayio.github.io/website/today/writing-a-profiler-from-scratch-introduction/"&gt;here&lt;/a&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Our goal today is to essentially write the primary loop of a profiler and do the following every n milliseconds (where n is our chosen profiling interval):
&lt;img src="https://foojayio.github.io/website/today/writing-a-profiler-from-scratch-the-profiling-loop/diagrams3-2048x1029-1-1024x515.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Unsafe Deserialization Vulnerability in SnakeYaml</title><link>https://foojayio.github.io/website/today/unsafe-deserialization-vulnerability-in-snakeyaml-cve-2022-1471/</link><pubDate>Thu, 12 Jan 2023 13:19:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/unsafe-deserialization-vulnerability-in-snakeyaml-cve-2022-1471/</guid><description>&lt;p&gt;SnakeYaml is a well-known YAML 1.1 parser and emitter for Java.&lt;/p&gt;
&lt;p&gt;Recently, a vulnerability &amp;mdash; &lt;a href="https://www.cve.org/CVERecord?id=CVE-2022-1471" target="_blank" rel="noopener noreferrer"&gt;CVE-2022-1471&lt;/a&gt;
 &amp;mdash; was reported for this package. This vulnerability can lead to arbitrary code execution.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;org.yaml:snakeyaml&lt;/code&gt; package is widely used in the Java ecosystem, in part because it is packaged by default with Spring Boot in the &lt;code&gt;spring-boot-starter&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In this article, we look into the security vulnerability affecting this Java library, discuss the potential hazardous impact it may have on your applications, and weigh the actual risks.&lt;/p&gt;</description></item><item><title>Why Your Choice of JVM Matters More Than Ever</title><link>https://foojayio.github.io/website/today/why-your-choice-of-java-virtual-machine-jvm-matters-more-than-ever/</link><pubDate>Wed, 11 Jan 2023 17:36:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-your-choice-of-java-virtual-machine-jvm-matters-more-than-ever/</guid><description>&lt;p&gt;In &lt;a href="https://softwareengineeringdaily.com/2022/10/14/azul-with-john-ceccarelli/" target="_blank" rel="noopener noreferrer"&gt;my recent interview with Software Daily&lt;/a&gt;
, I discussed that there are many companies looking for better customer experience, faster execution, and lower infrastructure costs&amp;hellip; and that they have discovered a better use of Java to help them with just that.&lt;/p&gt;
&lt;p&gt;The interview describes that &lt;strong&gt;when you use hyper-optimized Java runtimes instead of vanilla OpenJDK&lt;/strong&gt; &amp;ndash; you do less tuning and debugging. This means you can build applications, data architectures or anything that needs better performance using an optimized JVM &amp;ndash; with little or no code changes.&lt;/p&gt;</description></item><item><title>How to Reduce Cloud Cost by 99% for EDA Kafka Applications</title><link>https://foojayio.github.io/website/today/how-to-reduce-cloud-cost-by-99-for-eda-kafka-applications/</link><pubDate>Wed, 11 Jan 2023 13:35:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-reduce-cloud-cost-by-99-for-eda-kafka-applications/</guid><description>&lt;p&gt;While the Cloud offers great convenience and flexibility, the operational cost for applications deployed in it can sometimes be significant.&lt;/p&gt;
&lt;p&gt;In this article, we show a way to substantially reduce operating costs in latency-sensitive Event-Driven Architecture (EDA) Java applications by migrating from Kafka to Chronicle Queue open-source, which is a more resource-efficient and&lt;a href="https://dzone.com/articles/kafka-vs-chronicle-for-microservices" title=" lower-latency" target="_blank" rel="noopener noreferrer"&gt;lower-latency&lt;/a&gt;
 queue implementation.&lt;/p&gt;
&lt;h3 id="h3-0-what-is-eda"&gt;What is EDA?&lt;/h3&gt;
&lt;p&gt;An EDA (Event-Driven Architecture) application is a distributed application where events (in the form of messages or DTOs) are produced, detected, consumed, and reacted to.&lt;/p&gt;</description></item><item><title>Why Many Developers Don't Write or Give Talks</title><link>https://foojayio.github.io/website/today/why-many-developers-dont-write-or-give-talks-and-how-to-overcome-challenges/</link><pubDate>Wed, 11 Jan 2023 09:53:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-many-developers-dont-write-or-give-talks-and-how-to-overcome-challenges/</guid><description>&lt;p&gt;I asked on &lt;a href="https://twitter.com/bazlur_rahman/status/1610800339405389826" title="Twitter" target="_blank" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;
 and &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7016566492548775936/" title="LinkedIn" target="_blank" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
 why many developers don&amp;rsquo;t write or give talks, and I was amused by the response I received. This article is about that.&lt;/p&gt;
&lt;h2 id="h2-0-the-problems"&gt;The problems:&lt;/h2&gt;
&lt;p&gt;It turns out, developers do not write blogs or give presentations for a variety of reasons. Some developers may believe they lack interesting experiences or information to share or that they are not experts in their profession. Others may be shy or fearful of public speaking. Due to their hectic schedules, individuals may not have time to write about or discuss their jobs, which is another reason.&lt;/p&gt;</description></item><item><title>Managing Dependencies in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/managing-dependencies-in-intellij-idea/</link><pubDate>Tue, 10 Jan 2023 15:13:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/managing-dependencies-in-intellij-idea/</guid><description>&lt;p&gt;In this tutorial, following on from &lt;a href="https://foojayio.github.io/website/today/viewing-dependencies-in-intellij-idea/"&gt;viewing dependencies&lt;/a&gt;
, we&amp;rsquo;re going to take a look at managing dependencies in IntelliJ IDEA.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll look at different ways to add dependencies to your project, and how to add, upgrade and remove dependencies using Package Search.&lt;/p&gt;
&lt;p&gt;There are several ways to add new dependencies to your project.&lt;/p&gt;
&lt;h2 id="h2-0-from-the-build-file-using-copy-paste"&gt;From the build file using copy-paste&lt;/h2&gt;
&lt;p&gt;You have probably copied a dependency from &lt;a href="https://mvnrepository.com/" target="_blank" rel="noopener noreferrer"&gt;Maven Repository&lt;/a&gt;
 (or another website) and pasted into your build file.&lt;/p&gt;</description></item><item><title>2022 in Retrospective</title><link>https://foojayio.github.io/website/today/2022-in-retrospective/</link><pubDate>Tue, 10 Jan 2023 08:19:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/2022-in-retrospective/</guid><description>&lt;p&gt;2022 is over, and not a moment too soon. I&amp;rsquo;ll never forget it: some of my friends had to flee their own country; others are fighting for their freedom as I write this post. I hope they will be safe and that their wishes will come true in 2023.&lt;/p&gt;
&lt;p&gt;On the personal and technical side, here&amp;rsquo;s a summary of the past year from my perspective.&lt;/p&gt;
&lt;h2 id="h2-0-job-change"&gt;Job change&lt;/h2&gt;
&lt;img fetchpriority="high" decoding="async" class="alignright size-full wp-image-61589" src="apache-apisix.jpeg" alt="" width="300" height="300"&gt;
&lt;br /&gt;
&lt;p&gt;First and foremost, I changed jobs. I worked for &lt;a href="https://hazelcast.com/" target="_blank" rel="noopener noreferrer"&gt;Hazelcast&lt;/a&gt;
 for 3½ years.&lt;/p&gt;</description></item><item><title>New Section Added to Foojay.io: Java Quick Start</title><link>https://foojayio.github.io/website/today/new-section-added-to-foojay-io-java-quick-start/</link><pubDate>Mon, 09 Jan 2023 09:31:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-section-added-to-foojay-io-java-quick-start/</guid><description>&lt;p&gt;Foojay.io aims to be the starting point for &amp;ldquo;all-things OpenJDK,&amp;rdquo; but during one of my morning walks the idea struck me that this site really needs complete beginner materials, too.&lt;/p&gt;
&lt;p&gt;As we want to spread the love for OpenJDK, i.e., Java, Kotlin, and other OpenJDK languages, the JVM, and all related technologies, we were missing an important audience: someone who is interested in an OpenJDK language, such as Java, but has no experience with it yet, and ends up on Foojay.io.&lt;/p&gt;</description></item><item><title>Spring Boot Annotation Reference-01/b</title><link>https://foojayio.github.io/website/today/spring-boot-annotation-reference-01-b/</link><pubDate>Fri, 06 Jan 2023 09:54:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-annotation-reference-01-b/</guid><description>&lt;p&gt;&lt;strong&gt;In the second part of my article series on Spring Boot Annotations, we focus on REST and Spring Stereotype Annotations.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In continuation of &lt;a href="https://foojayio.github.io/website/today/spring-boot-annotation-reference-01-a/"&gt;part 01/a of this article&lt;/a&gt;
, let&amp;rsquo;s continue our Spring Boot Annotations journey.&lt;/p&gt;
&lt;p&gt;What percentage (depth and extent) of Spring Boot Annotations do you think you really know? This includes annotations in all their glory and the power that they bring via all of their options. I am sure whatever your answer may be, you will appreciate this quote from Albert Einstein: &amp;ldquo;The more I learn, the more I realize how much I don&amp;rsquo;t know.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Building JavaFX with Gradle</title><link>https://foojayio.github.io/website/today/building-javafx-with-gradle/</link><pubDate>Thu, 05 Jan 2023 11:32:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-javafx-with-gradle/</guid><description>&lt;p&gt;Usually Maven is my build tool of choice and for Java front-ends I sometimes still build a front-end application using ANT, Swing with Oracle&amp;rsquo;s JDK 8u202 and JDK 8&amp;rsquo;s Java Packager, but don&amp;rsquo;t tell anyone&amp;hellip;.&lt;/p&gt;
&lt;p&gt;Over time, as I wanted to move forward with some more lightweight front-ends, I started building JavaFX applications.&lt;/p&gt;
&lt;p&gt;Of course, I don&amp;rsquo;t want to lock customers into JDK maintenance contracts; for backend software and servers, where the customer usually has their own runtime architecture, that&amp;rsquo;s easy, but for GUIs, I generally don&amp;rsquo;t want to ship a full JDK anymore, I want to use modular Java, ship a JDK of my choice, and provide a proper build system for it all. So that&amp;rsquo;s it, I use the following components and software:&lt;/p&gt;</description></item><item><title>What’s New in Jakarta REST 3.1 in Jakarta EE 10?</title><link>https://foojayio.github.io/website/today/whats-new-in-jakarta-rest-3-1-in-jakarta-ee-10/</link><pubDate>Thu, 05 Jan 2023 11:30:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/whats-new-in-jakarta-rest-3-1-in-jakarta-ee-10/</guid><description>&lt;p&gt;The Representational State Transfer or RESTful architecture is a stateless, HTTP based communication standard for modern applications. It was originally proposed by Dr. Roy Fielding in his PhD thesis.&lt;/p&gt;
&lt;p&gt;It has, over the years, become the default programming language-agnostic means of enabling machine-to-machine communication.&lt;/p&gt;
&lt;p&gt;An application written in the Django framework in Python can have REST resources that are consumed by another application written in Java with Jakarta EE. Similarly, a Jakarta EE application can create resources that can be consumed by a C# application.&lt;/p&gt;</description></item><item><title>How to Leverage Method Chaining to Add Smart Message Routing</title><link>https://foojayio.github.io/website/today/how-to-leverage-method-chaining-to-add-smart-message-routing/</link><pubDate>Wed, 04 Jan 2023 08:33:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-leverage-method-chaining-to-add-smart-message-routing/</guid><description>&lt;p&gt;This article explores how to use method chaining to add routing information to serialised data structures in a lightweight fashion, where the routing information can be read separately by an intelligent message router.&lt;/p&gt;
&lt;p&gt;We are going to use the open-source serialisation library &lt;a href="https://chronicle.software/wire/" title="Chronicle Wire" target="_blank" rel="noopener noreferrer"&gt;Chronicle Wire&lt;/a&gt;
. Let&amp;rsquo;s assume we have some data that we want to send to a particular destination; we don&amp;rsquo;t want to pollute our business data structures with the routing information. In the future, the routing information could be removed or changed based on external factors such as system failover or horizontal scaling.&lt;/p&gt;</description></item><item><title>Foojay Podcast #10: JUG World Tour: Dubai JUG</title><link>https://foojayio.github.io/website/today/foojay-podcast-10/</link><pubDate>Tue, 03 Jan 2023 11:27:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-10/</guid><description>&lt;p&gt;Last month we introduced a new topic in this podcast when we &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-8/"&gt;visited the Manchester Java User group&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;That JUG has already existed for nearly 10 years, so they had a lot of history to share.&lt;/p&gt;
&lt;p&gt;However, in this episode, we talk to the organizers of the Dubai JUG that started in May of 2022.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s learn what the challenges are for a new JUG, how the culture of Dubai and Hawaii are alike, possible upcoming conferences, and much more&amp;hellip;&lt;/p&gt;</description></item><item><title>A Short Primer on Java Debugging Internals</title><link>https://foojayio.github.io/website/today/a-short-primer-on-java-debugging-internals/</link><pubDate>Mon, 02 Jan 2023 08:14:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-short-primer-on-java-debugging-internals/</guid><description>&lt;p&gt;I wanted to write about a small side project&amp;mdash;a few months back, I got carried away with understanding how Java debugging works.&lt;/p&gt;
&lt;p&gt;The following is an hors d&amp;rsquo;oeuvre, a small post in between my series on profiling, on the &lt;a href="https://docs.oracle.com/en/java/javase/17/docs/specs/jpda/jpda.html" target="_blank" rel="noopener noreferrer"&gt;Java Platform Debugging Architecture&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;All Java debuggers use the &lt;a href="https://docs.oracle.com/en/java/javase/17/docs/specs/jdwp/jdwp-spec.html" title="Java Debug Wire Protocol (JDWP)" target="_blank" rel="noopener noreferrer"&gt;Java Debug Wire Protocol (JDWP)&lt;/a&gt;
 to communicate with the JVM, usually using the Java Debug Interface (JDI) abstraction Layer. The protocol can be used to remote debug, but the JVM and the debugger are commonly on the same machine.&lt;/p&gt;</description></item><item><title>Why Picnic picked Java</title><link>https://foojayio.github.io/website/today/why-picnic-picked-java/</link><pubDate>Fri, 30 Dec 2022 08:22:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-picnic-picked-java/</guid><description>&lt;p&gt;&lt;strong&gt;Picking a tech stack for your startup isn&amp;rsquo;t something to do lightly. It&amp;rsquo;s a choice that will shape the future in many ways: how will the tech enable your emerging product and business, what talent can you attract, and how future-proof is the tech stack?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When &lt;a href="https://picnic.app/careers/blogs" target="_blank" rel="noopener noreferrer"&gt;Picnic&lt;/a&gt;
 launched as the first app-only supermarket back in 2015 in The Netherlands, the tech landscape looked markedly different from today.&lt;/p&gt;
&lt;p&gt;Java and .Net ruled the Dutch developer landscape for backend systems.&lt;/p&gt;</description></item><item><title>Spring Modulith: Have We Reached Modularity Maturity?</title><link>https://foojayio.github.io/website/today/spring-modulith-modularity-maturity/</link><pubDate>Thu, 29 Dec 2022 07:07:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-modulith-modularity-maturity/</guid><description>&lt;p&gt;One of the main reasons to design microservices is that they enforce &lt;a href="https://martinfowler.com/articles/microservice-trade-offs.html#boundaries" target="_blank" rel="noopener noreferrer"&gt;strong module boundaries&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;However, the cons of microservices are so huge that it&amp;rsquo;s like chopping off your right hand to learn to write with the left one; there are more manageable (and less painful!) ways to achieve the same result.&lt;/p&gt;
&lt;p&gt;Even since the microservices craze started, some cooler heads have prevailed.&lt;/p&gt;
&lt;p&gt;In particular, &lt;a href="https://twitter.com/odrotbohm" target="_blank" rel="noopener noreferrer"&gt;Oliver Drotbohm&lt;/a&gt;
, a developer on the Spring framework, has been a long-time proponent of the &lt;a href="https://github.com/moduliths/moduliths" target="_blank" rel="noopener noreferrer"&gt;moduliths&lt;/a&gt;
 alternative.&lt;/p&gt;</description></item><item><title>Java on Visual Studio Code Update – December 2022</title><link>https://foojayio.github.io/website/today/java-on-visual-studio-code-update-december-2022/</link><pubDate>Wed, 28 Dec 2022 08:11:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-visual-studio-code-update-december-2022/</guid><description>&lt;p&gt;Hi everyone, we are near the end of year. Looking back on 2022, there are a few highlights that we wanted to share with you all!&lt;/p&gt;
&lt;h3 id="h3-0-highlights-from-2022"&gt;Highlights from 2022&lt;/h3&gt;
&lt;h4 id="major-visualization-experience-upgrade-for-spring-boot-extensions"&gt;Major Visualization Experience Upgrade for Spring Boot Extensions&lt;/h4&gt;
&lt;p&gt;Starting earlier this year, we began to make a series of improvements on &lt;a href="https://marketplace.visualstudio.com/items?itemName=Pivotal.vscode-boot-dev-pack" target="_blank" rel="noopener noreferrer"&gt;Spring Boot dashboard&lt;/a&gt;
, aiming to increase Spring developer&amp;rsquo;s productivity on Visual Studio Code.&lt;/p&gt;
&lt;p&gt;This includes the beans and endpoints mapping view, more live information display for Spring applications and the brand new memory as a graph.&lt;/p&gt;</description></item><item><title>JavaFX Links of December</title><link>https://foojayio.github.io/website/today/javafx-links-of-december/</link><pubDate>Tue, 27 Dec 2022 07:55:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-december/</guid><description>&lt;p&gt;If anyone needs a reminder Java and JavaFX are &amp;ldquo;alive and kicking&amp;rdquo;, you can not only check out &lt;a href="https://https://www.jfx-central.com/home" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
, but also the list below.&lt;/p&gt;
&lt;p&gt;Although I&amp;rsquo;m trying to get of Twitter - for my own mental health 🙂 - I&amp;rsquo;m still being flooded with amazing content.&lt;/p&gt;
&lt;p&gt;Here is the result of the #LinksOfTheWeek that were published on jfx-central.com in December!&lt;/p&gt;
&lt;h2 id="h2-0-podcasts"&gt;Podcasts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;In the Bootiful Podcast &lt;a href="https://bootifulpodcast.fm/#/episodes/3259c661-0524-46dc-805d-2388011030b9" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Java Champion, legendary engineer, and author Trisha Gee&amp;rdquo;&lt;/a&gt;
, &lt;a href="https://twitter.com/starbuxman" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Josh Long&lt;/strong&gt;&lt;/a&gt;
 talks with &lt;a href="https://twitter.com/trisha_gee" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Trisha Gee&lt;/strong&gt;&lt;/a&gt;
 about a lot of topics, including JavaFX.&lt;/li&gt;
&lt;li&gt;Here on &lt;a href="https://twitter.com/foojayio" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Foojay.io&lt;/strong&gt;&lt;/a&gt;
, we published the podcast &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-9/"&gt;&amp;ldquo;The State of JavaFX Framework, Libraries, and Projects&amp;rdquo;&lt;/a&gt;
. These guests spoke about the JavaFX framework itself, but also about the libraries and applications that are built with it: &lt;a href="https://twitter.com/P_Duke" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt;&lt;/a&gt;
, &lt;a href="https://twitter.com/SeanMiPhillips" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt;&lt;/a&gt;
, &lt;a href="https://mastodon.social/@johanvos" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
, &lt;a href="https://twitter.com/gail_asgteach" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gail Anderson&lt;/strong&gt;&lt;/a&gt;
, &lt;a href="https://twitter.com/dlemmermann" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
, host: &lt;a href="https://foojay.social/@frankdelporte" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-various-news"&gt;Various News&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;In an interview, &lt;a href="https://foojay.social/@frankdelporte" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt;&lt;/a&gt;
 spoke with &lt;a href="https://twitter.com/SeanMiPhillips" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt;&lt;/a&gt;
. Every single thing he touches in his programming life turns into awesomeness. Read more about his work with &lt;a href="https://foojayio.github.io/website/today/visualizing-brain-computer-interface-data-using-javafx/"&gt;Trinity, a tool to visualize Brain Computer Interface data&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;On Wednesday, 7th of December 2022, the annual JavaFX user meeting &amp;ldquo;JFX Adopters Meeting 2022&amp;rdquo; hosted by ZEISS as online event took place. &lt;a href="https://www.zeiss.com/meditec/en/news-events/events/jfx-adopters-meeting.html" target="_blank" rel="noopener noreferrer"&gt;Registration page&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
 shared a few Tweets with ongoing work:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1596184094295064578" target="_blank" rel="noopener noreferrer"&gt;Started work on a new layout container&lt;/a&gt;
 called &amp;ldquo;MatrixPane&amp;rdquo; based on GridPane and a list of &amp;ldquo;Tiles&amp;rdquo;, each tile carrying col, row, spans, grow priorities, and a node.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1596131245234298885" target="_blank" rel="noopener noreferrer"&gt;Further improvements of the notification control&lt;/a&gt;
 to support pinned notifications. It will be in GemsFX very soon.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Shared by &lt;a href="https://mastodon.social/@johanvos" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@johanvos/109426954082587493" target="_blank" rel="noopener noreferrer"&gt;A major refactory/simplification on how JavaFX deals with windows and window managers on Linux is making progress&lt;/a&gt;
. See this &lt;a href="https://github.com/openjdk/jfx/pull/915" target="_blank" rel="noopener noreferrer"&gt;pull request&lt;/a&gt;
. All credits should go to &lt;a href="https://twitter.com/thiago_sayao" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Thiago Sayão&lt;/strong&gt;&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;a href="https://mastodon.social/@johanvos/109444928640623866" target="_blank" rel="noopener noreferrer"&gt;Maybe it&amp;rsquo;s time to think about moving JavaFX development to a foundation&lt;/a&gt;
, and have it developed in a vendor-neutral environment, where contributors are highly respected. That would require commitments from the industries that use JavaFX of course.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timo Reusch&lt;/strong&gt; shared a &lt;a href="https://dev.to/timo_reusch/using-sass-in-your-javafx-project-hf0" target="_blank" rel="noopener noreferrer"&gt;post in which he describes how you can use Sass to generate CSS for JavaFX&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/eduramiba" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Eduardo Ramos&lt;/strong&gt;&lt;/a&gt;
 tweeted about &lt;a href="https://en.capillary.io/software/capillaryscope/" target="_blank" rel="noopener noreferrer"&gt;CapillaryScope, a free desktop application&lt;/a&gt;
 designed for doing nailfold capillaroscopy with your favourite USB microscope.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/msgilligan" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Gilligan&lt;/strong&gt;&lt;/a&gt;
 got triggered by a tweet by &lt;strong&gt;Johan Vos&lt;/strong&gt; about webcam support for OpenJDK/JavaFX. He has some ideas and prototype. &lt;a href="https://twitter.com/msgilligan/status/1600214413684150272" target="_blank" rel="noopener noreferrer"&gt;Read the thread here&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;Follow-up messages showing &lt;a href="https://foojay.social/@msgilligan/109491263323925811" target="_blank" rel="noopener noreferrer"&gt;he is making progress&amp;hellip;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Strange things are happening in the online social world&amp;hellip; Looking for a friendly environment for the Java, JavaFX, OpenJDK, JVM, Kotlin,&amp;hellip; community? Join &lt;a href="https://foojayio.github.io/website/today/foojay-on-mastodon-an-update/"&gt;foojay.social, more info in this post&lt;/a&gt;
, including a video to get you started.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/TheDonRaab" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Donald Raab&lt;/strong&gt;&lt;/a&gt;
 is searching for a &lt;a href="https://twitter.com/TheDonRaab/status/1603465185481658394" target="_blank" rel="noopener noreferrer"&gt;JavaFX App Store&amp;hellip;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/antopelusi" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Antonio Pelusi&lt;/strong&gt;&lt;/a&gt;
 shared a complete CSS stylesheet to set a &lt;a href="https://www.antoniopelusi.com/posts/javafx-dark-theme/" target="_blank" rel="noopener noreferrer"&gt;dark theme in your JavaFX UI&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Alessio_Vinerbi" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Alessio Vinerbi&lt;/strong&gt;&lt;/a&gt;
 keeps teasing us with his visual modeler application&amp;hellip;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Alessio_Vinerbi/status/1601913626583093248" target="_blank" rel="noopener noreferrer"&gt;Intergration of Medusa Gauges&lt;/a&gt;
, a library by &lt;a href="https://twitter.com/hansolo_" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Alessio_Vinerbi/status/1601870967399190535?t=DJLwumrOcKpBcTEpMPwvlw&amp;amp;s=09" target="_blank" rel="noopener noreferrer"&gt;Having fun with the canvas&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MattColey6" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Matt Coley&lt;/strong&gt;&lt;/a&gt;
 shared an &lt;a href="https://twitter.com/MattColey6/status/1601273551444905986?t=ChOQm6FpJP4kBSbWs5_Rvg&amp;amp;s=09" target="_blank" rel="noopener noreferrer"&gt;impressive video of Code2HTML with a new UI with docking tabs&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Are you considering to write a JavaFX Mastodon client? Take a look at the &lt;a href="https://github.com/andregasser/bigbone" target="_blank" rel="noopener noreferrer"&gt;Bigbone project, that aims to implement the Mastodon API project&lt;/a&gt;
, by &lt;a href="https://fosstodon.org/@andregasser" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;André Gasser&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;JavaFX applications shared on Twitter:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/fujohnwang/status/1605397549514633217" target="_blank" rel="noopener noreferrer"&gt;Keebox by @fujohnwang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/deskriders_twt/status/1605216776463302663" target="_blank" rel="noopener noreferrer"&gt;GPT-FX by @deskriders_twt&lt;/a&gt;
: quick access to GPT-3 with ChatGPT like interface that remembers the context and stores the chat history. JavaFX + Kotlin.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/LeeWyatt_7788/status/1605225007239417856" target="_blank" rel="noopener noreferrer"&gt;FXTools by @LeeWyatt_7788&lt;/a&gt;
: many tools, such as image tools, which support the generation of icons for various OS; multi-image cutting function supports iOS, Android, PC; image format conversion.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/LeeWyatt_7788/status/1580958504369602560" target="_blank" rel="noopener noreferrer"&gt;A friend of @LeeWyatt_7788&lt;/a&gt;
 was interested in FXGL and made a demo of the game Plants vs. Zombies.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-learning-javafx"&gt;Learning JavaFX&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/TheDonRaab" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Donald Raab&lt;/strong&gt;&lt;/a&gt;
 shared a series of posts:
&lt;ul&gt;
&lt;li&gt;Part 1: &lt;a href="https://donraab.medium.com/my-first-javafx-application-ee70a1d48cb3" target="_blank" rel="noopener noreferrer"&gt;Building his very first JavaFX application with IntelliJ IDEA&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Part 2: &lt;a href="https://medium.com/javarevisited/experimenting-with-java-records-datepicker-and-tableview-in-javafx-446ff272dfd2" target="_blank" rel="noopener noreferrer"&gt;Java Records, DatePicker, and TableView components in JavaFX&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Part 3: &lt;a href="https://medium.com/javarevisited/experimenting-with-java-enums-emojis-and-combobox-in-javafx-2c12492cf65" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Experimenting with Java enums, emojis, and ComboBox in JavaFX&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Part 4: &lt;a href="https://donraab.medium.com/using-the-jackson-library-to-persist-my-javafx-todo-list-to-json-8a4b31917c09" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Using the Jackson library to persist my JavaFX ToDo List to JSON&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Conclusion: &lt;a href="https://medium.com/javarevisited/my-weird-and-wonderful-first-adventures-with-javafx-6efe3b1923c8" target="_blank" rel="noopener noreferrer"&gt;overview of his experiments with JavaFX&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A few weeks ago we shared this &lt;a href="https://www.youtube.com/watch?t=1337&amp;amp;v=jCBBCBCUt9E&amp;amp;feature=youtu.be" target="_blank" rel="noopener noreferrer"&gt;video showing a Space Invaders game&lt;/a&gt;
 by &lt;a href="https://www.youtube.com/@chalodss" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Charles T. (A Bit&amp;rsquo;s Odyssey)&lt;/strong&gt;&lt;/a&gt;
, but &lt;a href="https://twitter.com/hansolo_" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
 also created a JavaFX version of this classic game! The &lt;a href="https://www.youtube.com/watch?v=GajccpyHyFM" target="_blank" rel="noopener noreferrer"&gt;video is here&lt;/a&gt;
 and the &lt;a href="https://github.com/HanSolo/spaceinvadersfx" target="_blank" rel="noopener noreferrer"&gt;sources are shared on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-javafx-job"&gt;JavaFX Job&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
 is looking to &lt;a href="https://twitter.com/dlemmermann/status/1603692027601879040" target="_blank" rel="noopener noreferrer"&gt;hire a JavaFX developer in Switzerland for his startup in the energy business&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-new-content-on-jfx-central-com"&gt;New content on &lt;a href="https://www.jfx-central.com" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/real_world/qfive" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;QFive&amp;rdquo;&lt;/a&gt;
: an e-learning platform for enterprise customers, running on desktop, browser and mobile.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/real_world/nerstar" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;NERstar&amp;rdquo;&lt;/a&gt;
: a cross-platform media application, used to create subtitles for live television, running on desktop and browser.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jfx-central.com/real_world/modellusx" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;ModellusX&amp;rdquo;&lt;/a&gt;
: enables students and teachers to use mathematics to create or explore models interactively. The latest release dates from 2012, but you can still find a &lt;a href="https://www.youtube.com/results?search_query=modellus" target="_blank" rel="noopener noreferrer"&gt;lot of videos created with it on YouTube&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Over 40 &amp;ldquo;real world apps&amp;rdquo; is now listed on the website!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-new-releases"&gt;New Releases&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/PDFsamOSS" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;PDFsam&lt;/strong&gt;&lt;/a&gt;
 released the first milestone of PDFsam Basic 5, &lt;a href="https://blog.pdfsam.org/java/pdfsam-basic-version-5-milestone-release/2366/#more-2366" target="_blank" rel="noopener noreferrer"&gt;more details are available here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/mapton_app" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Mapton&lt;/strong&gt;&lt;/a&gt;
, &amp;ldquo;some kind of map application&amp;rdquo;, announced a new release for Windows &amp;amp; Linux, built on NetBeans 16 Platform, bundled with Java &amp;amp; JavaFX from Azul. &lt;a href="https://github.com/trixon/mapton/releases/tag/v3.0.0" target="_blank" rel="noopener noreferrer"&gt;You can get it here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@hansolo_/109448566675747821" target="_blank" rel="noopener noreferrer"&gt;17.1.27 of JavaFX Charts&lt;/a&gt;
 by &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; with a &lt;a href="https://github.com/HanSolo/charts/releases" target="_blank" rel="noopener noreferrer"&gt;new CubeChart and other changes&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann/status/1598711714056380416?t=NgELT-PWpj05xVadgJI7zA&amp;amp;s=09" target="_blank" rel="noopener noreferrer"&gt;1.54.0 of GemsFX&lt;/a&gt;
 by &lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; with several important fixes regarding layout issues for the new notification controls.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jpro.one/docs/current/3.1/2022.1.X" target="_blank" rel="noopener noreferrer"&gt;2022.1.8 of JPro&lt;/a&gt;
 adds support for Node.viewOrder and includes various bugfixes and minor improvements.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/HanSolo/JDKMon/releases/tag/17.0.41" target="_blank" rel="noopener noreferrer"&gt;17.0.41 of JDKMon&lt;/a&gt;
 by &lt;strong&gt;Gerrit Grunwald&lt;/strong&gt; added the ability to manually download builds of GraalVM incl. #gluon, #mandrel and #liberican. JDKMon is a little tool written that tries to detect all JDK&amp;rsquo;s installed on your machine and will inform you about new updates of each OpenJDK distribution found.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SerendigityInfo/status/1601150944762216449?t=obFEZKy149MabaV7o1tvXg&amp;amp;s=09" target="_blank" rel="noopener noreferrer"&gt;1.6.2 of &lt;strong&gt;Serendipity&lt;/strong&gt;&lt;/a&gt;
: improved suggestions and new image types.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.jabref.org/#december-18-2022-%E2%80%93-%F0%9F%8E%84-jabref-5-8-release-%F0%9F%8E%84" target="_blank" rel="noopener noreferrer"&gt;v5.8 of JabRef&lt;/a&gt;
: open-source, cross-platform citation and reference management tool, more info in our &lt;a href="https://www.jfx-central.com/real_world/jabref" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Real World Apps&amp;rdquo; section&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/shannah78" target="_blank" rel="noopener noreferrer"&gt;v4 of jDeploy by &lt;strong&gt;Steve Hannah&lt;/strong&gt;&lt;/a&gt;
: JavaFX app template that provides native installers that receive auto-updates to stay in-sync with the latest source changes. See the &lt;a href="https://github.com/shannah/jdeploy-javafx-starter" target="_blank" rel="noopener noreferrer"&gt;GitHub project&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Debugging Program Control Flow</title><link>https://foojayio.github.io/website/today/debugging-program-control-flow/</link><pubDate>Fri, 23 Dec 2022 07:36:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-program-control-flow/</guid><description>&lt;p&gt;As of now I published the first three videos of &lt;a href="https://course.debugagent.com" target="_blank" rel="noopener noreferrer"&gt;the course&lt;/a&gt;
 and will publish the fourth tomorrow. I plan to publish two videos per week on YouTube to maximize the impact but here I&amp;rsquo;ll only blog one lesson per week to avoid oversaturation. I shot about four hours of video content and still haven&amp;rsquo;t finished the 2nd module out of eight. This course will be very detailed and intensive.&lt;/p&gt;</description></item><item><title>A Faster Way to Build React + Spring Boot Apps Using Hilla 1.3</title><link>https://foojayio.github.io/website/today/a-faster-way-to-build-react-spring-boot-apps-using-hilla-1-3/</link><pubDate>Thu, 22 Dec 2022 09:59:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-faster-way-to-build-react-spring-boot-apps-using-hilla-1-3/</guid><description>&lt;p&gt;It&amp;rsquo;s time to build a new web application. You&amp;rsquo;ve decided to use React with a Java back end, so you&amp;rsquo;re good to go right? Not quite.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s still a lot of work to do to set up a new project, configure your build tools, find good UI components, and create APIs for communication between your front end and back end.&lt;/p&gt;
&lt;p&gt;What if you could skip all that work and focus on building your app and delivering features?&lt;/p&gt;</description></item><item><title>Spring Boot Annotation Reference - 01/a</title><link>https://foojayio.github.io/website/today/spring-boot-annotation-reference-01-a/</link><pubDate>Thu, 22 Dec 2022 09:57:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-annotation-reference-01-a/</guid><description>&lt;p&gt;In 2018, I was introduced to the topic of Microservices and Spring Boot via a formal training, during my brief stint as a Senior Architect in Manila, Philippines.&lt;/p&gt;
&lt;p&gt;Though I had worked on a &amp;lsquo;similar architecture&amp;rsquo; way back in 2007-&amp;lsquo;08 while working as a Software Engineer at Symantec - I found the idea of the Uber JAR really exciting. Also, since it will now be enforced via the most popular framework brings in more possibilities.&lt;/p&gt;</description></item><item><title>Writing a Profiler from Scratch: Introduction</title><link>https://foojayio.github.io/website/today/writing-a-profiler-from-scratch-introduction/</link><pubDate>Wed, 21 Dec 2022 15:26:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/writing-a-profiler-from-scratch-introduction/</guid><description>&lt;p&gt;&lt;a href="https://github.com/jvm-profiling-tools/async-profiler" target="_blank" rel="noopener noreferrer"&gt;Async-profiler&lt;/a&gt;
 is undoubtedly one of the most used open-source Java profilers out there.&lt;/p&gt;
&lt;p&gt;Its most commonly used feature is sampling a given Java program&amp;rsquo;s stack traces and visualizing them as a flame graph. I would recommend reading the excellent &lt;a href="https://krzysztofslusarski.github.io/2022/12/12/async-manual.html" target="_blank" rel="noopener noreferrer"&gt;async-profiler manual&lt;/a&gt;
 by Krzysztof Ślusarski or taking a look at my profiling playlist on YouTube if you&amp;rsquo;re new to this tool.&lt;/p&gt;
&lt;p&gt;After using the async-profiler for a while, you might wonder: How does this tool work? And, of course, if you&amp;rsquo;re someone like me: Could I write a stripped-down versionto learn how it really works?&lt;/p&gt;</description></item><item><title>Challenges when Developing a GUI for FIX</title><link>https://foojayio.github.io/website/today/challenges-when-developing-a-gui-for-fix/</link><pubDate>Wed, 21 Dec 2022 08:06:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/challenges-when-developing-a-gui-for-fix/</guid><description>&lt;p&gt;In this article, we explore the challenges in developing a Graphical User Interface (GUI) for Financial Information Exchange (FIX) data.&lt;/p&gt;
&lt;p&gt;FIX is both a protocol and a message format, but to create a FIX GUI we will focus just on the message format.&lt;/p&gt;
&lt;p&gt;A FIX message is a standard message format for transmitting financial and investment banking data.&lt;/p&gt;
&lt;p&gt;Below is an example of a FIX message, where the &amp;ldquo;|&amp;rdquo; character is sent as &amp;lsquo;\1&amp;rsquo;:&lt;/p&gt;</description></item><item><title>How Java Litters Beyond the Heap: Distributed Databases</title><link>https://foojayio.github.io/website/today/how-java-litters-beyond-the-heap-part-2-distributed-databases/</link><pubDate>Tue, 20 Dec 2022 11:40:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-java-litters-beyond-the-heap-part-2-distributed-databases/</guid><description>&lt;p&gt;&lt;strong&gt;Let&amp;rsquo;s create a simple Java application using a distributed database for the user data and see how the database generates litter in response to application requests.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While the Java Virtual Machine executes our code at runtime, it generates garbage in the heap, which is dutifully collected by the garbage collector. This is a known fact.&lt;/p&gt;
&lt;p&gt;However, at the same time, Java apps don&amp;rsquo;t live in isolation and frequently communicate with services, databases, and other components. Some of those components also generate and collect garbage, while fulfilling the Java app&amp;rsquo;s requests. This is less known.&lt;/p&gt;</description></item><item><title>Azul Provides the CRaC in AWS SnapStart Builds</title><link>https://foojayio.github.io/website/today/azul-provides-the-crac-in-aws-snapstart-builds/</link><pubDate>Tue, 20 Dec 2022 07:45:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/azul-provides-the-crac-in-aws-snapstart-builds/</guid><description>&lt;p&gt;At Azul, we are very excited about the Amazon Web Services launch of &lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/snapstart-runtime-hooks.html" target="_blank" rel="noopener noreferrer"&gt;SnapStart for Lambdas&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;SnapStart is based on the CRaC (Coordinated Restore at Checkpoint) API developed in OpenJDK, which was originated and led by Azul.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is the CRaC API?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://openjdk.org/projects/crac/" target="_blank" rel="noopener noreferrer"&gt;CRaC API&lt;/a&gt;
 provides a common way for Java applications to coordinate with underlying checkpoint/restore mechanisms, allowing Java code to work seamlessly and portably across various checkpoint/restore mechanisms as they become available.&lt;/p&gt;</description></item><item><title>Two Million Java Developers on Visual Studio Code!</title><link>https://foojayio.github.io/website/today/two-million-java-developers-on-visual-studio-code-november-2022-update/</link><pubDate>Mon, 19 Dec 2022 13:12:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/two-million-java-developers-on-visual-studio-code-november-2022-update/</guid><description>&lt;p&gt;&lt;strong&gt;Hi everyone, we are excited to share that now there are over two million Java developers on Visual Studio Code, which wouldn&amp;rsquo;t be possible without all the support from the community and our users, so thank you!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For the November update, we are bringing you new code editing features, such as postfix completion and optimized organize imports. In addition, the debugger gets a nice update, as we support a new feature called &amp;ldquo;Step Into Target&amp;rdquo;. Lastly, we&amp;rsquo;ve made some visual enhancements to the Spring components.&lt;/p&gt;</description></item><item><title>Foojay Podcast #9: State of JavaFX, Libraries, and Projects</title><link>https://foojayio.github.io/website/today/foojay-podcast-9/</link><pubDate>Mon, 19 Dec 2022 08:09:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-9/</guid><description>&lt;p&gt;JavaFX was introduced by Sun Microsystems in May 2007 and provides a platform for desktop, mobile, and embedded applications built on Java.&lt;/p&gt;
&lt;p&gt;Libraries and software are available for the complete lifecycle of an application to run from a single codebase on Windows, macOS, Linux, Android, and iOS. JavaFX was originally part of the JDK, the Java Development Kit, and became a standalone technology in 2018.&lt;/p&gt;
&lt;p&gt;The development is a joint effort between Oracle, Gluon (a small Belgian-based company), and the community.&lt;/p&gt;</description></item><item><title>Foojay on Mastodon: An Update</title><link>https://foojayio.github.io/website/today/foojay-on-mastodon-an-update/</link><pubDate>Fri, 16 Dec 2022 06:45:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-on-mastodon-an-update/</guid><description>&lt;p&gt;Some weeks ago we checked here with the Java community if there was an interest to have a Java-oriented Mastodon service.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/lets-start-a-java-mastodon-community-for-friends-of-openjdk/"&gt;Let&amp;rsquo;s Start a Java Mastodon Community for Friends of OpenJDK!&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/java-mastodon-service-the-feedback/"&gt;Java Mastodon Service: The Feedback&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/foojay-mastodon-service-here-it-is"&gt;Foojay Mastodon Service: Here It Is!&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Today, Nicolas Frankel, also explained how he &lt;a href="https://foojayio.github.io/website/today/preparing-to-move-away-from-twitter/"&gt;moved from Twitter to Mastodon and has set up a cross-posting solution&lt;/a&gt;
 (automated of course, as a true good and lazy developer).&lt;/p&gt;</description></item><item><title>Preparing to Move Away from Twitter</title><link>https://foojayio.github.io/website/today/preparing-to-move-away-from-twitter/</link><pubDate>Fri, 16 Dec 2022 06:42:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/preparing-to-move-away-from-twitter/</guid><description>&lt;p&gt;I opened my Twitter account more than 13 years ago, in August 2009. For 12 years, I kept focusing on professional-related content: Java, the JVM, programming, etc. I built my audience, trying to promote good technical content, either my own or stuff that I enjoyed reading.&lt;/p&gt;
&lt;p&gt;Then, on February 24^th^, Russia invaded Ukraine. My first visit to Ukraine was in 2014, just after the Maidan revolution. During eight years, I returned there often and made plenty of friends.&lt;/p&gt;</description></item><item><title>Debug Like a Senior Developer</title><link>https://foojayio.github.io/website/today/debug-like-a-senior-developer/</link><pubDate>Fri, 16 Dec 2022 06:34:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/debug-like-a-senior-developer/</guid><description>&lt;p&gt;My book on debugging is &lt;a href="https://www.amazon.com/dp/1484290410/" target="_blank" rel="noopener noreferrer"&gt;already on preorder&lt;/a&gt;
 and I&amp;rsquo;m super thrilled to announce I&amp;rsquo;m doing a full online course to go along with it.&lt;/p&gt;
&lt;p&gt;The course website isn&amp;rsquo;t ready yet but I already have the full outline and a lot of recorded material. I will try to drop videos at a rate of two per week in the next few months until the full course will be online.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s shaping up to be a very detailed course. I recorded the first module and half of the second module and I&amp;rsquo;m already close to 3 hours of dense recorded material!&lt;/p&gt;</description></item><item><title>What Java Version Are You Running?</title><link>https://foojayio.github.io/website/today/what-java-version-are-you-running-lets-take-a-look-under-the-hood-of-the-jdk/</link><pubDate>Thu, 15 Dec 2022 08:59:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-java-version-are-you-running-lets-take-a-look-under-the-hood-of-the-jdk/</guid><description>&lt;p&gt;From time to time, you need to check which Java version is installed on your computer or server, for instance when starting on a new project or configuring an application to run on a server.&lt;/p&gt;
&lt;p&gt;But did you know there are multiple ways you can do this and even get much more information than you might think, very quickly?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s find out&amp;hellip;&lt;/p&gt;
&lt;h2 id="reading-the-java-version-in-the-terminal-whatjavaversionareyourunningtakingalookunderthehoodsofthejdk-readingthejavaversionintheterminal"&gt;Reading the Java Version in the Terminal {#WhatJavaversionareyourunning?TakingalookunderthehoodsoftheJDK.-ReadingtheJavaVersionintheTerminal}&lt;/h2&gt;
&lt;p&gt;Probably the easiest way to find the installed version is by using the &lt;code&gt;java -version&lt;/code&gt; terminal command:&lt;/p&gt;</description></item><item><title>Hilla 1.3: Build React + Spring Boot Apps Faster</title><link>https://foojayio.github.io/website/today/hilla-1-3-faster-react-spring-boot-development/</link><pubDate>Thu, 15 Dec 2022 00:01:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/hilla-1-3-faster-react-spring-boot-development/</guid><description>&lt;p&gt;Hilla is a full-stack web framework for Spring Boot.&lt;/p&gt;
&lt;p&gt;With its type-safe server communication, building apps is faster (autocomplete everywhere) and refactoring them is safer (compile time errors vs production).&lt;/p&gt;
&lt;p&gt;Hilla includes 45+ UI components and integrated build tooling so you can get a full-stack project running in a minute.&lt;/p&gt;
&lt;p&gt;Hilla 1.3 adds support for using React to build the frontend.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release highlights&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New: &lt;a href="https://hilla.dev/docs/react" target="_blank" rel="noopener noreferrer"&gt;React support&lt;/a&gt;
 (including React wrappers for all Vaadin components)&lt;/li&gt;
&lt;li&gt;New: &lt;a href="https://www.npmjs.com/package/@hilla/cli" target="_blank" rel="noopener noreferrer"&gt;Hilla CLI&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://hilla.dev/blog/hilla-1-3-adds-react-support/" target="_blank" rel="noopener noreferrer"&gt;Release blog post&lt;/a&gt;
 | &lt;a href="https://github.com/vaadin/hilla/releases/tag/1.3.0" target="_blank" rel="noopener noreferrer"&gt;Release notes&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Vaadin 23.3 Improves Kubernetes, Three New Components</title><link>https://foojayio.github.io/website/today/vaadin-23-3-improves-kubernetes-support/</link><pubDate>Wed, 14 Dec 2022 23:59:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/vaadin-23-3-improves-kubernetes-support/</guid><description>&lt;p&gt;The Vaadin 23.3 release includes three new UI components and improvements to the Vaadin Acceleration Kits for easier deployments in clustered environments (support for rolling updates, horizontal scaling, high availability, and session replication).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release highlights&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New: &lt;a href="https://vaadin.com/docs/latest/components/tabs#tab-sheet" target="_blank" rel="noopener noreferrer"&gt;TabSheet component&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;New: &lt;a href="https://vaadin.com/docs/latest/components/tooltip" target="_blank" rel="noopener noreferrer"&gt;Tooltip component&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;New: &lt;a href="https://vaadin.com/docs/latest/components/spreadsheet" target="_blank" rel="noopener noreferrer"&gt;Spreadsheet component&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;New: &lt;a href="https://vaadin.com/docs/latest/tools/kubernetes" target="_blank" rel="noopener noreferrer"&gt;Kubernetes Kit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;New: &lt;a href="https://vaadin.com/docs/latest/tools/azure-cloud" target="_blank" rel="noopener noreferrer"&gt;Azure Cloud Kit&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://vaadin.com/blog/vaadin-23.3-kubernetes-cloud-new-ui-components" target="_blank" rel="noopener noreferrer"&gt;Release blog post&lt;/a&gt;
 | &lt;a href="https://github.com/vaadin/flow/releases/tag/23.3.0" target="_blank" rel="noopener noreferrer"&gt;Release notes&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Why the Cool Kids Use Event Loops</title><link>https://foojayio.github.io/website/today/why-the-cool-kids-use-event-loops/</link><pubDate>Wed, 14 Dec 2022 10:17:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-the-cool-kids-use-event-loops/</guid><description>&lt;h3 id="h3-0-a-discussion-on-the-benefits-of-event-loops-in-java"&gt;A Discussion On the Benefits of Event Loops in Java.&lt;/h3&gt;
&lt;p&gt;When I was working in software development back in the 1990s, nearly all the software libraries that I worked on made use of event loops. This was because at the time most hardware had just one single CPU.&lt;/p&gt;
&lt;p&gt;Back in the day, I remember the excitement when threads were introduced into our development framework. It was revolutionary that we could now run two things at once, or rather appear to run two things at once, since a lot of the hardware at that time still only had a single core, hence our threaded code was never really truly concurrent.&lt;/p&gt;</description></item><item><title>Compilation Avoidance with Gradle</title><link>https://foojayio.github.io/website/today/compilation-avoidance-with-gradle/</link><pubDate>Tue, 13 Dec 2022 15:35:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/compilation-avoidance-with-gradle/</guid><description>&lt;p&gt;We at Gradle recently noticed some community chatter about speeding up Gradle compilation on the JVM by ignoring changes not affecting the application binary interface (ABIs) of dependencies.&lt;/p&gt;
&lt;p&gt;What a great idea! In fact, Gradle has used ABIs for Java out of the box for this without any extra configuration &lt;a href="https://blog.gradle.org/incremental-compiler-avoidance" target="_blank" rel="noopener noreferrer"&gt;since version 3.4&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;We refer to this feature as &lt;strong&gt;&lt;a href="https://docs.gradle.org/current/userguide/java_plugin.html#sec:java_compile_avoidance" target="_blank" rel="noopener noreferrer"&gt;compilation avoidance&lt;/a&gt;
&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This post explains what ABI-based compilation means for the average workflow. Spoiler: utilizing compilation avoidance is one of the best performance enhancements for any build.&lt;/p&gt;</description></item><item><title>Why Did We Choose JSF for the Eclipse Starter for Jakarta EE?</title><link>https://foojayio.github.io/website/today/why-did-we-choose-jakarta-faces-for-the-ui-of-the-eclipse-starter-for-jakarta-ee/</link><pubDate>Tue, 13 Dec 2022 10:27:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-did-we-choose-jakarta-faces-for-the-ui-of-the-eclipse-starter-for-jakarta-ee/</guid><description>&lt;p&gt;After being taken care of by the &lt;a href="https://www.jcp.org/en/home/index" target="_blank" rel="noopener noreferrer"&gt;Java Community Process&lt;/a&gt;
 (JCP), Java EE is now supported by the &lt;a href="https://www.eclipse.org/org/foundation/" target="_blank" rel="noopener noreferrer"&gt;Eclipse Foundation&lt;/a&gt;
 as &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This means that we can focus more on open standards for governance, open-source development, and testing for compatibility.&lt;/p&gt;
&lt;p&gt;It is also a great way to include openness to all vendors, a clear flow of intellectual property (IP), well-defined procedures for defining specifications, and a level playing field.&lt;/p&gt;</description></item><item><title>OmniFish Jakarta EE Survey 2022</title><link>https://foojayio.github.io/website/today/omnifish-jakarta-ee-survey-2022/</link><pubDate>Mon, 12 Dec 2022 11:44:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/omnifish-jakarta-ee-survey-2022/</guid><description>&lt;p&gt;Do you want to have a say in what happens for the next version of Jakarta EE?&lt;/p&gt;
&lt;p&gt;Check out the new edition of the Jakarta EE Survey 2022 by OmniFish, which follows the tradition of the bi-annual OmniFaces surveys.&lt;/p&gt;
&lt;p&gt;The purpose of the survey is to help everybody understand the current status of the Jakarta EE ecosystem, what we as a community represent, which parts of Jakarta EE we all use the most and what we all expect from Jakarta EE in the future.&lt;/p&gt;</description></item><item><title>SpringOne TLV World Tour Trip Report</title><link>https://foojayio.github.io/website/today/springone-tlv-world-tour-trip-report/</link><pubDate>Fri, 09 Dec 2022 22:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/springone-tlv-world-tour-trip-report/</guid><description>&lt;p&gt;My talk was accepted by SpringOne in San Francisco. I never went to that conference and was really looking forward to it. This year would probably be amazing with the Spring 6.0 and Spring Boot 3.0 releases. So many groundbreaking changes. Unfortunately, my travel budget at Lightrun was cut, and I eventually left. This meant I had to cancel the trip, I would have paid for travel, but San Francisco is both far and prohibitively expensive. I&amp;rsquo;ll have to take a raincheck.&lt;/p&gt;</description></item><item><title>Web resource caching: Server-side</title><link>https://foojayio.github.io/website/today/web-caching-server/</link><pubDate>Fri, 09 Dec 2022 15:32:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/web-caching-server/</guid><description>&lt;p&gt;The subject of Web resource caching is as old as the World Wide Web itself.&lt;/p&gt;
&lt;p&gt;However, I&amp;rsquo;d like to offer an as-exhaustive-as-possible catalog of how one can improve performance by caching.&lt;/p&gt;
&lt;p&gt;Web resource caching can happen in two different places: client-side - on the browser and server side.&lt;/p&gt;
&lt;p&gt;In the &lt;a href="https://foojayio.github.io/website/today/web-caching-client/"&gt;previous post&lt;/a&gt;
, I explained the former; this post focuses on the latter.&lt;/p&gt;
&lt;p&gt;While client-side caching works well, it has one central issue: to serve the resource locally, it must first have it in the cache. Thus, each client needs its cached resource. If the requested resource is intensive to compute, it doesn&amp;rsquo;t scale.&lt;/p&gt;</description></item><item><title>Web resource caching: Client-side</title><link>https://foojayio.github.io/website/today/web-caching-client/</link><pubDate>Fri, 09 Dec 2022 15:27:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/web-caching-client/</guid><description>&lt;p&gt;The subject of Web resource caching is as old as the World Wide Web itself.&lt;/p&gt;
&lt;p&gt;However, I&amp;rsquo;d like to offer an as-exhaustive-as-possible catalog of how one can improve performance by caching.&lt;/p&gt;
&lt;p&gt;Web resource caching can happen in two different places: client-side - on the browser and server-side.&lt;/p&gt;
&lt;p&gt;This article is dedicated to the former; the next article will focus on the latter.&lt;/p&gt;
&lt;h2 id="h2-0-caching-101"&gt;Caching 101&lt;/h2&gt;
&lt;p&gt;The idea behind caching is simple: if a resource is a time- or resource-consuming to compute, do it once and store the result.&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>JFR Event Collection</title><link>https://foojayio.github.io/website/today/jfr-event-collection/</link><pubDate>Thu, 08 Dec 2022 10:08:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/jfr-event-collection/</guid><description>&lt;p&gt;Ever wondered what all the JDK Flight Recorder events are, in which JDK versions they are supported, and what examples of an event looks like?&lt;/p&gt;
&lt;p&gt;Wonder no more, I created the &lt;a href="https://sapmachine.io/jfrevents" target="_blank" rel="noopener noreferrer"&gt;JFR Event Collection&lt;/a&gt;
 website which contains all this and more.
&lt;a href="https://sapmachine.io/jfrevents" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/jfr-event-collection/Screenshot-2022-12-05-at-18.01.21-1024x574.png" alt="Screenshot of https://sapmachine.io/jfrevents" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;This site gives you an up-to-date collection of all OpenJDK JFR events for every JDK since 11, giving you the following additional information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;configuration properties&lt;/li&gt;
&lt;li&gt;fields with their types and description&lt;/li&gt;
&lt;li&gt;examples from a renaissance benchmark run&lt;/li&gt;
&lt;li&gt;with which GC this event appears&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/parttimenerd/jfreventcollector/blob/main/additional.xml" target="_blank" rel="noopener noreferrer"&gt;additional descriptions&lt;/a&gt;
 collected by JFR users&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The idea for this website came during the development of my prototypical JFR UI:
&lt;img src="https://foojayio.github.io/website/today/jfr-event-collection/Screenshot-of-JFR-events-viewer-1024x447.png" alt="Screenshot of JFR events viewer" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Learn How to Develop Event-Driven Architectures</title><link>https://foojayio.github.io/website/today/learn-how-to-develop-event-driven-architectures/</link><pubDate>Wed, 07 Dec 2022 15:25:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/learn-how-to-develop-event-driven-architectures/</guid><description>&lt;p&gt;Previously, I wrote &lt;a href="https://foojayio.github.io/website/today/high-performance-java-serialisation/" title="an article on Open source Chronicle Wire"&gt;an article on Open source Chronicle Wire&lt;/a&gt;
, that discusses how we could serialise an application&amp;rsquo;s state into different message formats.&lt;/p&gt;
&lt;p&gt;Now in this article, I&amp;rsquo;m going to look at how we can use Open source &lt;a href="https://chronicle.software/queue/" title="Chronicle Queue " target="_blank" rel="noopener noreferrer"&gt;Chronicle Queue&lt;/a&gt;
and &lt;a href="https://chronicle.software/wire/" title="Chronicle Wire" target="_blank" rel="noopener noreferrer"&gt;Chronicle Wire&lt;/a&gt;
 to structure applications to use Event-Driven Architecture (EDA).&lt;/p&gt;
&lt;p&gt;EDA is a design pattern in which decoupled components (often microservices) can asynchronously publish and subscribe to events.&lt;/p&gt;</description></item><item><title>Viewing Maven and Gradle Dependencies in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/viewing-dependencies-in-intellij-idea/</link><pubDate>Wed, 07 Dec 2022 08:54:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/viewing-dependencies-in-intellij-idea/</guid><description>&lt;p&gt;In this article, we&amp;rsquo;re going to take a look at different ways to view your external dependencies in IntelliJ IDEA.&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re working on a real-world application, your project will probably use external libraries and frameworks.&lt;/p&gt;
&lt;p&gt;Occasionally, you might want to see which dependencies your project uses, for various reasons.&lt;/p&gt;
&lt;p&gt;There are several ways to view dependencies in &lt;a href="https://www.jetbrains.com/idea/" title="IntelliJ IDEA" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Each view has a different focus.&lt;/p&gt;
&lt;h2 id="h2-1-dependency-management-config-file"&gt;Dependency management config file&lt;/h2&gt;
&lt;p&gt;You can find direct dependencies in the dependency management config file. Direct dependencies are the dependencies that your project depends on directly.&lt;/p&gt;</description></item><item><title>Introducing Gradle Test Suites</title><link>https://foojayio.github.io/website/today/introducing-gradle-test-suites/</link><pubDate>Tue, 06 Dec 2022 13:28:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-gradle-test-suites/</guid><description>&lt;p&gt;This article was initially published at &lt;a href="https://blog.gradle.org/introducing-test-suites" target="_blank" rel="noopener noreferrer"&gt;blog.gradle.org&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;As projects grow in size and complexity and otherwise mature, they tend to accumulate a large collection of automated tests.&lt;/p&gt;
&lt;p&gt;Testing your software at &lt;a href="https://martinfowler.com/articles/practical-test-pyramid.html" target="_blank" rel="noopener noreferrer"&gt;multiple levels of granularity&lt;/a&gt;
 is important to surface problems quickly and to increase developer productivity.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://docs.gradle.org/7.3/release-notes.html#new-features-and-usability-improvements" target="_blank" rel="noopener noreferrer"&gt;Gradle 7.3&lt;/a&gt;
, released November 2021, the Gradle team introduced a new feature called Declarative Test Suites.&lt;/p&gt;
&lt;p&gt;Using this feature makes it much easier to manage different types of tests within a single Gradle JVM project without worrying about low level &amp;ldquo;plumbing&amp;rdquo; details.&lt;/p&gt;</description></item><item><title>Foojay Podcast #8: JUG World Tour: Manchester</title><link>https://foojayio.github.io/website/today/foojay-podcast-8/</link><pubDate>Mon, 05 Dec 2022 12:02:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-8/</guid><description>&lt;p&gt;With this Foojay Podcast, we introduce a new topic: &lt;strong&gt;once per month, we will virtually travel to a Java User Group (JUG) to learn how they organize their events and learn from their experiences&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For this first Foojay JUG Podcast, we are flying to Manchester in the UK!&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/8saJoj_4AFQ?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Why I Don't do TDD</title><link>https://foojayio.github.io/website/today/why-i-dont-do-tdd/</link><pubDate>Fri, 02 Dec 2022 08:59:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-i-dont-do-tdd/</guid><description>&lt;p&gt;I recently gave a talk about debugging for the London Java Community. During the Q&amp;amp;A part of the talk, someone asked me about my approach to Test Driven Development. In the past I looked at that practice in a more positive light. Writing lots of tests. How can that be bad?&lt;/p&gt;
&lt;p&gt;But as time moved on, I see it in a different light. I see it as a very limited tool that has very specific use cases. It doesn&amp;rsquo;t fit into the type of projects I build and often hinders the fluid processes it&amp;rsquo;s supposed to promote. But let&amp;rsquo;s backtrack for a second. I really liked &lt;a href="https://buttondown.email/hillelwayne/archive/i-have-complicated-feelings-about-tdd-8403/" target="_blank" rel="noopener noreferrer"&gt;this post&lt;/a&gt;
 that separates the types and problems in TDD. But let&amp;rsquo;s simplify it a bit, let&amp;rsquo;s clarify that every PR should have good coverage. This isn&amp;rsquo;t TDD. It&amp;rsquo;s just good programming.&lt;/p&gt;</description></item><item><title>What is An Application Server? In 3 Minutes!</title><link>https://foojayio.github.io/website/today/what-is-an-application-server-in-3-minutes/</link><pubDate>Thu, 01 Dec 2022 17:01:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-is-an-application-server-in-3-minutes/</guid><description>&lt;p&gt;Low on time and want to know what an &amp;lsquo;application server&amp;rsquo; really is?&lt;/p&gt;
&lt;p&gt;Here we offer our explanation. This video covers the difference between application servers and web servers, what an application server can do to make your life as a developer easier, and more, all in less time than your average pop song!&lt;/p&gt;
&lt;p&gt;This is a high-level view that might be helpful to pass on to managers and procurement teams who aren&amp;rsquo;t sure what an application server is.&lt;/p&gt;</description></item><item><title>JavaFX Links of November</title><link>https://foojayio.github.io/website/today/javafx-links-of-november/</link><pubDate>Thu, 01 Dec 2022 15:04:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-november/</guid><description>&lt;p&gt;Time flies when having fun&amp;hellip;&lt;/p&gt;
&lt;p&gt;So here we are again, another month has passed and this is a summary of the Links Of The Week that were published on &lt;a href="https://www.jfx-central.com/home" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 during November.&lt;/p&gt;
&lt;h2 id="h2-0-javafx-core"&gt;JavaFX Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;We already shared here that Oracle will also be distributing JavaFX builds, and you can see &lt;a href="https://www.youtube.com/watch?v=4hUbmI0nplU&amp;amp;amp;t=1600s" target="_blank" rel="noopener noreferrer"&gt;the announcement they did at JavaOne here&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/zinbe" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Takaaki Sugiyama&lt;/strong&gt;&lt;/a&gt;
 shared &lt;a href="https://twitter.com/zinbe/status/1583208414707998720" target="_blank" rel="noopener noreferrer"&gt;a lot of screenshot pictures of the JavaOne presentation &amp;ldquo;JavaFX 19 and Beyond&amp;rdquo;&lt;/a&gt;
, and the full presentation by &lt;a href="https://twitter.com/kevinrushforth" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Kevin Rushforth&lt;/strong&gt;&lt;/a&gt;
 is available as a &lt;a href="https://cr.openjdk.java.net/~kcr/presentations/javaone-2022/JavaFX-19_Final.pdf" target="_blank" rel="noopener noreferrer"&gt;PDF here&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inside Java&lt;/strong&gt; &lt;a href="https://inside.java/2022/11/18/podcast-027/" target="_blank" rel="noopener noreferrer"&gt;published a podcast&lt;/a&gt;
 with Kevin Rushforth, OpenJFX Project Co-Lead, working at Oracle.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Early-access builds of JavaFX 20 are available from
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;Gluon&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jdk.java.net/javafx20/" target="_blank" rel="noopener noreferrer"&gt;Oracle&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-scenebuilder"&gt;SceneBuilder&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A feature in development for SceneBuilder: drop one or more FXML files into the welcome page to open them, as you can see in &lt;a href="https://twitter.com/Raumzeitfalle/status/1587543306782887937?t=48IdRrEehs88chXQ0iAMKg&amp;amp;amp;s=09" target="_blank" rel="noopener noreferrer"&gt;this video&lt;/a&gt;
 shared by &lt;a href="https://twitter.com/Raumzeitfalle" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Raumzeitfalle&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-games"&gt;Games&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;JavaFX Chess by &lt;a href="https://twitter.com/john_sirach" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;John Sirach&lt;/strong&gt;&lt;/a&gt;
 is not a new project, but &lt;a href="https://twitter.com/jjenkov" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jakob Jenkov&lt;/strong&gt;&lt;/a&gt;
 shared &lt;a href="https://twitter.com/jjenkov/status/1586785876050427904" target="_blank" rel="noopener noreferrer"&gt;a tweet about it&lt;/a&gt;
, and it&amp;rsquo;s always nice &lt;a href="https://www.youtube.com/watch?v=6S6km5duBrM" target="_blank" rel="noopener noreferrer"&gt;to see a video of this amazing project&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/JavaFX3D" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;JavaFX3D&lt;/strong&gt;&lt;/a&gt;
 shared some nice links:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/JavaFX3D/status/1590145286118465536" target="_blank" rel="noopener noreferrer"&gt;Monopoly game implemented in JavaFX as a student project by Titof Abdellatif Anflous&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=jCBBCBCUt9E" target="_blank" rel="noopener noreferrer"&gt;Space Invaders game&lt;/a&gt;
 by &lt;a href="https://www.youtube.com/@chalodss" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Charles T. (A Bit&amp;rsquo;s Odyssey)&lt;/strong&gt;&lt;/a&gt;
 (explanation in French).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt;&lt;/a&gt;
, a Java game developer, &lt;a href="https://www.youtube.com/watch?v=NOPdE1UoqRw" target="_blank" rel="noopener noreferrer"&gt;published a video&lt;/a&gt;
 showing how to make a simple shooter game in Java with the JavaFX framework.&lt;/li&gt;
&lt;li&gt;GenCross-A mini crossword application written with JavaFX by &lt;strong&gt;u/CasualCompetive&lt;/strong&gt; , fully described on &lt;a href="https://shifitzel.itch.io/gencross" target="_blank" rel="noopener noreferrer"&gt;shifitzel.itch.io/gencross&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-showcase"&gt;Showcase&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/samieteq" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Samie Azubike&lt;/strong&gt;&lt;/a&gt;
 shared a &lt;a href="https://twitter.com/samieteq/status/1583769072273354752" target="_blank" rel="noopener noreferrer"&gt;video in a tweet showing BobFI&lt;/a&gt;
, a nice JavaFX UI to manage tasks, projects, messages, and help you communicate with your team.&lt;/li&gt;
&lt;li&gt;Some new great demos of the visual modeler, written in JavaFX and integrating OpenCV, by &lt;a href="https://twitter.com/Alessio_Vinerbi" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Alessio Vinerbi&lt;/strong&gt;&lt;/a&gt;
:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Alessio_Vinerbi/status/1586044299996631042" target="_blank" rel="noopener noreferrer"&gt;Blending modes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Alessio_Vinerbi/status/1587406474313089026" target="_blank" rel="noopener noreferrer"&gt;Integration of processing nodes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Alessio_Vinerbi/status/1588849677645934594" target="_blank" rel="noopener noreferrer"&gt;Integration of MQTT&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;BTW, this tool is not public yet, but we hope to be able to give it a try ourselves soon&amp;hellip; 😉&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Geolocoder" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Rachael Ellen&lt;/strong&gt;&lt;/a&gt;
 shared a &lt;a href="https://twitter.com/Geolocoder/status/1588208416547254272" target="_blank" rel="noopener noreferrer"&gt;screenshot of an app that sketches polygons&lt;/a&gt;
 to highlight abandoned structures of the long deserted settlement of Shiaba, (IsleOfMull, Scotland). The &lt;a href="https://github.com/Esri/arcgis-runtime-samples-java" target="_blank" rel="noopener noreferrer"&gt;full project is on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/PDFsamOSS" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;PDFsam&lt;/strong&gt;&lt;/a&gt;
, a powerful and professional PDF editor, will have a dark theme in the next major version as &lt;a href="https://twitter.com/PDFsamOSS/status/1588564518644617216" target="_blank" rel="noopener noreferrer"&gt;you can see in this screen recording&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/hansolo_" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
 re-created a little JavaFX control to monitor CPU, memory and temperature of your computer, see &lt;a href="https://github.com/HanSolo/jcpu" target="_blank" rel="noopener noreferrer"&gt;the GitHub project&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/realThanhpv" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Thanhpv&lt;/strong&gt;&lt;/a&gt;
 shared some &lt;a href="https://twitter.com/realThanhpv/status/1590306623364665345" target="_blank" rel="noopener noreferrer"&gt;first screenshots of a new JavaFX application&lt;/a&gt;
 to quickly and accurately build visualized and transparent construction quantity reports for resource planning, cost estimation, risk management.,&amp;hellip; To be continued&amp;hellip;&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://github.com/AmirAli-AZ/PeriodicTable" target="_blank" rel="noopener noreferrer"&gt;simple periodic table app for chemistry lovers on GitHub&lt;/a&gt;
 by &lt;strong&gt;AmirAli&lt;/strong&gt; , based on this &lt;a href="https://github.com/Bowserinator/Periodic-Table-JSON" target="_blank" rel="noopener noreferrer"&gt;periodic table JSON&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-learning"&gt;Learning&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Polypragmatist" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dave Barret&lt;/strong&gt;&lt;/a&gt;
 has a lot of very nice tutorials on his site! For instance &lt;a href="https://www.pragmaticcoding.ca/javafx/Mvci-Introduction" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;An Introduction to Model-View-Controller-Interactor&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/desmond__neba" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Neba Desmond&lt;/strong&gt;&lt;/a&gt;
 on Twitter: &lt;a href="https://twitter.com/desmond__neba/status/1595881606602194944" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Day 24 of #100Daysofcode. Today was about making menus in #JavaFX&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/TheDonRaab" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Donald Raab&lt;/strong&gt;&lt;/a&gt;
 shared a blog about &lt;a href="https://donraab.medium.com/my-first-javafx-application-ee70a1d48cb3" target="_blank" rel="noopener noreferrer"&gt;building his very first JavaFX application with IntelliJ IDEA&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-5-new-on-jfx-central-com"&gt;New on jfx-central.com&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Real-world app: &lt;a href="https://www.jfx-central.com/real_world/hero" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;HERO&amp;rdquo;&lt;/a&gt;
 by &lt;a href="https://twitter.com/P_Duke" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt;&lt;/a&gt;
, a CAD application for calculating the energy efficiency of dwellings.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-6-other"&gt;Other&amp;hellip;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/jpro_one" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;JPro&lt;/strong&gt;&lt;/a&gt;
 announced a &lt;a href="https://www.jpro.one/docs/current/3.1/2022.1.X?" target="_blank" rel="noopener noreferrer"&gt;new version 2022.1.6&lt;/a&gt;
 with a modernized FileUpload API, support for multi-file upload, and browser native scrolling.
&lt;ul&gt;
&lt;li&gt;This means &lt;a href="https://www.jfx-central.com/" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 now also uses this new scrolling implementation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
 expressed his admiration for &lt;a href="https://www.jfx-central.com/tools/cssfx" target="_blank" rel="noopener noreferrer"&gt;CSSFX&lt;/a&gt;
 that saves him a lot of time while developing by providing CSS reloading functionality in your running application.&lt;/li&gt;
&lt;li&gt;Two months ago, &lt;a href="https://twitter.com/rladstaetter" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt;&lt;/a&gt;
 announced the 1000th download of LogoRRR, another JavaFX GUI application! This week he &lt;a href="https://twitter.com/logorrr/status/1588802037923254272" target="_blank" rel="noopener noreferrer"&gt;passed the 2000 downloads&lt;/a&gt;
! Congratz for a great app!!
&lt;ul&gt;
&lt;li&gt;BTW, Robert is looking for help: &lt;a href="https://github.com/rladstaetter/LogoRRR/issues/12" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;How can you extract time instant information from log files&amp;rdquo;&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WebFXProject" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WebFX&lt;/strong&gt;&lt;/a&gt;
 announced that &lt;a href="https://modality.one" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Modality&lt;/strong&gt;&lt;/a&gt;
 chose WebFX as its UI toolkit, being the first real-world WebFX application in development, and is driving forward the WebFX enterprise features. See &lt;a href="https://twitter.com/WebFXProject/status/1589961407469977600" target="_blank" rel="noopener noreferrer"&gt;video in the tweet&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;A lot of the Links Of The Week are found on Twitter. But for a few weeks that medium lost a lot of its fun (in my opinion) since the take-over by Musk. So I&amp;rsquo;m slowly moving to Mastodon as my new &amp;ldquo;source of truth and inspiration&amp;rdquo;. It is a-kind-of-Twitter-alternative, free of advertisements and based on an opensource project. And then it&amp;rsquo;s fun to &lt;a href="https://bigshoulders.city/@wakingrufus/109344242897231710" target="_blank" rel="noopener noreferrer"&gt;discover an (old) Mastodon client application&lt;/a&gt;
 in Kotlin and TornadoFX by &lt;a href="https://bigshoulders.city/@wakingrufus" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;wakingrufus&lt;/strong&gt;&lt;/a&gt;
. You can &lt;a href="https://github.com/wakingrufus/mastodon-jfx" target="_blank" rel="noopener noreferrer"&gt;find it on GitHub&lt;/a&gt;
. It probably needs some updates, but it could be the start of something fun. Take a look!
&lt;ul&gt;
&lt;li&gt;If you want to create a Mastodon account or want to move to a server dedicated to the OpenJDK, Java, JavaFX, JVM,&amp;hellip; community, you can join &lt;a href="https://foojay.social" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;foojay.social&lt;/strong&gt;&lt;/a&gt;
 that was created this week. For more info, check the &lt;a href="https://foojayio.github.io/website/today/foojay-mastodon-service-here-it-is/"&gt;posts on Foojay.io, the website for the Friends Of OpenJDK&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SDIDSA/jwin" target="_blank" rel="noopener noreferrer"&gt;jWin&lt;/a&gt;
 by &lt;strong&gt;Zinelabidine Teyar&lt;/strong&gt;: a Java tool that compiles and packs your app as a Windows installer.&lt;/li&gt;
&lt;li&gt;Teaser: end of November a Foojay Podcast was recorded about JavaFX with &lt;a href="https://twitter.com/johanvos" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
, &lt;a href="https://twitter.com/dlemmermann" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
, &lt;a href="https://twitter.com/gail_asgteach" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gail Anderson&lt;/strong&gt;&lt;/a&gt;
, &lt;a href="https://twitter.com/P_Duke" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt;&lt;/a&gt;
, and &lt;a href="https://twitter.com/SeanMiPhillips" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt;&lt;/a&gt;
. Still some editing to be done and will be published around the 20th of December as a Christmas present 😉&lt;/li&gt;
&lt;/ul&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>How Java Litters Beyond the Heap: Relational Databases</title><link>https://foojayio.github.io/website/today/how-java-litters-beyond-the-heap-relational-databases/</link><pubDate>Tue, 29 Nov 2022 19:08:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-java-litters-beyond-the-heap-relational-databases/</guid><description>&lt;p&gt;As Java developers, we&amp;rsquo;re no strangers to the concept of garbage collection. Our apps generate garbage all the time, and that garbage is meticulously cleaned out by CMS, G1, Azul C4, and other types of collectors.&lt;/p&gt;
&lt;p&gt;However, the story doesn&amp;rsquo;t end with the Java heap. In fact, it is just the beginning.&lt;/p&gt;
&lt;p&gt;In this article, we will create a simple Java application that uses a relational database for the user data and solid-state drives (SSDs) as a storage device. From here, we&amp;rsquo;ll explore how the application generates garbage at the database and SSD levels, while executing the application logic.&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>Controlling a LED Strip with Pi4J and JBang</title><link>https://foojayio.github.io/website/today/controlling-a-led-strip-with-pi4j-and-jbang/</link><pubDate>Mon, 28 Nov 2022 13:07:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/controlling-a-led-strip-with-pi4j-and-jbang/</guid><description>&lt;p&gt;In an earlier post here on Foojay.io, &lt;a href="https://foojayio.github.io/website/today/controlling-electronics-with-jbang-on-the-raspberry-pi/"&gt;JBang and Pi4J were used to control a LED and button connected to a Raspberry Pi&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This week Robert von Burg, one of the main contributors of the Pi4J project, &lt;a href="https://mstdn.gsi.li/@eitch/109324090007015888" target="_blank" rel="noopener noreferrer"&gt;shared on Mastodon&lt;/a&gt;
 another project where a LED strip is controlled via I2C.&lt;/p&gt;
&lt;p&gt;This is the result, notice the Foojay.io startup artwork 😉&lt;/p&gt;
&lt;figure class="wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo wp-embed-aspect-16-9 wp-has-aspect-ratio"&gt;
 &lt;div class="wp-block-embed__wrapper"&gt;
 &lt;iframe title="Controlling a LED strip with Pi4J and JBang" src="https://player.vimeo.com/video/771087170?dnt=1&amp;amp;app_id=122963" width="500" height="281" frameborder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write"&gt;&lt;/iframe&gt;
 &lt;/div&gt;
&lt;/figure&gt;
&lt;h2 id="h2-0-wiring"&gt;Wiring&lt;/h2&gt;
&lt;p&gt;The Raspberry Pi in the video is attached to a custom PCB used by &lt;a href="https://pi4j.com/featured-projects/soft-real-time-plc-written-in-strolch/" target="_blank" rel="noopener noreferrer"&gt;Robert in medical cabinets&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>You’re Doing It Wrong — Recruiting a DevRel</title><link>https://foojayio.github.io/website/today/youre-doing-it-wrong-recruiting-a-devrel/</link><pubDate>Fri, 25 Nov 2022 14:42:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/youre-doing-it-wrong-recruiting-a-devrel/</guid><description>&lt;p&gt;This article was co-written with &lt;a href="https://twitter.com/wesley83" target="_blank" rel="noopener noreferrer"&gt;Wesley Faulkner&lt;/a&gt;
.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wesley Faulkner is a first-generation American, public speaker, and podcaster. He is a founding member of the government transparency group Open Austin and a staunch supporter of racial justice, workplace equity, and neurodiversity. His professional experience spans technology from AMD, Atlassian, Dell, IBM, and MongoDB. Wesley currently works as a head of community at SingleStore, and in addition, co-hosts the developer relations-focused podcast Community Pulse and serves on the board for SXSW.&lt;/p&gt;</description></item><item><title>Gossips: An Event-Bus in a Chatty Neighbourhood</title><link>https://foojayio.github.io/website/today/metaphorical-programming-gossips-event-bus/</link><pubDate>Thu, 24 Nov 2022 08:35:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/metaphorical-programming-gossips-event-bus/</guid><description>&lt;p&gt;In this article, we&amp;rsquo;ll tackle a common issue: &lt;em&gt;simple&lt;/em&gt; communication between system components. With a slightly controversial, themed, domain-driven design.&lt;/p&gt;
&lt;p&gt;Though this post has nothing to do with Android, we need a context where an Event-Bus is needed. And boy oh boy is it needed in Android! And we&amp;rsquo;ll use this as an excuse to write an Event-Bus.&lt;/p&gt;
&lt;p&gt;I chose an analogy for the entire thing: &lt;strong&gt;Gossips&lt;/strong&gt;;\&lt;/p&gt;
&lt;p&gt;It fits with the nature of the library, and the way it&amp;rsquo;ll be used. A global pub-sub component to enable cross-component communication.&lt;/p&gt;</description></item><item><title>Unusual Java: StackTrace Extends Throwable</title><link>https://foojayio.github.io/website/today/unusual-java-stacktrace-extends-throwable/</link><pubDate>Wed, 23 Nov 2022 12:37:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/unusual-java-stacktrace-extends-throwable/</guid><description>&lt;p&gt;There are things you can do in Java you rarely see, generally because there is no use for it.&lt;/p&gt;
&lt;p&gt;However, there are some unusual things in Java that could be surprisingly useful.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://chronicle.software/" title="Chronicle Software" target="_blank" rel="noopener noreferrer"&gt;Chronicle Software&lt;/a&gt;
 uses a number of different useful patterns in its low-level libraries most developers wouldn&amp;rsquo;t generally come across.&lt;/p&gt;
&lt;p&gt;One of them is a class that extends Throwable but isn&amp;rsquo;t an Error or an Exception.&lt;/p&gt;
&lt;h3 id="h3-0-stacktrace-extends-throwable"&gt;StackTrace Extends Throwable&lt;/h3&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java"&gt;package net.openhft.chronicle.core;
/**
* Throwable created purely for the purposes of reporting a stack trace.
* This is not an Error or an Exception and is not expected to be thrown or caught.
*/
public class StackTrace extends Throwable {
 public StackTrace() { this("stack trace"); }
 public StackTrace(String message) { this(message, null); }
 public StackTrace(String message, Throwable cause) {
 super(message + " on " + Thread.currentThread().getName(), cause);
 }

 public static StackTrace forThread(Thread t) {
 if (t == null) return null;
 StackTrace st = new StackTrace(t.toString());
 StackTraceElement[] stackTrace = t.getStackTrace();
 int start = 0;
 if (stackTrace.length &amp;gt; 2) {
 if (stackTrace[0].isNativeMethod()) {
 start++;
 }
 }
 if (start &amp;gt; 0) {
 StackTraceElement[] ste2 = new StackTraceElement[stackTrace.length - start];
 System.arraycopy(stackTrace, start, ste2, 0, ste2.length);
 stackTrace = ste2;
 }

 st.setStackTrace(stackTrace);
 return st;
 }
}&lt;/pre&gt;
&lt;p&gt;Some important side notes to get out of the way first&lt;/p&gt;</description></item><item><title>AP-Loader: A New Way to Use and Embed async-profiler</title><link>https://foojayio.github.io/website/today/ap-loader-a-new-way-to-use-and-embed-async-profiler/</link><pubDate>Tue, 22 Nov 2022 14:54:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/ap-loader-a-new-way-to-use-and-embed-async-profiler/</guid><description>&lt;p&gt;Using &lt;a href="https://github.com/jvm-profiling-tools/async-profiler" target="_blank" rel="noopener noreferrer"&gt;async-profiler&lt;/a&gt;
 can be quite a hassle.&lt;/p&gt;
&lt;p&gt;First, you have to download the right archive from &lt;a href="https://github.com/jvm-profiling-tools/async-profiler/releases/tag/v2.8.3" title="GitHub" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
 for your OS and architecture, then you have to unpack it and place it somewhere.&lt;/p&gt;
&lt;p&gt;Or you get it from your OS distribution, hoping that it is the current version.&lt;/p&gt;
&lt;p&gt;It gets worse if you want to embed it into your library, agent, or application. Library developers cannot just use a Maven dependency but have to create wrapper code and build scripts that deal with packaging the binaries themselves. Or, worse, they depend on a preinstalled version which they do not control.&lt;/p&gt;</description></item><item><title>Friends of OpenJDK at FOSDEM 2023</title><link>https://foojayio.github.io/website/today/friends-of-openjdk-at-fosdem-2023/</link><pubDate>Tue, 22 Nov 2022 08:30:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/friends-of-openjdk-at-fosdem-2023/</guid><description>&lt;p&gt;We&amp;rsquo;re excited to announce that friends of OpenJDK (foojay.io), that is, developers who use OpenJDK on a day to day basis developing tools and technologies in languages such as Java and Kotlin, will be represented at &lt;a href="https://fosdem.org/" target="_blank" rel="noopener noreferrer"&gt;FOSDEM 2023&lt;/a&gt;
 again at the live Foojay DevRoom on Sunday, 5 February 2023!&lt;/p&gt;
&lt;p&gt;Here you can find the CFP (Call For Papers) for submitting your talks, giving you the opportunity to deliver a talk during the Foojay DevRoom.&lt;/p&gt;</description></item><item><title>Foojay Podcast #7: Security in Java -- what do we need to know?</title><link>https://foojayio.github.io/website/today/foojay-podcast-7/</link><pubDate>Mon, 21 Nov 2022 10:22:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-7/</guid><description>&lt;p&gt;For this Foojay Podcast**,** we invited security experts to dive into the fascinating world of secure coding and detecting vulnerabilities in your Java applications.&lt;/p&gt;
&lt;p&gt;How can you make and keep your systems safe?&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s what we want to find out&amp;hellip;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ATXMizsu1Rc?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Internal Security: Hardening Internal Systems</title><link>https://foojayio.github.io/website/today/internal-security-hardening-internal-systems/</link><pubDate>Fri, 18 Nov 2022 15:08:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/internal-security-hardening-internal-systems/</guid><description>&lt;p&gt;60% of security breaches are internal to the organization and yet when we think about security we usually think about vulnerabilities, exploits, etc. All the while, 60% of hacks are just from a person just logging into the system and taking whatever the hell they want.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been thinking about this quite a bit recently. I spent a great deal of time researching security-related issues for a chapter of my upcoming book and unfortunately found very little on hardening internal systems.&lt;/p&gt;</description></item><item><title>Kotlin on the RaspberryPi (Pi4J-Kotlin)</title><link>https://foojayio.github.io/website/today/kotlin-on-the-raspberrypi-pi4j-kotlin/</link><pubDate>Thu, 17 Nov 2022 13:37:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/kotlin-on-the-raspberrypi-pi4j-kotlin/</guid><description>&lt;p&gt;&lt;a href="https://pi4j.com/" target="_blank" rel="noopener noreferrer"&gt;Pi4J&lt;/a&gt;
 is considered the project that brought the JVM to the RaspberryPi.&lt;/p&gt;
&lt;p&gt;It has been up for more than a decade allowing developers to write sophisticated, high-level, yet simple software on the RaspberryPi.&lt;/p&gt;
&lt;p&gt;And we&amp;rsquo;re glad to make it even more simpler and powerful!&lt;/p&gt;
&lt;p&gt;For quite some years now Kotlin has been a most welcome language in the JVM ecosystem and the modern development toolchain.&lt;/p&gt;
&lt;p&gt;Many factors led to this great reality, most notable to me is Kotlin&amp;rsquo;s non-disruptive integration and seamless developer experience.&lt;/p&gt;</description></item><item><title>How Object Reuse Can Reduce Latency and Improve Performance</title><link>https://foojayio.github.io/website/today/how-object-reuse-can-reduce-latency-and-improve-performance/</link><pubDate>Wed, 16 Nov 2022 15:33:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-object-reuse-can-reduce-latency-and-improve-performance/</guid><description>&lt;p&gt;&lt;strong&gt;Become familiar with the art of object reuse by reading this article and learn the pros and cons of different reuse strategies in a multi-threaded Java application. This allows you to write more performant code with less latency.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While the use of objects in object-oriented languages such as Java provides an excellent way of abstracting away complexity, frequent object creation can come with downsides in terms of increased memory pressure and garbage collection which will have an adverse effect on applications&amp;rsquo; latency and performance.&lt;/p&gt;</description></item><item><title>Foojay Mastodon Service: Here It Is!</title><link>https://foojayio.github.io/website/today/foojay-mastodon-service-here-it-is/</link><pubDate>Wed, 16 Nov 2022 08:44:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-mastodon-service-here-it-is/</guid><description>&lt;p&gt;After &lt;a href="https://foojayio.github.io/website/today/lets-start-a-java-mastodon-community-for-friends-of-openjdk/"&gt;thinking about it&lt;/a&gt;
, and &lt;a href="https://foojayio.github.io/website/today/java-mastodon-service-the-feedback/"&gt;collecting the feedback&lt;/a&gt;
, there was only one direction forward: get a Foojay Mastodon service up-and-running!&lt;/p&gt;
&lt;p&gt;And thanks to &lt;a href="https://toot.io/mastodon_hosting.html" target="_blank" rel="noopener noreferrer"&gt;toot.io&lt;/a&gt;
 we don&amp;rsquo;t need to worry about the maintenance and the bill has been covered.&lt;/p&gt;
&lt;p&gt;If you were already following me on Mastodon, you may have noticed that I moved my own account to this new instance, so you can find me now on &lt;a href="https://foojay.social/@frankdelporte/" target="_blank" rel="noopener noreferrer"&gt;foojay.social/@frankdelporte&lt;/a&gt;
.
&lt;img src="https://foojayio.github.io/website/today/foojay-mastodon-service-here-it-is/foojay-on-mastodon-1024x604.png" alt="" loading="lazy"&gt;
 Homepage of the Mastodon server on foojay.social&lt;/p&gt;</description></item><item><title>Payara Launches Payara Cloud – Serverless for Jakarta EE</title><link>https://foojayio.github.io/website/today/payara-launches-payara-cloud-serverless-approach-for-jakarta-ee/</link><pubDate>Tue, 15 Nov 2022 16:31:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/payara-launches-payara-cloud-serverless-approach-for-jakarta-ee/</guid><description>&lt;h2 id="h2-0-the-cloud-native-application-runtime-automates-tasks-like-kubernetes-deployment-ingress-and-yaml"&gt;The cloud native application runtime automates tasks like Kubernetes deployment, ingress and YAML.&lt;/h2&gt;
&lt;p&gt;Payara has launched a new product &lt;a href="https://www.globenewswire.com/Tracker?data=vWpu_qnRrkJcVsDvJOwJah09cL0__ihD70JQn1PC6vbdZhbW7zbNxo2ghVnHWkXX3jO6POtRb8Gjgiaa-vrN66gNjzvUPyiITCnoWqKAaYV4D440OmdOMwAVS0lLCo76" target="_blank" rel="noopener noreferrer"&gt;++Payara Cloud++&lt;/a&gt;
, designed to run Jakarta EE apps easily and quickly on the cloud.&lt;/p&gt;
&lt;p&gt;Developers simply upload any web application following the Jakarta Web Profile specification and run it in a containerized Payara Micro instance.&lt;/p&gt;
&lt;p&gt;Payara Cloud deals with infrastructure, allowing them to build the code and concentrate on business logic.&lt;/p&gt;</description></item><item><title>EJB support in Piranha via CDI</title><link>https://foojayio.github.io/website/today/ejb-support-in-piranha-via-cdi/</link><pubDate>Tue, 15 Nov 2022 14:14:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/ejb-support-in-piranha-via-cdi/</guid><description>&lt;p&gt;Enterprise Beans was once the face of Java EE, but as we &lt;a href="https://foojayio.github.io/website/today/the-future-of-ejb/"&gt;discussed in the previous article&lt;/a&gt;
, is currently de-emphasised in Jakarta EE.&lt;/p&gt;
&lt;p&gt;However, since there&amp;rsquo;s so much existing code using Enterprise Beans, a certain level of support is still desired.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://piranha.cloud" target="_blank" rel="noopener noreferrer"&gt;Piranha Cloud&lt;/a&gt;
, a relatively new runtime supporting Jakarta EE, takes a somewhat novel approach to Enterprise Beans. Instead of implementing a separate container, Piranha Cloud, via the OmniBeans project, maps Enterprise Beans annotations to equivalent functionality in CDI itself, or to technologies in Jakarta EE leveraging CDI (such as Jakarta Transactions).&lt;/p&gt;</description></item><item><title>Java Mastodon Service: The Feedback</title><link>https://foojayio.github.io/website/today/java-mastodon-service-the-feedback/</link><pubDate>Tue, 15 Nov 2022 08:40:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-mastodon-service-the-feedback/</guid><description>&lt;p&gt;Yesterday we launched this idea: &lt;a href="https://foojayio.github.io/website/today/lets-start-a-java-mastodon-community-for-friends-of-openjdk/"&gt;Let&amp;rsquo;s Start a Java Mastodon Community for Friends of OpenJDK!&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;At the same time, we shared this post on &lt;a href="https://twitter.com/foojayio/status/1592151003264155656" target="_blank" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;
 (yes, the irony), &lt;a href="https://mastodon.social/@FrankDelporte/109342467245148388" target="_blank" rel="noopener noreferrer"&gt;Mastodon&lt;/a&gt;
, and &lt;a href="https://www.linkedin.com/posts/frankdelporte_lets-start-a-java-mastodon-community-for-activity-6997919205920489472-Ei66" target="_blank" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see what the community thinks&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-tl-dr"&gt;TL;DR;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, a lot of likes and +1, most of the reactions think this would be a good idea.&lt;/li&gt;
&lt;li&gt;No, not everyone is convinced Twitter will disappear and an alternative is needed.&lt;/li&gt;
&lt;li&gt;Nobody volunteered (yet) to assist (pay?) for the server and moderate 😉&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-feedback"&gt;Feedback&lt;/h2&gt;
&lt;p&gt;Some of the confirmations&lt;/p&gt;</description></item><item><title>Let's Start a Java Mastodon Community for Friends of OpenJDK!</title><link>https://foojayio.github.io/website/today/lets-start-a-java-mastodon-community-for-friends-of-openjdk/</link><pubDate>Mon, 14 Nov 2022 13:41:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/lets-start-a-java-mastodon-community-for-friends-of-openjdk/</guid><description>&lt;p&gt;Twitter has been my absolute &amp;ldquo;source of truth&amp;rdquo; for many years.&lt;/p&gt;
&lt;p&gt;For me, it&amp;rsquo;s the ideal medium to pick up new technologies, learn from experts, meet new people, etc.&lt;/p&gt;
&lt;p&gt;It even seemed I was able to &amp;ldquo;train the model&amp;rdquo; by carefully selecting the people I follow, as it has never been an abusive or hostile environment as it is perceived by many others.&lt;/p&gt;
&lt;p&gt;Many years ago I already created an account on Mastodon, but was not very active on it, as most of the people I follow, weren&amp;rsquo;t active there either.&lt;/p&gt;</description></item><item><title>Java Profiling Overview</title><link>https://foojayio.github.io/website/today/java-profiling-overview/</link><pubDate>Mon, 14 Nov 2022 09:14:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-profiling-overview/</guid><description>&lt;p&gt;When I ask Java developers whether they do profile, the answer is usually &amp;ldquo;no&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;The few that profiled before usually used VisualVM as a student and maybe JProfiler or YourKit years ago at work.&lt;/p&gt;
&lt;p&gt;One of the reasons for this is a lack of available information and thus knowledge for everyday Java developers.&lt;/p&gt;
&lt;p&gt;This is a pity as profiling should be a part of the tool belt for every experienced developer (not just for Java). The problem is that most of the open-source profilers are targeted to the OpenJDK developers (or their colleagues), even if they won&amp;rsquo;t admit it. This can be seen in the lack of entry-level material on this topic and even the little that is out there is distributed across multiple conference websites, blogs, YouTube channels, and Twitter accounts.&lt;/p&gt;</description></item><item><title>API Mocking: Essential and Redundant</title><link>https://foojayio.github.io/website/today/api-mocking-essential-and-redundant/</link><pubDate>Fri, 11 Nov 2022 08:13:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/api-mocking-essential-and-redundant/</guid><description>&lt;p&gt;I love contradictions where both states of truth can work at the same time.&lt;/p&gt;
&lt;p&gt;Case in point is this tweet about mocking from the other week:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/api-mocking-essential-and-redundant/Screen-Shot-2022-10-25-at-14.53.38-700x263.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://twitter.com/mcsee1/status/1582762075289374720" target="_blank" rel="noopener noreferrer"&gt;If you use mocks, you are not testing&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;My answer was:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/api-mocking-essential-and-redundant/Screen-Shot-2022-10-25-at-14.55.58-700x457.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[Mocks help assert limited fixed functionality and they do it FAST.&lt;/p&gt;
&lt;p&gt;Which is what unit tests are about. Mocks are an essential part of a wider quality strategy. Otherwise you will spend your time in integration test churn.&lt;/p&gt;</description></item><item><title>The Future of EJB</title><link>https://foojayio.github.io/website/today/the-future-of-ejb/</link><pubDate>Thu, 10 Nov 2022 16:06:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-future-of-ejb/</guid><description>&lt;figure class="alignleft is-resized"&gt;
 &lt;img decoding="async" src="beans-300x260.jpg" alt="" class="wp-image-60965" width="225" height="195"&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;EJB, or Enterprise Beans, are Java classes with a number of container provided services attached to them, such as transactions, remoting and security. In this article we will take a look at what we can expect for EJB in the future.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Once upon a time EJB was almost synonymous with what was called Java EE or J2EE back then (Jakarta EE now). It suffered from many issues though, although it did incrementally got better. We&amp;rsquo;ll explore some of those issues next.&lt;/p&gt;</description></item><item><title>What is Jakarta RPC?</title><link>https://foojayio.github.io/website/today/what-is-jakarta-rpc/</link><pubDate>Thu, 10 Nov 2022 15:32:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-is-jakarta-rpc/</guid><description>&lt;p&gt;&lt;em&gt;Originally written by Alfonso Altamirano&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Jakarta EE is at the forefront of innovation in enterprise Java. This means staying close to the community and working on new specifications to meet developer needs.&lt;/p&gt;
&lt;p&gt;Now that &lt;a href="https://blog.payara.fish/payara-welcomes-jakarta-ee-10" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE 10&lt;/a&gt;
 has been released, the first release to bring new features since the move to the &lt;code&gt;jakarta &lt;/code&gt;namespace, all the upcoming releases of Jakarta EE will bring new features. The improvements will keep arriving!&lt;/p&gt;</description></item><item><title>Reducing Tail Latencies with Chronicle Queue Enterprise</title><link>https://foojayio.github.io/website/today/reducing-tail-latencies-with-chronicle-queue-enterprise/</link><pubDate>Wed, 09 Nov 2022 15:07:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/reducing-tail-latencies-with-chronicle-queue-enterprise/</guid><description>&lt;p&gt;Persistent queue solutions are frequently used when designing low-latency applications.&lt;/p&gt;
&lt;p&gt;The problem is that high sustained message rates, or bursty workloads, can lead to delays caused by the OS or hardware which are challenging to mitigate.&lt;/p&gt;
&lt;p&gt;In this article, we will describe how &lt;a href="https://chronicle.software/queue-enterprise/" title="Chronicle Queue Enterprise" target="_blank" rel="noopener noreferrer"&gt;Chronicle Queue Enterprise&lt;/a&gt;
 solves this.&lt;/p&gt;
&lt;h3 id="h3-0-background"&gt;Background&lt;/h3&gt;
&lt;p&gt;When benchmarking Java low-latency persistent queue solutions, latencies tend to be excellent up to high percentiles until sustained throughput limits are reached; these sustained throughput limits are determined by disk performance, OS version, and configuration.&lt;/p&gt;</description></item><item><title>Java on Azure Tooling Update – October 2022</title><link>https://foojayio.github.io/website/today/java-on-azure-tooling-update-october-2022/</link><pubDate>Mon, 07 Nov 2022 22:04:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-azure-tooling-update-october-2022/</guid><description>&lt;p&gt;Hi everyone, welcome back to the October update of Java on Azure Tooling.&lt;/p&gt;
&lt;p&gt;In this update, we will introduce our new roadmap in the next few months.&lt;/p&gt;
&lt;p&gt;In addition, we have made improvements for developers to use deployment slots for Azure Functions in IDEs directly with our latest release.&lt;/p&gt;
&lt;p&gt;Please download and install &lt;a href="https://aka.ms/azuretoolkit/intellijidea" title="the Azure Toolkit for IntelliJ" target="_blank" rel="noopener noreferrer"&gt;the Azure Toolkit for IntelliJ&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;We hope you like these features and enjoy a smooth experience with our Azure toolkit. So let us get started.&lt;/p&gt;</description></item><item><title>Geo-routing with Apache APISIX</title><link>https://foojayio.github.io/website/today/geo-routing-with-apache-apisix/</link><pubDate>Mon, 07 Nov 2022 16:41:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/geo-routing-with-apache-apisix/</guid><description>&lt;p&gt;Apache APISIX, the Apache-led API Gateway, comes out of the box with many plugins to implement your use case.&lt;/p&gt;
&lt;p&gt;Sometimes, however, the plugin you&amp;rsquo;re looking for is not available.&lt;/p&gt;
&lt;p&gt;While creating your own is always possible, it&amp;rsquo;s sometimes necessary.&lt;/p&gt;
&lt;p&gt;Today, I&amp;rsquo;ll show you how to route users according to their location without writing a single line of Lua code.&lt;/p&gt;
&lt;h2 id="h2-0-why-geo-routing"&gt;Why geo-routing?&lt;/h2&gt;
&lt;p&gt;Geo-routing is to forward HTTP requests based on a user&amp;rsquo;s physical location, inferred from their IP. There are many reasons to do that, and here is a couple of them.&lt;/p&gt;</description></item><item><title>Observability is Cultural</title><link>https://foojayio.github.io/website/today/observability-is-cultural/</link><pubDate>Fri, 04 Nov 2022 15:23:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/observability-is-cultural/</guid><description>&lt;p&gt;I&amp;rsquo;m guilty of applying the word debugging for practically anything.&lt;/p&gt;
&lt;p&gt;My kids&amp;rsquo; legos won&amp;rsquo;t fit, let&amp;rsquo;s debug that.&lt;/p&gt;
&lt;p&gt;Observability is one of the few disciplines that actually warrant that moniker, it is debugging. But traditional debugging doesn&amp;rsquo;t really fit with observability practices. I usually call it &amp;ldquo;precognitive debugging&amp;rdquo;. We need to have a rough idea in advance of what our debugging process will look like for effective observability troubleshooting.&lt;/p&gt;
&lt;p&gt;Note that this doesn&amp;rsquo;t apply to developer observervability which is a special case. That&amp;rsquo;s a more dynamic process that more closely resembles a typical debugging session. This is about more traditional monitoring and observability. Where we need to first instrument the system and add logs, metrics, etc. to cover the information we would need as we will later investigate the issue.&lt;/p&gt;</description></item><item><title>Clean Ways to Shutdown Spring Boot Applications</title><link>https://foojayio.github.io/website/today/clean-shutdown-of-spring-boot-applications/</link><pubDate>Fri, 04 Nov 2022 14:11:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/clean-shutdown-of-spring-boot-applications/</guid><description>&lt;p&gt;For the last three to four years, I have been working on Spring Boot and its associations, such as Spring Cloud, Spring Data, and Spring Security.&lt;/p&gt;
&lt;p&gt;I have always been tempted to use the combination of Ctrl+C and task kill for the purpose of killing Spring Boot applications or processes. It can be automated by a batch script, but usually I was quite lazy to do this myself, as the combination of actions used to serve the purpose!&lt;/p&gt;</description></item><item><title>CVE-2022-42889: Apache Commons Text (Text4Shell) Vulnerability</title><link>https://foojayio.github.io/website/today/reviewing-cve-2022-42889-arbitrary-code-execution-vulnerability-in-apache-commons-text-text4shell/</link><pubDate>Thu, 03 Nov 2022 14:56:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/reviewing-cve-2022-42889-arbitrary-code-execution-vulnerability-in-apache-commons-text-text4shell/</guid><description>&lt;p&gt;First things first, let&amp;rsquo;s be clear that &lt;strong&gt;this is NOT a new Log4Shell or Spring4Shell vulnerability&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Although it is a remote code execution issue, the impact is neither as severe nor as easily exploitable as the issue in Log4j from December 2021.&lt;/p&gt;
&lt;p&gt;Similar to the Log4j issue, the essence of the problem is that you can perform a lookup that can then be misused.&lt;/p&gt;
&lt;p&gt;However, the Log4shell vulnerability was very easy to exploit &amp;mdash; which is not necessarily the case this time.&lt;/p&gt;</description></item><item><title>Creating Terabyte Sized Queues with Low-Latency</title><link>https://foojayio.github.io/website/today/creating-terabyte-sized-queues-with-low-latency/</link><pubDate>Wed, 02 Nov 2022 10:45:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-terabyte-sized-queues-with-low-latency/</guid><description>&lt;p&gt;Queues are often fundamental components in software design patterns.&lt;/p&gt;
&lt;p&gt;But, what if there are millions of messages received every second and multi-process consumers need to be able to read the complete ledger of all messages?&lt;/p&gt;
&lt;p&gt;Java can only hold so much information before the heap becomes a limiting factor with high-impacting garbage collections as a result, potentially preventing us from fulfilling targeted SLAs or even halting the JVM for seconds or even minutes.&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>Discuss the Problem, Not the Solution!</title><link>https://foojayio.github.io/website/today/discuss-problem-not-solution/</link><pubDate>Tue, 01 Nov 2022 10:56:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/discuss-problem-not-solution/</guid><description>&lt;p&gt;As a tech guy, I love to discuss technologies. And as discussions go, it&amp;rsquo;s generally the comparison kind: JVM vs. Net, Java vs. Kotlin, Go vs. Rust, Maven vs. the unspeakable one, etc.&lt;/p&gt;
&lt;p&gt;However, it&amp;rsquo;s too easy to fall into the quagmire of the merits and flaws of our beloved toys, talk about them for hours, and not reach a satisfactory agreement.&lt;/p&gt;
&lt;p&gt;A couple of years ago, I worked as a &amp;ldquo;Solution Architect&amp;rdquo;.&lt;/p&gt;</description></item><item><title>JavaFX Links Of October</title><link>https://foojayio.github.io/website/today/javafx-links-of-october/</link><pubDate>Mon, 31 Oct 2022 16:15:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-links-of-october/</guid><description>&lt;p&gt;When I (re)started the JavaFX Links Of The Week on &lt;a href="https://www.jfx-central.com/home" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
 in September, I was wondering if there would be enough material to share every week.&lt;/p&gt;
&lt;p&gt;But that was a stupid mistake as you can see below in the summary of what happened in October&amp;hellip; 🙂&lt;/p&gt;
&lt;h2 id="h2-0-javafx-19-and-20"&gt;JavaFX 19 and 20&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;JavaFX 19 just got released a few weeks ago, but &lt;a href="https://twitter.com/johanvos" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
 is already &lt;a href="https://twitter.com/johanvos/status/1575159889994911744?t=PJn2au0k_icq2qseeLVOXA&amp;amp;amp;s=09" target="_blank" rel="noopener noreferrer"&gt;looking forward&lt;/a&gt;
 to the next one: &lt;em&gt;a really-worth-mentioning improvement that will be in JavaFX 20 is the update to MarlinFX 0.9.4.6 by &lt;a href="https://twitter.com/laurent_bourges" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Laurent Bourgès&lt;/strong&gt;&lt;/a&gt;
. Thank you very much Laurent for your contributions. They are an important part to the success of JavaFX. See &lt;a href="https://bugs.openjdk.org/browse/JDK-8287604" target="_blank" rel="noopener noreferrer"&gt;JDK-8287604&lt;/a&gt;
.&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/users/bourgesl/projects/1/views/1" target="_blank" rel="noopener noreferrer"&gt;Laurent is even sharing his TODO list on GitHub&lt;/a&gt;
 in case you are curious about what he is working on&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Want to test JavaFX 20 Early Access? It&amp;rsquo;s already &lt;a href="https://gluonhq.com/products/javafx/#ea" target="_blank" rel="noopener noreferrer"&gt;available on the &lt;strong&gt;Gluon&lt;/strong&gt; website&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;Up till now, each of the newer JavaFX versions could run with a lower JDK, e.g. JavaFX 17 works with JDK 11. But this will change as &lt;a href="https://mail.openjdk.org/pipermail/openjfx-dev/2022-October/036089.html" target="_blank" rel="noopener noreferrer"&gt;was mentioned on the mailinglist&lt;/a&gt;
: &amp;ldquo;JavaFX 20 requires JDK 17 or later.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
 shared &lt;a href="https://twitter.com/dlemmermann/status/1582021109423042562" target="_blank" rel="noopener noreferrer"&gt;a screenshot in a tweet&lt;/a&gt;
 of the &lt;a href="https://github.com/openjdk/jfx/pulls?q=is%3Apr&amp;#43;is%3Aopen&amp;#43;label%3Arfr" target="_blank" rel="noopener noreferrer"&gt;pull requests in the openjdk/jfx project&lt;/a&gt;
: &amp;ldquo;Wow, 47 pull requests &amp;ldquo;ready for review&amp;rdquo; in #OpenJFX. Looks like we have a traffic jam. Some several years old. Some ending with last comment &amp;ldquo;can you review this?&amp;rdquo; 🙂 Hope Oracle really does increase their #javafx team member count.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;At JavaOne on October 20th, some JavaFX related announcements were made.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/JavaFXpert/status/1583174188587589632" target="_blank" rel="noopener noreferrer"&gt;A tweet&lt;/a&gt;
 by &lt;a href="https://twitter.com/JavaFXpert" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;James Weaver&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;Great #JavaFX announcements from @kevinrushforth after being introduced by @mono_quito89 at #JavaOne, while bandmate and @Java legend @BrianVerm mixes drinks. Friend and colleague @johanvos at @GluonHQ highlighted in the process.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;And a &lt;a href="https://www.linkedin.com/posts/btratra_java-javafx-openjdk-activity-6988940880757882880-s4RA?utm_source=share&amp;amp;amp;utm_medium=member_desktop" target="_blank" rel="noopener noreferrer"&gt;LinkedIn message&lt;/a&gt;
 by &lt;a href="https://twitter.com/BTraTra" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Bernard Traversat&lt;/strong&gt;&lt;/a&gt;
: &amp;ldquo;We announced today we will be producing JavaFX build for JDK 20! Providing a modern UI toolkit for the Java platform will continue to make Java the most compelling platform for educators to teach programming and for UI innovators to explore new rich application UI designs.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;So the latest JavaFX will not only be available on the &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;Gluon website&lt;/a&gt;
, but also on &lt;a href="https://jdk.java.net/javafx20/" target="_blank" rel="noopener noreferrer"&gt;jdk.java.net/javafx20&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Curious what the impact of this announcement will be and what we can share here next week&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-scenebuilder"&gt;SceneBuilder&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/cpreisler" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Chad Preisler&lt;/strong&gt;&lt;/a&gt;
 shared &lt;a href="https://www.youtube.com/watch?v=auao5UNrUcg" target="_blank" rel="noopener noreferrer"&gt;a video showing how to create a form using SceneBuilder and JavaFX&lt;/a&gt;
, getting the form to resize the correct way.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/GluonHQ/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gluon&lt;/strong&gt;&lt;/a&gt;
 announced the release of &lt;strong&gt;Gluon Scene Builder 19&lt;/strong&gt; . You can get it from &lt;a href="https://github.com/gluonhq/scenebuilder/releases/tag/19.0.0" target="_blank" rel="noopener noreferrer"&gt;github.com/gluonhq/scenebuilder/releases&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;It incorporates JavaFX 19 wich brings lots of improvements, so you benefit &lt;a href="https://openjfx.io/highlights/19/" target="_blank" rel="noopener noreferrer"&gt;from all these release highlights&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Raumzeitfalle/status/1578692849746718720?t=mNxAaRN22Frjkf6kTfGy-w&amp;amp;amp;s=09" target="_blank" rel="noopener noreferrer"&gt;This tweet shows a video&lt;/a&gt;
 of a bugfix on macOS where copy&amp;amp;paste often resulted in entries doubled after paste. A new preference setting &amp;ldquo;alternative paste behavior for text input&amp;rdquo; is available on macOS and is enabled by default.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-devoxx-belgium"&gt;Devoxx Belgium&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Devoxx Belgium (10-14 October) &lt;a href="https://twitter.com/Devoxx/status/1577934708100456448" target="_blank" rel="noopener noreferrer"&gt;thanks Gluon in a tweet&lt;/a&gt;
 for their continued support for the #OSS Devoxx mobile app. Sources of the DevoxxBadges JavaFX app &lt;a href="https://github.com/gluonhq/DevoxxBadges" target="_blank" rel="noopener noreferrer"&gt;are available on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;The tweet wall was a crucial part of the information exchange between the visitors of Devoxx, showing the upcoming talks, highest ranked talks, etc. This tweet wall is a community effort driven by &lt;a href="https://twitter.com/jugbodensee" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;@jugbodensee&lt;/strong&gt;&lt;/a&gt;
 members, with the support of Gluon, and the &lt;a href="https://github.com/TweetWallFX/TweetwallFX" target="_blank" rel="noopener noreferrer"&gt;sources are on GitHub&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/johanvos" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
 shared a &lt;a href="https://twitter.com/johanvos/status/1580097937270788096" target="_blank" rel="noopener noreferrer"&gt;picture in a tweet&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;By the way (1), TweetwallFX has its own &lt;a href="https://twitter.com/TweetwallFX" target="_blank" rel="noopener noreferrer"&gt;Twitter account @TweetwallFX&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;By the way (2), the official &amp;ldquo;Devoxx&amp;rdquo; mobile app is also a JavaFX project, created by Gluon, that you can find &lt;a href="https://github.com/devoxx/MyDevoxxGluon" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
. Check the GitHub workflows to learn &lt;a href="https://github.com/devoxx/MyDevoxxGluon/tree/main/.github/workflows" target="_blank" rel="noopener noreferrer"&gt;more about how it is building and publishing to the Google and Apple stores&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-various-news-from-the-web"&gt;Various news from &amp;ldquo;The Web&amp;rdquo;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
 announced &lt;a href="https://twitter.com/dlemmermann/status/1576974458761486338" target="_blank" rel="noopener noreferrer"&gt;in a tweet&lt;/a&gt;
 version 11.12.1 of CalendarFX with new views for displaying resource allocations, improved editing behaviour, plenty of fixes and enhancements. You can &lt;a href="https://github.com/dlsc-software-consulting-gmbh/CalendarFX" target="_blank" rel="noopener noreferrer"&gt;find it on GitHub&lt;/a&gt;
, and new link for the &lt;a href="https://dlsc-software-consulting-gmbh.github.io/CalendarFX/" target="_blank" rel="noopener noreferrer"&gt;documentation is here&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;Dirk also added a new custom control to &lt;a href="https://github.com/dlsc-software-consulting-gmbh/GemsFX" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;GemsFX&lt;/strong&gt;&lt;/a&gt;
 for displaying screens and windows of a JavaFX application, inspired by MacOS. For a screenshot, check &lt;a href="https://twitter.com/dlemmermann/status/1578426485299449857?t=bCzbA3BPMatyoQVM362l-A&amp;amp;amp;s=09" target="_blank" rel="noopener noreferrer"&gt;this tweet&lt;/a&gt;
 and a &lt;a href="https://www.youtube.com/watch?v=Kv7jo9fF9tc" target="_blank" rel="noopener noreferrer"&gt;demo is available on YouTube&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;He also announced release 11.12.2 of &lt;a href="https://www.jfx-central.com/libraries/calendarfx" target="_blank" rel="noopener noreferrer"&gt;CalendarFX&lt;/a&gt;
 with various bug fixes related to time zones and recurring entries.&lt;/li&gt;
&lt;li&gt;And he shared &lt;a href="https://www.youtube.com/watch?v=kwVXO0MdIdk" target="_blank" rel="noopener noreferrer"&gt;this video&lt;/a&gt;
 showing a custom JavaFX control that can be used to display groups of notifications either expanded or as a stack, inspired by the MacOS notification center. However, plenty of customisation options via API or CSS are available to make this control fit into any application.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/rladstaetter" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt;&lt;/a&gt;
 wanted to use JavaFX on a Windows aarch64 (virtual) machine, and &lt;a href="http://ladstatt.blogspot.com/2022/10/a-javafx-fanboy-forgets-about-his.html" target="_blank" rel="noopener noreferrer"&gt;described the process to build it from the sources&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AlmasBaim/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt;&lt;/a&gt;
 shared &lt;a href="https://twitter.com/AlmasBaim/status/1576154186315882496" target="_blank" rel="noopener noreferrer"&gt;a video in a tweet&lt;/a&gt;
 showing a bridge generated with FXGL (game engine) to illustrate a distance joint (which constrains two entities to preserve their distance to each other) that produces some interesting results. Entities with different densities are thrown at it and fly through the screen using physics.
&lt;ul&gt;
&lt;li&gt;Related to FXGL: the book &lt;a href="https://www.jfx-central.com/books/fxgl17" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Learn JavaFX Game and App Development with FXGL 17&amp;rdquo;&lt;/a&gt;
 by &lt;a href="https://twitter.com/AlmasBaim/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Almas Baim&lt;/strong&gt;&lt;/a&gt;
 got reviewed by &lt;a href="https://twitter.com/FrankDelporte" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt;&lt;/a&gt;
, read it on &lt;a href="https://foojayio.github.io/website/today/book-review-learn-javafx-game-and-app-development-with-fxgl-17/"&gt;foojay.io&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/orango_mango" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OrangoMango&lt;/strong&gt;&lt;/a&gt;
 shared a &lt;a href="https://github.com/OrangoMango/RubikCube" target="_blank" rel="noopener noreferrer"&gt;project to visualize and solve a Rubik&amp;rsquo;s Cube with JavaFX&lt;/a&gt;
, that is also available as an Android APK. It&amp;rsquo;s inspired by a &lt;a href="https://github.com/gluonhq/gluon-samples/tree/master/rubiks-cube" target="_blank" rel="noopener noreferrer"&gt;similar example created by Gluon&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/iAbhinay" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Abhinay Agarwal&lt;/strong&gt;&lt;/a&gt;
 shared a few very interesting JavaFX links:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://edencoding.com/category/javafx/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;edencoding.com&lt;/strong&gt;&lt;/a&gt;
 has the &amp;ldquo;Most vibrant collection of JavaFX articles I have come across recently. Kudos to &lt;a href="https://twitter.com/NerdyEden" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Ed Eden-Rump&lt;/strong&gt; AKA NerdyEden&lt;/a&gt;
.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A list created by &lt;strong&gt;Abhinay&lt;/strong&gt; himself with all the flags that might help you while debugging a JavaFX application on &lt;a href="https://abhinay.xyz/javafx/2022/10/03/OpenJFX-flags.html" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Flags for JavaFX application&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/rladstaetter" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt;&lt;/a&gt;
 shared a &lt;a href="https://github.com/rladstaetter/javafx-advancedinstaller-example" target="_blank" rel="noopener noreferrer"&gt;HelloWorld example project on GitHub&lt;/a&gt;
 to show how to install a JavaFX app with a Windows Installer using &lt;a href="https://twitter.com/advinst" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Advanced Installer&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/FrankDelporte" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Frank Delporte&lt;/strong&gt;&lt;/a&gt;
 spoke on Devoxx in Antwerp about &lt;a href="https://pi4j.com/" target="_blank" rel="noopener noreferrer"&gt;Pi4J&lt;/a&gt;
 and showed a JavaFX application running on a Raspberry Pi showing sensor data with the TilesFX library of &lt;a href="https://twitter.com/hansolo_" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gerrit Grunwald&lt;/strong&gt;&lt;/a&gt;
: &lt;a href="https://www.youtube.com/watch?v=lnV0Hn2tias" target="_blank" rel="noopener noreferrer"&gt;recording of the presentation on YouTube&lt;/a&gt;
 and &lt;a href="https://webtechie.be/post/2022-10-10-devoxx-belgium-links/" target="_blank" rel="noopener noreferrer"&gt;links used in the presentation&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt;&lt;/a&gt;
 added two new controls to the FXComponents library:
&lt;ul&gt;
&lt;li&gt;BlockingProgressBar: &lt;a href="https://twitter.com/P_Duke/status/1580570179376816129" target="_blank" rel="noopener noreferrer"&gt;check the video example in this tweet&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;ReordableListView, a ListView that can be reordered with the mouse by drag and dropping its cells and also supports drag and dropping from an outside source into a ListView cell position as you can see &lt;a href="https://twitter.com/P_Duke/status/1582732021448978433" target="_blank" rel="noopener noreferrer"&gt;in the video in this Tweet&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/wiverson" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Will Iverson&lt;/strong&gt;&lt;/a&gt;
 updated his &lt;a href="https://github.com/wiverson/maven-jpackage-template" target="_blank" rel="noopener noreferrer"&gt;Java, JavaFX and Swing template for generating nice native installers for macOS, Windows and Ubuntu&lt;/a&gt;
 with a new single GitHub Action matrix script to generate all the installers w/nice human-friendly, matching version numbers.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/lanthale" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Clemens Lanthaler&lt;/strong&gt;&lt;/a&gt;
 released &lt;a href="https://www.jfx-central.com/real_world/photoslide" target="_blank" rel="noopener noreferrer"&gt;PhotoSlide 1.3&lt;/a&gt;
 with many small updates and fixes including new version of librawfx and libheiffx and updates to JDK19/Javafx19 with better Multi-Threading again.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://github.com/rladstaetter/LogoRRR/releases/tag/22.3.0" target="_blank" rel="noopener noreferrer"&gt;new release 22.3.0&lt;/a&gt;
 of LogoRRR - log file viewer - &lt;a href="https://twitter.com/logorrr/status/1581654374719557632" target="_blank" rel="noopener noreferrer"&gt;has been announced&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WebFXProject" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WebFX&lt;/strong&gt;&lt;/a&gt;
 - a JavaFX to JavaScript transpiler - can now access local files, as you can read on &lt;a href="https://github.com/webfx-project/webfx/discussions/14" target="_blank" rel="noopener noreferrer"&gt;this GitHub discussion&lt;/a&gt;
, with a &lt;a href="https://files.webfx.dev/" target="_blank" rel="noopener noreferrer"&gt;demo on files.webfx.dev&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webfx.dev/#/demos" target="_blank" rel="noopener noreferrer"&gt;This new demo&lt;/a&gt;
 shows MediaView added to the JavaFX Media emulation, which means that WebFX can now display videos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;On September 30, &lt;a href="https://twitter.com/gail_asgteach" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gail Anderson&lt;/strong&gt;&lt;/a&gt;
 was speaking on IntelliJ IDEA Conference about &amp;ldquo;JavaFX for Mobile Development&amp;rdquo;. We promised here to share the link to the video when available, and &lt;a href="https://www.youtube.com/watch?v=-8epeIFdKWo&amp;amp;amp;t=14498s" target="_blank" rel="noopener noreferrer"&gt;here it is&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&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 several videos with an impressive data visualization tool.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1584287746637828098" target="_blank" rel="noopener noreferrer"&gt;Arcing through decoded hyper-dimensional space using #Java and #JavaFX&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=NXHQY5Fh1Do" target="_blank" rel="noopener noreferrer"&gt;Trinity JavaFX 3D Convex Hull Generator&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SeanMiPhillips/status/1584204309956202496" target="_blank" rel="noopener noreferrer"&gt;Hull Point Cloud using #JavaFX 3D&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/jjenkov" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jakob Jenkov&lt;/strong&gt;&lt;/a&gt;
 asked &lt;a href="https://twitter.com/jjenkov/status/1584090714320695296" target="_blank" rel="noopener noreferrer"&gt;in this tweet with a lot of interesting replies&lt;/a&gt;
: &amp;ldquo;Hi JavaFXers - do we have some JavaFX application design patterns somewhere? Advice about how to structure a #Java + #JavaFX application so the code base and application does not get messy as the app grows? I have some ideas -but I&amp;rsquo;d like to see what the rest of you have too :-)&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-new-content-on-jfx-central-com"&gt;New content on jfx-central.com&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Real World App: &lt;a href="https://www.jfx-central.com/real_world/jabref" target="_blank" rel="noopener noreferrer"&gt;JabRef&lt;/a&gt;
 is an open-source, cross-platform citation and reference management tool, see &lt;a href="https://www.jabref.org/" target="_blank" rel="noopener noreferrer"&gt;jabref.org&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Tool: &lt;a href="https://www.jfx-central.com/tools/conveyor" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Conveyor&amp;rdquo;&lt;/a&gt;
 by &lt;a href="https://twitter.com/HydraulicCorp" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hydraulic&lt;/strong&gt;&lt;/a&gt;
, is an alternative/replacement for the jpackage tool but with support for (background) updates, signing, notarisation.&lt;/li&gt;
&lt;li&gt;Another library by &lt;a href="https://twitter.com/P_Duke" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt;&lt;/a&gt;
: &lt;a href="https://www.jfx-central.com/libraries/fxparallax" target="_blank" rel="noopener noreferrer"&gt;FXParallax&lt;/a&gt;
. This framework adds controls to add Parallax effects to JavaFX application, this effect can add a sense of depth (3D like) to where it&amp;rsquo;s used.&lt;/li&gt;
&lt;li&gt;Coming soon&amp;hellip; &lt;a href="https://twitter.com/FlorianKirmaier" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Florian Kirmaier&lt;/strong&gt;&lt;/a&gt;
 is pimping the jfx-central website to make it much faster very soon. Due to the architecture of &lt;a href="https://www.jpro.one/" target="_blank" rel="noopener noreferrer"&gt;jpro.one&lt;/a&gt;
, scrolling in a ScrollPane requires server calls (as the JavaFX app lives on the server). A custom skin, should bring a solution&amp;hellip;&lt;/li&gt;
&lt;li&gt;People: the work of &lt;a href="https://twitter.com/jan_gassen" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jan Gassen&lt;/strong&gt;&lt;/a&gt;
 is listed on &lt;a href="https://www.jfx-central.com/people/j.gassen" target="_blank" rel="noopener noreferrer"&gt;this page&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Library: &lt;a href="https://www.jfx-central.com/libraries/nsmenufx" target="_blank" rel="noopener noreferrer"&gt;NSMenuFX&lt;/a&gt;
, by Jan Gassen, a simple library to customize the macOS menu bar to give your JavaFX app a more native look and feel.&lt;/li&gt;
&lt;li&gt;Tips: &lt;a href="https://www.jfx-central.com/tips/application_flags" target="_blank" rel="noopener noreferrer"&gt;Flags for JavaFX applications&lt;/a&gt;
 to either add debug logs or switch configuration.&lt;/li&gt;
&lt;li&gt;Blogs: &lt;a href="https://www.jfx-central.com/blogs/abhinay.xyz" target="_blank" rel="noopener noreferrer"&gt;abhinay.xyz&lt;/a&gt;
 by &lt;a href="https://twitter.com/iAbhinay" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Abhinay Agarwal&lt;/strong&gt;&lt;/a&gt;
 about things good to know about JavaFX.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Renovate: Dependabot Alternative</title><link>https://foojayio.github.io/website/today/renovate-alternative-dependabot/</link><pubDate>Fri, 28 Oct 2022 07:17:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/renovate-alternative-dependabot/</guid><description>&lt;p&gt;I won&amp;rsquo;t introduce &lt;a href="https://github.com/dependabot" target="_blank" rel="noopener noreferrer"&gt;Dependabot&lt;/a&gt;
. Lots and lots of developers use it daily on GitHub. I do use it as well. However, it suffers from two drawbacks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;While it&amp;rsquo;s perfectly integrated with GitHub, integrations with other platforms are less seamless.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s limited in the list of &lt;a href="https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem" target="_blank" rel="noopener noreferrer"&gt;ecosystems&lt;/a&gt;
 it supports For example, I generally use Docker Compose files for my demos. When necessary, I use Kubernetes. Dependabot supports none.Worse, Dependabot &lt;a href="https://github.com/dependabot/dependabot-core/blob/main/CONTRIBUTING.md#contributing-new-ecosystems" target="_blank" rel="noopener noreferrer"&gt;doesn&amp;rsquo;t accept contributions to add new ecosystems&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Recently, I watched Viktor Farcic&amp;rsquo;s &lt;a href="https://www.youtube.com/watch?v=l0YH557eIiE" target="_blank" rel="noopener noreferrer"&gt;Automate Dependency Management With Renovate&lt;/a&gt;
. I found &lt;a href="https://www.mend.io/free-developer-tools/renovate/" target="_blank" rel="noopener noreferrer"&gt;Renovate&lt;/a&gt;
 super neat, thought about using it, and&amp;hellip; forgot. Then I stumbled upon another mention of it. It pushed me to implement it in two locations:&lt;/p&gt;</description></item><item><title>The Problem with Functional Programming</title><link>https://foojayio.github.io/website/today/the-problem-with-functional-programming/</link><pubDate>Thu, 27 Oct 2022 10:17:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-problem-with-functional-programming/</guid><description>&lt;p&gt;Let me start off with saying that I love functional programming.&lt;/p&gt;
&lt;p&gt;Although&amp;hellip; a better way of saying it would be that I love what functional programming brings me.&lt;/p&gt;
&lt;p&gt;It reduces complexity, the code is nice and explicit, and it eliminates certain bugs from occurring.&lt;/p&gt;
&lt;p&gt;But there are a few things that I wanted to discuss regarding functional programming.&lt;/p&gt;
&lt;h2 id="h2-0-object-orientation-vs-functional-programming"&gt;Object Orientation vs. Functional Programming&lt;/h2&gt;
&lt;p&gt;Let me start off with the Object Oriented vs. Functional Programming discussion.&lt;/p&gt;</description></item><item><title>Trip Report: Dubai JUG 2nd Meetup</title><link>https://foojayio.github.io/website/today/trip-report-dubai-jug-2nd-meetup/</link><pubDate>Thu, 27 Oct 2022 07:28:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/trip-report-dubai-jug-2nd-meetup/</guid><description>&lt;p&gt;This was the second Dubai JUG meetup, yet the first &lt;strong&gt;real&lt;/strong&gt; one. The first meetup was more of a practice team building session. Here is a trip report of the second Dubai JUG meetup at the PWC office.&lt;/p&gt;
&lt;h3 id="h3-0-first-day-in-dubai"&gt;First day in Dubai&lt;/h3&gt;
&lt;p&gt;This was my second time in Dubai. I had visited most of the landmarks the first time, making this a more relaxing visit without fear of missing out (FOMO). The temperatures were a lot more pleasant, where in June during my first visit it was above 40 degrees Celcius, this time around it was a more pleasant 30 degrees. I arrived Wednesday night in the hotel. I had set an alarm to make sure I wouldn&amp;rsquo;t miss breakfast and woke up a bit jet lagged. It&amp;rsquo;s surprising what just two hours of time difference can do!&lt;/p&gt;</description></item><item><title>A Minor But Useful Refactoring Technique That Would Reduce Your Code Footprint (Part 2)</title><link>https://foojayio.github.io/website/today/a-minor-but-useful-refactoring-technique-that-would-reduce-your-code-footprint-part-2/</link><pubDate>Wed, 26 Oct 2022 15:16:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-minor-but-useful-refactoring-technique-that-would-reduce-your-code-footprint-part-2/</guid><description>&lt;p&gt;As I keep refactoring, this article will focus on a few more interesting ways to do it. These are pretty much minor yet effective and useful changes.&lt;/p&gt;
&lt;h2 id="h2-0-stream-nonematch-and-stream-anymatch"&gt;Stream.noneMatch() and Stream.anyMatch()&lt;/h2&gt;
&lt;p&gt;In some situations, we need to find a single case among many. For example, we want to do a certain operation if we have a list of items and a certain item is in that list. Usually, we run a for loop and then use a loop inside the for loop to check the value against our case. Check out the following piece of code:&lt;/p&gt;</description></item><item><title>Why the Fastest Way of Serializing a Java Field is not Serializing it at All</title><link>https://foojayio.github.io/website/today/why-the-fastest-way-of-serializing-a-java-field-is-not-serializing-it-at-all/</link><pubDate>Tue, 25 Oct 2022 12:54:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-the-fastest-way-of-serializing-a-java-field-is-not-serializing-it-at-all/</guid><description>&lt;p&gt;This article elaborates on different ways of serializing Java objects and benchmarks performance for the variants. Read this article and become aware of different ways to improve Java serialization performance.&lt;/p&gt;
&lt;p&gt;In a previous article about &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;
, there was some benchmarking and method profiling indicating that the speed of serialization had a significant impact on execution performance. After all, this is only to be expected as Chronicle Queue (and other persisted queue libraries) must convert Java objects located on the heap to binary data, which is subsequently stored in files. Even for the most internally efficient libraries, this inevitable serialization procedure will largely dictate performance.&lt;/p&gt;</description></item><item><title>Foojay Podcast #6: Welcome to Foojay!</title><link>https://foojayio.github.io/website/today/foojay-podcast-6/</link><pubDate>Mon, 24 Oct 2022 15:50:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-6/</guid><description>&lt;p&gt;In this episode of the Foojay Podcast, we want to give you a look behind the &lt;strong&gt;curtains of Foojay.io&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The very first post on the website dates from &lt;strong&gt;April 25th in 2020,&lt;/strong&gt; and it was by Geertjan Wielenga.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s look back and what has happened on Foojay during the &lt;strong&gt;2,5 years&lt;/strong&gt; since that first post, and talk to some of the &lt;strong&gt;people&lt;/strong&gt; behind the project.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/cwJXTTYzsGU?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>When Breakpoints Don't Break</title><link>https://foojayio.github.io/website/today/when-breakpoints-dont-break/</link><pubDate>Mon, 24 Oct 2022 07:24:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/when-breakpoints-dont-break/</guid><description>&lt;p&gt;I discussed tracepoints quite a bit in my blog and videos.&lt;/p&gt;
&lt;p&gt;They are wonderful, but I feel the nuance of non-breaking is a bit lost.&lt;/p&gt;
&lt;p&gt;The true power of this amazing tool is hidden due to our debugging habits and our preconceived notions about debugging. It&amp;rsquo;s indeed difficult to make the mental shift required for these tools.&lt;/p&gt;
&lt;p&gt;The payoff for that mental shift is tremendous when dealing with &amp;ldquo;weird&amp;rdquo; bugs. Especially in large systems and with concurrency related issues.&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>How to Use Java DTOs to Stay Secure</title><link>https://foojayio.github.io/website/today/how-to-use-java-dtos-to-stay-secure/</link><pubDate>Fri, 21 Oct 2022 07:29:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-use-java-dtos-to-stay-secure/</guid><description>&lt;p&gt;&lt;del&gt;This article was orignally posted on &lt;a href="https://snyk.io/blog/how-to-use-java-dtos/" target="_blank" rel="noopener noreferrer"&gt;Snyk.io&lt;/a&gt;
 and is reused with permission.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;Data Transfer Objects (DTOs) in Java are objects that transport data between subsystems.&lt;/p&gt;
&lt;p&gt;It is an enterprise design pattern to aggregate data.&lt;/p&gt;
&lt;p&gt;The main purpose is to reduce the number of system calls needed between the subsystems, reducing the amount of overhead created.&lt;/p&gt;
&lt;p&gt;In this article, I will explain how DTOs are used in modern Java applications, ways your application can benefit, and how Java DTOs can help you be more secure by preventing accidental data leaks.&lt;/p&gt;</description></item><item><title>Minor Techniques That Would Reduce Your Code Footprint (Part 1)</title><link>https://foojayio.github.io/website/today/a-minor-but-useful-refactoring-technique-that-would-reduce-your-code-footprint-part-1/</link><pubDate>Thu, 20 Oct 2022 14:32:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-minor-but-useful-refactoring-technique-that-would-reduce-your-code-footprint-part-1/</guid><description>&lt;p&gt;Finally, we upgraded to Java 11 from Java 8.&lt;/p&gt;
&lt;p&gt;That was a long-awaited move, but I&amp;rsquo;m pleased that we eventually made it.&lt;/p&gt;
&lt;p&gt;The next thing that came to mind when I stated this was, &amp;ldquo;Why not Java 17 directly?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Eventually, we will move to 17, but we had to begin someplace.&lt;/p&gt;
&lt;p&gt;And the transition to 11 was not easy either.&lt;/p&gt;
&lt;p&gt;We had several dependencies with Mockito, which made the journey somewhat tricky, but we were able to manage it.&lt;/p&gt;</description></item><item><title>Book review: Learn JavaFX Game Development with FXGL 17</title><link>https://foojayio.github.io/website/today/book-review-learn-javafx-game-and-app-development-with-fxgl-17/</link><pubDate>Wed, 19 Oct 2022 07:20:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-learn-javafx-game-and-app-development-with-fxgl-17/</guid><description>&lt;p&gt;This summer, I read the book &lt;a href="https://entreprenerd.lowagie.com/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;&amp;ldquo;Entreprenerd&amp;rdquo;&lt;/strong&gt; by &lt;strong&gt;Bruno Lowagie&lt;/strong&gt;&lt;/a&gt;
. It tells the story of how he started with the &lt;a href="https://itextpdf.com/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;iText&lt;/strong&gt; PDF Java library&lt;/a&gt;
 and turned that into a company together with his wife, and eventually sold it with all problems related to most sales and acquisitions trajects&amp;hellip;&lt;/p&gt;
&lt;p&gt;In &amp;ldquo;Entreprenerd,&amp;rdquo; he also describes the process of writing two books about the iText library itself, as there were no good manuals available, and he wanted to liberate himself from the ever-returning same questions.&lt;/p&gt;</description></item><item><title>Low Latency Crypto Trading Systems with Java and Chronicle</title><link>https://foojayio.github.io/website/today/low-latency-crypto-trading-systems-using-java-and-chronicle-services/</link><pubDate>Tue, 18 Oct 2022 14:59:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/low-latency-crypto-trading-systems-using-java-and-chronicle-services/</guid><description>&lt;p&gt;Cryptocurrency trading is an emerging market with its own rules.&lt;/p&gt;
&lt;p&gt;However, when it comes to the need for low-latency &lt;a href="https://en.wikipedia.org/wiki/Arbitrage" title="arbitrage" target="_blank" rel="noopener noreferrer"&gt;arbitrage&lt;/a&gt;
, that is, being able to react rapidly to changing market prices and placing orders ahead of the competition, there are lessons we can learn from optimizing classic trading systems.&lt;/p&gt;
&lt;p&gt;Chronicle Software has a successful track record of designing low-latency trading products. This background enables it to provide optimum performance solutions for Crypto trading systems.&lt;/p&gt;</description></item><item><title>Java on Azure Tooling Update – September 2022</title><link>https://foojayio.github.io/website/today/java-on-azure-tooling-update-september-2022/</link><pubDate>Mon, 17 Oct 2022 09:25:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-azure-tooling-update-september-2022/</guid><description>&lt;p&gt;Hi everyone, welcome back to September update of Java on Azure Tooling.&lt;/p&gt;
&lt;p&gt;In this update, we will introduce the Azure Cosmos DB Support, Azure Virtual Machine Enhancement.&lt;/p&gt;
&lt;p&gt;In addition, we have made some improvements for users to create/update the dependencies with Azure SDK Reference Book.&lt;/p&gt;
&lt;p&gt;Please download and install &lt;a href="https://aka.ms/azuretoolkit/intellijidea" title="the Azure Toolkit for IntelliJ" target="_blank" rel="noopener noreferrer"&gt;the Azure Toolkit for IntelliJ&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;We hope you like these features and enjoy the smooth experience with our Azure toolkit. So let us get started.&lt;/p&gt;</description></item><item><title>Java on Azure Tooling Update – August 2022</title><link>https://foojayio.github.io/website/today/java-on-azure-tooling-update-august-2022/</link><pubDate>Mon, 17 Oct 2022 09:15:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-azure-tooling-update-august-2022/</guid><description>&lt;p&gt;Hi everyone, welcome back to August update of Java on Azure Tooling.&lt;/p&gt;
&lt;p&gt;In this update, we will introduce the AKS support and Virtual Machine support.&lt;/p&gt;
&lt;p&gt;In addition, we make some improvements for users to search for subscriptions and find our tutorials easily.&lt;/p&gt;
&lt;p&gt;We hope these features could improve your user experience. So let us get started.&lt;/p&gt;
&lt;h2 id="h2-0-azure-toolkit-for-intellij-improvements"&gt;Azure Toolkit for IntelliJ Improvements&lt;/h2&gt;
&lt;h3 id="h3-1-aks-management-support"&gt;AKS Management Support&lt;/h3&gt;
&lt;p&gt;Azure Kubernetes Service (AKS) simplifies deploying a managed Kubernetes cluster in Azure by offloading the operational overhead to Azure. You can find more details about &lt;a href="https://docs.microsoft.com/en-us/azure/aks/" title="Azure Kubernetes Service (AKS)" target="_blank" rel="noopener noreferrer"&gt;Azure Kubernetes Service (AKS)&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>MicroProfile Config for Java SE</title><link>https://foojayio.github.io/website/today/microprofile-config-for-java-se/</link><pubDate>Thu, 13 Oct 2022 16:10:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/microprofile-config-for-java-se/</guid><description>&lt;p&gt;The &lt;a href="https://microprofile.io/microprofile-config/" target="_blank" rel="noopener noreferrer"&gt;MicroProfile Config&lt;/a&gt;
 specification is one of those attempts to create a specification around application configuration for the Java Enterprise world. In the past, there were already some other attempts within Java EE to define this specification for Java EE, but they were never finalised.&lt;/p&gt;
&lt;p&gt;Currently, another attempt is in progress with Jakarta EE Config but since MicroProfile is closely related to Jakarta EE, it is the best available solution today. That is the reason why almost all Jakarta EE runtimes also support MicroProfile Config and the other specifications of the MicroProfile umbrella.&lt;/p&gt;</description></item><item><title>High-Performance Java Serialisation to Different Formats</title><link>https://foojayio.github.io/website/today/high-performance-java-serialisation/</link><pubDate>Wed, 12 Oct 2022 14:15:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/high-performance-java-serialisation/</guid><description>&lt;p&gt;Java serialisation is a popular mechanism where you are able to serialise and deserialise complex object graphs; for example where object A can contain a reference to object B, which in turn has a reference back to object A.&lt;/p&gt;
&lt;p&gt;The problem is that this rich functionality comes at a performance cost.&lt;/p&gt;
&lt;p&gt;However, if you do not need to serialise these types of recursive graphs, you can instead use an open source solution called Chronicle Wire.&lt;/p&gt;</description></item><item><title>Presenting with IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/presenting-with-intellij-idea/</link><pubDate>Tue, 11 Oct 2022 07:14:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/presenting-with-intellij-idea/</guid><description>&lt;p&gt;In this article, we will take a look at ways to level up your presentation skills with IntelliJ IDEA.&lt;/p&gt;
&lt;h2 id="h2-0-presentation-assistant-plugin"&gt;Presentation Assistant plugin&lt;/h2&gt;
&lt;p&gt;Our first tip is to use the Presentation Assistant plugin. The Presentation Assistant plugin will show which shortcuts are being used.&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="size-medium wp-image-60174" src="presentation-assistant-example-700x137.png" alt="Presentation Assistant plugin example" width="700" height="137"&gt;
&lt;br /&gt;
&lt;p&gt;To install the plugin, open Preferences using &lt;strong&gt;⌘,&lt;/strong&gt; (on Mac) or &lt;strong&gt;Ctrl+Alt+S&lt;/strong&gt; (on Windows/Linux). Go to Plugins and search for &amp;ldquo;Presentation assistant&amp;rdquo; on the Marketplace tab. Click &lt;strong&gt;Install&lt;/strong&gt; and when it&amp;rsquo;s done, click &lt;strong&gt;OK&lt;/strong&gt; to apply the changes and close the dialog or click &lt;strong&gt;Apply&lt;/strong&gt; to keep the dialog open.&lt;/p&gt;</description></item><item><title>The Reason Java is Still Popular</title><link>https://foojayio.github.io/website/today/the-reason-java-is-still-popular/</link><pubDate>Mon, 10 Oct 2022 16:11:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-reason-java-is-still-popular/</guid><description>&lt;p&gt;A great time to post this, right after the release of Java 19, yes, another &amp;ldquo;my language is better&amp;rdquo; post. No, I didn&amp;rsquo;t want to write it. But sometimes people&amp;rsquo;s &lt;a href="https://medium.com/codex/i-finally-gave-up-on-java-5187947bef1b" target="_blank" rel="noopener noreferrer"&gt;bad projection&lt;/a&gt;
 gets the better of me.&lt;/p&gt;
&lt;p&gt;In this case the post started as a comment and I ended up deciding turn it into a post. This was strengthened with &lt;a href="https://news.ycombinator.com/item?id=32896228" target="_blank" rel="noopener noreferrer"&gt;this post&lt;/a&gt;
 which mostly complains about Quarkus (somewhat unfairly if I might add).&lt;/p&gt;</description></item><item><title>Comparative Evaluation Azul Zulu Prime vs. OpenJDK</title><link>https://foojayio.github.io/website/today/best-practice-comparative-evaluation-of-jdk-setups-azul-zulu-prime-vs-openjdk/</link><pubDate>Fri, 07 Oct 2022 08:51:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/best-practice-comparative-evaluation-of-jdk-setups-azul-zulu-prime-vs-openjdk/</guid><description>&lt;p&gt;In today&amp;rsquo;s Java ecosystem, you have a wide range of possible runtimes. Choosing between them can have a huge impact on the capabilities or performance of your environments and applications.&lt;/p&gt;
&lt;p&gt;In this article, you will learn about best practices for &lt;strong&gt;comparative evaluations between JDK setups&lt;/strong&gt; , whether they be different configurations in a single JDK or comparing &lt;a href="https://www.azul.com/products/prime/" target="_blank" rel="noopener noreferrer"&gt;Azul Zulu Prime Builds of OpenJDK (Azul Zulu Prime)&lt;/a&gt;
 to OpenJDK itself.&lt;/p&gt;
&lt;p&gt;By following this guide, you will be able to establish credible evidence that Azul Zulu Prime improves aspects of application behavior to a degree that justifies using it within your organization.&lt;/p&gt;</description></item><item><title>Unified Event-Driven Architecture for the Cloud Native Enterprise</title><link>https://foojayio.github.io/website/today/unified-event-driven-architecture-for-the-cloud-native-enterprise/</link><pubDate>Thu, 06 Oct 2022 19:58:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/unified-event-driven-architecture-for-the-cloud-native-enterprise/</guid><description>&lt;p&gt;CTOs and enterprise architects have long recognized the importance of event-driven architectures (EDA). While once considered purely a technology concern, the foresight of organizations that have invested in EDA has become readily apparent as the world has shifted around us. In the past decade, we&amp;rsquo;ve witnessed changes in nearly every aspect of our technological worlds, and the vast majority of those have been affected in some way by a move toward event-driven, real-time processing.&lt;/p&gt;</description></item><item><title>Low Latency Microservices, A Retrospective</title><link>https://foojayio.github.io/website/today/low-latency-microservices-a-retrospective/</link><pubDate>Thu, 06 Oct 2022 06:25:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/low-latency-microservices-a-retrospective/</guid><description>&lt;p&gt;I wrote an article on &lt;a href="https://vanilla-java.github.io/2016/03/22/Micro-services-for-performance.html" title="low latency microservices" target="_blank" rel="noopener noreferrer"&gt;low latency microservices&lt;/a&gt;
 almost five years ago now. Chronicle Software has worked with a number of tier one investment banks to implement and support those systems. What has changed in that time and what lessons have we learnt?&lt;/p&gt;
&lt;p&gt;Read this article and learn what we learned after five years of developing and supporting low latency microservices.&lt;/p&gt;
&lt;h3 id="h3-0-separation-of-concerns-gives-better-testability"&gt;Separation of Concerns Gives Better Testability&lt;/h3&gt;
&lt;p&gt;Microservices repeatedly demonstrated that testing and debugging business components were much easier with simple, stand-alone components with clear contracts between microservices.&lt;/p&gt;</description></item><item><title>Am I Testing the Right Way?</title><link>https://foojayio.github.io/website/today/am-i-testing-the-right-way/</link><pubDate>Tue, 04 Oct 2022 18:24:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/am-i-testing-the-right-way/</guid><description>&lt;h2 id="h2-0-two-unit-testing-approaches-explained"&gt;Two unit-testing approaches explained!&lt;/h2&gt;
&lt;p&gt;Pick any topic around testing and there will be at least two very contrary approaches that seem to be at odds.&lt;/p&gt;
&lt;p&gt;One of the many points of discussion around unit testing, and in particular TDD, are the question around what good boundaries for tests are.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;So the question is: Should you unit test each method on your classes or should you only unit test the public interfaces of a given feature or component?&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>The Maze of Python Dependency Management</title><link>https://foojayio.github.io/website/today/the-maze-of-python-dependency-management/</link><pubDate>Mon, 03 Oct 2022 12:49:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-maze-of-python-dependency-management/</guid><description>&lt;p&gt;For over 20 years, I&amp;rsquo;ve developed code for the JVM, first in Java, then in Kotlin.&lt;/p&gt;
&lt;p&gt;However, the JVM is not a silver bullet, &lt;em&gt;e.g.&lt;/em&gt;, in scripts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Virtual machines incur additional memory requirements.&lt;/li&gt;
&lt;li&gt;In many cases, the script doesn&amp;rsquo;t run long enough to gain any benefit performance-wise. The bytecode is interpreted and never compiles to native code.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For these reasons, I now write my scripts in Python. One of them collects social media metrics from different sources and stores them in BigQuery for analytics.&lt;/p&gt;</description></item><item><title>JavaFX Links of September</title><link>https://foojayio.github.io/website/today/javafx-news-september-2022/</link><pubDate>Fri, 30 Sep 2022 08:58:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-news-september-2022/</guid><description>&lt;p&gt;The JavaFX links of the week are back on &lt;a href="https://www.jfx-central.com/home" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;
, and here we collect the complete month for you in an excellent overview.&lt;/p&gt;
&lt;h2 id="h2-0-javafx-19-is-released"&gt;JavaFX 19 is released&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On the JavaFX mailinglist this thrilling message appeared: &amp;ldquo;Create release notes for JavaFX 19.&amp;rdquo; And yes, they are &lt;a href="https://github.com/openjdk/jfx/blob/205b7211bde0e468e81a135fe37952b7f2b11d45/doc-files/release-notes-19.md" target="_blank" rel="noopener noreferrer"&gt;available now on GitHub&lt;/a&gt;
!&lt;/li&gt;
&lt;li&gt;If you want to keep following what&amp;rsquo;s happening inside the JavaFX community, you can suscribe to the mailinglist via &lt;a href="https://mail.openjdk.org/mailman/listinfo/openjfx-dev" target="_blank" rel="noopener noreferrer"&gt;mail.openjdk.org/mailman/listinfo/openjfx-dev&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;As with previous releases, the JavaFX community once again succeeded in keeping the 6-months release cycle going on, with a long list of improvements and fixes! The highlights of this release can be found on &lt;a href="https://openjfx.io/highlights/19/" target="_blank" rel="noopener noreferrer"&gt;openjfx.io/highlights/19&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;JavaDoc for JavaFX 19 is available at &lt;a href="https://openjfx.io/javadoc/19/" target="_blank" rel="noopener noreferrer"&gt;openjfx.io/javadoc/19&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;An interesting read on InfoWorld lists some of the highlights of JavaFX 19: &lt;a href="https://www.infoworld.com/article/3673888/javafx-19-rich-client-java-platform-arrives.html" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;JavaFX 19 rich client Java platform arrives&amp;rdquo;&lt;/a&gt;
 by &lt;a href="https://twitter.com/pjkrill" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Paul Krill&lt;/strong&gt;&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/GluonHQ/status/1569648445157146626" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gluon&lt;/strong&gt; tweeted&lt;/a&gt;
 an update of the JavaFX roadmap on &lt;a href="https://gluonhq.com/products/javafx/" target="_blank" rel="noopener noreferrer"&gt;gluonhq.com/products/javafx&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/johanvos" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Johan Vos&lt;/strong&gt;&lt;/a&gt;
 added &lt;a href="https://twitter.com/johanvos/status/1569682888915836928" target="_blank" rel="noopener noreferrer"&gt;the message&lt;/a&gt;
: &amp;ldquo;&lt;em&gt;We did our first JavaFX release in September 2018 (JavaFX 11). We planned a 6-months cadence, similar to the JDK releases. Four years later, we still keep the train moving forward. It takes blood, sweat and tears, but seeing what developers are doing with JavaFX makes it worth.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;With &lt;a href="https://twitter.com/errcraft/status/1569727660032692230" target="_blank" rel="noopener noreferrer"&gt;a very nice reply&lt;/a&gt;
 of &lt;a href="https://twitter.com/errcraft" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;James Gosling&lt;/strong&gt;&lt;/a&gt;
 (the &lt;a href="https://en.wikipedia.org/wiki/James_Gosling" target="_blank" rel="noopener noreferrer"&gt;father of Java!&lt;/a&gt;
): &amp;ldquo;&lt;em&gt;Wonderful! I&amp;rsquo;m a happy JavaFX user. Thanks for all the wonderful work you do.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-news-from-the-web"&gt;News from &amp;ldquo;The Web&amp;rdquo;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pavlo Iatsiuk&lt;/strong&gt; announced the first release of DynamoIt &amp;mdash; a JavaFX GUI client application for AWS DynamoDB - &lt;a href="https://www.reddit.com/r/JavaFX/comments/xbdi2u/the_first_release_of_dynamoit_gui_client_for_aws/" target="_blank" rel="noopener noreferrer"&gt;on Reddit&lt;/a&gt;
.
&lt;ul&gt;
&lt;li&gt;You can find the release &lt;a href="https://github.com/bykka/dynamoit/releases/tag/1.0.0" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/rladstaetter" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Robert Ladstätter&lt;/strong&gt;&lt;/a&gt;
 announced the 1000th download of LogoRRR, another JavaFX GUI application!
&lt;ul&gt;
&lt;li&gt;This is the &lt;a href="https://twitter.com/logorrr/status/1569565540657647616?t=S5FvS5QpVKCi1KWrME09JA&amp;amp;amp;s=09" target="_blank" rel="noopener noreferrer"&gt;Twitter announcement&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The LogoRRR releases can be found &lt;a href="https://github.com/rladstaetter/LogoRRR/releases" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dlemmermann" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt;&lt;/a&gt;
 (of all people&amp;hellip;!) got frustrated &lt;a href="https://twitter.com/dlemmermann/status/1568221800789835777" target="_blank" rel="noopener noreferrer"&gt;in this Tweet&lt;/a&gt;
 that he once again had to prove &amp;ldquo;No, JavaFX is not dead&amp;rdquo;.
&lt;ul&gt;
&lt;li&gt;Let&amp;rsquo;s all help him in proving a lot of amazing stuff is happening with JavaFX by sharing your project! All contributions are welcome via &lt;a href="https://twitter.com/jfxcentral" target="_blank" rel="noopener noreferrer"&gt;@jfxcentral on Twitter&lt;/a&gt;
 or a contribution to the jfx-central website &lt;a href="https://github.com/dlsc-software-consulting-gmbh/jfxcentral-data" target="_blank" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Dirk also announced &lt;a href="https://twitter.com/dlemmermann/status/1569721829572448256" target="_blank" rel="noopener noreferrer"&gt;in a tweet&lt;/a&gt;
 that CalendarFX will get a whole new suite of controls for displaying &amp;ldquo;resource&amp;rdquo; / &amp;ldquo;resource allocations&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/P_Duke" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt;&lt;/a&gt;
 released a new version of JMetro, a JavaFX theme composed by a set of controls, stylesheets and skins, inspired by the Fluent Design System and adapted to fit the JavaFX SDK. There are also changes that have been made according to Pedro&amp;rsquo;s opinions on some of Fluent Design&amp;rsquo;s particularities.
&lt;ul&gt;
&lt;li&gt;See the &lt;a href="https://pixelduke.com/2022/09/08/jmetro-version-11-6-16-released/" target="_blank" rel="noopener noreferrer"&gt;Release Notes&lt;/a&gt;
 or &lt;a href="https://github.com/JFXtras/jfxtras-styles" target="_blank" rel="noopener noreferrer"&gt;sources&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;More info on &lt;a href="https://pixelduke.com/java-javafx-theme-jmetro/" target="_blank" rel="noopener noreferrer"&gt;pixelduke.com/java-javafx-theme-jmetro&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Pedro also tweeted that he is working on a new controls library, soon to be released. &lt;a href="https://twitter.com/P_Duke/status/1572593466286428161" target="_blank" rel="noopener noreferrer"&gt;It shows a video of the ListBuilder control with support for drag and dropping of cells&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;An &lt;a href="https://github.com/wiverson/maven-jpackage-template/issues/75" target="_blank" rel="noopener noreferrer"&gt;interesting discussion in the GitHub
maven-jpackage-template project&lt;/a&gt;
 - a project by &lt;a href="https://twitter.com/wiverson" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Will Iverson&lt;/strong&gt;&lt;/a&gt;
 to provide a template project for native desktop applications. Seems there is often a request for a Spring Boot UI template. Let&amp;rsquo;s keep an eye on this &amp;ldquo;BootFX idea&amp;rdquo; that could be a using the JavaFX embedded web browser.&lt;/li&gt;
&lt;li&gt;Friday 30th of September, &lt;a href="https://twitter.com/gail_asgteach" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gail Anderson&lt;/strong&gt;&lt;/a&gt;
 is speaking on &lt;a href="https://pages.jetbrains.com/intellij-idea-conf-2022" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA Conference&lt;/a&gt;
 about &amp;ldquo;JavaFX for Mobile Development&amp;rdquo;. A preview is available on &lt;a href="https://www.youtube.com/watch?v=w4gn_wgaGng" target="_blank" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;
, hopefully we can share the recording here next time.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SerendigityInfo" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Serendipity&lt;/strong&gt;&lt;/a&gt;
 announced on Twitter &lt;a href="https://twitter.com/SerendigityInfo/status/1573611549335457793" target="_blank" rel="noopener noreferrer"&gt;SmartFinder 1.5.3&lt;/a&gt;
, the first app published on Apple Store with Java 19 and JavaFX 19!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/WebFXProject" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WebFX&lt;/strong&gt;&lt;/a&gt;
 - a JavaFX to JavaScript transpiler - announced a &lt;a href="https://demofx.webfx.dev/" target="_blank" rel="noopener noreferrer"&gt;new demo on their website&lt;/a&gt;
, based on the excellent &lt;a href="https://github.com/chriswhocodes/DemoFX" target="_blank" rel="noopener noreferrer"&gt;DemoFX library&lt;/a&gt;
 by &lt;a href="https://twitter.com/chriswhocodes" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Chris Newman&lt;/strong&gt;&lt;/a&gt;
. The demo starts with an introductory animation, asking to click in order to play the actual demo, because in the browser sandbox, playing sound is not permitted before interacting with the user. The resulted demo is just one single java source file. Warning, looking at the demo for too long time can cause brain damage or hypnosis 😉&lt;/li&gt;
&lt;li&gt;The demos of the visual modeler, written in JavaFX and integrating OpenCV, by &lt;a href="https://twitter.com/Alessio_Vinerbi" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Alessio Vinerbi&lt;/strong&gt;&lt;/a&gt;
 are really amazing. Look at &lt;a href="https://twitter.com/Alessio_Vinerbi/status/1573971580409061376" target="_blank" rel="noopener noreferrer"&gt;the video in this tweet&lt;/a&gt;
 where he modifies two videos on the fly with different visual effects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-javafx-jobs"&gt;JavaFX Jobs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/hendrikEbbers" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Hendrik Ebbers&lt;/strong&gt;&lt;/a&gt;
 is &lt;a href="https://twitter.com/hendrikEbbers/status/1570026452355096576" target="_blank" rel="noopener noreferrer"&gt;looking for a developer&lt;/a&gt;
 to work on a crypto desktop application.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-new-content-on-jfx-central-com"&gt;New content on jfx-central.com&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;FXSkins and FXRibbon by &lt;a href="https://twitter.com/P_Duke" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pedro Duque Vieira&lt;/strong&gt;&lt;/a&gt;
 were added to the Libraries on jfx-central.com, see &lt;a href="https://www.jfx-central.com/people/p.vieira" target="_blank" rel="noopener noreferrer"&gt;Pedro&amp;rsquo;s profile&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;New Real World App: &lt;a href="https://twitter.com/wrapperrfid" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;WrapperRFID&lt;/strong&gt;&lt;/a&gt;
, a 3-layer software solution, using a JavaFX application as the user interface, used to control the loading and unloading of products by one of the largest retailers in Brazil, &lt;a href="https://www.jfx-central.com/real_world/wrapperrfid" target="_blank" rel="noopener noreferrer"&gt;more info on jfx-central.com&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Starting Docker Desktop with Spring Boot</title><link>https://foojayio.github.io/website/today/starting-docker-desktop-with-spring-boot/</link><pubDate>Fri, 30 Sep 2022 05:37:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/starting-docker-desktop-with-spring-boot/</guid><description>&lt;br /&gt;
&lt;p&gt;I came across Docker Desktop for the first time about three years ago, when I was working as a Principal Architect (Strategic R &amp;amp; D) on the Microservices Reference Architecture for a product development organization.&lt;/p&gt;
&lt;p&gt;At that time, when I was working on my corporate laptop - It became a tedious task to configure virtualization and settings to get it to work. Once I got it running smoothly, I realized that the memory requirements required to run it is quite high. At times, I found it tough to use my laptop for daily development with it running. It was also because I was working on microservices and had almost 6+ spring boot applications running.&lt;/p&gt;</description></item><item><title>What Does The JVM Look Like, How Does It Work?</title><link>https://foojayio.github.io/website/today/what-does-a-modern-jvm-look-like-and-how-does-it-work/</link><pubDate>Thu, 29 Sep 2022 05:29:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-does-a-modern-jvm-look-like-and-how-does-it-work/</guid><description>&lt;p&gt;Knowing how to code is fantastic, but it is even more enjoyable if we understand how a specific programming ecosystem works.&lt;/p&gt;
&lt;p&gt;I recall the C course I took during my first semester at university. I wanted to learn how C compilers take a program, verify it, and then compile it. As a side project, I wrote a small program that checks another C program to see if there are any syntax errors. I named it &lt;strong&gt;Cyntax&lt;/strong&gt;. It didn&amp;rsquo;t accomplish much, but I felt euphoria while doing it.&lt;/p&gt;</description></item><item><title>Reclaiming Persistent Volumes in Kubernetes</title><link>https://foojayio.github.io/website/today/reclaiming-persistent-volumes-in-kubernetes/</link><pubDate>Wed, 28 Sep 2022 09:55:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/reclaiming-persistent-volumes-in-kubernetes/</guid><description>&lt;p&gt;&lt;a href="https://kubernetes.io/" target="_blank" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;
 is a widely used open-source container management platform for running stateless, containerized applications at scale. In recent years, Kubernetes has been extended to also support stateful workloads, including databases and key-value stores.{#43de}&lt;/p&gt;
&lt;p&gt;There are three important API resources when it comes to managing stateful applications in Kubernetes:{#8e8a}&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/" target="_blank" rel="noopener noreferrer"&gt;StatefulSet&lt;/a&gt;
 (STS)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/docs/concepts/storage/persistent-volumes/" target="_blank" rel="noopener noreferrer"&gt;PersistentVolume&lt;/a&gt;
 (PV)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/docs/concepts/storage/storage-classes/" target="_blank" rel="noopener noreferrer"&gt;PersistentVolumeClaim&lt;/a&gt;
 (PVC)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;STSs schedule stateful pods, which can claim PVs through PVCs and mount them as volumes. Once a PV is claimed by an STS replica, Kubernetes will make sure that the volume stays with the replica, even if the pod gets rescheduled.{#e855}&lt;/p&gt;</description></item><item><title>Storing 1TB in Virtual Memory on a 128GB Machine</title><link>https://foojayio.github.io/website/today/chronicle-queue-storing-1tb-in-virtual-memory-on-a-128gb-machine/</link><pubDate>Tue, 27 Sep 2022 09:10:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/chronicle-queue-storing-1tb-in-virtual-memory-on-a-128gb-machine/</guid><description>&lt;p&gt;If you use a standard JVM like the Oracle JVM or the OpenJDK, you might find that as the heap size grows the performance of your JVM can drop as GC pause time escalates.&lt;/p&gt;
&lt;p&gt;This tends to be a problem around 32 GB of heap, but it often depends on the application at which point the size of your heap becomes a problem.&lt;/p&gt;
&lt;p&gt;One way around this is to use an always concurrent collector such as &lt;a href="https://www.azul.com/products/prime/" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Prime&lt;/a&gt;
 which is designed to both scale to much larger heap sizes and even reduces the GC pause times for smaller heap consistently.&lt;/p&gt;</description></item><item><title>Apache APISIX Loves Rust! (And Me Too)</title><link>https://foojayio.github.io/website/today/apache-apisix-loves-rust/</link><pubDate>Mon, 26 Sep 2022 09:23:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/apache-apisix-loves-rust/</guid><description>&lt;p&gt;Apache APISIX is built upon the shoulders of two giants:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nginx.com/" target="_blank" rel="noopener noreferrer"&gt;NGINX&lt;/a&gt;
, a widespread Open Source reverse-proxy&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openresty.org/en/" target="_blank" rel="noopener noreferrer"&gt;OpenResty&lt;/a&gt;
, a platform that allows scripting NGINX with the &lt;a href="https://www.lua.org/" target="_blank" rel="noopener noreferrer"&gt;Lua&lt;/a&gt;
 programming language via &lt;a href="https://luajit.org/" target="_blank" rel="noopener noreferrer"&gt;LuaJIT&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This approach allows APISIX to provide out-of-the-box Lua plugins that should fit most business requirements. But it always comes a time when generic plugins don&amp;rsquo;t fit your requirements. In this case, you can write your own Lua plugin.&lt;/p&gt;</description></item><item><title>OmniFish announces Eclipse GlassFish support</title><link>https://foojayio.github.io/website/today/omnifish-announces-enterprise-support-for-eclipse-glassfish/</link><pubDate>Fri, 23 Sep 2022 09:15:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/omnifish-announces-enterprise-support-for-eclipse-glassfish/</guid><description>&lt;p&gt;&lt;a href="https://omnifish.ee/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;OmniFish&lt;/strong&gt;&lt;/a&gt;
&lt;strong&gt;are proud to announce that they have established themselves as a new international company in the field of &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 support, specifically supporting the application server Eclipse GlassFish, a new cloud‑native Jakarta EE runtime Piranha Cloud, and their associated components such as Mojarra, the Jakarta Faces implementation.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OmniFish, based in Estonia, EU, welcomes the new Jakarta EE 10 version. They are going to support Jakarta EE 10 applications on Eclipse GlassFish 7, which will be released later in October 2022. Moreover, OmniFish have recently &lt;a href="https://blogs.eclipse.org/post/tanja-obradovic/welcome-omnifish-jakarta-ee-working-group" target="_blank" rel="noopener noreferrer"&gt;joined the Jakarta EE Working Group&lt;/a&gt;
 and they are strongly committed to contributing to the Jakarta EE standards. Some of the OmniFish founders are well-known Jakarta EE experts, which provides strong guarantees that OmniFish will become one of the key players in evolving and modernizing the Jakarta EE platform.&lt;/p&gt;</description></item><item><title>Great Time at JavaZone 2022</title><link>https://foojayio.github.io/website/today/great-time-at-javazone-2022/</link><pubDate>Fri, 23 Sep 2022 07:57:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/great-time-at-javazone-2022/</guid><description>&lt;p&gt;I had a pretty awful travel experience trying to reach Oslo, but it&amp;rsquo;s all worth it for what is possibly my favorite conference: JavaZone.&lt;/p&gt;
&lt;p&gt;I absolutely love this conference. It has everything: Sense of humor, craziness, heavy metal, continuous integration of food and amazing talks with great people.&lt;/p&gt;
&lt;p&gt;This years conference has a fantasy theme which fits into the &amp;ldquo;weirdness&amp;rdquo; of the conference. Notice that when I say &amp;ldquo;weird&amp;rdquo; this is one of the highest complements I can give a conference. I a world of cookie cutter conferences JavaZone is unique in every way. See &lt;a href="https://www.youtube.com/watch?v=rmnaxgwPewY" target="_blank" rel="noopener noreferrer"&gt;this opening scene&lt;/a&gt;
 in the morning of the first day&amp;hellip;&lt;/p&gt;</description></item><item><title>Payara Launches Jakarta EE 10 Platform Compatible Product</title><link>https://foojayio.github.io/website/today/payara-launches-jakarta-ee-10-platform-compatible-product/</link><pubDate>Thu, 22 Sep 2022 16:05:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/payara-launches-jakarta-ee-10-platform-compatible-product/</guid><description>&lt;p&gt;&lt;strong&gt;22.09. 2022&lt;/strong&gt; . With the launch of Jakarta EE 10 today, Payara releases &lt;strong&gt;Payara 6 Community Alpha 4 immediately,&lt;/strong&gt; bringing its new features directly to its product for innovation and learning*.*&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jakarta.ee/compatibility/certification/10/" target="_blank" rel="noopener noreferrer"&gt;Payara is one of the few vendors to have a product certified against the Jakarta EE 10 Platform on the launch day.&lt;/a&gt;
 Payara 6 Enterprise will follow in Q1, 2023, bringing the future of Jakarta EE to those using Payara&amp;rsquo;s enterprise product.&lt;/p&gt;</description></item><item><title>What is MicroProfile?</title><link>https://foojayio.github.io/website/today/what-is-microprofile/</link><pubDate>Thu, 22 Sep 2022 09:03:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-is-microprofile/</guid><description>&lt;p&gt;The Java programming language can be enhanced with specifications. An specification is a baseline platform definition - a framework - to guide concrete implementations.&lt;/p&gt;
&lt;p&gt;One of these specifications is called MicroProfile.&lt;/p&gt;
&lt;p&gt;But what is MicroProfile specification, what is it used for and why might you need it?&lt;/p&gt;
&lt;p&gt;This article explains all!&lt;/p&gt;
&lt;h2 id="h2-0-what-is-microprofile"&gt;What Is MicroProfile?&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://microprofile.io/" target="_blank" rel="noopener noreferrer"&gt;MicroProfile&lt;/a&gt;
 specification is a set of Enterprise Java APIs and technologies, designed to help with the challenge of building microservices architectures in Java.&lt;/p&gt;</description></item><item><title>A Better Way To Use Gradle With Github Actions</title><link>https://foojayio.github.io/website/today/a-better-way-to-use-gradle-with-github-actions/</link><pubDate>Wed, 21 Sep 2022 12:54:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-better-way-to-use-gradle-with-github-actions/</guid><description>&lt;h2 id="h2-0-running-gradle-builds-on-github-actions"&gt;Running Gradle builds on GitHub Actions&lt;/h2&gt;
&lt;p&gt;GitHub Actions provides a convenient and powerful CI platform for projects hosted on GitHub. To enhance the experience of building Gradle projects on GitHub Actions, the Gradle team has developed the &lt;code&gt;gradle-build-action&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Together with Gradle Build Scans™, the &lt;code&gt;gradle-build-action&lt;/code&gt; provides deep integration between Gradle and GitHub Actions, providing easier setup and a better experience when building and testing your Gradle project with GitHub Actions.&lt;/p&gt;</description></item><item><title>Resolving Git Merge Conflicts in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/resolving-git-merge-conflicts-in-intellij-idea/</link><pubDate>Wed, 21 Sep 2022 11:04:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/resolving-git-merge-conflicts-in-intellij-idea/</guid><description>&lt;p&gt;At some point in your career, probably many points, you&amp;rsquo;ll have to resolve merge conflicts.&lt;/p&gt;
&lt;p&gt;A common cause of merge conflicts is when you&amp;rsquo;re working on a &lt;code&gt;feature&lt;/code&gt; branch while other changes have been applied to the &lt;code&gt;main&lt;/code&gt; branch.&lt;/p&gt;
&lt;h2 id="h2-0-merge-feature-branch-into-main"&gt;Merge feature branch into main&lt;/h2&gt;
&lt;p&gt;In this tutorial, we are currently on the &lt;code&gt;main&lt;/code&gt; branch, and we want to merge the &lt;code&gt;feature&lt;/code&gt; branch into &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can do this by selecting the feature branch in the &lt;em&gt;Git&lt;/em&gt; tool window which you can open with &lt;strong&gt;⌘9&lt;/strong&gt; (macOS), or &lt;strong&gt;Alt+9&lt;/strong&gt; (Windows/Linux).&lt;/p&gt;</description></item><item><title>The 5 Most Pivotal and Innovative Additions to OpenJDK 19</title><link>https://foojayio.github.io/website/today/the-5-most-pivotal-and-innovative-additions-to-openjdk-19/</link><pubDate>Tue, 20 Sep 2022 16:25:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-5-most-pivotal-and-innovative-additions-to-openjdk-19/</guid><description>&lt;p&gt;Although &lt;a href="https://foojayio.github.io/website/today/openjdk-19-released/"&gt;OpenJDK 19&lt;/a&gt;
 is not an LTS, it is still a significant release, in my opinion.&lt;/p&gt;
&lt;p&gt;It includes several game-changing features that will alter the Java landscape.&lt;/p&gt;
&lt;p&gt;Many features intrigue my interest, but there are five in particular that I can&amp;rsquo;t wait to try out. Let&amp;rsquo;s break those down and talk about them separately.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://openjdk.org/jeps/425" target="_blank" rel="noopener noreferrer"&gt;JEP 425: Virtual Threads (Preview)&lt;/a&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Under the umbrella of Project Loom, JEP 425 introduces virtual threads, which aim to dramatically reduce the effort of writing, maintaining, and observing high-throughput concurrent applications on the Java platform. This is a &lt;a href="https://openjdk.java.net/jeps/12" target="_blank" rel="noopener noreferrer"&gt;preview feature&lt;/a&gt;
. Consider the following example:&lt;/p&gt;</description></item><item><title>OpenJDK 19 Released!</title><link>https://foojayio.github.io/website/today/openjdk-19-released/</link><pubDate>Tue, 20 Sep 2022 16:00:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/openjdk-19-released/</guid><description>&lt;p&gt;OpenJDK 19 has been released today! Get it from your favorite vendor&amp;hellip; whether it is BellSoft, Amazon, Red Hat, Azul, Oracle, Microsoft &lt;a href="https://foojayio.github.io/website/almanac/jdk-19/"&gt;or any other of a large number of Java providers&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The friends of OpenJDK community has put together a number of resources, and more coming in the coming weeks, about the new features and all the enhancements and fixes that have gone into the release, accompanied by a brand new podcast released today, featuring key Java community leaders from around the world.&lt;/p&gt;</description></item><item><title>Foojay Podcast #5: OpenJDK Discussion Panel</title><link>https://foojayio.github.io/website/today/foojay-podcast-5/</link><pubDate>Tue, 20 Sep 2022 15:56:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-5/</guid><description>&lt;p&gt;It&amp;rsquo;s September 20th, OpenJDK 19 has been released. In this podcast, we discuss the new features and the changes that this release brings.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/71ZAYZWwpuI?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://open.spotify.com/show/6CpTfgn9LirzJGAtc4ICdQ" target="_blank" rel="noopener noreferrer"&gt;Spotify&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://podcasts.apple.com/be/podcast/foojay-io-the-friends-of-openjdk/id1652281304" target="_blank" rel="noopener noreferrer"&gt;Apple Podcasts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;And most others&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-guests"&gt;Guests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://twitter.com/miragemiko" target="_blank" rel="noopener noreferrer"&gt;Miroslav Wengner&lt;/a&gt;
&lt;/strong&gt; (OpenValue)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://twitter.com/mgrygles" target="_blank" rel="noopener noreferrer"&gt;Mary Grygleski&lt;/a&gt;
&lt;/strong&gt; (CJUG, DataStax)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://twitter.com/deepu105" target="_blank" rel="noopener noreferrer"&gt;Deepu K Sasidharan&lt;/a&gt;
&lt;/strong&gt; (Okta, JHipster)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-podcast-host"&gt;Podcast host&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://twitter.com/costlow" target="_blank" rel="noopener noreferrer"&gt;Erik Costlow&lt;/a&gt;
&lt;/strong&gt; (Azul)&lt;/p&gt;</description></item><item><title>Introduction to Kubernetes Extensibility</title><link>https://foojayio.github.io/website/today/introduction-to-kubernetes-extensibility/</link><pubDate>Tue, 20 Sep 2022 09:44:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-to-kubernetes-extensibility/</guid><description>&lt;p&gt;Kubernetes offers a lot of benefits: an enormous ecosystem with plenty of actors, self-healing capabilities, etc. There&amp;rsquo;s no free lunch, though. It also comes with downsides, chief among them its complexity and operating costs.&lt;/p&gt;
&lt;p&gt;However, the more I work with Kubernetes, the more I think its most significant asset is &lt;strong&gt;extensibility&lt;/strong&gt;. If you need something that the platform doesn&amp;rsquo;t provide by default, there&amp;rsquo;s an option to develop it yourself and integrate it. In this post, I&amp;rsquo;d like to list such extension points.&lt;/p&gt;</description></item><item><title>Let's Create Mappers Without Creating Underlying Objects in Java</title><link>https://foojayio.github.io/website/today/did-you-know-you-can-create-mappers-without-creating-underlying-objects-in-java/</link><pubDate>Tue, 20 Sep 2022 09:16:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/did-you-know-you-can-create-mappers-without-creating-underlying-objects-in-java/</guid><description>&lt;p&gt;As most Java developers know, putting values in a Java Map (like a HashMap) involves creating a large number of auxiliary objects under the covers.&lt;/p&gt;
&lt;p&gt;For example, a HashMap with int keys and long values might, for each entry, create a wrapped Integer, a wrapped Long object and a Node that holds the former values together with a hash value and a link to other potential Node objects sharing the same hash bucket.&lt;/p&gt;</description></item><item><title>New Book: FXGL 17 -- Learn JavaFX Game and App Development</title><link>https://foojayio.github.io/website/today/new-book-fxgl-17-learn-javafx-game-and-app-development/</link><pubDate>Mon, 19 Sep 2022 11:39:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-book-fxgl-17-learn-javafx-game-and-app-development/</guid><description>&lt;p&gt;This is an announcement of the FXGL 17 book. This book is for beginners in Java and/or JavaFX who wish to develop apps and games with FXGL, while improving Java and JavaFX skills.&lt;/p&gt;
&lt;p&gt;This book is also suitable for experienced developers who wish to learn how to use FXGL.&lt;/p&gt;
&lt;p&gt;Lastly, game developers familiar with Unity, Unreal Engine or Godot who wish to learn Java and JavaFX will find this book useful.&lt;/p&gt;</description></item><item><title>Open Source Bait and Switch</title><link>https://foojayio.github.io/website/today/open-source-bait-and-switch/</link><pubDate>Fri, 16 Sep 2022 07:44:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/open-source-bait-and-switch/</guid><description>&lt;p&gt;I was reading &lt;a href="https://betterprogramming.pub/why-open-source-software-is-better-for-the-world-af1cf9045236" target="_blank" rel="noopener noreferrer"&gt;this article&lt;/a&gt;
 and wanted to post a comment but I felt this warrants a response article.&lt;/p&gt;
&lt;p&gt;First, if you don&amp;rsquo;t know me I&amp;rsquo;ve written a ton of Open Source code. A whole platform and then some. I think the general view expressed in that article and a lot of the fluff I see online is over simplistic and dangerous.&lt;/p&gt;
&lt;h2 id="h2-0-we-need-to-get-paid"&gt;We Need to get Paid&lt;/h2&gt;
&lt;p&gt;Who will pay your salary?&lt;/p&gt;</description></item><item><title>How the world caught up with Apache Cassandra</title><link>https://foojayio.github.io/website/today/how-the-world-caught-up-with-apache-cassandra/</link><pubDate>Thu, 15 Sep 2022 16:50:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-the-world-caught-up-with-apache-cassandra/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/how-the-world-caught-up-with-apache-cassandra/hero-techcrunch.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The O&amp;rsquo;Reilly book, &lt;em&gt;Cassandra: The Definitive Guide,&lt;/em&gt; features a quote from Ray Kurzweil, the noted inventor and futurist: {#speakable-summary}&lt;/p&gt;
&lt;p&gt;&amp;ldquo;An invention has to make sense in the world in which it is finished, not the world in which it is started.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;This quote has a prophetic ring to it, especially considering my co-author Eben Hewitt included it in the 2010 first edition of this book we wrote, back when Apache Cassandra, the open-source, distributed, and highly scalable NoSQL database, was just on its 0.7 release.&lt;/p&gt;</description></item><item><title>Best Practices for Managing Java Dependencies</title><link>https://foojayio.github.io/website/today/best-practices-for-managing-java-dependencies/</link><pubDate>Thu, 15 Sep 2022 08:21:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/best-practices-for-managing-java-dependencies/</guid><description>&lt;p&gt;Creating Java applications is great, and many resources are available.&lt;/p&gt;
&lt;p&gt;To speed up development, many folks use frameworks and libraries that do some of the heavy lifting.&lt;/p&gt;
&lt;p&gt;When looking at modern Java applications, almost all of them contain dependencies from libraries developed by someone else.&lt;/p&gt;
&lt;p&gt;Dependencies take up about 80 to 90 percent of the binary &amp;mdash; so, we should take good care of them when creating a Java project.&lt;/p&gt;</description></item><item><title>Baeldung Series Part 2: Build a Dashboard With Cassandra, Astra and CQL – Mapping Event Data</title><link>https://foojayio.github.io/website/today/baeldung-series-part-2-build-a-dashboard-with-cassandra-astra-and-cql-mapping-event-data/</link><pubDate>Tue, 13 Sep 2022 17:46:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/baeldung-series-part-2-build-a-dashboard-with-cassandra-astra-and-cql-mapping-event-data/</guid><description>&lt;h2 id="h2-0-1-introduction"&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;In our &lt;a href="https://www.baeldung.com/cassandra-astra-rest-dashboard-updates" target="_blank" rel="noopener noreferrer"&gt;previous article&lt;/a&gt;
, we looked at augmenting our dashboard to store and display individual events from the Avengers using &lt;a href="https://astra.dev/3DnYCl8" target="_blank" rel="noopener noreferrer"&gt;DataStax Astra&lt;/a&gt;
, a serverless DBaaS powered by &lt;a href="https://cassandra.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Cassandra&lt;/a&gt;
 using &lt;a href="https://stargate.io/?utm_medium=referral&amp;amp;utm_source=baeldung&amp;amp;utm_campaign=series-1-of-3&amp;amp;utm_content=avengers-dash-series-1" target="_blank" rel="noopener noreferrer"&gt;Stargate&lt;/a&gt;
 to offer additional APIs for working with it.&lt;/p&gt;
&lt;p&gt;In this article, we will be making use of the exact same data in a different way. &lt;strong&gt;We are going to allow the user to select which of the Avengers to display, the time period of interest, and then display these events on an interactive map.&lt;/strong&gt; Unlike in the previous article, this will allow the user to see the data interacting with each other in both geography and time.&lt;/p&gt;</description></item><item><title>The Story of a Java 17 Native Memory Leak</title><link>https://foojayio.github.io/website/today/the-story-of-a-java-17-native-memory-leak/</link><pubDate>Tue, 13 Sep 2022 08:15:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-story-of-a-java-17-native-memory-leak/</guid><description>&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;When Java 17 was released, we (the platform team at &lt;a href="https://careers.autotrader.co.uk/" target="_blank" rel="noopener noreferrer"&gt;Auto Trader&lt;/a&gt;
 where I was working at the time) were fairly quick to provide a new Docker base image to allow our developers to gain the benefits of the new goodness in the JDK available since Java 11, the previous LTS version.&lt;/p&gt;
&lt;p&gt;Over the course of a few years, we&amp;rsquo;ve standardised the way the JVM is configured out of the box for any new applications that make use of the base image. In general, this provides product teams with a good default starting point from which to get up &amp;amp; running quickly with any new service they plan to deploy.&lt;/p&gt;</description></item><item><title>A Quick Glance at the Kubernetes Gateway API</title><link>https://foojayio.github.io/website/today/kubernetes-gateway-api/</link><pubDate>Mon, 12 Sep 2022 09:55:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/kubernetes-gateway-api/</guid><description>&lt;p&gt;In &lt;a href="https://blog.frankel.ch/basics-access-kubernetes-pods/" target="_blank" rel="noopener noreferrer"&gt;one of my recent blog posts&lt;/a&gt;
, I described several ways to access Kubernetes pods. One can access a pod through its IP, but pods are naturally transient. The nominal way is to configure a &lt;code&gt;Service&lt;/code&gt;: its IP is stable, and Kubernetes&amp;rsquo; job is to keep the mapping between a &lt;code&gt;Service&lt;/code&gt; and its underlying pods up-to-date.&lt;/p&gt;
&lt;p&gt;Different kinds of services are available: internal only, &lt;code&gt;NodePort&lt;/code&gt; to finally allow access from outside the cluster, and &lt;code&gt;LoadBalancer&lt;/code&gt; that relies on a third-party component - in general, a cloud provider one.&lt;/p&gt;</description></item><item><title>On Cosmetics vs. Intrinsics in Programming</title><link>https://foojayio.github.io/website/today/on-cosmetics-vs-intrinsics-programming/</link><pubDate>Mon, 12 Sep 2022 09:39:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/on-cosmetics-vs-intrinsics-programming/</guid><description>&lt;p&gt;A ruthless battle occurs every day on the World Wide Web. Its goal is to decide which programming flavor is the best: or ? I assume that imperative and procedural programming are not part of the contenders.&lt;/p&gt;
&lt;p&gt;Arguments range from the factual to the irrelevant to the utterly stupid. A couple of years ago, I wanted to listen to a video of Martin Odersky (of Scala fame). I remember neither the exact talk nor the subject. What I remember is the introduction, though: he explained that FP was more popular than OOP&amp;hellip; because there were many more conferences dedicated to the former than to the latter.&lt;/p&gt;</description></item><item><title>Serverless is the New Timeshare</title><link>https://foojayio.github.io/website/today/serverless-is-the-new-timeshare/</link><pubDate>Fri, 09 Sep 2022 07:53:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/serverless-is-the-new-timeshare/</guid><description>&lt;p&gt;We have a shared amnesia. When I speak to younger developers about past technologies, I often get blank stares. To be fair, some of that is because I&amp;rsquo;m a bit &amp;ldquo;intense&amp;rdquo; or &amp;ldquo;weird&amp;rdquo; but some of that is because. Huh? Really? Did we have that?&lt;/p&gt;
&lt;p&gt;Case in point XA transactions and 2PC (Two Phase Commit). We have a young generation that&amp;rsquo;s completely ignorant of that capability and the fact that this was &amp;ldquo;a thing&amp;rdquo;. Did the requirement for transaction management somehow vanish?&lt;/p&gt;</description></item><item><title>Multi-cluster Cassandra with Google Kubernetes Engine (Pt. 2)</title><link>https://foojayio.github.io/website/today/multi-cluster-cassandra-deployment-with-google-kubernetes-engine-pt-2/</link><pubDate>Thu, 08 Sep 2022 17:20:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/multi-cluster-cassandra-deployment-with-google-kubernetes-engine-pt-2/</guid><description>&lt;p&gt;This is the second in a series of posts examining patterns for using K8ssandra to create Cassandra clusters with different deployment topologies.&lt;/p&gt;
&lt;p&gt;In the &lt;a href="https://k8ssandra.io/blog/tutorials/deploy-a-multi-datacenter-apache-cassandra-cluster-in-kubernetes/" target="_blank" rel="noopener noreferrer"&gt;first article&lt;/a&gt;
 in this series, we looked at how you could create a Cassandra cluster with two datacenters in a single cloud region, using separate Kubernetes namespaces in order to isolate workloads. For example, you might want to create a secondary Cassandra datacenter to isolate a read-heavy analytics workload from the datacenter supporting your main application.&lt;/p&gt;</description></item><item><title>Controlling your Server with a Reverse Shell Attack</title><link>https://foojayio.github.io/website/today/controlling-your-server-with-a-reverse-shell-attack/</link><pubDate>Thu, 08 Sep 2022 13:00:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/controlling-your-server-with-a-reverse-shell-attack/</guid><description>&lt;p&gt;Creating and running an application in your favorite language is usually pretty simple. After you create your application, deploying it and showing it to the world is also quite straightforward.&lt;/p&gt;
&lt;p&gt;The last thing you need is someone to take over your system and fully control your brand new application.&lt;/p&gt;
&lt;p&gt;In this article, I&amp;rsquo;ll explain how this can happen with a remote shell attack.&lt;/p&gt;
&lt;p&gt;Note: The code examples in this article are for educational purposes only. I mainly try to explain what a remote shell attack is and how it can occur in your applications. Using this or any other example to hack someone is not advised. In most countries, hacking without the consent of the target is illegal, even if you have the best intentions.&lt;/p&gt;</description></item><item><title>Use Pattern Matching to Simplify Java</title><link>https://foojayio.github.io/website/today/use-pattern-matching-to-simplify-java/</link><pubDate>Wed, 07 Sep 2022 10:55:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/use-pattern-matching-to-simplify-java/</guid><description>&lt;p&gt;The concept of pattern matching has been around since the 1960s. It&amp;rsquo;s a well-known language technique used in many programming languages, from Haskell and AWK to Rust and Scala.{#h-the-concept-of-pattern-matching-has-been-around-since-the-1960s-it-s-a-well-known-language-technique-used-in-many-programming-languages-from-haskell-and-awk-to-rust-and-scala}&lt;/p&gt;
&lt;p&gt;Pattern matching is relatively new to Java. It was introduced in JDK 14 and has been progressing with new uses since then.&lt;/p&gt;
&lt;p&gt;This article explores how these new features can make your code more concise without losing readability.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re more of an interactive learner, watch my &lt;a href="https://www.azul.com/resources-hub/webinars-2/the-art-of-java-language-pattern-matching-on-demand-webinar" target="_blank" rel="noopener noreferrer"&gt;on-demand webinar on pattern matching in Java&lt;/a&gt;
 from June 2022. First, let&amp;rsquo;s back up and explain what pattern matching is.&lt;/p&gt;</description></item><item><title>Running your Database on OpenShift and CodeReady Containers</title><link>https://foojayio.github.io/website/today/running-your-database-on-openshift-and-codeready-containers/</link><pubDate>Tue, 06 Sep 2022 09:43:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/running-your-database-on-openshift-and-codeready-containers/</guid><description>&lt;p&gt;Let&amp;rsquo;s take an introductory run-through of setting up your database on OpenShift, using your own hardware and RedHat&amp;rsquo;s CodeReady Containers.&lt;/p&gt;
&lt;p&gt;CodeReady Containers is a great way to run OpenShift K8s locally, ideal for development and testing. The steps in this blog post will require a machine, laptop or desktop, of decent capability; preferably quad CPUs and 16GB+ RAM.&lt;/p&gt;
&lt;h2 id="h2-0-download-and-install-redhat-s-codeready-containers"&gt;Download and Install RedHat&amp;rsquo;s CodeReady Containers&lt;/h2&gt;
&lt;p&gt;Download and install RedHat&amp;rsquo;s CodeReady Containers as described in &lt;a href="https://developers.redhat.com/blog/2019/09/05/red-hat-openshift-4-on-your-laptop-introducing-red-hat-codeready-containers" target="_blank" rel="noopener noreferrer"&gt;Red Hat OpenShift 4 on your laptop: Introducing Red Hat CodeReady Containers&lt;/a&gt;
&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>Migrating Monoliths to Microservices in Practice</title><link>https://foojayio.github.io/website/today/migrating-monoliths-to-microservices-in-practice/</link><pubDate>Fri, 02 Sep 2022 14:47:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/migrating-monoliths-to-microservices-in-practice/</guid><description>&lt;p&gt;There have been amazing articles on the subjects of migrating from a monolith to a microservice architecture, e.g., &lt;a href="https://martinfowler.com/articles/break-monolith-into-microservices.html" target="_blank" rel="noopener noreferrer"&gt;this is probably one of the better examples&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The benefits and drawbacks of the architectures should be pretty clear. I want to talk about something else though: the strategy.&lt;/p&gt;
&lt;p&gt;We build monoliths since they are easier to get started with. Microservices usually rise out of necessity when our system is already in production.&lt;/p&gt;</description></item><item><title>Can Java/Jakarta EE do Microservices?</title><link>https://foojayio.github.io/website/today/can-java-jakarta-ee-do-microservices/</link><pubDate>Thu, 01 Sep 2022 12:43:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/can-java-jakarta-ee-do-microservices/</guid><description>&lt;p&gt;In this myth-busting webinar, Steve Millidge (founder of &lt;a href="https://www.payara.fish/dismiss-the-myths/" target="_blank" rel="noopener noreferrer"&gt;Payara&lt;/a&gt;
), demonstrates that Java/Jakarta EE can do microservices.&lt;/p&gt;
&lt;p&gt;In this video, Steve explains:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What are microservices?&lt;/li&gt;
&lt;li&gt;How JAX-RS API makes it easy to develop applications that use the REST architecture&lt;/li&gt;
&lt;li&gt;Deployment models for microservices&lt;/li&gt;
&lt;li&gt;How to use MicroProfile with &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;12 factor apps with Jakarta EE&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;ve been hearing that Java/Jakarta EE is only for monolithic architecture, watch this video to see why that&amp;rsquo;s not true and how you can continue using your existing development skills to modernize your application development with microservices.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 15)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-15/</link><pubDate>Wed, 31 Aug 2022 17:30:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-15/</guid><description>&lt;p&gt;This article will discuss how we do asynchronous method invocation with &lt;a href="https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/concurrent/Callable.html" target="_blank" rel="noopener noreferrer"&gt;Callable&lt;/a&gt;
 and &lt;a href="https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/concurrent/Future.html" target="_blank" rel="noopener noreferrer"&gt;Future&lt;/a&gt;
 with a practical example.&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="alignnone size-medium wp-image-57278" src="Playground.java_-700x227.png" alt="" width="700" height="227"&gt;
&lt;br /&gt;
&lt;p&gt;Look at the code snippet. It doesn&amp;rsquo;t have anything yet, but &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-14/"&gt;as we learned about Java threading&lt;/a&gt;
, we know anything we put here will run on the main thread unless we spawn a new thread from here.&lt;/p&gt;
&lt;p&gt;Now consider a case where you work as a banker, and you need to calculate how much credit you can provide to a person.&lt;/p&gt;</description></item><item><title>Pi4J V2.2.0 Released</title><link>https://foojayio.github.io/website/today/pi4j-v2-2-0-released/</link><pubDate>Wed, 31 Aug 2022 17:09:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/pi4j-v2-2-0-released/</guid><description>&lt;p&gt;One year after &lt;a href="https://foojayio.github.io/website/today/pi4j-v-2-released/"&gt;the first release of V.2 of Pi4J&lt;/a&gt;
, a new release was published. Pi4J provides&lt;strong&gt;friendly object-oriented I/O API and implementation libraries for Java Programmers&lt;/strong&gt; to access the &lt;strong&gt;full I/O capabilities of the Raspberry Pi platform&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;And what an amazing achievement with this new release! No major issues were found in the previous release, but several &lt;strong&gt;small fixes were added by more people than ever before in the Pi4J-history&lt;/strong&gt;. This is a real confirmation of the openness of this project and how a community can work together to further improve a project.&lt;/p&gt;</description></item><item><title>What the Heck Is Project Loom for Java?</title><link>https://foojayio.github.io/website/today/what-the-heck-is-project-loom-for-java/</link><pubDate>Tue, 30 Aug 2022 15:13:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-the-heck-is-project-loom-for-java/</guid><description>&lt;p&gt;Java has had good multi-threading and concurrency capabilities from early on in its evolution and can effectively utilize multi-threaded and multi-core CPUs.&lt;/p&gt;
&lt;p&gt;Java Development Kit (JDK) 1.1 had basic support for platform threads (or Operating System (OS) threads), and JDK 1.5 had more utilities and updates to improve concurrency and multi-threading.&lt;/p&gt;
&lt;p&gt;JDK 8 brought asynchronous programming support and more concurrency improvements.&lt;/p&gt;
&lt;p&gt;While things have continued to improve over multiple versions, there has been nothing groundbreaking in Java for the last three decades, apart from support for concurrency and multi-threading using OS threads.&lt;/p&gt;</description></item><item><title>End-to-End Tracing with OpenTelemetry</title><link>https://foojayio.github.io/website/today/end-to-end-tracing-opentelemetry/</link><pubDate>Mon, 29 Aug 2022 14:24:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/end-to-end-tracing-opentelemetry/</guid><description>&lt;p&gt;Whether you implement microservices or not (and you probably shouldn&amp;rsquo;t), your system is most probably composed of multiple components.&lt;/p&gt;
&lt;p&gt;The most straightforward system is probably made of a reverse proxy, an app, and a database.&lt;/p&gt;
&lt;p&gt;In this case, monitoring is not only a good idea; it&amp;rsquo;s a requirement.&lt;/p&gt;
&lt;p&gt;The higher the number of components through which a request may flow, the strongest the requirement.&lt;/p&gt;
&lt;p&gt;However, monitoring is only the beginning of the journey.&lt;/p&gt;</description></item><item><title>External Debugging Tools 3: JMXTerm</title><link>https://foojayio.github.io/website/today/external-debugging-tools-3-jmxterm/</link><pubDate>Fri, 26 Aug 2022 14:52:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/external-debugging-tools-3-jmxterm/</guid><description>&lt;p&gt;When tracking a bug we need to take a two pronged approach. Similar to tongs that wrap the buggy module from both sides and squeezes to find the problematic part. Up until now we discussed tools that are very low level. Some can be used to debug system level services. Today we&amp;rsquo;ll discuss the other side of the stack but still a very advanced management tool. To understand this you need to understand the field we&amp;rsquo;re in.&lt;/p&gt;</description></item><item><title>Google Remote Procedure Call (gRPC) Example in Payara Server</title><link>https://foojayio.github.io/website/today/google-remote-procedure-call-grpc-example-in-payara-server/</link><pubDate>Thu, 25 Aug 2022 10:09:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/google-remote-procedure-call-grpc-example-in-payara-server/</guid><description>&lt;p&gt;Google Remote Procedure Call, or gRPC, is an open source Remote Procedure Call (RPC) framework focused on high performance and is portable to any environment.&lt;/p&gt;
&lt;p&gt;It is an alternative to REST, deemed by many as more efficient.&lt;/p&gt;
&lt;p&gt;After one of our customers requested it, the extension became available in our April 2022 Payara Community and Enterprise releases: 5.2022.2 and 5.38.0.&lt;/p&gt;
&lt;p&gt;After providing a brief overview of the gRPC extension in Payara in our &lt;a href="https://blog.payara.fish/whats-new-in-the-april-2022-payara-platform-release" target="_blank" rel="noopener noreferrer"&gt;April release blog,&lt;/a&gt;
 here we provide more technical details about how to use it in Payara Community, where you will build the module yourself and place it in the modules directory.&lt;/p&gt;</description></item><item><title>Using Git Interactive Rebase</title><link>https://foojayio.github.io/website/today/using-git-interactive-rebase/</link><pubDate>Thu, 25 Aug 2022 09:32:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-git-interactive-rebase/</guid><description>&lt;p&gt;This tutorial will cover how to clean up your Git commit history with Git interactive rebase, both via the IntelliJ IDEA UI and from the command line.&lt;/p&gt;
&lt;p&gt;Git interactive rebase allows you to change individual commits, squash commits together, drop commits or change the order of the commits. This allows you to clean up your Git commit history to make it linear and meaningful, which can make it easier to understand the history of the project in the future.&lt;/p&gt;</description></item><item><title>Cassandra: Throughput, Responsiveness, Capacity and Cost</title><link>https://foojayio.github.io/website/today/cassandra-performance-throughput-responsiveness-capacity-and-cost/</link><pubDate>Wed, 24 Aug 2022 10:43:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/cassandra-performance-throughput-responsiveness-capacity-and-cost/</guid><description>&lt;p&gt;&lt;strong&gt;For scalable data workloads like Apache Cassandra, performance and capacity are simply a matter of cost. JVM choice and configuration can dramatically impact that cost. The Azul Platform Prime JVM significantly improves Cassandra performance and reduces the cost of Cassandra clusters.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-background"&gt;Background&lt;/h2&gt;
&lt;p&gt;We set off to characterize the impact of JVM choice and configuration on Cassandra load carrying capacity: the capacity of a Cassandra cluster of a certain size to handle traffic while meeting specified service levels.&lt;/p&gt;</description></item><item><title>Java Strings and confusion with Unicode</title><link>https://foojayio.github.io/website/today/confusing-java-strings/</link><pubDate>Tue, 23 Aug 2022 10:29:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/confusing-java-strings/</guid><description>&lt;p&gt;In this article, I would like to show you a couple of confusing things in connection with Java Strings.&lt;/p&gt;
&lt;p&gt;I would also like to give you a few suggestions to avoid issues with them.&lt;/p&gt;
&lt;p&gt;I also prepared a GitHub repo for you where you can find some code that you can use to try the examples out on your own: &lt;a href="https://github.com/jonatan-ivanov/java-strings-demo" target="_blank" rel="noopener noreferrer"&gt;github.com/jonatan-ivanov/java-strings-demo&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-quiz"&gt;Quiz&lt;/h2&gt;
&lt;p&gt;In order to demonstrate this, let me invite you for a little quiz:&lt;/p&gt;</description></item><item><title>Back to Basics: Accessing Kubernetes Pods</title><link>https://foojayio.github.io/website/today/back-to-basics-accessing-kubernetes-pods/</link><pubDate>Mon, 22 Aug 2022 13:56:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/back-to-basics-accessing-kubernetes-pods/</guid><description>&lt;p&gt;Kubernetes is a colossal beast. You need to understand many different concepts before it starts being useful.&lt;/p&gt;
&lt;p&gt;When everything is set up, you&amp;rsquo;ll probably want to expose some pods to the outside of the cluster.&lt;/p&gt;
&lt;p&gt;Kubernetes provides different ways to do it: I&amp;rsquo;ll describe them in this post.&lt;/p&gt;
&lt;h2 id="h2-0-setup"&gt;Setup&lt;/h2&gt;
&lt;p&gt;For the sake of the demo, I&amp;rsquo;ll be using &lt;a href="https://kind.sigs.k8s.io/" target="_blank" rel="noopener noreferrer"&gt;Kind&lt;/a&gt;
:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;kind is a tool for running local Kubernetes clusters using Docker container &amp;ldquo;nodes&amp;rdquo;. kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI.&lt;/p&gt;</description></item><item><title>Bridge the DevOps/Dev Gap without Sacrificing Reliability</title><link>https://foojayio.github.io/website/today/effectively-bridging-the-devops-rd-gap-without-sacrificing-reliability/</link><pubDate>Fri, 19 Aug 2022 09:16:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/effectively-bridging-the-devops-rd-gap-without-sacrificing-reliability/</guid><description>&lt;p&gt;DevOps culture revolutionized our industry. Continuous Delivery and Continuous Integration made six sigma reliability commonplace. 20 years ago we would kick the production servers and listen to the hard drive spin, that was observability. Today&amp;rsquo;s DevOps teams deploy monitoring tools that provide development teams with deep insight into the production environment.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;O brave new world That has such people in&amp;rsquo;t!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;mdash; William Shakespeare&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Before DevOps practices were commonplace, production used to fail. A lot. We don&amp;rsquo;t want to go back to the time before DevOps tools were commonplace&amp;hellip;&lt;/p&gt;</description></item><item><title>Exploring the Apache Commons Configuration RCE Vulnerability</title><link>https://foojayio.github.io/website/today/exploring-cve-2022-33980-the-apache-commons-configuration-rce-vulnerability/</link><pubDate>Thu, 18 Aug 2022 10:10:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-cve-2022-33980-the-apache-commons-configuration-rce-vulnerability/</guid><description>&lt;p&gt;This article was originally posted on &lt;a href="https://snyk.io/blog/cve-2022-33980-apache-commons-configuration-rce-vulnerability/" target="_blank" rel="noopener noreferrer"&gt;Snyk.io&lt;/a&gt;
 and is co-written by &lt;a href="https://twitter.com/h4ck3rky13" target="_blank" rel="noopener noreferrer"&gt;Kyle Suero&lt;/a&gt;
 and &lt;a href="https://twitter.com/BrianVerm" target="_blank" rel="noopener noreferrer"&gt;Brian Vermeer&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Before we dive into the details of this vulnerability, we want to make it clear that there&amp;rsquo;s no need for panic.&lt;/p&gt;
&lt;p&gt;Many systems permit the use of various types of code in configuration files, and there are legitimate use cases to include string and variable interpolation in the configuration of applications and systems.&lt;/p&gt;
&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; Log4Shell all over again.&lt;/p&gt;</description></item><item><title>Faster Integration Tests with Reusable Testcontainers</title><link>https://foojayio.github.io/website/today/faster-integration-tests-with-reusable-testcontainers/</link><pubDate>Wed, 17 Aug 2022 11:05:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/faster-integration-tests-with-reusable-testcontainers/</guid><description>&lt;p&gt;In my job, I often need integration tests against a &lt;a href="https://neo4j.com" target="_blank" rel="noopener noreferrer"&gt;Neo4j&lt;/a&gt;
 database. My software is written in Java, and so is Neo4j. Neo4j is embeddable, too. So, in theory, I could just depend on the embedded version, open a connection, test my stuff and call it a day. It would not be a different engine, it would be - at least from a query-engine and planer perspective - the same thing, in contrast to using an embedded SQL database as a drop-in for PostgresQL for example.&lt;/p&gt;</description></item><item><title>Java Bytecode Simplified: Journey to the Wonderland (Part 2)</title><link>https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-2/</link><pubDate>Tue, 16 Aug 2022 15:15:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-2/</guid><description>&lt;p&gt;Our &lt;a href="https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-1/"&gt;previous article&lt;/a&gt;
 introduced Bytecode and discussed what it includes.&lt;/p&gt;
&lt;p&gt;This article will delve a bit deeper into ConstantPool.&lt;/p&gt;
&lt;p&gt;Highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bytecode is a representation that is abstract in nature. They are fictitious codes for a fictitious machine known as the Java Virtual Machine. The Java virtual machine is a piece of software that interprets &lt;strong&gt;Bytecode&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The JVM is a stack-based computer. Real CPUs are register-based systems and execute machine code. Java is compiled into Bytecode, an intermediate form, which is then executed by the &lt;a href="https://en.wikipedia.org/wiki/Just-in-time_compilation" target="_blank" rel="noopener noreferrer"&gt;Just In Time&lt;/a&gt;
 (JIT) compiler, which generates machine code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before going any further, let&amp;rsquo;s explore &lt;code&gt;javap&lt;/code&gt;, which is a very handy tool for deconstructing byte code.&lt;/p&gt;</description></item><item><title>Backend-for-Frontend: The Demo</title><link>https://foojayio.github.io/website/today/backend-for-frontend-the-demo/</link><pubDate>Mon, 15 Aug 2022 18:29:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/backend-for-frontend-the-demo/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/backend-for-front-end/"&gt;one of my earlier posts&lt;/a&gt;
, I described the Backend-for-Frontend pattern.&lt;/p&gt;
&lt;p&gt;In short, it offers a single facade over multiple backend parts.&lt;/p&gt;
&lt;p&gt;Moreover, it provides each client type, &lt;em&gt;e.g.,&lt;/em&gt; desktop or mobile, exactly the data that it needs and not more in the format required by this client type.&lt;/p&gt;
&lt;h2 id="h2-0-the-use-case"&gt;The use-case&lt;/h2&gt;
&lt;p&gt;Imagine the following use-case.&lt;/p&gt;
&lt;p&gt;In an e-commerce shop, the home page should display multiple &lt;em&gt;unrelated&lt;/em&gt; data at once.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Products: The business could configure which items are shown on the home page. They could be generic, &amp;ldquo;hero&amp;rdquo; products, or personalized, products that the customer ordered previously.&lt;/li&gt;
&lt;li&gt;News: Again, the newsfeed could be generic or personalized.&lt;/li&gt;
&lt;li&gt;Profile-related information&lt;/li&gt;
&lt;li&gt;Cart content&lt;/li&gt;
&lt;li&gt;Non-business related information, such as build number, build timestamp, version, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Depending on the client, we want more or less data. For example, on a client with limited display size, we probably want to limit a product to its name and its image. On the other hand, on desktop, we are happy to display both the above, plus a catch phrase (or a more catchy - and longer - name) and the full description.&lt;/p&gt;</description></item><item><title>When Disaster Strikes: Production Troubleshooting</title><link>https://foojayio.github.io/website/today/when-disaster-strikes-production-troubleshooting/</link><pubDate>Fri, 12 Aug 2022 11:03:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/when-disaster-strikes-production-troubleshooting/</guid><description>&lt;p&gt;&lt;a href="https://twitter.com/TomGranot/" target="_blank" rel="noopener noreferrer"&gt;Tom Granot&lt;/a&gt;
 and &lt;a href="https://twitter.com/debugagent/" target="_blank" rel="noopener noreferrer"&gt;myself&lt;/a&gt;
 have had the privilege of &lt;a href="https://twitter.com/vlad_mihalcea" target="_blank" rel="noopener noreferrer"&gt;Vlad Mihalcea&amp;rsquo;s&lt;/a&gt;
 online company for a while now. As a result we decided to &lt;a href="https://go.lightrun.com/production-troubelshooting-masterclass" target="_blank" rel="noopener noreferrer"&gt;do a workshop together&lt;/a&gt;
 talking about a lot of the things we learned in the process. This workshop would be pretty informal ad-hoc, just a bunch of guys chatting and showing off what we can do with tooling.&lt;/p&gt;
&lt;p&gt;In celebration of that I thought I&amp;rsquo;d write about some of the tricks we discussed amongst ourselves in the past to give you a sense of what to expect when joining us for the workshop but also a useful tool in its own right.&lt;/p&gt;</description></item><item><title>Secure CI/CD Pipelines with GitHub Actions for Your Java Apps</title><link>https://foojayio.github.io/website/today/building-secure-ci-cd-pipelines-with-github-actions-for-your-java-application/</link><pubDate>Thu, 11 Aug 2022 06:28:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-secure-ci-cd-pipelines-with-github-actions-for-your-java-application/</guid><description>&lt;p&gt;This article was originally post at&lt;a href="https://snyk.io/blog/building-a-secure-pipeline-with-github-actions/" target="_blank" rel="noopener noreferrer"&gt;Snyk.io&lt;/a&gt;
 and is used with permission&lt;/p&gt;
&lt;p&gt;GitHub Actions has made it easier than ever to build a secure continuous integration and continuous delivery (CI/CD) pipeline for your GitHub projects.&lt;/p&gt;
&lt;p&gt;By integrating your CI/CD pipeline and GitHub repository, GitHub Actions allows you to automate your build, test, and deployment pipeline.&lt;/p&gt;
&lt;p&gt;You can create workflows that build and test every pull request to your repository or deploy merged pull requests to production.&lt;/p&gt;</description></item><item><title>Deploy a Multi-Datacenter Cassandra Cluster in Kubernetes</title><link>https://foojayio.github.io/website/today/deploy-a-multi-datacenter-apache-cassandra-cluster-in-kubernetes-pt-1/</link><pubDate>Wed, 10 Aug 2022 08:27:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/deploy-a-multi-datacenter-apache-cassandra-cluster-in-kubernetes-pt-1/</guid><description>&lt;p&gt;The &lt;a href="https://k8ssandra.io/get-started/" target="_blank" rel="noopener noreferrer"&gt;Get Started&lt;/a&gt;
 examples on the K8ssandra site are primarily concerned with spinning up a single Apache Cassandra datacenter in a single Kubernetes cluster.&lt;/p&gt;
&lt;p&gt;However, there are many situations that can benefit from other deployment options.&lt;/p&gt;
&lt;p&gt;In this series of articles, we&amp;rsquo;ll examine different deployment patterns and show how to implement them using K8ssandra.&lt;/p&gt;
&lt;h2 id="h-flexible-topologies-with-cassandra"&gt;Flexible topologies with Cassandra&lt;/h2&gt;
&lt;p&gt;From its earliest days, Cassandra has included the ability to assign nodes to datacenters and racks. A rack was originally conceived as mapping to a single rack of servers connected to shared resources, like power, network, and cooling.&lt;/p&gt;</description></item><item><title>Ignore Infrastructure, Focus on Code, with Jakarta EE and Payara</title><link>https://foojayio.github.io/website/today/ignore-infrastructure-concentrate-on-code-with-jakarta-ee-and-payara-cloud/</link><pubDate>Tue, 09 Aug 2022 09:59:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/ignore-infrastructure-concentrate-on-code-with-jakarta-ee-and-payara-cloud/</guid><description>&lt;p&gt;Java EE, now Jakarta EE, makes it possible for developers to focus purely on the development of a Java enterprise application, solving the business logic without needing to think about infrastructure and operations when writing code.&lt;/p&gt;
&lt;p&gt;Payara Cloud extends this philosophy by also eliminating the need to worry about infrastructure and operations when preparing your application to run in the cloud.&lt;/p&gt;
&lt;p&gt;Together, Jakarta EE and Payara Cloud let you focus on writing code and delivering solutions to business challenges from the moment you write your first piece of code to the day people are using your application successfully on the cloud.&lt;/p&gt;</description></item><item><title>Native GraphQL API with Neo4j AuraDB on Heroku</title><link>https://foojayio.github.io/website/today/native-graphql-api-with-neo4j-auradb-on-heroku/</link><pubDate>Mon, 08 Aug 2022 07:29:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/native-graphql-api-with-neo4j-auradb-on-heroku/</guid><description>&lt;p&gt;In my first article on Foojay, I would like to present one of many possible approaches to create a GraphQL API. I work at &lt;a href="https://neo4j.com/" target="_blank" rel="noopener noreferrer"&gt;Neo4j&lt;/a&gt;
, so it should not be a big suprise that I will use the Graph database with the same name as a backend for the application.&lt;/p&gt;
&lt;p&gt;In this post I will cover a couple of things and I&amp;rsquo;ll start with a simple use case. Conceptually we will look at the &amp;ldquo;Schema-First&amp;rdquo; vs &amp;ldquo;Object-First&amp;rdquo; discussions and why - at least in my opinion - GraphQL can be seen much more like an object mapping concept than a query language itself. You will learn that while Neo4j is a Graph database, it does not have a built-in GraphQL layer. It does however a great query language called &lt;a href="https://neo4j.com/docs/cypher-manual/current/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Cypher&amp;rdquo;&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>External Debugging Tools 1: dtrace and strace</title><link>https://foojayio.github.io/website/today/external-debugging-tools-1-dtrace-and-strace/</link><pubDate>Fri, 05 Aug 2022 13:13:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/external-debugging-tools-1-dtrace-and-strace/</guid><description>&lt;p&gt;Often when debugging, we need to step outside of the comforting embrace of the IDE to reproduce or track an issue.&lt;/p&gt;
&lt;p&gt;In this series, I&amp;rsquo;d like to go over some tools you might find useful for these cases. I&amp;rsquo;ll try to limit myself to tools that are 100% debugging tools and not those that are useful for development testing.&lt;/p&gt;
&lt;p&gt;E.g., tools like &lt;a href="https://curl.se/" target="_blank" rel="noopener noreferrer"&gt;curl&lt;/a&gt;
 or &lt;a href="https://stedolan.github.io/jq/" target="_blank" rel="noopener noreferrer"&gt;jq&lt;/a&gt;
 are remarkably useful. You can/should use them while debugging. But you probably used them while building and testing the feature. So you would already be familiar with them and should have some sense of what they do. I want to focus on tools that you would mostly reach for when debugging. In that sense, tools like &lt;a href="https://sdkman.io/" target="_blank" rel="noopener noreferrer"&gt;SDKMan&lt;/a&gt;
 etc. also make no sense here.&lt;/p&gt;</description></item><item><title>join.slack.com/t/foojay/signup</title><link>https://foojayio.github.io/website/today/join-slack-com-t-foojay-signup/</link><pubDate>Thu, 04 Aug 2022 14:14:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/join-slack-com-t-foojay-signup/</guid><description>&lt;p&gt;Join the Foojay.io community on Slack, here:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://bit.ly/join-foojay-slack" target="_blank" rel="noopener noreferrer"&gt;bit.ly/join-foojay-slack&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Encountering any kind of problem while signing up to Foojay Slack? Send a quick e-mail off to hello AT foojay DOT io for help!&lt;/p&gt;
&lt;p&gt;On Slack, the Foojay.io community discusses articles, insights, tips, tricks, events, and more, all related to users of the OpenJDK, such as Java and Kotlin developers.
&lt;a href="https://foojayio.github.io/website/join.slack.com/t/foojay/signup"&gt;&lt;img src="https://foojayio.github.io/website/today/join-slack-com-t-foojay-signup/image-1024x825.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>What is a Java Uber-JAR and Why Is It Useful?</title><link>https://foojayio.github.io/website/today/what-is-a-java-uber-jar-and-why-is-it-useful/</link><pubDate>Thu, 04 Aug 2022 12:53:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-is-a-java-uber-jar-and-why-is-it-useful/</guid><description>&lt;p&gt;An uber-JAR, also known as a fat JAR or JAR with dependencies, is a JAR file that contains not only a Java program but embeds its dependencies as well, and might also contain the web application that needs to be executed.&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll describe the different variants of the artifact and the advantages and drawbacks it has.&lt;/p&gt;
&lt;h2 id="h2-0-what-is-an-uber-jar"&gt;What is an Uber-JAR?&lt;/h2&gt;
&lt;p&gt;As indicated, the Uber-JAR contains all the program dependencies packaged in the JAR file.&lt;/p&gt;</description></item><item><title>Deep Learning in Java Using Deep Netts (Part 2)</title><link>https://foojayio.github.io/website/today/getting-started-with-deep-learning-in-java-using-deep-netts-part-2/</link><pubDate>Wed, 03 Aug 2022 09:48:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-deep-learning-in-java-using-deep-netts-part-2/</guid><description>&lt;p&gt;&lt;a href="https://www.deepnetts.com/" target="_blank" rel="noopener noreferrer"&gt;Deep Netts&lt;/a&gt;
 is a deep learning development toolkit that enables Java developers to easily add modern AI to their apps. It provides a deep learning IDE and a Java-native deep learning library for embedding AI models into Java apps.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/getting-started-with-deep-learning-in-java-using-deep-netts/"&gt;part 1&lt;/a&gt;
, we looked at the Deep Netts Community Edition, which is capable of solving basic machine learning problems, and provides a standard set of features.&lt;/p&gt;
&lt;p&gt;If you have more complex challenges, more data, and need better performance or just want friendly tools to quickly try and learn AI, you should take a look at Deep Netts Professional Edition.&lt;/p&gt;</description></item><item><title>A Flavour of TornadoVM on Apple M1 Pro</title><link>https://foojayio.github.io/website/today/a-flavour-of-tornadovm-on-apple-m1-pro/</link><pubDate>Tue, 02 Aug 2022 08:21:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-flavour-of-tornadovm-on-apple-m1-pro/</guid><description>&lt;p&gt;This article aims to describe the main steps required to install and run &lt;a href="https://foojayio.github.io/website/today/hardware-acceleration-for-java-tornadovm-can-do-it/"&gt;TornadoVM&lt;/a&gt;
 on Apple M1 Pro.&lt;/p&gt;
&lt;h4 id="steps"&gt;Steps&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Install Prerequisites&lt;/li&gt;
&lt;li&gt;Run TornadoVM Installer&lt;/li&gt;
&lt;li&gt;Execute Unit Tests&lt;/li&gt;
&lt;li&gt;Performance Evaluation: Running Matrix-Multiplication on Apple M1 GPU&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-0-1-install-prerequisites"&gt;1. Install Prerequisites&lt;/h3&gt;
&lt;p&gt;To install TornadoVM, it is necessary to have some packages installed. For instance, you will have to install &lt;a href="https://maven.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Maven&lt;/a&gt;
 and &lt;a href="https://mac.install.guide/homebrew/index.html" target="_blank" rel="noopener noreferrer"&gt;wget&lt;/a&gt;
 in order to enable the TornadoVM installer to be functional.&lt;/p&gt;
&lt;p&gt;Assuming that Homebrew is installed in your system, you can open a terminal and execute the following commands:&lt;/p&gt;</description></item><item><title>Write Your Own Service Discovery Client for Apache APISIX</title><link>https://foojayio.github.io/website/today/service-discovery-client-apache-apisix/</link><pubDate>Mon, 01 Aug 2022 10:27:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/service-discovery-client-apache-apisix/</guid><description>&lt;p&gt;API Gateways in general, and &lt;a href="https://apisix.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache APISIX&lt;/a&gt;
 in particular, provide a single entry point into one&amp;rsquo;s information system.&lt;/p&gt;
&lt;p&gt;This architecture allows for managing load balancing and failover over similar nodes.&lt;/p&gt;
&lt;p&gt;For example, here&amp;rsquo;s how you can create a route balanced over two nodes in Apache APISIX:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="bash"&gt;curl http://localhost:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '{
 "uri": "/*",
 "upstream": {
 "type": "roundrobin",
 "nodes": {
 "192.168.0.1:80": 1, # 1
 "192.168.0.2:80": 1 # 1
 }
 }
}'&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Every request has a 50/50 chance of being sent to either node&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It worked for a long time, but in this day and age, nodes are probably not pets but cattle: they come, and they go. Hence, it&amp;rsquo;s essential to dynamically update the nodes list when it happens.&lt;/p&gt;</description></item><item><title>Understand the Root Cause of Regressions with Git Bisect</title><link>https://foojayio.github.io/website/today/understand-the-root-cause-of-regressions-with-git-bisect/</link><pubDate>Fri, 29 Jul 2022 13:18:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/understand-the-root-cause-of-regressions-with-git-bisect/</guid><description>&lt;p&gt;In this series, I cover a lot of magical tools and &lt;a href="https://git-scm.com/docs/git-bisect" target="_blank" rel="noopener noreferrer"&gt;git bisect&lt;/a&gt;
 is probably the best example of such magic.&lt;/p&gt;
&lt;p&gt;The hardest part in debugging is knowing the general area of the bug&amp;hellip; and bisect literally shines a light on the specific commit that caused it!&lt;/p&gt;
&lt;p&gt;Before we begin, let&amp;rsquo;s make one thing clear: bisect is a tool for debugging regressions. It does nothing for regular bugs. When we have a regression, we typically know that the issue used to work in a specific release, we would typically have a specific revision where the code worked. We would typically know that it doesn&amp;rsquo;t work in the current version, but which commit along the way causes the failure?&lt;/p&gt;</description></item><item><title>Five Data Models for IoT: Managing the Latest IoT Events Based on a State in Apache Cassandra</title><link>https://foojayio.github.io/website/today/five-data-models-for-iot-managing-the-latest-iot-events-based-on-a-state-in-apache-cassandra/</link><pubDate>Thu, 28 Jul 2022 17:36:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/five-data-models-for-iot-managing-the-latest-iot-events-based-on-a-state-in-apache-cassandra/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/five-data-models-for-iot-managing-the-latest-iot-events-based-on-a-state-in-apache-cassandra/shutterstock_1111260050-350x233-1.jpg" alt="" loading="lazy"&gt;
 © Shutterstock / everything possible&lt;/p&gt;
&lt;p&gt;Apache Cassandra is a rock-solid choice for managing IoT and time series data at scale. The most popular use case of storing, querying and analyzing time series generated by IoT devices in Cassandra is well-understood and documented. In general, a time series is stored and queried based on its source IoT device. However, there exists another class of IoT applications that require quick access to the most recent data generated by a collection of IoT devices based on a known state. The question that such applications need to answer is: Which IoT devices or sensors are currently reporting a specific state? In this blog post, we focus on this question and provide five possible data modeling solutions to efficiently answer it in Cassandra.&lt;/p&gt;</description></item><item><title>NoSQL Use Cases: When to Use a Non-Relational Database</title><link>https://foojayio.github.io/website/today/nosql-use-cases-when-to-use-a-non-relational-database/</link><pubDate>Thu, 28 Jul 2022 07:32:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/nosql-use-cases-when-to-use-a-non-relational-database/</guid><description>&lt;p&gt;For decades, many companies have relied on relational databases to store, protect, and access their data.{#d8cf}&lt;/p&gt;
&lt;p&gt;SQL databases, in particular, worked well for a long time and still do for many use cases. But, today, there is a wide range of situations where SQL databases can no longer satisfy the needs of modern enterprises, especially those that have made the move to the cloud.{#d8cf}&lt;/p&gt;
&lt;p&gt;Increasingly, these companies are turning to NoSQL databases to meet their goals.{#d8cf}&lt;/p&gt;</description></item><item><title>Stateless, Secretless Multi-cluster Monitoring in Azure Kubernetes</title><link>https://foojayio.github.io/website/today/stateless-secretless-multi-cluster-monitoring-in-azure-kubernetes-service-with-thanos-prometheus-and-azure-managed-grafana/</link><pubDate>Wed, 27 Jul 2022 08:36:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/stateless-secretless-multi-cluster-monitoring-in-azure-kubernetes-service-with-thanos-prometheus-and-azure-managed-grafana/</guid><description>&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Observability is paramount to every distributed system and it&amp;rsquo;s becoming increasingly complicated in a cloud native world where we might deploy multiple ephemeral clusters and we want to keep their metrics beyond their lifecycle span.&lt;/p&gt;
&lt;p&gt;This article aims at cloud native engineers that face the challenge of observing multiple Azure Kubernetes Clusters (AKS) and need a flexible, stateless solution, leveraging available and cost-effective blob storage for long term retention of metrics, one which does not require injecting static secrets to access the storage (as it leverage the native Azure Managed Identities associated with the cluster).&lt;/p&gt;</description></item><item><title>How to deploy a Vaadin application to Google Cloud App Engine</title><link>https://foojayio.github.io/website/today/how-to-deploy-a-vaadin-application-to-google-cloud-app-engine/</link><pubDate>Tue, 26 Jul 2022 08:27:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-deploy-a-vaadin-application-to-google-cloud-app-engine/</guid><description>&lt;p&gt;I tried to deploy a Vaadin application to Google Cloud App Engine.&lt;/p&gt;
&lt;p&gt;It was not as straightforward as expected, so I want to share my findings.&lt;/p&gt;
&lt;p&gt;The example project is available on GitHub: &lt;a href="https://github.com/simasch/vaadin-appengine-demo" target="_blank" rel="noopener noreferrer"&gt;https://github.com/simasch/vaadin-appengine-demo&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-the-vaadin-application"&gt;The Vaadin Application&lt;/h2&gt;
&lt;p&gt;First, I&amp;rsquo;ve created a new Vaadin application: &lt;a href="https://start.vaadin.com" target="_blank" rel="noopener noreferrer"&gt;https://start.vaadin.com&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Then I did a production build:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;mvn package -Pproduction&lt;/pre&gt;
&lt;p&gt;That will generate an executable JAR file in the target directory.&lt;/p&gt;</description></item><item><title>Discussing Backend For Front-end</title><link>https://foojayio.github.io/website/today/backend-for-front-end/</link><pubDate>Mon, 25 Jul 2022 14:49:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/backend-for-front-end/</guid><description>&lt;p&gt;In the good old days, applications were simple. A browser sent a request to a webapp endpoint; the latter fetched data from a database and returned the response.&lt;/p&gt;
&lt;p&gt;The rise of mobile clients and integrations with other apps upset this simplicity. I want to discuss one solution to handle the complexity in this post.&lt;/p&gt;
&lt;h2 id="h2-0-the-increased-complexity-of-system-architecture"&gt;The increased complexity of system architecture&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s first model the above simple architecture.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/backend-for-front-end/webapp.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Mobile clients changed this approach. The display area of mobile clients is smaller: just smaller for tablets and much smaller for phones.&lt;/p&gt;</description></item><item><title>The Cost of Production Blindness</title><link>https://foojayio.github.io/website/today/the-cost-of-production-blindness/</link><pubDate>Fri, 22 Jul 2022 08:11:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-cost-of-production-blindness/</guid><description>&lt;p&gt;When I speak at conferences, I often fall back to the fact that just a couple of decades ago we&amp;rsquo;d observe production by kicking the server.&lt;/p&gt;
&lt;p&gt;This is obviously no longer practical. We can&amp;rsquo;t see our production. It&amp;rsquo;s an amorphous Cloud that we can&amp;rsquo;t touch or feel. A power that we read about but don&amp;rsquo;t fully grasp.&lt;/p&gt;
&lt;p&gt;In this case, we have physical evidence that the Cloud is there.&lt;/p&gt;
&lt;p&gt;A part of this major shift in our industry is a change to our fundamental roles as engineers. DevOps and SRE are roles that didn&amp;rsquo;t exist back then. Yet today, they&amp;rsquo;re often essential for major businesses. They brought with them tremendous advancements to the reliability of production, but they also brought with them a cost: distance.&lt;/p&gt;</description></item><item><title>Kubernetes and the Data Centre: Is Full Scale Migration Possible?</title><link>https://foojayio.github.io/website/today/kubernetes-and-the-data-centre-is-full-scale-migration-possible/</link><pubDate>Thu, 21 Jul 2022 13:48:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/kubernetes-and-the-data-centre-is-full-scale-migration-possible/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/kubernetes-and-the-data-centre-is-full-scale-migration-possible/kubernetes-genric-169jpeg_51633.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Data centres used to be exactly that - the centres of our data worlds, where all information, files and records would be kept and controlled.&lt;/p&gt;
&lt;p&gt;Today, that is no longer the case. More companies are moving to cloud services, whether this is dialling down on their traditional on-premises environments or never setting them up in the first place.&lt;/p&gt;
&lt;p&gt;This is not to say that data centres will be wholly abandoned for cloud, but the mix will continue to evolve and be very different to today. Gartner &lt;a href="https://www.gartner.com/smarterwithgartner/the-everywhere-enterprise-a-gartner-qa-with-david-cappuccio/" target="_blank" rel="noopener noreferrer"&gt;predicts&lt;/a&gt;
 that by 2025, 85% of infrastructure strategies will take a more hybrid approach, integrating on-premises, colocation, cloud and edge delivery options, compared with 20% in 2020.&lt;/p&gt;</description></item><item><title>General Build Distribution: A Game-Changer or a Gimmick?</title><link>https://foojayio.github.io/website/today/general-build-distribution-a-game-changer-or-a-gimmick/</link><pubDate>Wed, 20 Jul 2022 21:09:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/general-build-distribution-a-game-changer-or-a-gimmick/</guid><description>&lt;p&gt;&lt;strong&gt;Understand the performance potential of remote and distributed builds and explore how to improve build feedback times.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://foojayio.github.io/website/today/remote-and-distributed-build-patterns/"&gt;Remote and Distributed Build Patterns&lt;/a&gt;
 article explains the differences between remote and distributed builds and variations on each. Specifically, we distinguished between &amp;ldquo;test distribution&amp;rdquo; and &amp;ldquo;general build distribution&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;This article discusses distributed builds in a broader perspective of improving build feedback times. We&amp;rsquo;ll start by explaining the types of changes engineers tend to make, identify the typical bottlenecks and share how these relate to distributed builds. We will also study the performance potential of general build distribution. Finally, we will explore a holistic approach to improving build feedback times.&lt;/p&gt;</description></item><item><title>Released: OpenJDK 18.0.2, 17.0.4, 15.0.8, 13.0.12, 11.0.16, 8u342</title><link>https://foojayio.github.io/website/today/openjdk-release-july2022/</link><pubDate>Wed, 20 Jul 2022 12:32:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/openjdk-release-july2022/</guid><description>&lt;p&gt;&lt;strong&gt;Java has regular patch and security updates that are co-ordinated across the community, they happen once per quarter. When these updates happen, there are fixes that include security issues, all of which are displayed on Foojay.io.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The next quarterly release of the OpenJDK has been made available, as scheduled, for July 2022, impacting a number of OpenJDK releases.&lt;/p&gt;
&lt;p&gt;All the fixes provided for each updated OpenJDK release are found here:&lt;/p&gt;</description></item><item><title>Why a Cloud-Native Database Must Run on K8s</title><link>https://foojayio.github.io/website/today/why-a-cloud-native-database-must-run-on-k8s/</link><pubDate>Tue, 19 Jul 2022 17:44:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-a-cloud-native-database-must-run-on-k8s/</guid><description>&lt;p&gt;We&amp;rsquo;ve been talking about migrating workloads to the cloud for a long time, but a look at the application portfolios of many IT organizations demonstrates that there&amp;rsquo;s still a lot of work to be done. In many cases, challenges with persisting and moving data in clouds continue to be the key limiting factor slowing cloud adoption, despite the fact that databases in the cloud have been available for years.&lt;/p&gt;
&lt;p&gt;For this reason, there has been a surge of recent interest in data infrastructure that is designed to take maximum advantage of the benefits that cloud computing provides. A &lt;a href="https://k8ssandra.io/blog/2021/03/23/the-search-for-a-cloud-native-database/" target="_blank" rel="noopener noreferrer"&gt;cloud-native database&lt;/a&gt;
 is one that achieves the goals of scalability, elasticity, resiliency, observability and automation; the &lt;a href="https://k8ssandra.io/" target="_blank" rel="noopener noreferrer"&gt;K8ssandra&lt;/a&gt;
 project is a great example. It packages Apache &lt;a href="https://containerjournal.com/?s=Cassandra" target="_blank" rel="noopener noreferrer"&gt;Cassandra&lt;/a&gt;
 and supporting tools into a production-ready Kubernetes deployment.&lt;/p&gt;</description></item><item><title>Remote and Distributed Build Patterns</title><link>https://foojayio.github.io/website/today/remote-and-distributed-build-patterns/</link><pubDate>Tue, 19 Jul 2022 10:48:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/remote-and-distributed-build-patterns/</guid><description>&lt;p&gt;&lt;strong&gt;Remote and distributed builds are terms frequently used, misused and abused. Here we share insight for what these terms mean and how they affect your build feedback times.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A frequently-requested feature for the &lt;a href="https://gradle.org/" target="_blank" rel="noopener noreferrer"&gt;Gradle Build Tool&lt;/a&gt;
 is the ability to perform remote or distributed builds.&lt;/p&gt;
&lt;p&gt;But what exactly does this mean? And what are the motivations behind the requests?&lt;/p&gt;
&lt;p&gt;This article will explore the difference between remote vs. distributed builds and their variations. As there is no industry-wide agreement on consistent terminology for these concepts, the goal of this article is to give an overview of these patterns and how they relate to each other.&lt;/p&gt;</description></item><item><title>How to Secure Your Web Apps With An API Gateway</title><link>https://foojayio.github.io/website/today/how-to-secure-your-web-apps-with-an-api-gateway/</link><pubDate>Mon, 18 Jul 2022 18:50:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-secure-your-web-apps-with-an-api-gateway/</guid><description>&lt;p&gt;API management solutions, also known as API gateways, are a must in this day and age of APIs.&lt;/p&gt;
&lt;p&gt;However, once you&amp;rsquo;ve set up such a gateway, you can use it for different purposes unrelated to APIs.&lt;/p&gt;
&lt;p&gt;Today, I want to show you how to improve the security of web apps.&lt;/p&gt;
&lt;h2 id="h2-0-prevent-sniffing"&gt;Prevent sniffing&lt;/h2&gt;
&lt;p&gt;Browsers are fantastic pieces of technology that try to make the life of users as comfortable as possible.&lt;/p&gt;</description></item><item><title>Debugging Java Collections Framework Issues in Production</title><link>https://foojayio.github.io/website/today/debugging-java-collections-framework-issues-in-production/</link><pubDate>Fri, 15 Jul 2022 08:49:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-java-collections-framework-issues-in-production/</guid><description>&lt;p&gt;The Java Collections Framework was a huge leap forward when it was introduced as part of Java 2 (JDK 1.2).&lt;/p&gt;
&lt;p&gt;Thanks to the included collection classes we finally moved beyond the limits of &lt;code&gt;Vector&lt;/code&gt; and &lt;code&gt;Hashtable&lt;/code&gt; to more mature and generic solutions. With the introduction of streams and functional concepts in Java 8 the framework took everything to the next level.&lt;/p&gt;
&lt;p&gt;One of the core principles underlying the framework is coding to the interface. As such you would use the List interface or a Collection interface instead of the concrete implementation. This is great engineering but it makes debugging the Java Collections far more challenging.&lt;/p&gt;</description></item><item><title>Deserialization exploits in Java: why should I Care?</title><link>https://foojayio.github.io/website/today/deserialization-exploits-in-java-why-should-i-care/</link><pubDate>Thu, 14 Jul 2022 07:39:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/deserialization-exploits-in-java-why-should-i-care/</guid><description>&lt;p&gt;&lt;strong&gt;Hackers refer to deserialization in Java as &amp;ldquo;the gift that keeps on giving&amp;rdquo;. But what is actually the problem? In most cases, it is not even your own code that creates this security vulnerability. This problem is also not restricted to Java&amp;rsquo;s custom serialization framework. When deserializing JSON, XML, or YAML, similar issues can occur as well.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I recently gave a talk about this during &lt;a href="https://www.devoxx.co.uk/" target="_blank" rel="noopener noreferrer"&gt;Devoxx UK&lt;/a&gt;
, the largest and most prestigious Java community conference in the United Kingdom. In this talk, I explain how deserialization vulnerabilities work natively in Java and how attack chains are created. This was loosely based on my blog post: &lt;a href="https://snyk.io/blog/serialization-and-deserialization-in-java/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Serialization and deserialization in Java: explaining the Java deserialize vulnerability&amp;rdquo;&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 6: Build a Neo4j Microservice</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-6-build-a-neo4j-microservice/</link><pubDate>Wed, 13 Jul 2022 15:13:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-6-build-a-neo4j-microservice/</guid><description>&lt;p&gt;For our next adventure in Java microservices, we want to expand our system for book review data.&lt;/p&gt;
&lt;p&gt;While books and authors are well-suited for a document database such as MongoDB, once you add reviews to the mix, the importance of the relationships makes this project better suited for a graph database.&lt;/p&gt;
&lt;p&gt;This way, we can utilize relationships between the different entities to improve analysis based on the structure of the connections.&lt;/p&gt;</description></item><item><title>Jakarta Concurrency: Present and Future</title><link>https://foojayio.github.io/website/today/jakarta-concurrency-present-and-future-2/</link><pubDate>Wed, 13 Jul 2022 13:38:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/jakarta-concurrency-present-and-future-2/</guid><description>&lt;p&gt;&lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
, previously Java EE, is a set of specifications that enables the world wide community of Java developers to work on cloud native Java enterprise applications.&lt;/p&gt;
&lt;p&gt;It is an open source project maintained by the &lt;a href="https://www.eclipse.org/org/" target="_blank" rel="noopener noreferrer"&gt;Eclipse Foundation.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Jakarta Concurrency is a small, but fundamental, specification under the Jakarta EE umbrella.&lt;/p&gt;
&lt;p&gt;As project lead, I provide more information on what it is, its future and how to be involved.&lt;/p&gt;</description></item><item><title>The End of the Beginning for Apache Cassandra</title><link>https://foojayio.github.io/website/today/the-end-of-the-beginning-for-apache-cassandra/</link><pubDate>Tue, 12 Jul 2022 17:43:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-end-of-the-beginning-for-apache-cassandra/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/the-end-of-the-beginning-for-apache-cassandra/1_xslbFHC3hRapwGV_wj17vg-1024x663.jpeg" alt="" loading="lazy"&gt;
 Image: &lt;a href="https://pixabay.com/photos/prairie-river-stream-curved-sunset-679014/" target="_blank" rel="noopener noreferrer"&gt;Pixabay&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Editor&amp;rsquo;s note: This story originally ran on July 27, 2021, the day that Apache Cassandra 4.0 was released.&lt;/em&gt;{#4bbb}&lt;/p&gt;
&lt;p&gt;Today is a big day for those of us in the &lt;a href="https://cassandra.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Cassandra&lt;/a&gt;
 community. After a long uphill climb, Apache Cassandra 4.0 has &lt;a href="https://thenewstack.io/apache-cassandra-4-0-comes-in-ready-for-production/" target="_blank" rel="noopener noreferrer"&gt;finally shipped&lt;/a&gt;
. I say finally, because it has at times seemed like an elusive goal. I&amp;rsquo;ve been involved in the Cassandra project for almost 10 years now and I have seen a lot of ups and downs.{#d6a4}&lt;/p&gt;</description></item><item><title>JDK 7: An Extended Hello and Farewell</title><link>https://foojayio.github.io/website/today/jdk-7-an-extended-hello-and-farewell/</link><pubDate>Tue, 12 Jul 2022 11:03:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdk-7-an-extended-hello-and-farewell/</guid><description>&lt;p&gt;On July 7^th^, 2011, eleven years ago, &lt;a href="https://openjdk.org/projects/jdk7/" target="_blank" rel="noopener noreferrer"&gt;JDK 7 was released&lt;/a&gt;
. In some ways, it was one of the more significant releases of Java. Indeed, there were some excellent technical features: &lt;a href="https://openjdk.org/projects/coin/" target="_blank" rel="noopener noreferrer"&gt;Project Coin&lt;/a&gt;
 gave us things like try-with-resources, strings in switch and multi-catch.&lt;/p&gt;
&lt;p&gt;However, it was two non-technical aspects of JDK 7 that made it important.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The first was that it was the first release since &lt;a href="https://www.oracle.com/corporate/pressrelease/oracle-buys-sun-042009.html" target="_blank" rel="noopener noreferrer"&gt;Oracle acquired Sun Microsystems&lt;/a&gt;
. The Java community had been unsure how Java would fare under Oracle, so this release showed a solid commitment to the platform (which has been maintained since then).&lt;/li&gt;
&lt;li&gt;The second was even more important: the fact that a &lt;a href="https://www.jcp.org/en/jsr/detail?id=336" target="_blank" rel="noopener noreferrer"&gt;Java SE specification&lt;/a&gt;
 was published through the &lt;a href="https://www.jcp.org/en/home/index" target="_blank" rel="noopener noreferrer"&gt;Java Community Process&lt;/a&gt;
. Due to &lt;a href="https://en.wikipedia.org/wiki/Apache_Harmony#Difficulties_to_obtain_a_TCK_license_from_Sun" target="_blank" rel="noopener noreferrer"&gt;issues around the availability of the TCK&lt;/a&gt;
 and the &lt;a href="https://harmony.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Harmony project&lt;/a&gt;
, new versions of OpenJDK had been stalled since December 2006. To put this into context, the time between JDK 6 and JDK 7 (one release) was one month longer at four years and seven months than between JDK 9 and JDK 18 (nine releases). Getting things moving again was vital to keeping Java relevant to developers as applications and architectures evolved.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Another significant date for JDK 7 is July 19^th^ this year. That is when the &lt;a href="https://www.oracle.com/java/technologies/java-se-support-roadmap.html" target="_blank" rel="noopener noreferrer"&gt;last update will be made available from Oracle&lt;/a&gt;
, even for commercially supported users. It is the end of what Oracle terms Extended Support.&lt;/p&gt;</description></item><item><title>Taking VSCodium for a Spin</title><link>https://foojayio.github.io/website/today/taking-vscodium-for-a-spin/</link><pubDate>Tue, 12 Jul 2022 08:10:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/taking-vscodium-for-a-spin/</guid><description>&lt;p&gt;As part of my new job on &lt;a href="https://apisix.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache APISIX&lt;/a&gt;
, I write less Java and Kotlin code.&lt;/p&gt;
&lt;p&gt;And when I do, the code is &lt;a href="https://github.com/nfrankel/evolve-apis/blob/master/old-api/src/main/java/org/apisix/demo/oldapi/HelloWorldController.java" target="_blank" rel="noopener noreferrer"&gt;really&lt;/a&gt;
 &lt;a href="https://github.com/nfrankel/evolve-apis/blob/master/new-api/src/main/kotlin/org/apisix/newapi/NewApiApplication.kt" target="_blank" rel="noopener noreferrer"&gt;simple&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;My coding hours (unfortunately not days) involve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A lot of containerization, including &lt;code&gt;Dockerfile&lt;/code&gt;, &lt;code&gt;docker-compose.yml&lt;/code&gt;, and soon Kubernetes manifests&lt;/li&gt;
&lt;li&gt;Some Python for scripting jobs - I abandoned Kotlin Scripting for this&lt;/li&gt;
&lt;li&gt;A bit of Lua because I want to learn it as part of my job&lt;/li&gt;
&lt;li&gt;A bit of Rust because I want to learn it for fun&lt;/li&gt;
&lt;li&gt;A bit of Kotlin because I still love it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because of this, I didn&amp;rsquo;t renew my IntelliJ Ultimate license early this year, and I fell back on the Community one.&lt;/p&gt;</description></item><item><title>Java on Azure Tooling Update – July 2022</title><link>https://foojayio.github.io/website/today/java-on-azure-tooling-update-july-2022/</link><pubDate>Mon, 11 Jul 2022 07:21:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-azure-tooling-update-july-2022/</guid><description>&lt;p&gt;Hi everyone, welcome back to the July update of Java on Azure Tooling.&lt;/p&gt;
&lt;p&gt;In this update, we will introduce the brand new getting started experience with the Azure toolkit for IntelliJ.&lt;/p&gt;
&lt;p&gt;In addition, we have added support for Managed Identity Authentication.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see what these new features are.&lt;/p&gt;
&lt;h2 id="h2-0-azure-toolkit-for-intellij-improvements"&gt;Azure Toolkit for IntelliJ Improvements&lt;/h2&gt;
&lt;h3 id="h3-1-new-guided-getting-started-experience"&gt;New Guided Getting Started Experience&lt;/h3&gt;
&lt;p&gt;In &lt;a href="https://devblogs.microsoft.com/java/azure-toolkit-for-intellij-update-april-2022/" title="April’s blog" target="_blank" rel="noopener noreferrer"&gt;April&amp;rsquo;s blog&lt;/a&gt;
, we first talked about why we needed better getting started experience. Currently, there are several challenges for a developer who is new to Azure:&lt;/p&gt;</description></item><item><title>Debugging Gson, Moshi and Jackson JSON Frameworks in Production</title><link>https://foojayio.github.io/website/today/debugging-gson-moshi-and-jackson-json-frameworks-in-production/</link><pubDate>Fri, 08 Jul 2022 07:14:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-gson-moshi-and-jackson-json-frameworks-in-production/</guid><description>&lt;p&gt;Parsing bugs are the gift that keeps on giving in the age of APIs.&lt;/p&gt;
&lt;p&gt;We use a service, it works perfectly in debugging, QA, etc.&lt;/p&gt;
&lt;p&gt;Then some user input that made its way to the web request returns a result we just can&amp;rsquo;t parse.&lt;/p&gt;
&lt;p&gt;Unfortunately, there isn&amp;rsquo;t much we can do at this stage. We need to understand why the failure occurred and how we can workaround it and fix it.&lt;/p&gt;</description></item><item><title>Available Now - gRPC for Apache Cassandra</title><link>https://foojayio.github.io/website/today/available-now-grpc-for-apache-cassandra/</link><pubDate>Thu, 07 Jul 2022 07:38:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/available-now-grpc-for-apache-cassandra/</guid><description>&lt;p&gt;&lt;strong&gt;Build microservices easily with the NoSQL standard database&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you are like most developers, you are embracing applications built using microservices and a NoSQL database. There are many good reasons: faster time to market, lower total cost of ownership, better performance, less downtime, and easy scalability.&lt;/p&gt;
&lt;p&gt;Creating cloud-native applications is hard because microservices are often written in different languages, database drivers have a maintenance burden, or familiar HTTP APIs lack the performance needed.&lt;/p&gt;</description></item><item><title>MicroStream - Part 5: Caching, Integrations and Clustering</title><link>https://foojayio.github.io/website/today/microstream-part-5-caching-integrations-and-clustering/</link><pubDate>Wed, 06 Jul 2022 07:11:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/microstream-part-5-caching-integrations-and-clustering/</guid><description>&lt;p&gt;&lt;strong&gt;In this last article of the series, we cover a few other MicroStream features: caching, clustering, and the integrations into other frameworks.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We have now covered three main aspects of MicroStream:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We have seen how you can &lt;a href="https://foojayio.github.io/website/today/microstream-part-2-configure-the-storage-manager/"&gt;configure the StorageManager&lt;/a&gt;
 to define where data is stored.&lt;/li&gt;
&lt;li&gt;We have discussed the &lt;a href="https://foojayio.github.io/website/today/microstream-part-3-storing-data/"&gt;strategy&lt;/a&gt;
 that you should follow to make sure the changes are also reflected in the storage so that we do not lose data.&lt;/li&gt;
&lt;li&gt;We described the &lt;a href="https://foojayio.github.io/website/today/microstream-part-4-serialisation-engine/"&gt;serialisation framework of MicroStream&lt;/a&gt;
 that stores the objects in a binary format so that it survives a process restart.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this last article of the series, we cover a few other features of MicroStream: caching, integrations into other products, and we discuss a major upcoming feature.&lt;/p&gt;</description></item><item><title>Getting Started with Deep Learning in Java using Deep Netts</title><link>https://foojayio.github.io/website/today/getting-started-with-deep-learning-in-java-using-deep-netts/</link><pubDate>Tue, 05 Jul 2022 07:22:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-deep-learning-in-java-using-deep-netts/</guid><description>&lt;p&gt;&lt;a href="https://www.deepnetts.com/" target="_blank" rel="noopener noreferrer"&gt;Deep Netts&lt;/a&gt;
 is pure Java deep learning library with a friendly, Java centric API.&lt;/p&gt;
&lt;p&gt;It makes it easy for Java developers to quickly start using deep learning and it is easy to integrate with existing Java applications.&lt;/p&gt;
&lt;p&gt;It supports commonly used neural network architectures (feed forward networks, convolutional networks) for classification, regression and image recogniton tasks.&lt;/p&gt;
&lt;h3 id="h3-0-adding-deep-netts-to-your-project"&gt;Adding Deep Netts to your Project&lt;/h3&gt;
&lt;p&gt;To be able to use Deep Netts in Maven based Java project, add the following dependency into dependencies section of your pom.xml file:&lt;/p&gt;</description></item><item><title>Foojay Status Report: January – June 2022</title><link>https://foojayio.github.io/website/today/foojay-status-report-january-june-2022/</link><pubDate>Mon, 04 Jul 2022 07:01:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-status-report-january-june-2022/</guid><description>&lt;p&gt;It&amp;rsquo;s been another half year of content and activities in and around the place for friends of OpenJDK&amp;hellip; let&amp;rsquo;s look at some statistics, trends, comparisons, highlights, and plans for the future!&lt;/p&gt;
&lt;h2 id="h2-0-trends-and-comparisons"&gt;Trends and Comparisons&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s start by looking at Google Analytics, what&amp;rsquo;s the curve look like for the past half year? Here it is:&lt;/p&gt;
&lt;figure class="wp-block-image size-large is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="image-1024x843.png" alt="" class="wp-image-56455" width="427" height="351"&gt;
&lt;/figure&gt;
&lt;p&gt;Over the past 6 months, from the first day of January to the last day of June, there were &lt;strong&gt;90K unique visitors and 127K sessions on Foojay.io&lt;/strong&gt;. That is meaningless in the absence of something to compare it to. Let&amp;rsquo;s compare the above to the same analysis for the entirety of last year, from the first day of last year to the last day of last year:&lt;/p&gt;</description></item><item><title>Understand Source Code – Deep into the Codebase, Locally &amp; Production</title><link>https://foojayio.github.io/website/today/understand-source-code-deep-into-the-codebase-locally-and-in-production/</link><pubDate>Fri, 01 Jul 2022 07:17:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/understand-source-code-deep-into-the-codebase-locally-and-in-production/</guid><description>&lt;p&gt;Say you have a new code base to study or picked up an open source project. You might be a seasoned developer for whom this is another project in a packed resume. Alternatively, you might be a junior engineer for whom this is the first &amp;ldquo;real&amp;rdquo; project.&lt;/p&gt;
&lt;p&gt;It doesn&amp;rsquo;t matter!&lt;/p&gt;
&lt;p&gt;With completely new source code repositories, we still know nothing&amp;hellip;&lt;/p&gt;
&lt;p&gt;The seasoned senior might have a leg up in finding some things and recognizing patterns. But none of us can read and truly follow a project with 1M+ lines of code. We look over the docs, which in my experience usually have only passing resemblance to the actual codebase. We segregate and assume about the various modules, but picking them up is hard.&lt;/p&gt;</description></item><item><title>MicroStream Next-Generation Serialisation Engine</title><link>https://foojayio.github.io/website/today/microstream-part-4-serialisation-engine/</link><pubDate>Wed, 29 Jun 2022 08:07:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/microstream-part-4-serialisation-engine/</guid><description>&lt;p&gt;&lt;strong&gt;In this fourth part we go deeper into the Serialisation engine that is within MicroStream to store the Object graph in a binary format.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the previous articles (&lt;a href="https://foojayio.github.io/website/today/microstream-part-1-what-is-it/"&gt;part 1&lt;/a&gt;
, &lt;a href="https://foojayio.github.io/website/today/microstream-part-2-configure-the-storage-manager/"&gt;part 2&lt;/a&gt;
 and &lt;a href="https://foojayio.github.io/website/today/microstream-part-3-storing-data/"&gt;part 3&lt;/a&gt;
), we have already mentioned that MicroStream stores Java instances in storage in a binary way with a new, from the ground up created, serialisation framework.&lt;/p&gt;
&lt;p&gt;In this article, we go a bit more in detail about the next generation Java serialisation that we have built to achieve the MicroStream Java Object database and how you can use it outside the functionality of storing the root object that makes up your database.&lt;/p&gt;</description></item><item><title>Top 7 Features in Jakarta EE 10 Release</title><link>https://foojayio.github.io/website/today/top-7-features-in-jakarta-ee-10/</link><pubDate>Tue, 28 Jun 2022 08:33:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/top-7-features-in-jakarta-ee-10/</guid><description>&lt;p&gt;Java EE has been a dominant force behind all enterprise development in Java. Lately, it was renamed to &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
, while transitioning to the Eclipse Foundation.&lt;/p&gt;
&lt;p&gt;This transition opened the door to open governance, open compatibility testing (the earlier &lt;a href="https://en.wikipedia.org/wiki/Technology_Compatibility_Kit" target="_blank" rel="noopener noreferrer"&gt;Technology Compatibility Kit&lt;/a&gt;
 was closed source), and of course, open-source contributions. That means no specific vendor has more influence than any other and it is a more distributed process now.&lt;/p&gt;</description></item><item><title>Hard Things in Computer Science</title><link>https://foojayio.github.io/website/today/hard-things-computer-science/</link><pubDate>Mon, 27 Jun 2022 08:13:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/hard-things-computer-science/</guid><description>&lt;p&gt;If you&amp;rsquo;ve more than a couple of years of experience in IT, you probably have stumbled upon the following quote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There are only two hard things in computer science: cache invalidation and naming things. &amp;ndash; Phil Karlton&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then, because it&amp;rsquo;s such a great quote, it evolved:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/codinghorror/status/506010907021828096" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/hard-things-computer-science/Screenshot-2022-06-26-at-10.28.24.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
However, I think that the initial quote is misleading. A lot of things are hard in computer science. This post aims to describe some of them.&lt;/p&gt;</description></item><item><title>Spring Boot Performance Workshop with Vlad Mihalcea</title><link>https://foojayio.github.io/website/today/spring-boot-performance-workshop-with-vlad-mihalcea/</link><pubDate>Fri, 24 Jun 2022 07:43:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-performance-workshop-with-vlad-mihalcea/</guid><description>&lt;p&gt;A couple of weeks ago, we had a great time hosting the workshop you can see below with Vlad Mihalcea. It was loads of fun and we hope to do this again soon!&lt;/p&gt;
&lt;p&gt;In this workshop, we focused on Spring Boot performance but most importantly on Hibernate performance, which is a common issue in production environments.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s especially hard to track since issues related to data are often hard to perceive when debugging locally. When we have &amp;ldquo;real world&amp;rdquo; data at scale, they suddenly balloon and become major issues.&lt;/p&gt;</description></item><item><title>K8ssandra ramps up security features to match Kubernetes’ best practices</title><link>https://foojayio.github.io/website/today/k8ssandra-ramps-up-security-features-to-match-kubernetes-best-practices/</link><pubDate>Thu, 23 Jun 2022 19:54:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/k8ssandra-ramps-up-security-features-to-match-kubernetes-best-practices/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/k8ssandra-ramps-up-security-features-to-match-kubernetes-best-practices/1_qz4yqblkLUoJDL3t8xrsSg-1024x478.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;New security features are coming to the open-source data platform: K8ssandra. The goal? To align even more with the security best practices of Kubernetes. Here&amp;rsquo;s an introduction to the platform&amp;rsquo;s security mission and an update on current initiatives.&lt;/em&gt;{#e3b8}&lt;/p&gt;
&lt;p&gt;The security defaults applied by &lt;a href="https://k8ssandra.io/" target="_blank" rel="noopener noreferrer"&gt;K8ssandra&lt;/a&gt;
 are about to get even more aligned with&lt;a href="https://kubernetes.io/docs/concepts/security/overview/" target="_blank" rel="noopener noreferrer"&gt;Kubernetes&amp;rsquo; security practices&lt;/a&gt;
. In an upcoming release of K8ssandra, pod and container security configurations give users full customization capabilities and default values out of the box.{#c373}&lt;/p&gt;</description></item><item><title>MicroStream: How to store your data?</title><link>https://foojayio.github.io/website/today/microstream-part-3-storing-data/</link><pubDate>Wed, 22 Jun 2022 11:10:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/microstream-part-3-storing-data/</guid><description>&lt;p&gt;&lt;strong&gt;In the third article of the MicroStream series, we go into the details what you need to do so that data is stored externally to survive the process restart.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the previous articles in this series, we introduced the &lt;a href="https://foojayio.github.io/website/today/microstream-part-1-what-is-it/"&gt;main features of the framework&lt;/a&gt;
 and how you can &lt;a href="https://foojayio.github.io/website/today/microstream-part-2-configure-the-storage-manager/"&gt;configure the &lt;em&gt;StorageManager&lt;/em&gt;&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Java instances in memory are your database but the &lt;em&gt;StorageManager&lt;/em&gt; makes sure that the data are persisted so that they are read the next time the runtime is started again.&lt;/p&gt;</description></item><item><title>Master-Detail with Hilla</title><link>https://foojayio.github.io/website/today/master-detail-with-hilla/</link><pubDate>Tue, 21 Jun 2022 12:13:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/master-detail-with-hilla/</guid><description>&lt;p&gt;In this article, I&amp;rsquo;ll explain how to use the web application framework &lt;a href="https://hilla.dev" target="_blank" rel="noopener noreferrer"&gt;Hilla&lt;/a&gt;
 to create a master-detail view with a Grid to display the data and a Form to edit the data.&lt;/p&gt;
&lt;h2 id="h2-0-what-is-hilla"&gt;What is Hilla?&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Hilla integrates a Spring Boot Java back end with a reactive TypeScript front end. It helps you build apps faster with type-safe server communication, including UI components, and integrated tooling. &amp;ndash; From &lt;a href="https://hilla.dev/" target="_blank" rel="noopener noreferrer"&gt;hilla.dev&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hilla uses TypeScript with &lt;a href="https://lit.dev/" target="_blank" rel="noopener noreferrer"&gt;Lit&lt;/a&gt;
and &lt;a href="https://developer.mozilla.org/de/docs/Web/Web_Components" target="_blank" rel="noopener noreferrer"&gt;Webcomponents&lt;/a&gt;
 in the frontend and Spring Boot in the backend. In the backend you&amp;rsquo;ll create endpoints from which the API and the TypeScript will be generated. This makes the access to the backend much easier and it&amp;rsquo;s also typesafe and compile-time-checked.&lt;/p&gt;</description></item><item><title>Java on Visual Studio Code - May Update</title><link>https://foojayio.github.io/website/today/java-on-visual-studio-code-may-update/</link><pubDate>Mon, 20 Jun 2022 14:06:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-visual-studio-code-may-update/</guid><description>&lt;p&gt;Hi everyone, welcome to the May update of Visual Studio Code Java.&lt;/p&gt;
&lt;p&gt;In this month&amp;rsquo;s update, we are going to share exciting improvements to our user experience regarding signature help and code completion as well as new Gradle features.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s get started!&lt;/p&gt;
&lt;h4 id="signature-help-improvement"&gt;&lt;strong&gt;Signature Help Improvement&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Signature Help displays the signature of a method in a tooltip when a user types the parameter list start character (typically an opening parenthesis). In our latest release, we have made some major improvements to this feature:&lt;/p&gt;</description></item><item><title>Debugging jsoup Java Code in Production Using Lightrun</title><link>https://foojayio.github.io/website/today/debugging-jsoup-java-code-in-production-using-lightrun/</link><pubDate>Fri, 17 Jun 2022 09:35:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-jsoup-java-code-in-production-using-lightrun/</guid><description>&lt;p&gt;Scraping websites built for modern browsers is far more challenging than it was a decade ago.&lt;/p&gt;
&lt;p&gt;jsoup is a convenient API that makes scraping websites trivial via DOM traversal, CSS Selectors, JQuery-Like methods and more. But it isn&amp;rsquo;t without its caveat. Every scraping API is a ticking time bomb.&lt;/p&gt;
&lt;p&gt;Real-world HTML is flaky. It changes without notice since it isn&amp;rsquo;t a documented API. When our Java program fails in scraping, we&amp;rsquo;re suddenly stuck with a ticking time bomb.&lt;/p&gt;</description></item><item><title>Data Modeling in Cassandra and Astra DB</title><link>https://foojayio.github.io/website/today/data-modeling-in-cassandra-and-astra-db/</link><pubDate>Thu, 16 Jun 2022 19:22:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/data-modeling-in-cassandra-and-astra-db/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/data-modeling-in-cassandra-and-astra-db/0_90M63PeIIyDG3hj9-1024x581.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;What does it take to build an efficient and sound data model for &lt;a href="https://cassandra.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Cassandra&lt;/a&gt;
® and &lt;a href="https://astra.dev/3z6AFNd" target="_blank" rel="noopener noreferrer"&gt;DataStax Astra DB&lt;/a&gt;
? Where would one start? Are there any data modeling rules to follow? Can it be done consistently time and time again? The answers to these and many other questions can be found in the Cassandra data modeling methodology.{#3856}&lt;/p&gt;
&lt;p&gt;In this post, we present a high-level overview of the data modeling methodology for Cassandra and &lt;a href="https://astra.dev/3z6AFNd" target="_blank" rel="noopener noreferrer"&gt;Astra DB&lt;/a&gt;
, and share over half a dozen complete data modeling examples from various real-life domains. We apply the methodology to create Cassandra and Astra DB data models for IoT, messaging data, digital library, investment portfolio, time series, shopping cart, and order management. We even provide our datasets and queries for you to try.{#4bd9}&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>What I Miss in Java, the Perspective of a Kotlin Developer</title><link>https://foojayio.github.io/website/today/miss-java-kotlin-developer/</link><pubDate>Wed, 15 Jun 2022 08:15:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/miss-java-kotlin-developer/</guid><description>&lt;p&gt;Java has been my bread and butter for almost two decades.&lt;/p&gt;
&lt;p&gt;Several years ago, I started to learn Kotlin; I never regretted it.&lt;/p&gt;
&lt;p&gt;Though Kotlin compiles to JVM bytecode, I sometimes have to write Java again.&lt;/p&gt;
&lt;p&gt;Every time I do, I cannot stop pondering why my code doesn&amp;rsquo;t look as nice as in Kotlin.&lt;/p&gt;
&lt;p&gt;I miss some features that would improve my code&amp;rsquo;s readability, expressiveness, and maintainability.&lt;/p&gt;
&lt;p&gt;This article is not meant to bash Java but to list some features I&amp;rsquo;d like to find in Java.&lt;/p&gt;</description></item><item><title>MicroStream: Configure the StorageManager</title><link>https://foojayio.github.io/website/today/microstream-part-2-configure-the-storage-manager/</link><pubDate>Wed, 15 Jun 2022 08:04:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/microstream-part-2-configure-the-storage-manager/</guid><description>&lt;p&gt;&lt;strong&gt;In this second article in the series, we cover how to get started configuring the StorageManager of MicroStream!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As we have discussed in the &lt;a href="https://foojayio.github.io/website/today/microstream-part-1-what-is-it/" title="introduction article"&gt;introduction article&lt;/a&gt;
 of this series, MicroStream provides you with a solution to use Java instances in memory as your database.&lt;/p&gt;
&lt;p&gt;You can access the data through getters, the Stream API, or any other method provided on the Java Objects.&lt;/p&gt;
&lt;p&gt;This means ultrafast, no mapping required, and no external system for your data.&lt;/p&gt;</description></item><item><title>Wordish with JavaFX - Part 5</title><link>https://foojayio.github.io/website/today/wordish-with-javafx-part-5/</link><pubDate>Tue, 14 Jun 2022 07:25:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/wordish-with-javafx-part-5/</guid><description>&lt;p&gt;Welcome to Part 5 and the final installment of this series.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In &lt;a href="https://foojayio.github.io/website/today/wordish-with-javafx-part-1/"&gt;Part 1&lt;/a&gt;
, we introduced the Wordish game with JavaFX and discussed the main UI layout.&lt;/li&gt;
&lt;li&gt;In &lt;a href="https://foojayio.github.io/website/today/wordish-with-javafx-part-2/"&gt;Part 2&lt;/a&gt;
, we discussed look and feel enhancements. We introduced specialized Label and Button controls that use pseudo-classes for advanced CSS styling. In addition, we covered incorporating third-party font libraries and customizing Scene Builder to leverage these features.&lt;/li&gt;
&lt;li&gt;Next, in &lt;a href="https://foojayio.github.io/website/today/wordish-with-javafx-part-3/"&gt;Part 3&lt;/a&gt;
, we explored the controller code that maintains game state and responds to user input with appropriate updates to the UI.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/wordish-with-javafx-part-4/"&gt;Part 4&lt;/a&gt;
, &lt;strong&gt;What&amp;rsquo;s in a Word, Anyway?&lt;/strong&gt;, examines how we get our words and how we determine if a submitted word is valid.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And now in Part 5, we turn to JavaFX charts, showing how to customize charts with orientation and colors and how to add nodes to the chart scene graph.&lt;/p&gt;</description></item><item><title>Java on Azure Tooling Update – June 2022</title><link>https://foojayio.github.io/website/today/java-on-azure-tooling-update-june-2022/</link><pubDate>Mon, 13 Jun 2022 07:40:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-azure-tooling-update-june-2022/</guid><description>&lt;p&gt;Hi everyone, welcome back to June update of Java on Azure Tooling.&lt;/p&gt;
&lt;p&gt;In this update, we will introduce the new application-centric view on Azure toolkit for IntelliJ that will make the interface more user-friendly.&lt;/p&gt;
&lt;p&gt;In addition, we have added support for more Azure services.&lt;/p&gt;
&lt;p&gt;For Gradle plugins, we have some new features for Azure Web Apps and Azure Functions.&lt;/p&gt;
&lt;p&gt;We hope you like these new features and share your feedback with us. So let us get right into it&amp;hellip;&lt;/p&gt;</description></item><item><title>Remote Debugging and Developer Observability</title><link>https://foojayio.github.io/website/today/remote-debugging-and-developer-observability/</link><pubDate>Fri, 10 Jun 2022 10:12:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/remote-debugging-and-developer-observability/</guid><description>&lt;p&gt;In this post, we&amp;rsquo;ll go over remote debugging. Debugging production with developer observability tools and debugging asynchronous code which presents its own unique challenges!&lt;/p&gt;
&lt;p&gt;This is actually material from four separate videos because I wanted to pool some ideas together into a single blog post and the asynchronous stuff got pulled in. So without further ado, these are the applicable videos&amp;hellip; Read on for the analysis and discussion:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;🦆 Duckling the 15th:&lt;/p&gt;</description></item><item><title>Tombstones and Ghost Data Don’t Have to Be Scary!</title><link>https://foojayio.github.io/website/today/tombstones-and-ghost-data-dont-have-to-be-scary/</link><pubDate>Thu, 09 Jun 2022 20:36:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/tombstones-and-ghost-data-dont-have-to-be-scary/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/tombstones-and-ghost-data-dont-have-to-be-scary/1_g5MhVmTyqdCWG_-LkItmNg-1024x679.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Working with tombstones can be one of the more frustrating aspects of Apache Cassandra®. Problems with tombstones can happen when a large number of deletes occur within a short period of time, resulting in slower queries and disk bloat. This article will discuss tombstones, including the purpose they serve, and strategies/methods on how to avoid them.&lt;/strong&gt;&lt;/em&gt;{#2508}&lt;/p&gt;
&lt;p&gt;&lt;a href="https://cassandra.apache.org/doc/4.0/cassandra/operating/compaction/index.html#why-tombstones" target="_blank" rel="noopener noreferrer"&gt;Tombstones&lt;/a&gt;
 in &lt;a href="https://cassandra.apache.org/_/index.html" target="_blank" rel="noopener noreferrer"&gt;Apache Cassandra&lt;/a&gt;
&lt;em&gt;®&lt;/em&gt; are written markers that are created whenever a value is deleted. Their purpose is to indicate that any prior values have been deleted. When a read occurs, it pulls data from the sorted string table (SSTable) files on a node that may contain the data. All prior values for the requested key are returned, ordered by write-time.{#d711}&lt;/p&gt;</description></item><item><title>Building Project Panama's jextract tool by yourself</title><link>https://foojayio.github.io/website/today/building-project-panamas-jextract-tool-by-yourself/</link><pubDate>Thu, 09 Jun 2022 14:22:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-project-panamas-jextract-tool-by-yourself/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Absorb what is useful, discard what is useless and add what is specifically your own. &amp;ndash; Bruce Lee&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Do you want to build Project Panama&amp;rsquo;s &lt;a href="https://github.com/openjdk/jextract" target="_blank" rel="noopener noreferrer"&gt;Jextract&lt;/a&gt;
 tool by yourself? I can show you how!&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve seen any of my past &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-3/"&gt;articles&lt;/a&gt;
 on Project Panama I&amp;rsquo;ve mentioned a really convenient tool called &lt;code&gt;jextract&lt;/code&gt; that can generate Java binding code that represents native functions or variables (symbols) from C libraries.&lt;/p&gt;
&lt;p&gt;This alleviates the developer&amp;rsquo;s need of creating binding code by hand. By passing in a C header file (.h extension) &lt;code&gt;jextract&lt;/code&gt; can generate source code or compiled Java classes.&lt;/p&gt;</description></item><item><title>Create Music Bingo Cards with iText</title><link>https://foojayio.github.io/website/today/create-music-bingo-cards-with-itext/</link><pubDate>Thu, 09 Jun 2022 08:33:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/create-music-bingo-cards-with-itext/</guid><description>&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;Let&amp;rsquo;s use Java to automate a boring task and have a party!
Warning, this can lead to noise nuisance from singing and dancing&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It has been a while since I last had to create documents in a program, and iText has been &amp;ldquo;on my radar&amp;rdquo; to try out for a while now.&lt;/p&gt;
&lt;p&gt;This weekend we had a party and wanted to organize a music bingo.&lt;/p&gt;
&lt;p&gt;For this, we needed a set of randomly selected songs to be printed out per person.&lt;/p&gt;</description></item><item><title>My Summary of jPrime 2022</title><link>https://foojayio.github.io/website/today/my-summary-of-jprime-2022/</link><pubDate>Wed, 08 Jun 2022 18:37:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/my-summary-of-jprime-2022/</guid><description>&lt;p&gt;Writing summaries of conference talks is the best way to focus on the talk and listen actively.&lt;/p&gt;
&lt;p&gt;Before conference speaking became part of my job, I was already doing it.&lt;/p&gt;
&lt;p&gt;However, I don&amp;rsquo;t attend that many talks now, and I don&amp;rsquo;t take notes when I do.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jprime.io/" target="_blank" rel="noopener noreferrer"&gt;jPrime&lt;/a&gt;
 is a conference in Bulgaria, and after two cancellations due to Covid, they had their edition this week.&lt;/p&gt;
&lt;p&gt;Probably, for this reason, the atmosphere is quite emulating: I attended a couple of talks and here are my notes.&lt;/p&gt;</description></item><item><title>Managing Distributed Applications in Kubernetes Using Cilium and Istio with Helm and Operator for Deployment</title><link>https://foojayio.github.io/website/today/managing-distributed-applications-in-kubernetes-using-cilium-and-istio-with-helm-and-operator-for-deployment/</link><pubDate>Tue, 07 Jun 2022 14:51:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/managing-distributed-applications-in-kubernetes-using-cilium-and-istio-with-helm-and-operator-for-deployment/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/managing-distributed-applications-in-kubernetes-using-cilium-and-istio-with-helm-and-operator-for-deployment/1_i26lEM7Wl5JA7FIMlhtKNA-1024x576.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This post will show you the benefits of managing your distributed applications with Kubernetes in cross-cloud, multi-cloud, and hybrid cloud scenarios using Cilium and Istio with Helm and Operator for deployment.&lt;/em&gt;{#6864}&lt;/p&gt;
&lt;p&gt;In our recent post on &lt;a href="https://thenewstack.io/taking-your-database-beyond-a-single-kubernetes-cluster/" target="_blank" rel="noopener noreferrer"&gt;The New Stack&lt;/a&gt;
, we showed you how you can leverage &lt;a href="https://kubernetes.io/" target="_blank" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;
 (K8s) and &lt;a href="https://cassandra.apache.org/_/index.html" target="_blank" rel="noopener noreferrer"&gt;Apache Cassandra&lt;/a&gt;
TM to manage distributed applications at scale, with thousands of nodes across both on-premises and in the cloud. In that example, we used &lt;a href="https://k8ssandra.io/" target="_blank" rel="noopener noreferrer"&gt;K8ssandra&lt;/a&gt;
 and &lt;a href="https://cloud.google.com/" target="_blank" rel="noopener noreferrer"&gt;Google Cloud Platform&lt;/a&gt;
 (GCP) to illustrate some of the challenges you might expect to encounter as you grow into a multi-cloud environment, upgrade to another K8s version, or begin working with different distributions and complimentary tooling. In this post, we&amp;rsquo;ll explore a few alternative approaches to using K8s to help you more easily manage distributed applications.{#fec3}&lt;/p&gt;</description></item><item><title>How to Add an Event to the Foojay Event Calendar</title><link>https://foojayio.github.io/website/today/how-to-add-an-event-to-the-foojay-event-calendar/</link><pubDate>Tue, 07 Jun 2022 09:34:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-add-an-event-to-the-foojay-event-calendar/</guid><description>&lt;p&gt;Foojay.io, the place for &lt;strong&gt;f&lt;/strong&gt; riends of &lt;strong&gt;O&lt;/strong&gt; pen&lt;strong&gt;J&lt;/strong&gt;DK, is a friendly community of users of the OpenJDK, such as Java developers and Kotlin developers.&lt;/p&gt;
&lt;p&gt;It is a collaborative community with tips and insights being shared on a daily basis on &lt;a href="https://foojayio.github.io/website/today/"&gt;Foojay Today&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;At Foojay, we maintain a list of past and upcoming Java events. It helps the worldwide OpenJDK community find events and participate in them easily.&lt;/p&gt;
&lt;p&gt;You will find all the events in the following link:&lt;/p&gt;</description></item><item><title>Wordish with JavaFX - Part 4 : Foojay</title><link>https://foojayio.github.io/website/today/wordish-with-javafx-part-4/</link><pubDate>Tue, 07 Jun 2022 09:23:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/wordish-with-javafx-part-4/</guid><description>&lt;p&gt;Welcome to Part 4 of this five part series.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/wordish-with-javafx-part-1/"&gt;Part 1&lt;/a&gt;
, we introduced the Wordish game with JavaFX and discussed the main UI layout.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/wordish-with-javafx-part-2/"&gt;Part 2&lt;/a&gt;
, we discussed look and feel enhancements.&lt;/p&gt;
&lt;p&gt;We introduced specialized Label and Button controls that use pseudo-classes for advanced CSS styling.&lt;/p&gt;
&lt;p&gt;We covered incorporating third-party font libraries and customizing Scene Builder to leverage these features.&lt;/p&gt;
&lt;p&gt;Next, in &lt;a href="https://foojayio.github.io/website/today/wordish-with-javafx-part-3/"&gt;Part 3&lt;/a&gt;
, we explored the controller code that maintains game state and responds to user input with appropriate updates to the UI.&lt;/p&gt;</description></item><item><title>Running Jekyll on a Mac</title><link>https://foojayio.github.io/website/today/running-jekyll-on-a-mac/</link><pubDate>Mon, 06 Jun 2022 17:41:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/running-jekyll-on-a-mac/</guid><description>&lt;p&gt;At the beginning of the year, I had two new Macs in a row in one month. I changed my company and had to return my previous laptop. Thus, I ordered a replacement one, but due to the current hardware shortage, the shipping took weeks: I had to rent one in the meanwhile.&lt;/p&gt;
&lt;p&gt;It means I had to install my Jekyll stack twice in a row. The first time took quite some time; the second one was much faster.&lt;/p&gt;</description></item><item><title>MicroStream: High-Performance Java-Native-Persistence framework</title><link>https://foojayio.github.io/website/today/microstream-part-1-what-is-it/</link><pubDate>Mon, 06 Jun 2022 08:03:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/microstream-part-1-what-is-it/</guid><description>&lt;p&gt;Within every application, data plays a very important role.&lt;/p&gt;
&lt;p&gt;In every industry, you have data, such as customer or product information, analysis results, patient data, or account data is a vital part of the business and the applications that support your business processes.&lt;/p&gt;
&lt;p&gt;Data must be in memory to be processed by your application, but must be stored outside of it because the application&amp;rsquo;s memory is temporary.&lt;/p&gt;
&lt;p&gt;Information is lost when the process ends unless we have stored it somewhere else in a sustainable way.&lt;/p&gt;</description></item><item><title>Debugging the Java Message Service (JMS) API using Lightrun</title><link>https://foojayio.github.io/website/today/debugging-the-java-message-service-jms-api-using-lightrun/</link><pubDate>Fri, 03 Jun 2022 09:26:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-the-java-message-service-jms-api-using-lightrun/</guid><description>&lt;p&gt;The Java Message Service API (JMS) was developed by Sun Microsystems in the days of &lt;a href="https://en.wikipedia.org/wiki/Jakarta_EE" target="_blank" rel="noopener noreferrer"&gt;Java EE&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The JMS API provides us with simple messaging abstractions including Message Producer, Message Consumer, etc. Messaging APIs let us place a message on a &amp;ldquo;queue&amp;rdquo; and consume messages placed into said queue.&lt;/p&gt;
&lt;p&gt;This is immensely useful for high throughput systems &amp;ndash; instead of wasting user time by performing a slow operation in real-time, an enterprise application can send a message. This non-blocking approach enables extremely high throughput, while maintaining reliability at scale.&lt;/p&gt;</description></item><item><title>How to Develop and Test an Automated CI/CD Workflow with Cassandra</title><link>https://foojayio.github.io/website/today/how-to-develop-and-test-an-automated-ci-cd-workflow-with-cassandra/</link><pubDate>Fri, 03 Jun 2022 08:52:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-develop-and-test-an-automated-ci-cd-workflow-with-cassandra/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;In this post, we&amp;rsquo;ll show you how to develop a CI/CD workflow using Apache Cassandra&lt;/em&gt; ™&lt;em&gt;with a GitHub Actions runner. See for yourself how much time and effort you can save by deploying Cassandra cloud-natively while you test and deploy your cloud-native applications!&lt;/em&gt;&lt;/strong&gt;{#6067}&lt;/p&gt;
&lt;p&gt;If you have projects that depend on &lt;a href="https://cassandra.apache.org/_/index.html" target="_blank" rel="noopener noreferrer"&gt;Apache Cassandra&lt;/a&gt;
™ and you want to develop an automated continuous integration and continuous delivery (CI/CD) flow, you&amp;rsquo;re going to need to create Cassandra clusters dynamically for your tests to make sure that your app works after each code change. &lt;a href="https://www.datastax.com/" target="_blank" rel="noopener noreferrer"&gt;DataStax&lt;/a&gt;
 does this every day &amp;mdash; we run Cassandra in &lt;a href="https://kubernetes.io/" target="_blank" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;
 to power &lt;a href="https://astra.dev/38xbdFI" target="_blank" rel="noopener noreferrer"&gt;Astra DB&lt;/a&gt;
. And, we use continuous testing of our Cassandra deployments to make sure Astra DB works reliably.{#8d10}&lt;/p&gt;</description></item><item><title>How DataStax Tracked Down a Linux Kernel Bug with Fallout</title><link>https://foojayio.github.io/website/today/how-datastax-tracked-down-a-linux-kernel-bug-with-fallout/</link><pubDate>Thu, 02 Jun 2022 15:32:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-datastax-tracked-down-a-linux-kernel-bug-with-fallout/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/how-datastax-tracked-down-a-linux-kernel-bug-with-fallout/1_N_gqb3PrkKgMbJHSmYeOaw-1024x750.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Sometimes as a developer, you run into a bug buried deep within the layers of your software stack. Chasing down the root cause requires not only curiosity, patience, and a healthy dose of tenacity but a willingness to try different tools and approaches. This post describes our challenges and ultimate success in tracking down a Linux kernel bug using Fallout.&lt;/em&gt;{#ee66}&lt;/p&gt;
&lt;p&gt;Bugs come in all shapes and sizes and it&amp;rsquo;s not always clear at the beginning of a debugging session which one you&amp;rsquo;re currently chasing. Some bugs can be fixed up in a matter of minutes while others take weeks to nail down. And the really tricky ones require you to dig through multiple layers of your software stack, stressing the limits of your patience.{#8aae}&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 5: Building an Empire of Microservices</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-5-building-an-empire-of-microservices/</link><pubDate>Thu, 02 Jun 2022 05:08:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-5-building-an-empire-of-microservices/</guid><description>&lt;p&gt;We continue building our microservices system by adding a coordination layer to handle spinning multiple services up and down.&lt;/p&gt;
&lt;p&gt;In previous articles, we grew from two Spring Boot applications to three applications + a database container.&lt;/p&gt;
&lt;p&gt;As we continue to scale and broaden our system, we will need something to coordinate service and ensure consistent communication (avoid human error).&lt;/p&gt;
&lt;p&gt;We will do this through &lt;a href="https://docs.docker.com/compose/" target="_blank" rel="noopener noreferrer"&gt;&lt;code&gt;docker-compose&lt;/code&gt;&lt;/a&gt;
, an orchestration tool that manages containerized applications.&lt;/p&gt;</description></item><item><title>What Can We Expect In OpenJDK 19?</title><link>https://foojayio.github.io/website/today/what-can-we-expect-in-openjdk-19/</link><pubDate>Wed, 01 Jun 2022 19:00:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-can-we-expect-in-openjdk-19/</guid><description>&lt;p&gt;Although the Java 19 release is coming in September (2022-09-20), we already know what will happen in that release!&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll touch on upcoming features via examples to get a sense of how valuable these can be to a project.&lt;/p&gt;
&lt;h3 id="h3-0-jep-405-record-patterns-preview"&gt;JEP-405: Record Patterns (Preview)&lt;/h3&gt;
&lt;p&gt;Java 14 introduced (JEP-361, Reference 2), which made it possible to use a switch as a statement or an expression. In many cases, I think it was something the community shouted for quite some time, because many other JVM languages have already provided such constructs.&lt;/p&gt;</description></item><item><title>Optimizing Distributed Joins: The Case of Google Cloud Spanner and DataStax Astra DB</title><link>https://foojayio.github.io/website/today/optimizing-distributed-joins-the-case-of-google-cloud-spanner-and-datastax-astra-db/</link><pubDate>Tue, 31 May 2022 16:25:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/optimizing-distributed-joins-the-case-of-google-cloud-spanner-and-datastax-astra-db/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/optimizing-distributed-joins-the-case-of-google-cloud-spanner-and-datastax-astra-db/0_6VGah2hwaLIBjW7R-1024x576.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In this post, learn how relational and NoSQL databases, Google Cloud Spanner and DataStax Astra DB, optimize distributed joins for real-time applications.&lt;/em&gt;{#c63a}&lt;/p&gt;
&lt;p&gt;Distributed joins are commonly considered to be too expensive to use for real-time transaction processing. That is because, besides joining data, they also frequently require moving or shuffling data between nodes in a cluster, which can significantly affect query response times and database throughput. However, there are certain optimizations that can completely eliminate the need to move data to enable faster joins. In this article, we first review the four types of distributed joins, including shuffle join, broadcast join, co-located join, and pre-computed join. We then demonstrate how leading fully managed Relational and NoSQL databases, namely &lt;a href="https://cloud.google.com/spanner" target="_blank" rel="noopener noreferrer"&gt;Google Cloud Spanner&lt;/a&gt;
 and &lt;a href="https://auth.cloud.datastax.com/auth/realms/CloudUsers/protocol/openid-connect/registrations?client_id=auth-proxy&amp;amp;response_type=code&amp;amp;scope=openid&amp;#43;profile&amp;#43;email&amp;amp;redirect_uri=https://astra.datastax.com/welcome" target="_blank" rel="noopener noreferrer"&gt;DataStax Astra DB&lt;/a&gt;
, support optimized joins that are suitable for real-time applications.{#bea1}&lt;/p&gt;</description></item><item><title>Wordish with JavaFX - Part 3</title><link>https://foojayio.github.io/website/today/wordish-with-javafx-part-3/</link><pubDate>Tue, 31 May 2022 07:23:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/wordish-with-javafx-part-3/</guid><description>&lt;p&gt;Welcome to Part 3 of this five part series.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/wordish-with-javafx-part-1/"&gt;Part 1&lt;/a&gt;
, we introduced the Wordish game with JavaFX and discussed the main UI layout.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/wordish-with-javafx-part-2/"&gt;Part 2&lt;/a&gt;
, we discussed look and feel enhancements.&lt;/p&gt;
&lt;p&gt;We introduced specialized Label and Button controls that use pseudo-classes for advanced CSS styling.&lt;/p&gt;
&lt;p&gt;We covered incorporating third-party font libraries and customizing Scene Builder to leverage these features.&lt;/p&gt;
&lt;p&gt;Now in Part 3, we&amp;rsquo;ll examine the controller code. The controller code maintains game state and responds to user input with appropriate updates to the UI.&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>Superfast Application Startup: Java on CRaC</title><link>https://foojayio.github.io/website/today/superfast-application-startup-java-on-crac/</link><pubDate>Mon, 30 May 2022 05:37:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/superfast-application-startup-java-on-crac/</guid><description>&lt;p&gt;It&amp;rsquo;s now twenty-seven years since Java was first released, and it continues to be one of the most popular platforms for applications, especially on servers.&lt;/p&gt;
&lt;p&gt;One of the reasons for this is the &lt;a href="https://en.wikipedia.org/wiki/Java_virtual_machine" target="_blank" rel="noopener noreferrer"&gt;Java Virtual Machine (JVM)&lt;/a&gt;
. This provides a managed runtime environment that removes the need for developers to deal with things like memory management; the garbage collector takes care of this for you. Another significant advantage of the JVM is the use of bytecodes that can be converted to native instructions at runtime using a Just-In-Tim (JIT) compiler.&lt;/p&gt;</description></item><item><title>Memory Debugging and Watch Annotations</title><link>https://foojayio.github.io/website/today/memory-debugging-and-watch-annotations/</link><pubDate>Fri, 27 May 2022 08:04:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/memory-debugging-and-watch-annotations/</guid><description>&lt;p&gt;Before diving into debugging memory issues and the other amazing running process, memory debugging capabilities (which are amazing)&amp;hellip; I want to discuss a point I left open in the &lt;a href="https://talktotheduck.dev/debugging-collections-streams-and-watch-renderers" target="_blank" rel="noopener noreferrer"&gt;last duckling post&lt;/a&gt;
. Back there we discussed customizing the watch renderer. This is super cool!&lt;/p&gt;
&lt;p&gt;But it&amp;rsquo;s also tedious. Before we continue, if you prefer, I cover most of these subjects in these videos:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;🦆 Duckling the 11th:&lt;/p&gt;
&lt;p&gt;Did you know you can see all the objects in memory?&lt;/p&gt;</description></item><item><title>Java Panama Polyglot (Rust) Part 4</title><link>https://foojayio.github.io/website/today/java-panama-polyglot-rust-part-4/</link><pubDate>Thu, 26 May 2022 08:33:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-panama-polyglot-rust-part-4/</guid><description>&lt;p&gt;Hello and welcome to the final article of 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;In this article you will be using Project Panama to talk to the &lt;a href="https://www.rust-lang.org" target="_blank" rel="noopener noreferrer"&gt;Rust&lt;/a&gt;
 language.&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-part-3/"&gt;Part 3&lt;/a&gt;
 you had a chance to learn about how to use Java Project Panama&amp;rsquo;s abilities to access the locally installed Python interpreter.&lt;/p&gt;</description></item><item><title>Book Review: Monolith to Microservices (Part 2)</title><link>https://foojayio.github.io/website/today/book-review-monolith-to-microservices-part-2/</link><pubDate>Wed, 25 May 2022 09:09:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-monolith-to-microservices-part-2/</guid><description>&lt;p&gt;This is the second article &lt;a href="https://foojayio.github.io/website/today/book-review-monolith-to-microservices-part-1/"&gt;of the first one I wrote the other day&lt;/a&gt;
, &amp;ldquo;&lt;a href="https://www.amazon.ca/Monolith-Microservices-Evolutionary-Patterns-Transform/dp/1492047848" target="_blank" rel="noopener noreferrer"&gt;Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith&lt;/a&gt;
&amp;rdquo; by Sam Newman.&lt;/p&gt;
&lt;p&gt;In this article, I will summarize chapter two.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/book-review-monolith-to-microservices-part-2/monolith-to-microservice.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-chapter-2-planning-to-migration"&gt;&lt;strong&gt;Chapter #2: Planning to Migration&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;In this chapter, the book discusses the goal and mindset. When we are looking for a Microservices, what should be our goal.&lt;/p&gt;
&lt;p&gt;It argues that our goal shouldn&amp;rsquo;t be the Microservices. Something worked for Netflix or Amazon, which means it will work for me as well. This thought process has a major flaw. It makes you fall into a cargo cult mentality.&lt;/p&gt;</description></item><item><title>Wordish with JavaFX - Part 2</title><link>https://foojayio.github.io/website/today/wordish-with-javafx-part-2/</link><pubDate>Tue, 24 May 2022 07:50:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/wordish-with-javafx-part-2/</guid><description>&lt;h2 id="h2-0-building-games-and-having-fun-with-java-and-javafx"&gt;Building Games and Having Fun with Java and JavaFX&lt;/h2&gt;
&lt;p&gt;Welcome to Part 2 of this five part series!&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/wordish-with-javafx-part-1/"&gt;Part 1&lt;/a&gt;
, we introduced the Wordish game with JavaFX and discussed the main UI layout.&lt;/p&gt;
&lt;p&gt;In this second part, we&amp;rsquo;ll discuss some important look and feel enhancements.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll show you specialized Label and Button controls and using pseudo-classes for advanced CSS styling.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll also cover incorporating third-party font libraries and customizing Scene Builder to leverage these features.&lt;/p&gt;</description></item><item><title>Chopping the Monolith: The Demo</title><link>https://foojayio.github.io/website/today/chopping-monolith-demo/</link><pubDate>Mon, 23 May 2022 12:53:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/chopping-monolith-demo/</guid><description>&lt;p&gt;In my previous blog post &lt;a href="https://foojayio.github.io/website/today/chopping-monolith/"&gt;Chopping the Monolith&lt;/a&gt;
, I explained my stance on microservices and why it shouldn&amp;rsquo;t be your golden standard.&lt;/p&gt;
&lt;p&gt;However, I admitted that some parts of the codebase were less stable than others and had to change more frequently.&lt;/p&gt;
&lt;p&gt;I proposed &amp;ldquo;chopping&amp;rdquo; these few parts to cope with this requirement while keeping the monolith intact.&lt;/p&gt;
&lt;p&gt;As Linus Torvalds once wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Talk is cheap, show me the code!&lt;/p&gt;</description></item><item><title>Debugging Deadlocks and Race Conditions</title><link>https://foojayio.github.io/website/today/debugging-deadlocks-and-race-conditions/</link><pubDate>Fri, 20 May 2022 08:08:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-deadlocks-and-race-conditions/</guid><description>&lt;p&gt;Thread debugging has the reputation of being one of the most arduous tasks for developers. I beg to differ.&lt;/p&gt;
&lt;p&gt;Asynchronous debugging is so much worse. It&amp;rsquo;s supposed to solve the problems of threading and to some degree async helps&amp;hellip;&lt;/p&gt;
&lt;p&gt;But it doesn&amp;rsquo;t make debugging simpler. I will get into that in the next post.&lt;/p&gt;
&lt;p&gt;In the last two ducklings, I talked about threading issues:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;🦆 Duckling the 13th:&lt;/p&gt;
&lt;p&gt;Debug race conditions and deadlocks easily.&lt;/p&gt;</description></item><item><title>Why Developers Should Use Apache Pulsar</title><link>https://foojayio.github.io/website/today/why-developers-should-use-apache-pulsar/</link><pubDate>Thu, 19 May 2022 15:10:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-developers-should-use-apache-pulsar/</guid><description>&lt;p&gt;Apache Pulsar is an open source streaming platform that addresses some important limitations in Kafka, particularly for cloud-native applications.&lt;br&gt;
&lt;img src="https://foojayio.github.io/website/today/why-developers-should-use-apache-pulsar/data_explosion_proliferation_transmission_data_streams_volume_velocity_by_spainter_vfx_gettyimages-896319676_cso_2400x1600-100852889-large-1024x683.jpg" alt="" loading="lazy"&gt;
 SPainter VFX / Getty Images&lt;/p&gt;
&lt;p&gt;If you are building applications today, you are probably familiar with the microservices model: Rather than building big monolithic applications, we break services down into isolated components that we can independently update or change over time.&lt;/p&gt;
&lt;p&gt;Microservices deployments then can use a message bus to decouple and manage the communication between services, which makes it easier to replay requests, handle errors, and deal with load spikes and rapid increases in requests while maintaining the serialized order.&lt;/p&gt;</description></item><item><title>Let's Compile Java Code in the Cloud!</title><link>https://foojayio.github.io/website/today/lets-compile-java-code-in-the-cloud/</link><pubDate>Wed, 18 May 2022 12:03:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/lets-compile-java-code-in-the-cloud/</guid><description>&lt;p&gt;Across the industry, companies are trying to rein in runaway cloud costs by squeezing more carrying capacity out of the instances they run in the cloud.&lt;/p&gt;
&lt;p&gt;Especially in the Java space, developers are trying to fit workloads into smaller and smaller instances and utilize server resources with maximum efficiency.&lt;/p&gt;
&lt;p&gt;Relying on elastic horizontal scaling to deal with spikes in traffic means that Java workloads must start fast and stay fast.&lt;/p&gt;</description></item><item><title>Book Review: Monolith to Microservices (Part 1)</title><link>https://foojayio.github.io/website/today/book-review-monolith-to-microservices-part-1/</link><pubDate>Wed, 18 May 2022 07:43:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-monolith-to-microservices-part-1/</guid><description>&lt;p&gt;I have just finished reading &lt;a href="https://www.amazon.ca/Monolith-Microservices-Evolutionary-Patterns-Transform/dp/1492047848" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith&lt;/a&gt;
&amp;rdquo; by Sam Newman.&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="alignnone size-medium wp-image-55937" src="monolith-to-microservice-388x510.jpeg" alt="" width="388" height="510"&gt;
&lt;br /&gt;
&lt;p&gt;This book is undoubtedly great. It explains the critical aspects applicable when moving away from a monolith to a microservices architecture.&lt;/p&gt;
&lt;p&gt;In this article, I will try to summarize some of the key elements from the book that impacted me.&lt;/p&gt;
&lt;p&gt;This book contains five chapters, each of which has a great deal of context and explanation.&lt;/p&gt;</description></item><item><title>Wordish with JavaFX - Part 1</title><link>https://foojayio.github.io/website/today/wordish-with-javafx-part-1/</link><pubDate>Tue, 17 May 2022 10:13:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/wordish-with-javafx-part-1/</guid><description>&lt;h2 id="h2-0-building-games-and-having-fun-with-java-and-javafx"&gt;Building Games and Having Fun with Java and JavaFX&lt;/h2&gt;
&lt;p&gt;Wordish is a JavaFX implementation of the game Wordle. It&amp;rsquo;s like Wordle. It is Wordle-ish. It&amp;rsquo;s Wordish.
&lt;img src="https://foojayio.github.io/website/today/wordish-with-javafx-part-1/playgame5-308x510.png" alt="" loading="lazy"&gt;
 Figure 1. Wordish main layout view&lt;/p&gt;
&lt;p&gt;Wordle is a daily online word game. You can play the official Wordle game here:&lt;a href="https://www.nytimes.com/games/wordle/index.html" target="_blank" rel="noopener noreferrer"&gt;https://www.nytimes.com/games/wordle/index.html&lt;/a&gt;
. If you haven&amp;rsquo;t played yet, go check it out.&lt;/p&gt;
&lt;p&gt;As I played Wordle, I realized how much fun it would be to create a JavaFX implementation. When you submit a word, each tile rotates to reveal how the individual letter matches &amp;ndash; or doesn&amp;rsquo;t match &amp;ndash; the target word. &lt;em&gt;(Ooh, animation!)&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Toying with Kotlin's Context Receivers</title><link>https://foojayio.github.io/website/today/kotlins-context-receivers/</link><pubDate>Mon, 16 May 2022 10:39:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/kotlins-context-receivers/</guid><description>&lt;p&gt;Kotlin added the idea of Context Receivers in version 1.6.20.&lt;/p&gt;
&lt;p&gt;In this article, I&amp;rsquo;d like to toy with them to understand how useful they can be.&lt;/p&gt;
&lt;p&gt;Note that if you want to play along, you&amp;rsquo;ll need to compile with the &lt;code&gt;-Xcontext-receivers&lt;/code&gt; flag.&lt;/p&gt;
&lt;p&gt;The main idea behind context receivers is to pass additional parameters to a function without having to do it explicitly.&lt;/p&gt;
&lt;h2 id="h2-0-a-simplified-model-sample"&gt;A simplified model sample&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s start with a simple example to show how it works. We want to model a simple transfer operation between two bank accounts.&lt;/p&gt;</description></item><item><title>Azure Toolkit for IntelliJ – April 2022 Update</title><link>https://foojayio.github.io/website/today/azure-toolkit-for-intellij-april-2022-update/</link><pubDate>Mon, 16 May 2022 08:28:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/azure-toolkit-for-intellij-april-2022-update/</guid><description>&lt;p&gt;Welcome to a new series of articles on Azure Toolkit for IntelliJ.&lt;/p&gt;
&lt;p&gt;Azure Toolkit for IntelliJ is a plugin that allows you to easily create, develop, configure, test, and deploy Java applications to Azure.&lt;/p&gt;
&lt;p&gt;Our goal of this series is to keep you posted on the latest product updates, features, and other exciting news.&lt;/p&gt;
&lt;p&gt;In this first article, we are going to take a look at our product roadmap for next few months.&lt;/p&gt;</description></item><item><title>Diving into JVM Framework Monitoring and Profiling</title><link>https://foojayio.github.io/website/today/diving-into-jvm-framework-monitoring-and-profiling/</link><pubDate>Fri, 13 May 2022 06:36:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/diving-into-jvm-framework-monitoring-and-profiling/</guid><description>&lt;p&gt;Managing available resources on demand in a cloud environment can be a very challenging topic. It is worth the effort, since it may however utilise resources far more efficiently.&lt;/p&gt;
&lt;p&gt;Companies or projects are therefore very keen to migrate to the Cloud providers, such as Azul, AWS, Google Cloud or others. For software engineers one truth still stands, also in the Cloud: It&amp;rsquo;s recommended to understand the behaviour and limitations of our deployed JVM application (or pods, the smallest deployable instance in Kubernetes).&lt;/p&gt;</description></item><item><title>Publish a Java Project to the Maven Central Repository</title><link>https://foojayio.github.io/website/today/how-to-publish-a-java-maven-project-to-the-maven-central-repository/</link><pubDate>Fri, 13 May 2022 06:22:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-publish-a-java-maven-project-to-the-maven-central-repository/</guid><description>&lt;p&gt;This guide will describe how to publish the &lt;a href="https://github.com/tobiasbriones/jdesk" target="_blank" rel="noopener noreferrer"&gt;JDesk framework&lt;/a&gt;
 to Maven Central.&lt;/p&gt;
&lt;p&gt;The project is written in Java using Maven as the build tool. So, the process will be detailed for Java projects with a &lt;code&gt;pom.xml&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;You can follow this article if you need to publish a Java Maven-based library or artifact to Maven.&lt;/p&gt;
&lt;h2 id="h2-0-get-ready-for-publishing-packages"&gt;Get Ready for Publishing Packages&lt;/h2&gt;
&lt;p&gt;Publishing a Java artifact is not as trivial as Python or JavaScript packages can be deployed.&lt;/p&gt;</description></item><item><title>How to do password hashing in Java applications the right way</title><link>https://foojayio.github.io/website/today/how-to-do-password-hashing-in-java-applications-the-right-way/</link><pubDate>Thu, 12 May 2022 15:04:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-do-password-hashing-in-java-applications-the-right-way/</guid><description>&lt;p&gt;There are multiple ways to store sensitive passwords. And while having choices can be great, in the context of password storage, picking wrong can be a security nightmare. With that in mind, let&amp;rsquo;s &lt;em&gt;hash&lt;/em&gt; out some of your options 🥁🥁.In this article we&amp;rsquo;ll discuss how you should hash passwords in your Java applications. While you can apply these principles to any ecosystem, we&amp;rsquo;ll specifically showcase the best way to handle password hashing in Java.&lt;/p&gt;</description></item><item><title>Getting More Mileage Out of Kafka: OpenJDK vs. Azul Prime</title><link>https://foojayio.github.io/website/today/getting-more-mileage-out-of-kafka-openjdk-vs-azul-prime/</link><pubDate>Wed, 11 May 2022 06:47:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-more-mileage-out-of-kafka-openjdk-vs-azul-prime/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/getting-more-mileage-out-of-kafka-openjdk-vs-azul-prime/image-1024x560.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Building real-time data pipelines and streaming applications just got more cost-effective.&lt;/p&gt;
&lt;p&gt;Kafka is great because it&amp;rsquo;s horizontally scalable, fault-tolerant, and runs in production for thousands of companies &amp;ndash; and we figured out how to help you get more mileage out of it.&lt;/p&gt;
&lt;h2 id="h-how-we-did-it"&gt;How We Did It&lt;/h2&gt;
&lt;p&gt;In &lt;a href="https://www.azul.com/blog/kafka-throughput-on-azul-platform-prime-vs-openjdk/" target="_blank" rel="noopener noreferrer"&gt;a recent post&lt;/a&gt;
 we compared Kafka throughput on Azul Platform Prime versus OpenJDK, noting that on our config Azul Platform Prime reaches 45% higher max throughput than OpenJDK.&lt;/p&gt;</description></item><item><title>How to run the Java Incubator Module from the Command Line and IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/how-to-run-the-java-incubator-module-from-the-command-line-and-intellij-idea/</link><pubDate>Tue, 10 May 2022 16:52:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-run-the-java-incubator-module-from-the-command-line-and-intellij-idea/</guid><description>&lt;p&gt;&lt;a href="https://openjdk.java.net/jeps/425" target="_blank" rel="noopener noreferrer"&gt;JEP 425: Virtual Threads (Preview)&lt;/a&gt;
 has been proposed recently. It has been a long-awaited feature in Java. It opens the door to Structured Concurrency. This article isn&amp;rsquo;t about it, in case you are interested, you can read, the &lt;a href="https://openjdk.java.net/jeps/8277129" target="_blank" rel="noopener noreferrer"&gt;JEP draft: Structured Concurrency (Incubator)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Also, if you are interested in how the incubator module works, please read: &lt;a href="https://openjdk.java.net/jeps/11" target="_blank" rel="noopener noreferrer"&gt;JEP 11: Incubator Modules&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;I downloaded the &lt;a href="https://jdk.java.net/loom/" target="_blank" rel="noopener noreferrer"&gt;early access build&lt;/a&gt;
 and wrote the following very simple program that demonstrates structure concurrency.&lt;/p&gt;</description></item><item><title>Setting up and Working with Apache Tomcat in IntelliJ IDEA Ultimate</title><link>https://foojayio.github.io/website/today/setting-up-and-working-with-apache-tomcat-in-intellij-idea-ultimate/</link><pubDate>Tue, 10 May 2022 08:46:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/setting-up-and-working-with-apache-tomcat-in-intellij-idea-ultimate/</guid><description>&lt;p&gt;In this article, you will learn how to set up IntelliJ IDEA Ultimate to work with Apache Tomcat, herein referred to simply as &lt;em&gt;Tomcat&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;We will create a new project that uses Tomcat and then talk about using Tomcat in IntelliJ IDEA so you can benefit from the rich integration capabilities.&lt;/p&gt;
&lt;h2 id="h2-0-downloading-apache-tomcat"&gt;Downloading Apache Tomcat&lt;/h2&gt;
&lt;p&gt;To use Tomcat with IntelliJ IDEA, it needs to be installed on your machine. If you don&amp;rsquo;t already have Tomcat installed, you can download the latest version, which at the time of writing, is &lt;a href="https://tomcat.apache.org/download-10.cgi" target="_blank" rel="noopener noreferrer"&gt;Tomcat 10&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>How To Modernize Legacy Code in Production</title><link>https://foojayio.github.io/website/today/modernize-legacy-code-in-production-rebuild-your-airplane-midflight-without-crashing/</link><pubDate>Mon, 09 May 2022 15:58:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/modernize-legacy-code-in-production-rebuild-your-airplane-midflight-without-crashing/</guid><description>&lt;p&gt;I spent over a decade as a consultant working for dozens of companies in many fields and pursuits. The diversity of each code base is tremendous. This article will try to define general rules for modernizing legacy code that would hopefully apply to all. But it comes from the angle of a Java developer.&lt;/p&gt;
&lt;p&gt;When writing this, my primary focus is on updating an old Java 6 era style J2EE code to the more modern Spring Boot/Jakarta EE code. However, I don&amp;rsquo;t want to go into the code and try to keep this generic. I discuss COBOL and similar legacy systems too. Most of the overarching guidelines should work for migrating any other type of codebase too.&lt;/p&gt;</description></item><item><title>Conditional Builds on GitLab</title><link>https://foojayio.github.io/website/today/conditional-builds-on-gitlab/</link><pubDate>Mon, 09 May 2022 09:16:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/conditional-builds-on-gitlab/</guid><description>&lt;p&gt;Regular readers of my articles know that I&amp;rsquo;m using &lt;a href="https://jekyllrb.com/" target="_blank" rel="noopener noreferrer"&gt;Jekyll&lt;/a&gt;
 to generate my static blog site, together with GitLab. When I push on the &lt;code&gt;master&lt;/code&gt; branch, it triggers the generation job.&lt;/p&gt;
&lt;p&gt;However, Jekyll is Ruby-based and requires a couple of Gem dependencies. I&amp;rsquo;ve also added a few plugins. For this reason, I&amp;rsquo;ve created a &lt;a href="https://blog.frankel.ch/musings-dockerfile-jekyll/" target="_blank" rel="noopener noreferrer"&gt;Docker image with all required dependencies&lt;/a&gt;
. Regularly, I update the versions in the &lt;code&gt;Gemfile.lock&lt;/code&gt; via Bundler. Afterward, I need to rebuild the Docker image.&lt;/p&gt;</description></item><item><title>How to enable java preview feature and run code from IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/how-to-run-project-loom-from-intellij-idea/</link><pubDate>Sun, 08 May 2022 10:07:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-run-project-loom-from-intellij-idea/</guid><description>&lt;p&gt;&lt;a href="https://openjdk.java.net/jeps/425" target="_blank" rel="noopener noreferrer"&gt;JEP 425: Virtual Threads (Preview)&lt;/a&gt;
 has been proposed recently. It has been a long-awaited feature in Java. I wanted to give it a try. So I download the &lt;a href="https://jdk.java.net/loom/" target="_blank" rel="noopener noreferrer"&gt;early release&lt;/a&gt;
 of JDK which has the &lt;a href="https://wiki.openjdk.java.net/display/loom/Main" target="_blank" rel="noopener noreferrer"&gt;project loom&lt;/a&gt;
 in it. However, it is under preview.&lt;/p&gt;
&lt;p&gt;The following snippet was pretty much my first program written for testing virtual threads.&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java"&gt;public class Main {
 public static void main(String[] args) throws InterruptedException {
 Thread.startVirtualThread(() -&amp;gt; {
 System.out.println("Hello from virtual thread");
 }).join();
 }
}&lt;/pre&gt;
&lt;p&gt;It is so simple that I could just run it in the command line using the &lt;a href="https://openjdk.java.net/jeps/330" target="_blank" rel="noopener noreferrer"&gt;source code launcher&lt;/a&gt;
 :&lt;/p&gt;</description></item><item><title>Spring Transaction Debugging in Production with Lightrun</title><link>https://foojayio.github.io/website/today/spring-transaction-debugging-in-production-with-lightrun/</link><pubDate>Fri, 06 May 2022 15:00:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-transaction-debugging-in-production-with-lightrun/</guid><description>&lt;p&gt;Spring makes building a reliable application much easier thanks to its declarative transaction management.&lt;/p&gt;
&lt;p&gt;It also supports programmatic transaction management, but that&amp;rsquo;s not as common.&lt;/p&gt;
&lt;p&gt;In this article, I want to focus on the declarative transaction management angle, since it seems much harder to debug compared to the programmatic approach. This is partially true. We can&amp;rsquo;t put a breakpoint on a transactional annotation.&lt;/p&gt;
&lt;p&gt;But I&amp;rsquo;m getting ahead of myself!&lt;/p&gt;
&lt;h2 id="h2-0-what-is-spring-s-method-declarative-transaction-management"&gt;What is Spring&amp;rsquo;s Method Declarative Transaction Management?&lt;/h2&gt;
&lt;p&gt;When writing a spring method or class, we can use annotations to declare that a method or a bean (class) is transactional. This annotation lets us tune transactional semantics using attributes. This lets us define behavior such as:&lt;/p&gt;</description></item><item><title>5 More Reasons to Choose Apache Pulsar Over Apache Kafka</title><link>https://foojayio.github.io/website/today/5-more-reasons-to-choose-apache-pulsar-over-apache-kafka/</link><pubDate>Thu, 05 May 2022 18:11:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/5-more-reasons-to-choose-apache-pulsar-over-apache-kafka/</guid><description>&lt;p&gt;&lt;em&gt;Author&amp;rsquo;s note: I originally published this blog post in 2019, while I was CEO of Kesque, a real-time messaging service built on&lt;/em&gt; &lt;a href="https://pulsar.apache.org/" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;Apache Pulsar&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;, the cloud-native distributed messaging and streaming platform. It&amp;rsquo;s a follow-up to an earlier post, &amp;ldquo;&lt;/em&gt; &lt;a href="https://datastax.medium.com/7-reasons-to-choose-apache-pulsar-over-apache-kafka-cb111087eadb" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;7 Reasons to Choose Apache Pulsar over Apache Kafka&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;.&amp;rdquo; A lot of big changes have happened since these two posts went live, including Kesque&amp;rsquo;s&lt;/em&gt; &lt;a href="https://www.datastax.com/press-release/datastax-delivers-scale-out-enterprise-event-streaming-modern-data-apps" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;acquisition&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;, in January 2021, by DataStax. The reasons to choose Pulsar, however, haven&amp;rsquo;t changed.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Bring Streaming to Apache Cassandra with Apache Pulsar</title><link>https://foojayio.github.io/website/today/bring-streaming-to-apache-cassandra-with-apache-pulsar/</link><pubDate>Thu, 05 May 2022 18:10:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/bring-streaming-to-apache-cassandra-with-apache-pulsar/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/bring-streaming-to-apache-cassandra-with-apache-pulsar/1_4VRCkVXi6RRfK4pwrJkPjw-1024x506.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Twitch, YouTube, Instagram, Facebook &amp;mdash; virtually every major brand nowadays uses live streaming to connect and engage their audience.{#2544}&lt;/p&gt;
&lt;p&gt;For enterprises and developers &lt;a href="https://datastax.medium.com/build-your-first-app-with-javascript-node-js-and-datastax-astra-db-573abc238583" target="_blank" rel="noopener noreferrer"&gt;building cloud-native applications&lt;/a&gt;
, this growing trend creates a need for streaming technologies that can reliably handle the rush of massive amounts of data, while also being flexible and easy to manage for developers.{#2544}&lt;/p&gt;
&lt;p&gt;One such technology is &lt;a href="https://pulsar.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Pulsar&lt;/a&gt;
&lt;a href="https://cassandra.apache.org/_/index.html" target="_blank" rel="noopener noreferrer"&gt;®&lt;/a&gt;
 &amp;mdash; an open-source, distributed messaging and streaming platform that&amp;rsquo;s easy to deploy, simple to scale, and packed with developer-friendly APIs.{#8b5a}&lt;/p&gt;</description></item><item><title>Easy Jakarta EE Integration Testing</title><link>https://foojayio.github.io/website/today/easy-jakarta-ee-integration-testing/</link><pubDate>Wed, 04 May 2022 14:41:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/easy-jakarta-ee-integration-testing/</guid><description>&lt;p&gt;One major issue when developing modern enterprise applications is the &amp;ldquo;works on my machine&amp;rdquo; problem: when an application works well on your machine but is not functional in production or even on a colleague&amp;rsquo;s machine.&lt;/p&gt;
&lt;p&gt;An even more prevalent problem is to maintain the quality of ever-changing applications during development and maintenance.&lt;/p&gt;
&lt;p&gt;This is especially prevalent when Jakarta EE applications are developed and not properly tested in an isolated and cohesive manner.&lt;/p&gt;</description></item><item><title>How To Submit Your Next Article On Foojay.io</title><link>https://foojayio.github.io/website/today/how-to-submit-your-next-article-on-foojay-io/</link><pubDate>Tue, 03 May 2022 18:32:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-submit-your-next-article-on-foojay-io/</guid><description>&lt;p&gt;Foojay, the place for friends of OpenJDK, is a friendly community of Java and Kotlin developers who share tips and insights every day on &lt;a href="https://foojayio.github.io/website/today/"&gt;Foojay Today&lt;/a&gt;
. We would love to publish your article too!&lt;/p&gt;
&lt;p&gt;Since September 2026, Foojay.io moved from a WordPress system to a static site built with &lt;a href="https://gohugo.io/" target="_blank" rel="noopener noreferrer"&gt;Hugo&lt;/a&gt;
 and published from a public GitHub repository, &lt;a href="https://github.com/foojayio/website" target="_blank" rel="noopener noreferrer"&gt;github.com/foojayio/website&lt;/a&gt;
. Contributing an article means adding a small folder of files (your text and images) to that repository. You don&amp;rsquo;t need to know Hugo — everything you need is in a ready-made template.&lt;/p&gt;</description></item><item><title>Securely Authenticate to Google Cloud from GitHub</title><link>https://foojayio.github.io/website/today/securely-authenticate-google-cloud-github/</link><pubDate>Mon, 02 May 2022 08:57:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/securely-authenticate-google-cloud-github/</guid><description>&lt;p&gt;Recently, I designed a simple metrics-tracking system.&lt;/p&gt;
&lt;p&gt;A Python script queries different providers&amp;rsquo; APIs for metrics, &lt;em&gt;e.g.&lt;/em&gt;, Twitter, GitHub, etc.&lt;/p&gt;
&lt;p&gt;The idea is to run this script each day, store them in Google BigQuery and provide an excellent data visualization in Google Data Studio.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a big fan of automation, so I&amp;rsquo;m using GitHub Actions.&lt;/p&gt;
&lt;h2 id="h2-0-accessing-google-cloud-with-a-service-account"&gt;Accessing Google Cloud with a Service Account&lt;/h2&gt;
&lt;p&gt;I query the different APIs with different Python libraries. All of them allow authenticating by passing a parameter. In general, it&amp;rsquo;s a token. One can store the value in a GitHub secret, get it as an environment variable in the GitHub Action and use it in the code.&lt;/p&gt;</description></item><item><title>Debugging Collections, Streams, and Watch Renderers</title><link>https://foojayio.github.io/website/today/debugging-collections-streams-and-watch-renderers/</link><pubDate>Fri, 29 Apr 2022 07:54:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-collections-streams-and-watch-renderers/</guid><description>&lt;p&gt;In the last two ducklings, I finished the extensive discussion on breakpoints and switched my focus to the watch area. In it, we have several amazing and lesser known tools that let us build insight into our running application. Being able to tell at a glance if something works correctly is crucial for many applications.&lt;/p&gt;
&lt;p&gt;This is very important for collections and arrays. We can have thousands or millions of elements within a collection. Debugging this is very difficult without some basic tools.&lt;/p&gt;</description></item><item><title>Thinking About Massive Throughput? Meet Virtual Threads!</title><link>https://foojayio.github.io/website/today/thinking-about-massive-throughput-meet-virtual-threads/</link><pubDate>Thu, 28 Apr 2022 07:41:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/thinking-about-massive-throughput-meet-virtual-threads/</guid><description>&lt;p&gt;The goal of this article is to examine known facts about an upcoming Java threading model extension.&lt;/p&gt;
&lt;p&gt;No, no-worries, the current Java threading model remains but behind the curtains something good is already knocking on the virtual door.&lt;/p&gt;
&lt;p&gt;Yes, we are talking about JEP-425: Virtual Threads.&lt;/p&gt;
&lt;h2 id="h2-0-knocking-on-current-concurrency-limits"&gt;Knocking on current concurrency limits&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s first look at the current Java threading model. It provides an implementation of the Thread class. A Thread can be considered a Java concurrency unit which can execute so-called &lt;em&gt;Runnable&lt;/em&gt; tasks. The instance of a Thread class is also an object but there is a bit more happening behind the scenes.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 4: Building an Empire of Microservices</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-4-building-an-empire-of-microservices/</link><pubDate>Wed, 27 Apr 2022 07:22:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-4-building-an-empire-of-microservices/</guid><description>&lt;p&gt;This article is the fourth iteration in a series of posts about building microservices in Java.&lt;/p&gt;
&lt;p&gt;The initial post started with a single string message passed between two locally-running applications, and we are gradually adding services and functionality along the way.&lt;/p&gt;
&lt;p&gt;In this level 4 instalment, we will add a new service that will manage book authors. It will call a database containing a data domain of books and retrieve authors and their information. This will entail creating a new, separate service from our previously written service1 and service2.&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>Chopping the Monolith: Foojay.io Today</title><link>https://foojayio.github.io/website/today/chopping-monolith/</link><pubDate>Mon, 25 Apr 2022 19:06:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/chopping-monolith/</guid><description>&lt;p&gt;If you attend conferences or read technical articles, you could think that microservices are the correct and only way to build a system at the moment.&lt;/p&gt;
&lt;p&gt;Despite some pushback from cooler heads, the default architecture is microservices.&lt;/p&gt;
&lt;p&gt;In this post, I&amp;rsquo;d like to argue why it&amp;rsquo;s wrong.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll first get back to the origin of microservices and the fundamental reason to use them.&lt;/p&gt;
&lt;p&gt;Then, I&amp;rsquo;ll describe why microservices don&amp;rsquo;t fit most organizations&amp;rsquo; structures.&lt;/p&gt;</description></item><item><title>Java on Visual Studio Code Update – April 2022</title><link>https://foojayio.github.io/website/today/java-on-visual-studio-code-update-april-2022/</link><pubDate>Mon, 25 Apr 2022 08:14:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-visual-studio-code-update-april-2022/</guid><description>&lt;p&gt;Hi everyone, welcome to the April update of Visual Studio Code Java.&lt;/p&gt;
&lt;p&gt;This time we are bringing you many exciting updates regarding our fundamental experience improvement including Java 18 support, inlay hints for parameter names, new language server status UX, lambda expression support in debugging and so on.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s get into it.&lt;/p&gt;
&lt;h3 id="h3-0-microsoft-jdconf"&gt;Microsoft JDConf&lt;/h3&gt;
&lt;p&gt;Before we start our update, we want to share an exciting news: Microsoft JDConf is coming up! Join us for the second JDConf event on May 4 &amp;ndash; 5, 2022.&lt;/p&gt;</description></item><item><title>Exception Breakpoint that Doesn't Suck and Other Use Cases</title><link>https://foojayio.github.io/website/today/exception-breakpoint-that-doesnt-suck-and-a-real-use-case-for-method-breakpoints/</link><pubDate>Fri, 22 Apr 2022 07:37:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/exception-breakpoint-that-doesnt-suck-and-a-real-use-case-for-method-breakpoints/</guid><description>&lt;p&gt;Two weeks ago, &lt;a href="https://talktotheduck.dev/basics-of-breakpoints-you-might-not-know" target="_blank" rel="noopener noreferrer"&gt;I left this series in a &amp;ldquo;cliffhanger&amp;rdquo;&lt;/a&gt;
 of sorts. Well, as much as a programming blog can leave things in the air&amp;hellip; The big one amongst them is the premise that exception breakpoints don&amp;rsquo;t have to suck. If you used them in the past, you would know that grabbing all exceptions is ridiculous. You end up at a breakpoint every second and it doesn&amp;rsquo;t help.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a solution, and it&amp;rsquo;s discussed in duckling 6 number 7 also covers a lot of interesting ground for us and another cliffhanger on method breakpoints:&lt;/p&gt;</description></item><item><title>SQL vs. NoSQL: Pros &amp; Cons</title><link>https://foojayio.github.io/website/today/sql-vs-nosql-pros-cons-2/</link><pubDate>Thu, 21 Apr 2022 09:28:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/sql-vs-nosql-pros-cons-2/</guid><description>&lt;p&gt;What&amp;rsquo;s the best way to store, protect and access your data?{#abb7}&lt;/p&gt;
&lt;p&gt;This is a fundamental, yet critical decision.{#abb7}&lt;/p&gt;
&lt;p&gt;After all, data is the cornerstone of success for just about every modern organization.{#abb7}&lt;/p&gt;
&lt;p&gt;For most companies, the choice comes down to SQL and NoSQL databases. Each has unique strengths and weaknesses.{#abb7}&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SQL databases have been a proven option since the 1970s. They are made up of highly structured tables, consisting of rows and columns, related to one other through common attributes. Every column is required to have a value for its corresponding row.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --&gt;
&lt;ul&gt;
&lt;li&gt;NoSQL (&amp;ldquo;not only SQL&amp;rdquo; or &amp;ldquo;non-SQL&amp;rdquo;) databases came along later to break the relational table straitjacket, with the ability to store and access all data types, structured and unstructured, together.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They&amp;rsquo;re extremely flexible and easy for developers to work with and modify. &lt;a href="https://www.datastax.com/what-is/nosql" target="_blank" rel="noopener noreferrer"&gt;Learn more about SQL and NoSQL databases and their basic differences&lt;/a&gt;
.{#3ad0}&lt;/p&gt;</description></item><item><title>Fullstack IMDB Clone with a Java Backend using SparkJava and Neo4j</title><link>https://foojayio.github.io/website/today/building-a-fullstack-imdb-clone-with-a-java-backend-using-sparkjava-and-neo4j/</link><pubDate>Wed, 20 Apr 2022 07:11:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-a-fullstack-imdb-clone-with-a-java-backend-using-sparkjava-and-neo4j/</guid><description>&lt;p&gt;Our &lt;a href="https://graphacademy.neo4j.com" target="_blank" rel="noopener noreferrer"&gt;GraphAcademy&lt;/a&gt;
 is teaching folks starting out in the graph space the fundamentals of the data model, query language, and graph algorithms.&lt;/p&gt;
&lt;p&gt;And for developers, there are &lt;a href="https://graphacademy.neo4j.com/categories/developer/" target="_blank" rel="noopener noreferrer"&gt;courses for using our drivers&lt;/a&gt;
 and building the backend of a fullstack app in JavaScript, Go, Python, Java, and soon .Net.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/OzxHfAx.png" alt="OzxHfAx" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The application is an IMDB clone based on the &lt;a href="https://github.com/neo4j-graph-examples/recommendations" target="_blank" rel="noopener noreferrer"&gt;MovieLens recommendation&lt;/a&gt;
 dataset augmented with movie and cast data from &lt;a href="https://themoviedb.org" target="_blank" rel="noopener noreferrer"&gt;themoviedb.org&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The front-end is written in vue.js and looks pretty slick.&lt;/p&gt;</description></item><item><title>Does Java 18 Finally Have A Better Alternative To JNI?</title><link>https://foojayio.github.io/website/today/does-java-18-finally-have-a-better-alternative-to-jni/</link><pubDate>Tue, 19 Apr 2022 21:01:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/does-java-18-finally-have-a-better-alternative-to-jni/</guid><description>&lt;p&gt;Java 18 was released last month (March 2022), and with it comes the second incubator of the Foreign Function &amp;amp; Memory API, so let us look at the state of Foreign Function Interface (FFI) in Java.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c1kwxzrhvt40nuulijge.png" alt="cover image" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;If you would prefer to follow along by watching a video, here&amp;rsquo;s the recording of my FOSDEM'22 talk on this topic, from the &lt;a href="https://youtu.be/lW69_AtAXzE" target="_blank" rel="noopener noreferrer"&gt;the OktaDev YouTube channel&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-what-is-a-foreign-function-interface"&gt;What is a Foreign Function Interface?&lt;/h2&gt;
&lt;p&gt;A foreign function interface is the ability to call functions or routines written in one programming language from another programming language.&lt;/p&gt;</description></item><item><title>How To Beautify Your GitHub Repo</title><link>https://foojayio.github.io/website/today/how-to-beautify-your-github-repo/</link><pubDate>Tue, 19 Apr 2022 08:16:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-beautify-your-github-repo/</guid><description>&lt;p&gt;Whether you like it or not, GitHub has become the primary provider to host one&amp;rsquo;s code.&lt;/p&gt;
&lt;p&gt;You or your company are probably using GitHub.&lt;/p&gt;
&lt;p&gt;In this article, I want to highlight some files that you can use to beautify your GitHub repository and make it welcoming and inspiring to those who stop by.&lt;/p&gt;
&lt;h2 id="h2-0-readme"&gt;README&lt;/h2&gt;
&lt;p&gt;I hope that by now, everybody is familiar with READMEs. If you place a README file at the root of your repo, GitHub will display its content on the repo&amp;rsquo;s homepage.&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>Java Panama Polyglot (Swift) Part 2</title><link>https://foojayio.github.io/website/today/java-panama-polyglot-swift-part-2/</link><pubDate>Wed, 13 Apr 2022 15:34:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-panama-polyglot-swift-part-2/</guid><description>&lt;p&gt;Hello and welcome back to the &lt;strong&gt;Java Panama Polyglot&lt;/strong&gt; series where we will be presenting quick tutorials or recipes on how to access native libraries written in other languages.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-panama-polyglot-part1/"&gt;Part 1&lt;/a&gt;
 you got a chance to learn about how to use Java &lt;a href="https://jdk.java.net/panama/" target="_blank" rel="noopener noreferrer"&gt;Project Panama&lt;/a&gt;
&amp;rsquo;s (foreign function interface) abilities to access native libraries written in C++. Today, we will be looking at Java code being able to talk to Apple&amp;rsquo;s &lt;a href="https://developer.apple.com/swift/" target="_blank" rel="noopener noreferrer"&gt;Swift&lt;/a&gt;
 language.&lt;/p&gt;</description></item><item><title>Top 10 Java Language Features</title><link>https://foojayio.github.io/website/today/top-10-java-language-features/</link><pubDate>Tue, 12 Apr 2022 17:06:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/top-10-java-language-features/</guid><description>&lt;p&gt;Every programming language provides ways to express our ideas and then translates them into reality.&lt;/p&gt;
&lt;p&gt;Some are unique to that particular language and some are common to many other programming languages.&lt;/p&gt;
&lt;p&gt;In this article, I will explore ten Java programming features used frequently by developers in their day-to-day programming jobs.&lt;/p&gt;
&lt;h2 id="h2-0-collection-s-factory-method"&gt;Collection&amp;rsquo;s factory method&lt;/h2&gt;
&lt;p&gt;Collections are the most frequently used feature in our daily coding. They are used as a container where we store objects and pass them along.&lt;/p&gt;</description></item><item><title>"Contrast Security Joins Foojay Advisory Board to Accelerate Java Developer Community Growth, Raise Security Perspective" — PR News</title><link>https://foojayio.github.io/website/today/contrast-security-joins-foojay-advisory-board-to-accelerate-java-developer-community-growth-raise-security-perspective-pr-news/</link><pubDate>Tue, 12 Apr 2022 11:52:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/contrast-security-joins-foojay-advisory-board-to-accelerate-java-developer-community-growth-raise-security-perspective-pr-news/</guid><description>&lt;p&gt;LOS ALTOS, Calif., April 12, 2022 /PRNewswire/ &amp;ndash; &lt;a href="https://c212.net/c/link/?t=0&amp;amp;l=en&amp;amp;o=3501861-1&amp;amp;h=2716114597&amp;amp;u=https%3A%2F%2Fwww.contrastsecurity.com%2F&amp;amp;a=Contrast&amp;#43;Security" target="_blank" rel="noopener noreferrer"&gt;Contrast Security&lt;/a&gt;
 (Contrast), the leader in code security that empowers developers to secure-as-they code, today announces its commitment to helping Java developers build code securely by joining the Foojay Advisory Board.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Prior to the creation of Foojay, the ecosystem of OpenJDK users lacked a vendor-neutral community platform for many years. It is wonderful to see more and more individuals and organizations, such as Contrast Security, getting involved since the foundation&amp;rsquo;s inception in April 2020. Contrast Security not only shares their insights about the OpenJDK, but also provides valuable security tips and tricks as well as helps collaborate around Foojay, the place for friends of OpenJDK,&amp;rdquo; said Geertjan Wielenga, Senior Director of Open Source Projects at Azul, the initiator of Foojay.&lt;/p&gt;</description></item><item><title>How to Create APIs with the Java 18 jwebserver Ready for Docker </title><link>https://foojayio.github.io/website/today/how-to-create-apis-with-the-java-18-jwebserver-ready-for-docker/</link><pubDate>Mon, 11 Apr 2022 14:26:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-create-apis-with-the-java-18-jwebserver-ready-for-docker/</guid><description>&lt;p&gt;In the age of cloud computing, it is at times very helpful to have the ability to run a very simple web server. A simple web server that delivers static content.&lt;/p&gt;
&lt;p&gt;Maybe some of us are already familiar with the neat python util &amp;ldquo;&lt;em&gt;SimpleHTTPServer&lt;/em&gt;&amp;rdquo; (Example 1.). It allows you to run a web server from the current location and obtain access to static content.&lt;/p&gt;
&lt;p&gt;Although such a server is very simple and even without the ability to define a directory, it is very helpful in many cases. For example, exposing a simple end-point that serves a JSON response:&lt;/p&gt;</description></item><item><title>Logging Best Practices: MDC, Ingestion, and Scale</title><link>https://foojayio.github.io/website/today/logging-best-practices-mdc-ingestion-and-scale/</link><pubDate>Mon, 11 Apr 2022 12:16:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/logging-best-practices-mdc-ingestion-and-scale/</guid><description>&lt;p&gt;I don&amp;rsquo;t care about religious wars over &amp;ldquo;which logger is the best&amp;rdquo;. They all have their issues. Having said that, the worst logger is probably the one built &amp;ldquo;in-house&amp;rdquo;. So yes, they suck, but re-inventing the wheel is probably far worse.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s discuss making these loggers suck less with proper usage guidelines that range from the obvious to subtle. Hopefully, you can use this post as the basis of your company&amp;rsquo;s standard for logging best practices.&lt;/p&gt;</description></item><item><title>Migrating from Java EE to Jakarta EE with IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/migrating-from-java-ee-to-jakarta-ee-with-intellij-idea/</link><pubDate>Fri, 08 Apr 2022 17:02:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/migrating-from-java-ee-to-jakarta-ee-with-intellij-idea/</guid><description>&lt;p&gt;In this post, we&amp;rsquo;re going to migrate some sample code from the &lt;code&gt;javax&lt;/code&gt; namespace to &lt;code&gt;jakarta&lt;/code&gt;. If you want the history on this change, check out &lt;a href="https://blogs.oracle.com/javamagazine/post/transition-from-java-ee-to-jakarta-ee" target="_blank" rel="noopener noreferrer"&gt;this helpful blog post&lt;/a&gt;
 from Java Magazine. Fundamentally the &lt;em&gt;Java Persistence API&lt;/em&gt; was renamed to &lt;em&gt;Jakarta Persistence API&lt;/em&gt; meaning that the &lt;code&gt;javax&lt;/code&gt; namespace changed to &lt;code&gt;jakarta&lt;/code&gt; for frameworks whose APIs have moved to Jakarta EE (which is not all of them).&lt;/p&gt;
&lt;p&gt;However, Apache Tomcat recently released version 10 which updated package names from &lt;code&gt;javax&lt;/code&gt; to &lt;code&gt;jakarta&lt;/code&gt;. SpringBoot also made &lt;a href="https://spring.io/blog/2021/09/02/a-java-17-and-jakarta-ee-9-baseline-for-spring-framework-6" target="_blank" rel="noopener noreferrer"&gt;this change&lt;/a&gt;
 in version 6.&lt;/p&gt;</description></item><item><title>Quest to the OS: Java Native Memory</title><link>https://foojayio.github.io/website/today/the-quest-to-the-os-java-native-memory-foojay-today/</link><pubDate>Fri, 08 Apr 2022 04:19:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-quest-to-the-os-java-native-memory-foojay-today/</guid><description>&lt;p&gt;&lt;img src="https://miro.medium.com/max/1400/0*QMIuX6OHkdzv3HGM" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;As developers we want to spend most time on new features and improvements, providing value to our users or customers. However, all software inevitably contains bugs and other defects. A lot can be done to catch defects before software reaches production (something Picnic&amp;rsquo;s automated fulfillment center team has &lt;a href="https://blog.picnic.nl/reinventing-the-qa-process-25854fee51f3" target="_blank" rel="noopener noreferrer"&gt;previously written about&lt;/a&gt;
) but some defects are likely to go undetected until the software is in the hands of users.{#44cf}&lt;/p&gt;</description></item><item><title>Spring4Shell: The zero-day RCE in the Spring Framework explained</title><link>https://foojayio.github.io/website/today/spring4shell-the-zero-day-rce-in-the-spring-framework-explained-ready/</link><pubDate>Fri, 08 Apr 2022 04:17:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring4shell-the-zero-day-rce-in-the-spring-framework-explained-ready/</guid><description>&lt;p&gt;On March 30, 2022, a critical &lt;a href="https://snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-2436751" target="_blank" rel="noopener noreferrer"&gt;remote code execution (RCE) vulnerability&lt;/a&gt;
 was found in the Spring Framework. More specifically, it is part of the &lt;code&gt;spring-beans&lt;/code&gt; package, a transitive dependency in both &lt;code&gt;spring-webmvc&lt;/code&gt; and &lt;code&gt;spring-webflux&lt;/code&gt;. This vulnerability is another example of why &lt;a href="https://snyk.io/blog/preventing-malicious-packages-and-supply-chain-attacks-with-snyk/" target="_blank" rel="noopener noreferrer"&gt;securing the software supply chain&lt;/a&gt;
 is important to open source.&lt;/p&gt;
&lt;p&gt;Security resources like &lt;a href="https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/" target="_blank" rel="noopener noreferrer"&gt;Lunasec&lt;/a&gt;
, &lt;a href="https://www.rapid7.com/blog/post/2022/03/30/spring4shell-zero-day-vulnerability-in-spring-framework/" target="_blank" rel="noopener noreferrer"&gt;Rapid7&lt;/a&gt;
 and &lt;a href="https://www.praetorian.com/blog/spring-core-jdk9-rce/" target="_blank" rel="noopener noreferrer"&gt;Praetorian&lt;/a&gt;
 confirmed that the vulnerability is real, and in the meantime, Spring has already released a new version that mitigates this problem, so &lt;a href="https://snyk.io/blog/is-there-such-a-thing-as-spring4shell/" target="_blank" rel="noopener noreferrer"&gt;we recommend updating&lt;/a&gt;
. While &lt;strong&gt;Spring4Shell&lt;/strong&gt; does not appear to have the same impact as the recent Log4Shell vulnerability, it should still be evaluated and prioritized by every organization using the Spring Framework. In this post, we&amp;rsquo;ll explore how the RCE works.&lt;/p&gt;</description></item><item><title>Java Panama Polyglot (C++) Part 1</title><link>https://foojayio.github.io/website/today/java-panama-polyglot-part1/</link><pubDate>Wed, 06 Apr 2022 15:41:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-panama-polyglot-part1/</guid><description>&lt;figure class="wp-block-image size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="polyglot.png" alt="" class="wp-image-55283" width="469" height="112"&gt;
&lt;/figure&gt;
&lt;p&gt;Hello and welcome to the &lt;strong&gt;Java Panama Polyglot&lt;/strong&gt; series where we will be presenting quick tutorials or recipes on how to access native libraries written in other languages.&lt;/p&gt;
&lt;p&gt;For example, you will learn about Java Project Panama&amp;rsquo;s (foreign function interface) abilities to access native libraries written in C++, Swift, Python, and others.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is Polyglot?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Have you heard of polyglot as it relates to developing &lt;a href="https://en.wikipedia.org/wiki/Solution_stack" target="_blank" rel="noopener noreferrer"&gt;full stack&lt;/a&gt;
 applications? If your answer is &lt;strong&gt;yes&lt;/strong&gt;, then you probably know about the programming languages needed to build an enterprise web application.&lt;/p&gt;</description></item><item><title>Switch Statement and the Factory Pattern in Three JVM Languages</title><link>https://foojayio.github.io/website/today/examining-the-switch-statement-and-the-factory-pattern-in-three-jvm-languages/</link><pubDate>Wed, 06 Apr 2022 09:10:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/examining-the-switch-statement-and-the-factory-pattern-in-three-jvm-languages/</guid><description>&lt;p&gt;The goal of this article is to examine a program selection control mechanism.&lt;/p&gt;
&lt;p&gt;A selection control mechanism allows a value, expression or variable type to influence the program flow execution. This concept is commonly used by developers.&lt;/p&gt;
&lt;p&gt;A good example for this is a widely used design pattern. A design pattern that belongs to the family of creational patterns and is used for an object creation without exposing the entire logic.&lt;/p&gt;</description></item><item><title>Three Mistakes Developers Make Preventing Getting Hired On Projects</title><link>https://foojayio.github.io/website/today/three-mistakes-junior-software-developers-make-preventing-getting-hired-on-amazing-projects/</link><pubDate>Wed, 06 Apr 2022 07:46:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/three-mistakes-junior-software-developers-make-preventing-getting-hired-on-amazing-projects/</guid><description>&lt;p&gt;Being hired is not easy and it is especially somewhat tricky for junior software developers to be taken on to work on amazing projects. The reason is clear: industries always want people with the right skills and a junior software developer does not typically always have those. We get to learn to program and acquire knowledge from universities and colleges, which is not enough to be able to work on unique projects right away.&lt;/p&gt;</description></item><item><title>How to style a Vaadin Application</title><link>https://foojayio.github.io/website/today/how-to-style-a-vaadin-application/</link><pubDate>Tue, 05 Apr 2022 07:41:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-style-a-vaadin-application/</guid><description>&lt;p&gt;In this guide, we learn the basics of styling a Vaadin application using Cascading Style Sheets (CSS).&lt;/p&gt;
&lt;p&gt;While it is possible to style some parts of a Vaadin application using the Java API, this approach tends to be rather limited for mid- to large-sized applications.&lt;/p&gt;
&lt;p&gt;So, it is recommended to do the styling of a Vaadin application by adding CSS inside standard style sheets. This guide focuses only on the recommended style-sheets approach.&lt;/p&gt;</description></item><item><title>Debugging JAXB Production Issues</title><link>https://foojayio.github.io/website/today/debugging-jaxb-production-issues/</link><pubDate>Mon, 04 Apr 2022 14:13:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-jaxb-production-issues/</guid><description>&lt;p&gt;Java Architecture for XML Binding (AKA JAXB API) is a popular API for marshalling XML data. It&amp;rsquo;s a framework for mapping between XML documents and Java POJOs (Plain Old Java Objects, AKA regular Java classes) almost seamlessly. The API is very easy to use and many frameworks leverage it to provide their XML support. JAXB2.0 has gained popularity both in desktop applications (Java SE) and in application server code (Spring Boot, Java EE/Jakarta EE, Microprofile etc.).&lt;/p&gt;</description></item><item><title>Handling Null: Optional and Nullable Types</title><link>https://foojayio.github.io/website/today/handling-null-optional-and-nullable-types/</link><pubDate>Mon, 04 Apr 2022 08:06:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/handling-null-optional-and-nullable-types/</guid><description>&lt;p&gt;Java has long been infamous for its &lt;code&gt;NullPointerException&lt;/code&gt;. The reason for the is calling a method or accessing an attribute of an &lt;strong&gt;object that has not been initialized&lt;/strong&gt;.&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java"&gt;var value = foo.getBar().getBaz().toLowerCase();&lt;/pre&gt;
&lt;p&gt;Running this snippet may result in something like the following:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic"&gt;Exception in thread "main" java.lang.NullPointerException
 at ch.frankel.blog.NpeSample.main(NpeSample.java:10)&lt;/pre&gt;
&lt;p&gt;At this point, you have no clue which part is &lt;code&gt;null&lt;/code&gt; in the call chain: &lt;code&gt;foo&lt;/code&gt;, or the value returned by &lt;code&gt;getBar()&lt;/code&gt; or &lt;code&gt;getBaz()&lt;/code&gt;?&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>Spring Remote Code Execution Vulnerability</title><link>https://foojayio.github.io/website/today/spring-remote-code-execution-vulnerability/</link><pubDate>Thu, 31 Mar 2022 14:54:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-remote-code-execution-vulnerability/</guid><description>&lt;p&gt;I&amp;rsquo;d like to start by saying that I&amp;rsquo;m not a security expert. I also won&amp;rsquo;t link to the exploit. This is a very fresh take on a new vulnerability but there&amp;rsquo;s &lt;a href="https://blog.sonatype.com/new-0-day-spring-framework-vulnerability-confirmed" target="_blank" rel="noopener noreferrer"&gt;already confirmation from Sonatype&lt;/a&gt;
. The current exploit seems to be limited to Spring on top of Tomcat but it probably can be adapted since the underlying vulnerability seems general enough.&lt;/p&gt;
&lt;p&gt;The vulnerability only impacts Java 9 or newer so if you have an older version you should be safe from this specific exploit.&lt;/p&gt;</description></item><item><title>Quick Fire Java: Java After Log4j</title><link>https://foojayio.github.io/website/today/quick-fire-java-java-after-log4j/</link><pubDate>Thu, 31 Mar 2022 08:23:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/quick-fire-java-java-after-log4j/</guid><description>&lt;p&gt;In this episode of the Quick Fire Java video series, Rudy De Busscher and Priya Khaira-Hanks discuss Log4j, security processes and prioritization, and how Payara dealt with the vulnerability.&lt;/p&gt;
&lt;p&gt;All in a concise 10-minute video!&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://logging.apache.org/log4j/2.x/" target="_blank" rel="noopener noreferrer"&gt;Log4j&lt;/a&gt;
 vulnerability, &lt;a href="https://en.wikipedia.org/wiki/Log4Shell" target="_blank" rel="noopener noreferrer"&gt;Log4Shell&lt;/a&gt;
, was disclosed in early December 2021 and the repercussions have been far-reaching.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/rdebusscher" target="_blank" rel="noopener noreferrer"&gt;Rudy&lt;/a&gt;
 explains more about what this actually means and about the wider implications of the incident. He also responds to &lt;a href="https://www.breachquest.com/" target="_blank" rel="noopener noreferrer"&gt;BreachQuest&amp;rsquo;s&lt;/a&gt;
&lt;a href="https://twitter.com/MalwareJake" target="_blank" rel="noopener noreferrer"&gt;Jake Williams&lt;/a&gt;
 for &lt;a href="https://threatpost.com/" target="_blank" rel="noopener noreferrer"&gt;Threatpost&lt;/a&gt;
, who claimed &amp;ldquo;being exploited through an internet-facing system running vulnerable log4j at this point is a leadership failure, not a technical one.&amp;rdquo;&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>Increasing Event Streaming with Kafka and Azul</title><link>https://foojayio.github.io/website/today/increasing-event-streaming-with-kafka-and-azul/</link><pubDate>Tue, 29 Mar 2022 13:41:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/increasing-event-streaming-with-kafka-and-azul/</guid><description>&lt;p&gt;Welcome to getting started with &lt;a href="https://www.azul.com/products/prime/" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Prime&lt;/a&gt;
 and &lt;a href="https://www.azul.com/technologies/kafka/" target="_blank" rel="noopener noreferrer"&gt;Apache Kafka&lt;/a&gt;
!&lt;/p&gt;
&lt;p&gt;In this article you will learn how to switch between two different Java runtime environments to run an Apache Kafka instance.&lt;/p&gt;
&lt;p&gt;In later articles, this will allow you to compare runtime performance benchmarks.&lt;/p&gt;
&lt;p&gt;Before we begin, let&amp;rsquo;s supply some context on Azul&amp;rsquo;s Platform offerings and Apache Kafka.&lt;/p&gt;
&lt;h2 id="h-what-is-azul-platform-prime-and-platform-core"&gt;What is Azul Platform Prime and Platform Core?&lt;/h2&gt;
&lt;p&gt;Azul offers two Java runtime environments &lt;a href="https://www.azul.com/products/prime/" target="_blank" rel="noopener noreferrer"&gt;Platform Prime&lt;/a&gt;
 and &lt;a href="https://www.azul.com/products/core/" target="_blank" rel="noopener noreferrer"&gt;Platform Core&lt;/a&gt;
. Platform Prime (formerly known as Zing) is a high-performance implementation of the JVM (Java Virtual Machine) while Platform Core refers to Azul&amp;rsquo;s solution that includes the Zulu build of OpenJDK with dedicated support.&lt;/p&gt;</description></item><item><title>Debugging Java Equals &amp; Hashcode Performance in Production</title><link>https://foojayio.github.io/website/today/debugging-java-equals-hashcode-performance-in-production/</link><pubDate>Tue, 29 Mar 2022 06:50:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-java-equals-hashcode-performance-in-production/</guid><description>&lt;p&gt;I wrote a lot about the performance metrics of the equals method and hash code in &lt;a href="https://talktotheduck.dev/hashcode-and-equals-debugging-performance" target="_blank" rel="noopener noreferrer"&gt;this article&lt;/a&gt;
. There are many nuances that can lead to performance problems in those methods. The problem is that some of those things can be well hidden.&lt;/p&gt;
&lt;p&gt;To summarize the core problem: the hashcode method is central to the Java Collections API. Specifically, with the performance of hash tables (specifically the Map interface hash table). The same is true with the equals method. If we have anything more complex than a string object or a primitive, the overhead can quickly grow.&lt;/p&gt;</description></item><item><title>APISIX: An API Gateway the Apache Way</title><link>https://foojayio.github.io/website/today/apisix-api-gateway/</link><pubDate>Mon, 28 Mar 2022 07:40:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/apisix-api-gateway/</guid><description>&lt;p&gt;During the pioneer area of the World Wide Web, the content was static. To serve it, a group of developers created a web server, which is now known as the &lt;a href="https://httpd.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Web Server&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The Apache Web Server is built around a modular architecture. Developers created a module to run CGI scripts to add dynamic content to the lot. Users wrote early CGI scripts in Perl. After a while, it became evident that generating a complete HTML page from scratch was not the best way and that templating - providing an HTML page with placeholders - was a much better approach. The PHP language started like this as a simple templating engine interpreted by a module.&lt;/p&gt;</description></item><item><title>Blink a LED on Raspberry Pi with Vaadin</title><link>https://foojayio.github.io/website/today/blink-a-led-on-raspberry-pi-with-vaadin/</link><pubDate>Fri, 25 Mar 2022 14:44:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/blink-a-led-on-raspberry-pi-with-vaadin/</guid><description>&lt;p&gt;As I&amp;rsquo;m becoming a senior developer, at least in terms of age, I&amp;rsquo;ve transitioned from one language to another.&lt;/p&gt;
&lt;p&gt;One of my main interests has always been clean, easy-to-understand UIs (User Interfaces). That journey started for me with &lt;strong&gt;Director&lt;/strong&gt; (to create multimedia CD-ROMs), &lt;strong&gt;Flash&lt;/strong&gt; website animation, and &lt;strong&gt;Flex&lt;/strong&gt; Rich Internet Applications (= &amp;ldquo;Flash on steroids&amp;rdquo;).&lt;/p&gt;
&lt;p&gt;When I started developing with &lt;strong&gt;Java&lt;/strong&gt; over 10 years ago, we had some projects with the early versions of &lt;strong&gt;Vaadin&lt;/strong&gt; and &lt;strong&gt;JavaFX&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>5 Things You Probably Didn’t Know About Java Concurrency</title><link>https://foojayio.github.io/website/today/5-things-you-probably-didnt-know-about-java-concurrency/</link><pubDate>Fri, 25 Mar 2022 05:51:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/5-things-you-probably-didnt-know-about-java-concurrency/</guid><description>&lt;p&gt;Threads are at the heart of the Java programming language. When we run a &amp;ldquo;Hello World&amp;rdquo; Java program, we run on the main thread. From there, we can create threads easily, as we need to compose our application code to be functional, responsive, and performant, all at the same time.&lt;/p&gt;
&lt;p&gt;Think about a web server: it simultaneously handles many thousands of requests at the same time. In Java, we achieve this using multiple threads. While threads are helpful, they are full of dread/thread to many developers.&lt;/p&gt;</description></item><item><title>Full Stream Ahead: Astra Streaming, Powered by Apache Pulsar</title><link>https://foojayio.github.io/website/today/full-stream-ahead-astra-streaming-powered-by-apache-pulsar/</link><pubDate>Thu, 24 Mar 2022 09:22:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/full-stream-ahead-astra-streaming-powered-by-apache-pulsar/</guid><description>&lt;p&gt;With a serverless architecture, multi-region geo replication, and Apache Cassandra&amp;rsquo;s legendary performance, &lt;a href="https://astra.datastax.com" target="_blank" rel="noopener noreferrer"&gt;DataStax Astra DB&lt;/a&gt;
 makes it easy for developers and enterprises to start small with their applications and grow them to infinite scale without constant performance tuning and optimization exercises.&lt;/p&gt;
&lt;p&gt;However, cloud app developers also face significant challenge`s beyond data at rest. Modern data apps require high-scale streaming technologies that can deliver the reactive engagement at the point of interaction that end users have come to expect. That&amp;rsquo;s why today, we&amp;rsquo;re excited to announce that these capabilities have been added to DataStax Astra.&lt;/p&gt;</description></item><item><title>Debugging Race Conditions in Production</title><link>https://foojayio.github.io/website/today/debugging-race-conditions-in-production/</link><pubDate>Wed, 23 Mar 2022 07:45:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-race-conditions-in-production/</guid><description>&lt;p&gt;Race conditions can occur when a multithreaded application accesses a shared resource using over one thread. Unless we have guards in place, the result might depend on which thread &amp;ldquo;got there first&amp;rdquo;. This is especially problematic when the state is changed externally.&lt;/p&gt;
&lt;p&gt;A race can cause more than just incorrect behavior. It can enable a security vulnerability when the resource in question can be corrupted in the right way. A good example of race condition vulnerabilities is mangling memory. Let&amp;rsquo;s say we have an admin user name which is restricted and privileged. You can&amp;rsquo;t change your user name to admin because of validation. But you can change it to anything else&amp;hellip;&lt;/p&gt;</description></item><item><title>What's New and Exciting in Java 18?</title><link>https://foojayio.github.io/website/today/whats-new-and-exciting-in-java-18/</link><pubDate>Tue, 22 Mar 2022 07:23:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/whats-new-and-exciting-in-java-18/</guid><description>&lt;p&gt;Time runs forward without compromise! The six month release period is over and, similar to people expecting spring and nice weather, the Java community is excited about the next OpenJDK release, this time holding the number 18.&lt;/p&gt;
&lt;p&gt;Yes, Java 18 is here and in this article we explore the most important changes and, in my humble opinion, this release is an important one!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For a full listing of the 2,045 fixes in Java 18, &lt;a href="https://foojayio.github.io/website/java-18/?tab=highlights&amp;amp;quarter=032022&amp;amp;version=18.0.0"&gt;go here on Foojay.io&lt;/a&gt;
. And vote on your favorites to show the Java community&amp;rsquo;s favorite fixes in Java 18.&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>All about Generics: Part 1</title><link>https://foojayio.github.io/website/today/all-about-generics-part-1/</link><pubDate>Sun, 20 Mar 2022 22:54:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/all-about-generics-part-1/</guid><description>&lt;p&gt;Generics are used to parameterize types. A piece of code can be written generically enough so that we can fit a variety of types in it. Being a strongly type-safe language, Java requires to specify types in all aspects of its code, methods, fields, interfaces, etc.&lt;/p&gt;
&lt;p&gt;However, generics is one of the tricky ways to make it possible to use type parameterization so that one particular portion or entirely of a class or their subclass can support a variety of types if an entity such as class, interface, or method that operates on a parameterized type is said to be a generic entity.&lt;/p&gt;</description></item><item><title>Reaper 3.0 for Apache Cassandra is available</title><link>https://foojayio.github.io/website/today/reaper-3-0-for-apache-cassandra-is-available/</link><pubDate>Fri, 18 Mar 2022 14:55:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/reaper-3-0-for-apache-cassandra-is-available/</guid><description>&lt;p&gt;The &lt;a href="https://k8ssandra.io/" target="_blank" rel="noopener noreferrer"&gt;K8ssandra&lt;/a&gt;
 team is pleased to announce the release of &lt;a href="http://cassandra-reaper.io/" target="_blank" rel="noopener noreferrer"&gt;Reaper 3.1&lt;/a&gt;
. Let&amp;rsquo;s dive into the features and improvements that 3.0 recently introduced (along with some notable removals) and how the newest update to 3.1 builds on that.&lt;/p&gt;
&lt;p&gt;Starting with 3.1.0, Reaper can now compile and run with jdk11. Note that jdk8 is still supported at runtime.&lt;/p&gt;
&lt;p&gt;Over the years, we regularly discussed dropping support for Postgres and H2 with the &lt;a href="https://thelastpickle.com/reaper.html" target="_blank" rel="noopener noreferrer"&gt;The Last Pickle&lt;/a&gt;
 (TLP) team, now part of &lt;a href="https://www.datastax.com/company" target="_blank" rel="noopener noreferrer"&gt;DataStax&lt;/a&gt;
, the organization leading the open-source development of Reaper. Despite our lack of expertise in Postgres, the effort required to maintain support for these storage backends was moderate as long as Reaper&amp;rsquo;s architecture was simple. However, complexity grew with more deployment options, culminating with the addition of the sidecar mode.&lt;/p&gt;</description></item><item><title>Security Warning: Your Java Attack Surface Just Got Bigger</title><link>https://foojayio.github.io/website/today/security-warning-your-java-attack-surface-just-got-bigger/</link><pubDate>Thu, 17 Mar 2022 16:35:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/security-warning-your-java-attack-surface-just-got-bigger/</guid><description>&lt;p&gt;Building cloud-native Java applications is undoubtedly awesome.&lt;/p&gt;
&lt;p&gt;However, it comes with undeniable new risks. Next to your own code, you are relying on so many other things.&lt;/p&gt;
&lt;p&gt;Blindly depending on open-source libraries and Docker images can form a massive risk for your application. The wrong package can introduce severe vulnerabilities into your application, exposing your application and your user&amp;rsquo;s data.&lt;/p&gt;
&lt;p&gt;In the talk below we&amp;rsquo;ll show common threats, vulnerabilities, and misconfiguration including the recently disclosed issues in Log4j. Most importantly, you&amp;rsquo;ll learn how to protect your application with actionable remediation and best practices.&lt;/p&gt;</description></item><item><title>The Basics of Breakpoints you Might not Know</title><link>https://foojayio.github.io/website/today/the-basics-of-breakpoints-you-might-not-know/</link><pubDate>Thu, 17 Mar 2022 10:41:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-basics-of-breakpoints-you-might-not-know/</guid><description>&lt;p&gt;In episodes 4 and 5 of &amp;ldquo;140 Second Ducklings&amp;rdquo;, I got deeper into the more advanced underpinnings of breakpoints. There&amp;rsquo;s still a lot more to learn to move forward, but even at this stage it&amp;rsquo;s surprising how many things are relatively unknown in the developer community. And I&amp;rsquo;m just getting started&amp;hellip;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;🦆 Duckling the 5th:&lt;/p&gt;
&lt;p&gt;Did you know you can disable a breakpoint until you hit another breakpoint?&lt;/p&gt;
&lt;p&gt;Do you know what&amp;rsquo;s a tracepoint?&lt;/p&gt;</description></item><item><title>Developer Observability, KoolKits and Reliability</title><link>https://foojayio.github.io/website/today/interview-with-tom-granot-developer-observability-koolkits-and-reliability/</link><pubDate>Wed, 16 Mar 2022 14:01:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/interview-with-tom-granot-developer-observability-koolkits-and-reliability/</guid><description>&lt;p&gt;In preparation for the upcoming &lt;a href="https://www.linkedin.com/events/developerobservabilitymastercla6909167343625482241/about/" target="_blank" rel="noopener noreferrer"&gt;Developer Observability Masterclass&lt;/a&gt;
 we&amp;rsquo;re hosting at Lightrun with &lt;a href="https://www.thoughtworks.com/" target="_blank" rel="noopener noreferrer"&gt;Thoughtworks&lt;/a&gt;
, &lt;a href="https://redmonk.com/" target="_blank" rel="noopener noreferrer"&gt;RedMonk&lt;/a&gt;
 and &lt;a href="https://jfrog.com/" target="_blank" rel="noopener noreferrer"&gt;JFrog&lt;/a&gt;
, I sat down for a brief interview with Tom Granot - the Director of Developer Relations at Lightrun.&lt;/p&gt;
&lt;p&gt;Tom will MC the event as he did for the &lt;a href="https://go.lightrun.com/developer-productivity-masterclass" target="_blank" rel="noopener noreferrer"&gt;Developer Productivity Masterclass&lt;/a&gt;
 we ran back in December.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shai:&lt;/strong&gt; Tell us a bit about yourself and your background.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tom:&lt;/strong&gt; Before joining Lightrun, I worked as an SRE at Actyx. This drove home the importance of observability tools - I got a sense of the potential problems and, to some extent, the blindness that developers face in production.&lt;/p&gt;</description></item><item><title>Visualization of Business Function Message Flow with Vaadin and Neo4j</title><link>https://foojayio.github.io/website/today/visualization-of-the-message-flow-between-business-functions-with-vaadin-and-neo4j/</link><pubDate>Wed, 16 Mar 2022 08:21:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/visualization-of-the-message-flow-between-business-functions-with-vaadin-and-neo4j/</guid><description>&lt;h2 id="_the_project"&gt;The Project&lt;/h2&gt;
&lt;p&gt;Analyzing and visualizing the message flow between business functions was the goal of my current project. At first we considered using a UML tool for this job, but we came to the conclusion that it might not be as flexible as we need it to be. Finally I&amp;rsquo;ve got the assigment to create a custom web application.&lt;/p&gt;
&lt;p&gt;Since business functions and messages are related to each other, it made sense to represent them as a graph. That&amp;rsquo;s why I chose &lt;a href="https://neo4j.com/" target="_blank" rel="noopener noreferrer"&gt;Neo4j&lt;/a&gt;
 as the database. Now the question was how to manage and visualize the graph. As I&amp;rsquo;m expierenced with the &lt;a href="https://foojayio.github.io/website/today/vaadin-and-jooq-match-made-in-heaven/"&gt;Vaadin&lt;/a&gt;
 framework I want to use it also in this project.&lt;/p&gt;</description></item><item><title>7 Reasons Why, After 26 Years, Java Still Makes Sense!</title><link>https://foojayio.github.io/website/today/7-reasons-why-after-26-years-java-still-makes-sense/</link><pubDate>Tue, 15 Mar 2022 08:02:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/7-reasons-why-after-26-years-java-still-makes-sense/</guid><description>&lt;p&gt;Java has been and continues to be the most popular language over the last two decades. It has always been in the top 5 in the &lt;a href="https://www.tiobe.com/tiobe-index/" target="_blank" rel="noopener noreferrer"&gt;TIOBE index&lt;/a&gt;
 in terms of popularity. Besides popularity, Java is especially dominant in the enterprise world.&lt;/p&gt;
&lt;p&gt;However, in recent years, with the popularity of microservices and data science, other programming languages, such as Python, have gained in popularity. Some developers may view this as concerning news, as it may indicate the decline of Java, while others would argue differently.&lt;/p&gt;</description></item><item><title>Lessons learned from previous projects</title><link>https://foojayio.github.io/website/today/lessons-learned-from-previous-projects/</link><pubDate>Mon, 14 Mar 2022 13:02:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/lessons-learned-from-previous-projects/</guid><description>&lt;p&gt;An exciting part of software development is what was unanimously considered good practice at one point in time can be more ambiguous years later. Or even plain wrong. However, you generally need to do it multiple times over time to realize it. Here are my top learnings from my experience in Java projects.&lt;/p&gt;
&lt;h2 id="h2-0-packaging-by-layers"&gt;Packaging by layers&lt;/h2&gt;
&lt;p&gt;When I started my developer career in Java, every project organized their classes by layers - controllers, services and s (repositories). A typical project&amp;rsquo;s structure would look like this:&lt;/p&gt;</description></item><item><title>JDKMon 17.0.23 Released</title><link>https://foojayio.github.io/website/today/jdkmon-17-0-23-released/</link><pubDate>Fri, 11 Mar 2022 09:52:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdkmon-17-0-23-released/</guid><description>&lt;p&gt;JDKMon is a little tool written in JavaFX that tries to detect all OpenJDK distributions installed on your machine while keeping track of updates for those distributions.&lt;/p&gt;
&lt;p&gt;It will scan for new updates every three hours and will inform you about available updates.&lt;/p&gt;
&lt;figure class="wp-block-image size-full is-resized is-style-default"&gt;
 &lt;img fetchpriority="high" decoding="async" src="jdkmon-17.0.23.png" alt="" class="wp-image-52579" width="423" height="306"&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; JDKMon won&amp;rsquo;t install the distributions on your machine but will enable you to download them to a place of your choice.&lt;/p&gt;
&lt;p&gt;At the moment the following distributions are supported:&lt;/p&gt;</description></item><item><title>Have you upgraded to Cassandra 4.0 yet?</title><link>https://foojayio.github.io/website/today/have-you-upgraded-to-cassandra-4-0/</link><pubDate>Fri, 11 Mar 2022 08:35:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/have-you-upgraded-to-cassandra-4-0/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/have-you-upgraded-to-cassandra-4-0/shutterstock_140530141-350x233-1.jpg" alt="" loading="lazy"&gt;
 © Shutterstock / Phototribe&lt;/p&gt;
&lt;p&gt;Alongside stability, Apache Cassandra 4.0 stands out for its ability to scale operations faster, its new auditing capabilities, and the way it embraces privacy by design. In this article, we&amp;rsquo;ll cover the new features and walk you through the steps required to upgrade to Cassandra 4.0.&lt;/p&gt;
&lt;p&gt;The general availability of Apache Cassandra 4.0 marks the most stable release in the project&amp;rsquo;s history.&lt;/p&gt;
&lt;p&gt;Even with the 4.0 beta 1 release back in July 2020, Project Management Committee (PMC) members were confident the latest version of the distributed NoSQL database would be ready to go to work with Apache Cassandra Committer; PMC member Sankalp Kohli at the time indicated that &amp;ldquo;users will be able to use the release knowing it is production-ready on day one.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Detect, Track, Verify Security Issues &amp; 0-Days</title><link>https://foojayio.github.io/website/today/detecting-investigating-and-verifying-fixes-for-security-incidents-and-zero-day-issues-using-lightrun/</link><pubDate>Thu, 10 Mar 2022 12:25:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/detecting-investigating-and-verifying-fixes-for-security-incidents-and-zero-day-issues-using-lightrun/</guid><description>&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; You can use &lt;a href="https://lightrun.com/free" target="_blank" rel="noopener noreferrer"&gt;Lightrun for free&lt;/a&gt;
 on your servers.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not a security expert. I&amp;rsquo;d like to think of myself as a security conscious developer, but this is a vast subject with depth and breadth. What I understand is &lt;a href="https://lightrun.com/debugging/remote-debugging/" target="_blank" rel="noopener noreferrer"&gt;Lightrun and Debugging&lt;/a&gt;
. In that capacity, I can show some creative ways you can use it as a security tool. A &amp;ldquo;proper&amp;rdquo; security expert could take this to the next level.&lt;/p&gt;</description></item><item><title>Vaadin and jOOQ: Match Made in Heaven</title><link>https://foojayio.github.io/website/today/vaadin-and-jooq-match-made-in-heaven/</link><pubDate>Wed, 09 Mar 2022 08:25:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/vaadin-and-jooq-match-made-in-heaven/</guid><description>&lt;p&gt;Have you ever had to write an application that didn&amp;rsquo;t do much other than display and change data? And did you use a Single Page Application framework like Angular, a REST API, and Hibernate?&lt;/p&gt;
&lt;p&gt;How about if that was a lot easier?&lt;/p&gt;
&lt;h2 id="_introducing_vaadin_and_jooq"&gt;Introducing Vaadin and jOOQ&lt;/h2&gt;
&lt;p&gt;Vaadin exists already for 20 years but was completely overhauled three years ago. Vaadin Flow is a web framework that allows the development of a web application in Java. It&amp;rsquo;s based on web components and the state is synchronized between browser and server.&lt;/p&gt;</description></item><item><title>Hilla 1.0 - A new reactive frontend framework for Spring Boot backends</title><link>https://foojayio.github.io/website/today/hilla-1-0-a-new-frontend-framework-for-springboot/</link><pubDate>Wed, 09 Mar 2022 08:20:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/hilla-1-0-a-new-frontend-framework-for-springboot/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/hilla-1-0-a-new-frontend-framework-for-springboot/og-image-github-700x350.png" alt="Hilla Framework" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://hilla.dev/" target="_blank" rel="noopener noreferrer"&gt;Hilla&lt;/a&gt;
 is a new framework for building reactive web apps on Java backends. It seamlessly integrates a reactive &lt;a href="https://lit.dev" target="_blank" rel="noopener noreferrer"&gt;Lit&lt;/a&gt;
 TypeScript frontend with a &lt;a href="https://spring.io/projects/spring-boot" target="_blank" rel="noopener noreferrer"&gt;Spring Boot&lt;/a&gt;
 backend. Hilla is built and supported by &lt;a href="https://vaadin.com" target="_blank" rel="noopener noreferrer"&gt;Vaadin&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Hilla is designed to be simple enough for small utilities, but robust enough to build complex, enterprise-grade apps.&lt;/p&gt;
&lt;h2 id="h2-0-automatic-java-to-typescript-code-generation"&gt;Automatic Java to TypeScript Code Generation&lt;/h2&gt;
&lt;p&gt;Automatic TypeScript code generation helps ensure that the frontend always stays in sync with the backend, so you can build apps faster and with greater confidence, even when your team grows bigger. The strong type-safety also means you can explore server endpoint methods and their input and return types right from your IDE as you type.&lt;/p&gt;</description></item><item><title>Java Bytecode Simplified: Journey to the Wonderland (Part 1)</title><link>https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-1/</link><pubDate>Tue, 08 Mar 2022 10:16:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-1/</guid><description>&lt;p&gt;There are two ways to see a thing. One, see it as it appears to us; two, see it and appreciate it. For example, we get light when we switch on a lightbulb. We press the button and then get busy with our life. Pretty simple, but boring. On the other hand, if we know how the light gets energy from an electrical power grid far from our home with wires and while travelling through the wires and filament, the filament heats up and starts emitting photons, we get to see in the light; we can then appreciate the blessing.&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>Journeys in Java, Level 3: Building an Empire of Microservices</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-3-building-an-empire-of-microservices/</link><pubDate>Fri, 04 Mar 2022 16:23:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-3-building-an-empire-of-microservices/</guid><description>&lt;p&gt;We are still in the beginning stages of building microservices with Java, but we have already seen how to send and receive communications between two Spring Boot applications. In the &lt;a href="https://jmhreif.com/blog/microservices-level1/" target="_blank" rel="noopener noreferrer"&gt;first blog post&lt;/a&gt;
 of this series, our two applications transmitted a message string of &lt;code&gt;&amp;quot;Hello, World!&amp;quot;&lt;/code&gt;. In the &lt;a href="https://jmhreif.com/blog/microservices-level2/" target="_blank" rel="noopener noreferrer"&gt;second blog post&lt;/a&gt;
, we took it one step further by embedding a MongoDB database into our &lt;code&gt;service1&lt;/code&gt;, added a data domain (books) with four pre-populated entries, and transmitted the &lt;code&gt;Book&lt;/code&gt; information between the two applications.&lt;/p&gt;</description></item><item><title>The Serverless Database You Really Want</title><link>https://foojayio.github.io/website/today/the-serverless-database-you-really-want/</link><pubDate>Thu, 03 Mar 2022 20:43:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-serverless-database-you-really-want/</guid><description>&lt;p&gt;The dreaded part of every site reliability engineer&amp;rsquo;s (SRE) job eventually: capacity planning. You know, the dance between all the stakeholders when deploying your applications. Did engineering really simulate the right load and do we understand how the application scales? Did product managers accurately estimate the amount of usage? Did we make architectural decisions that will keep us from meeting our SLA goals? And then the question that everyone will have to answer eventually: how much is this going to cost? This forces SREs to assume the roles of engineer, accountant and fortune teller.&lt;/p&gt;</description></item><item><title>Why Pulsar Beats Kafka for a Scalable, Distributed Data Architecture</title><link>https://foojayio.github.io/website/today/why-pulsar-beats-kafka-for-a-scalable-distributed-data-architecture/</link><pubDate>Thu, 03 Mar 2022 14:10:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-pulsar-beats-kafka-for-a-scalable-distributed-data-architecture/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/why-pulsar-beats-kafka-for-a-scalable-distributed-data-architecture/shutterstock_1009002379-350x233-1.jpg" alt="" loading="lazy"&gt;
 © Shutterstock / Jurik Peter&lt;/p&gt;
&lt;p&gt;The leading open source event streaming platforms are Apache Kafka and Apache Pulsar. For enterprise architects and application developers, choosing the right event streaming approach is critical, as these technologies will help their apps scale up around data to support operations in production.&lt;/p&gt;
&lt;p&gt;Everyone wants results faster. We want applications that know what we want, even before we know ourselves. We want systems that constantly check for fraud or security issues to protect our data. We want applications that are smart enough to react and change plans when faced with the unexpected. And we want those services to be continuously available.&lt;/p&gt;</description></item><item><title>Java Return Value, IntelliJ Jump to Line</title><link>https://foojayio.github.io/website/today/debugging-tutorial-java-return-value-intellij-jump-to-line-and-more/</link><pubDate>Wed, 02 Mar 2022 15:33:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-tutorial-java-return-value-intellij-jump-to-line-and-more/</guid><description>&lt;p&gt;I just published the 3rd episode of the &amp;ldquo;140 Second Duckling&amp;rdquo; tutorial series and I&amp;rsquo;m getting into the rhythm of doing them. I posted the 2nd episode last week and in this post I&amp;rsquo;ll dig deeper into both.&lt;/p&gt;
&lt;p&gt;I tackled a lot of basic stuff about debugging but I picked two big headliners that a surprising amount of developers aren&amp;rsquo;t familiar with. E.g. How many times did you step over a return statement and cursed?&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 14)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-14/</link><pubDate>Tue, 01 Mar 2022 12:03:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-14/</guid><description>&lt;p&gt;In our &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-13/"&gt;previous article&lt;/a&gt;
, we discussed the thread pool&amp;rsquo;s sizing. We stipulated that if work is computational, we don&amp;rsquo;t need more threads than the available number of processors. We will discuss this idea a bit further in this article.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s think about an example:&lt;/p&gt;
&lt;p&gt;We all know how to compute the Fibonacci series. The simple code is given below-&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic"&gt;public static long fib(int n) {
 if (n &amp;lt; 2) {
 return n;
 } else {
 return fib(n - 2) + fib(n - 2);
 }
}&lt;/pre&gt;
&lt;p&gt;Over here, we have used recursion to solve the Fibonacci series. To find the Fibonacci number of n, we must know the previous two. Each of them again will require to calculate the previous two. The process will continue until it reaches to the bases case and then we have a result.&lt;/p&gt;</description></item><item><title>Kover : Code Coverage plugin for Kotlin</title><link>https://foojayio.github.io/website/today/kover-code-coverage-plugin-for-kotlin/</link><pubDate>Mon, 28 Feb 2022 21:34:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/kover-code-coverage-plugin-for-kotlin/</guid><description>&lt;p&gt;&lt;em&gt;TL;DR: Kover is a code coverage tool for Kotlin. It&amp;rsquo;s still in incubator phase but I took it for a spin and it is already very useful as part of local or CI workflows! In this article I go through the setup and some of my favourite goodies of the tool. &lt;a href="https://github.com/jlengrand/spring-petclinic-kotlin/pull/1" target="_blank" rel="noopener noreferrer"&gt;You can see my experiment over here.&lt;/a&gt;
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;At the end of last year, the &lt;a href="https://blog.jetbrains.com/kotlin/2021/11/kotlin-1-6-0-is-released/" target="_blank" rel="noopener noreferrer"&gt;version 1.6.0 of Kotlin was officially released&lt;/a&gt;
! The release was packed with new language features, but also some very nice tooling and ecosystem goodies.&lt;/p&gt;</description></item><item><title>Avoiding Stringly-typed in Kotlin</title><link>https://foojayio.github.io/website/today/avoid-stringly-typed-in-kotlin/</link><pubDate>Mon, 28 Feb 2022 16:35:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/avoid-stringly-typed-in-kotlin/</guid><description>&lt;p&gt;A couple of years ago, I developed an application in Kotlin based on Camunda to help me manage my conference submission workflow. It tracks my submissions in Trello and synchronizes them on Google Calendar and in a Google Sheet. Google Calendar offers a REST API. As REST APIs go, it&amp;rsquo;s cluttered with &lt;code&gt;String&lt;/code&gt; everywhere. Here&amp;rsquo;s an excerpt of the code:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="kotlin"&gt;fun execute(color: String, availability: String) {
 findCalendarEntry(client, google, execution.conference)?.let {
 it.colorId = color // 1
 it.transparency = availability // 2
 client.events()
 .update(google.calendarId, it.id, it).execute()
 }
}&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Set the event&amp;rsquo;s color. Valid values are &amp;ldquo;0&amp;rdquo;, &amp;ldquo;1&amp;rdquo;, &amp;hellip; to &amp;ldquo;11&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Set the event&amp;rsquo;s availability. Valid values are &lt;code&gt;&amp;quot;transparent&amp;quot;&lt;/code&gt; and &lt;code&gt;&amp;quot;opaque&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;However, my experience has taught me to favor strong typing. I also want to avoid typos. I want to list some alternatives to using &lt;code&gt;String&lt;/code&gt; in this post.&lt;/p&gt;</description></item><item><title>OSS Debugging Toolkits for Kubernetes</title><link>https://foojayio.github.io/website/today/introducing-koolkits-debugging-toolkits-for-kubernetes/</link><pubDate>Mon, 28 Feb 2022 12:27:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-koolkits-debugging-toolkits-for-kubernetes/</guid><description>&lt;p&gt;KoolKits (&lt;strong&gt;K&lt;/strong&gt; ubernetes t&lt;strong&gt;oolkits&lt;/strong&gt;) are highly-opinionated, language-specific, batteries-included debug container images for Kubernetes. In practice, they&amp;rsquo;re what you would&amp;rsquo;ve installed on your production pods if you were stuck during a tough debug session in an unfamiliar shell.&lt;/p&gt;
&lt;p&gt;To briefly give some background, note that these container images are intended for use with the new &lt;a href="https://kubernetes.io/docs/tasks/debug-application-cluster/debug-running-pod/#ephemeral-container" target="_blank" rel="noopener noreferrer"&gt;kubectl debug feature&lt;/a&gt;
, which spins up &lt;a href="https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/" target="_blank" rel="noopener noreferrer"&gt;Ephemeral containers&lt;/a&gt;
 for interactive troubleshooting. A KoolKit will be pulled by kubectl debug, spun up as a container in your pod, and have the ability to access the same process namespace as your original container.&lt;/p&gt;</description></item><item><title>Measuring Time and Durations in Kotlin</title><link>https://foojayio.github.io/website/today/measuring-time-and-duration-in-kotlin/</link><pubDate>Fri, 25 Feb 2022 09:56:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/measuring-time-and-duration-in-kotlin/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;TL;DR : The &lt;code&gt;Duration&lt;/code&gt;API is coming out of its experimental stage and offers a nice DSL to easily work with time durations. If offers the obvious but also nice extra goodies, such as coercions and ISO/String conversions and is notably used to &lt;a href="https://github.com/Kotlin/KEEP/blob/master/proposals/stdlib/durations-and-time-measurement.md#measuretime-and-measuretimedvalue" target="_blank" rel="noopener noreferrer"&gt;calculate processing time&lt;/a&gt;
.&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;&lt;strong&gt;You can directly run the code I present below &lt;a href="https://pl.kotl.in/QwksQa5h1" target="_blank" rel="noopener noreferrer"&gt;in the Kotlin playground&lt;/a&gt;
!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll be diving into one of the other news of the &lt;a href="https://blog.jetbrains.com/kotlin/2021/11/kotlin-1-6-0-is-released/" target="_blank" rel="noopener noreferrer"&gt;Kotlin 1.6 release&lt;/a&gt;
 : The &lt;code&gt;Duration&lt;/code&gt;API coming out of Experimental and is available for all flavours of Kotlin (so JS as well 😊)! Let&amp;rsquo;s look quickly together what it has to offer!&lt;/p&gt;</description></item><item><title>Save Hours on your Setup of K8ssandra with the New Config Builder</title><link>https://foojayio.github.io/website/today/save-hours-on-your-setup-of-k8ssandra-with-the-new-config-builder/</link><pubDate>Thu, 24 Feb 2022 19:36:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/save-hours-on-your-setup-of-k8ssandra-with-the-new-config-builder/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Setting up K8ssandra in your workflow just got a whole lot easier. With the new Config Builder you can be running Apache Cassandra® on Kubernetes in a matter of minutes.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The purpose of K8ssandra is to make it easy to run Apache Cassandra® on Kubernetes. We recently took another big step in that direction by releasing the &lt;a href="https://dtsx.io/3pIiPcR" target="_blank" rel="noopener noreferrer"&gt;K8ssandra config builder&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Even if you&amp;rsquo;ve created thousands of nodes or integrated K8ssandra in your stack, you&amp;rsquo;ll probably want to give the config builder a try. Walk through the interactive wizard defining the shape of your cluster, resource requirements, and toggle features to fit your needs. This is great for smoothing out the on-ramp for a production ready environment of K8ssandra.&lt;/p&gt;</description></item><item><title>Project Panama for Newbies (Part 4)</title><link>https://foojayio.github.io/website/today/project-panama-for-newbies-part-4/</link><pubDate>Thu, 24 Feb 2022 08:34:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/project-panama-for-newbies-part-4/</guid><description>&lt;p&gt;&lt;strong&gt;Updated December 31, 2025:&lt;/strong&gt; This article now features Java 25 and the Foreign Function &amp;amp; Memory (FFM) API, which has been a standard feature since JDK 22.&lt;/p&gt;
&lt;p&gt;Welcome to Part 4 of Java&amp;rsquo;s Project Panama for newbies! If you&amp;rsquo;ve been following &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-1/"&gt;this&lt;/a&gt;
 &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-2/"&gt;series&lt;/a&gt;
 of &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-3/"&gt;posts&lt;/a&gt;
 on how to use Java&amp;rsquo;s Project Panama APIs you probably have noticed that all of the examples thus far demonstrate how Java code can execute C code by using the &lt;a href="https://github.com/openjdk/panama-foreign/blob/d8c0fe5918cb1c6c744eb26797ea4fa04142c237/doc/panama_ffi.md#c-linker" target="_blank" rel="noopener noreferrer"&gt;linker&lt;/a&gt;
&amp;rsquo;s &lt;code&gt;downCall()&lt;/code&gt; method.&lt;/p&gt;</description></item><item><title>Use git bisect to Pinpoint a Bug</title><link>https://foojayio.github.io/website/today/use-git-bisect-to-pinpoint-a-bug/</link><pubDate>Wed, 23 Feb 2022 14:44:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/use-git-bisect-to-pinpoint-a-bug/</guid><description>&lt;p&gt;During some recent work on Maven, I found a very specific bug. The error message wasn&amp;rsquo;t that clear, and I couldn&amp;rsquo;t make a guess what might&amp;rsquo;ve caused it.&lt;/p&gt;
&lt;p&gt;I had read about &lt;code&gt;git bisect&lt;/code&gt; a few times and figured that this time, I would use that tool to find the bug.&lt;/p&gt;
&lt;p&gt;So what does &lt;code&gt;git bisect&lt;/code&gt; do? It helps you find the exact commit that introduced a bug, using binary search.&lt;/p&gt;</description></item><item><title>Jakarta Concurrency: Present and Future</title><link>https://foojayio.github.io/website/today/jakarta-concurrency-present-and-future/</link><pubDate>Wed, 23 Feb 2022 14:15:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/jakarta-concurrency-present-and-future/</guid><description>&lt;p&gt;&lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
, previously Java EE, is a set of specifications that enables the world wide community of Java developers to work on cloud native Java enterprise applications. It is an open source project maintained by the &lt;a href="https://www.eclipse.org/org/" target="_blank" rel="noopener noreferrer"&gt;Eclipse Foundation.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Jakarta Concurrency is a small, but fundamental, specification under the Jakarta EE umbrella. As project lead, I provide more information on what it is, its future and how to be involved.&lt;/p&gt;</description></item><item><title>Why we decided to build a K8ssandra Operator - Part 4</title><link>https://foojayio.github.io/website/today/why-we-decided-to-build-a-k8ssandra-operator-part-4/</link><pubDate>Tue, 22 Feb 2022 17:04:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-we-decided-to-build-a-k8ssandra-operator-part-4/</guid><description>&lt;p&gt;In the &lt;a href="https://k8ssandra.io/blog/other/why_k8ssandra_operator_part_1/" target="_blank" rel="noopener noreferrer"&gt;first&lt;/a&gt;
, &lt;a href="https://k8ssandra.io/blog/articles/why-k8ssandra-operator-part-2/" target="_blank" rel="noopener noreferrer"&gt;second&lt;/a&gt;
, and &lt;a href="https://k8ssandra.io/blog/articles/why-we-decided-to-build-a-k8ssandra-operator-part-3/" target="_blank" rel="noopener noreferrer"&gt;third&lt;/a&gt;
 posts in this series, we&amp;rsquo;ve shared conversations with K8ssandra core team members on our journey to build a Kubernetes operator for K8ssandra. We&amp;rsquo;ve discussed the virtues of the Helm package manager versus Kubernetes operators for deploying and managing infrastructure in Kubernetes and some of our implementation choices for the operator.&lt;/p&gt;
&lt;p&gt;In this final post of the series, we pick up from the previous post with a discussion of how we decided to structure our projects in GitHub, how we test the K8ssandra operator, and our hopes for how the operator will expand the K8ssandra developer community.&lt;/p&gt;</description></item><item><title>Enter the Cloud Native Dojo: Blackbelt-Level Debugging</title><link>https://foojayio.github.io/website/today/enter-the-cloud-native-dojo-blackbelt-level-debugging/</link><pubDate>Tue, 22 Feb 2022 13:28:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/enter-the-cloud-native-dojo-blackbelt-level-debugging/</guid><description>&lt;p&gt;Debugging is often viewed as an art form or a craft. This is true for most engineering-related troubleshooting processes (e.g., art of motorcycle maintenance). We&amp;rsquo;re usually indoctrinated into the basic moves by a senior developer and are then thrown into the proverbial pool. As a result, even senior engineers sometimes have gaps in their debugging skills. There are very few university courses or books on the subject, so it&amp;rsquo;s really hard to blame them.&lt;/p&gt;</description></item><item><title>Java on Visual Studio Code Update: February 2022</title><link>https://foojayio.github.io/website/today/java-on-visual-studio-code-update-february-2022/</link><pubDate>Tue, 22 Feb 2022 10:52:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-visual-studio-code-update-february-2022/</guid><description>&lt;p&gt;Hi everyone, welcome to the February update of Visual Studio Code Java and this time we have a special edition for education!&lt;/p&gt;
&lt;p&gt;Many schools are back in session after the winter holidays, and in order to provide student and educators a better experience using Java on Visual Studio Code this semester, we have been making a series of improvements regarding unit testing, GUI application development and Gradle project creation.&lt;/p&gt;
&lt;p&gt;Let us take a look at these new features!&lt;/p&gt;</description></item><item><title>Hand Ground Coffee: Command Line Tools for Java</title><link>https://foojayio.github.io/website/today/hand-ground-coffee-command-line-tools-for-java/</link><pubDate>Mon, 21 Feb 2022 16:04:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/hand-ground-coffee-command-line-tools-for-java/</guid><description>&lt;p&gt;&lt;img src="https://www.dieckmann-aroma-kaffee.de/images/blog/kaffeemuehle.jpg" alt="kaffeemuehle" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In the book &amp;ldquo;&lt;a href="https://medium.com/97-things" target="_blank" rel="noopener noreferrer"&gt;97 Things every Java Programmer should know&lt;/a&gt;
&amp;rdquo; (I contributed 2 of the 97 tips) there is a chapter about some command line tools in the JDK.&lt;/p&gt;
&lt;p&gt;Since I make heavy use of such helpers myself, I wanted to briefly introduce them in today&amp;rsquo;s article.&lt;/p&gt;
&lt;p&gt;Personally I prefer the command line for my daily work, using the combination of &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;sed&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;bash&lt;/code&gt; commands etc. makes recurring tasks easier.&lt;/p&gt;</description></item><item><title>Controlling Electronics with JBang on the Raspberry Pi</title><link>https://foojayio.github.io/website/today/controlling-electronics-with-jbang-on-the-raspberry-pi/</link><pubDate>Mon, 21 Feb 2022 10:08:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/controlling-electronics-with-jbang-on-the-raspberry-pi/</guid><description>&lt;p&gt;Want to get started with Java programming on the Raspberry Pi?&lt;/p&gt;
&lt;p&gt;JBang is a great way to create your first program to control electronic components connected to the GPIO pins.&lt;/p&gt;
&lt;h2 id="h2-0-what-is-jbang"&gt;What is JBang?&lt;/h2&gt;
&lt;p&gt;As described on their &lt;a href="https://www.jbang.dev/" target="_blank" rel="noopener noreferrer"&gt;website&lt;/a&gt;
:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;JBang lets Students, Educators and Professional Developers create, edit and run self-contained source-only Java programs with unprecedented ease.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Want to learn, explore or use Java instantly without setup?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Do you like Java but use python, groovy, kotlin or similar languages for scripts, experimentation and exploration?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Ever wanted to just be able to run Java from anywhere without any or very minimal setup?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Ever tried out Java 11+ support for running .java files directly in your shell but felt it was a bit too cumbersome?&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;JBang lets you do all this!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>7 Ways to Improve Your Code Reading Skills</title><link>https://foojayio.github.io/website/today/7-ways-to-improve-your-code-reading-skills/</link><pubDate>Fri, 18 Feb 2022 21:21:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/7-ways-to-improve-your-code-reading-skills/</guid><description>&lt;p&gt;Reading source code is in the job description of a software developer. However, this experience is not always pleasant. Not everyone would like to read someone else&amp;rsquo;s code because they find it boring, sometimes frustrating. There are cases when you start reading someone else&amp;rsquo;s code but end up getting a bitter feeling because you are not being able to understand it or the code is not well written. Most developers want to focus on writing code rather reading it, not realizing that reading code is also an important skill to have.&lt;/p&gt;</description></item><item><title>The Critical Role Streaming Plays in a Data Stack</title><link>https://foojayio.github.io/website/today/the-critical-role-streaming-plays-in-a-data-stack/</link><pubDate>Fri, 18 Feb 2022 17:20:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-critical-role-streaming-plays-in-a-data-stack/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/the-critical-role-streaming-plays-in-a-data-stack/streaming-data-Depositphotos_5_tn-300x210-1.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Why Apache Pulsar is the right choice for multi-datacenter, geo-distributed deployments.&lt;/p&gt;
&lt;p&gt;Building applications today requires companies and teams to be familiar with data flows (including streaming data flows) and how to transform them into compelling user experiences. Data fuels companies&amp;rsquo; ability to understand their customers, move faster than competitors, and provide compelling products that the market wants. According to &lt;a href="https://www.datastax.com/resources/report/the-state-of-the-data-race-2021" target="_blank" rel="noopener noreferrer"&gt;research&lt;/a&gt;
 by DataStax and Clearpath Strategies, almost all companies (96%) now have a formal strategy for how they will work with data, but only 38% think they&amp;rsquo;re doing a good job using data in their applications.&lt;/p&gt;</description></item><item><title>System Logger</title><link>https://foojayio.github.io/website/today/system-logger/</link><pubDate>Fri, 18 Feb 2022 12:34:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/system-logger/</guid><description>&lt;p&gt;December was not a good time for Java developers and even less for Ops. The former had to repackage their apps with a fixed Log4J&amp;rsquo;s version, and the latter had to redeploy them - several times. Yet, every cloud has a silver lining. In my case, I learned about &lt;code&gt;System.Logger&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/OndroMih/status/1469599938782932992" target="_blank" rel="noopener noreferrer"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="size-medium wp-image-52382 aligncenter" src="Screenshot-2022-02-12-at-16.53.31-700x451.png" alt="" width="700" height="451"&gt;
&lt;p&gt;](&lt;a href="https://twitter.com/OndroMih/status/1469599938782932992" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/OndroMih/status/1469599938782932992&lt;/a&gt;
)
In short, &lt;code&gt;System.Logger&lt;/code&gt; is a façade over your logging engine. Instead of using, say, SFL4J&amp;rsquo;s API and the wanted implementation, you&amp;rsquo;d use &lt;code&gt;System.Logger&lt;/code&gt; instead of SLF4J. It&amp;rsquo;s available since Java 9, and it&amp;rsquo;s a bummer that I learned about it only recently.&lt;/p&gt;</description></item><item><title>Foojay at FOSDEM 2022 on YouTube And Prize Winners</title><link>https://foojayio.github.io/website/today/foojay-at-fosdem-2022-on-youtube/</link><pubDate>Thu, 17 Feb 2022 09:52:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-at-fosdem-2022-on-youtube/</guid><description>&lt;p&gt;Last weekend, FOSDEM 2022 was held virtually, with the friends of OpenJDK putting together an awesome program around the tools and editors that support the OpenJDK, from overviews of new OpenJDK features, to cutting edge development with new languages on the OpenJDK, sessions on the ever important topic of security, as well as new developments in JavaFX, Jakarta EE, Raspberry Pi, and beyond:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://fosdem.org/2022/schedule/track/friends_of_openjdk/" target="_blank" rel="noopener noreferrer"&gt;https://fosdem.org/2022/schedule/track/friends_of_openjdk/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Around 200 attended the program across two days, which was pretty good compared to the other rooms and the interaction was good in the chat, with the speakers being present during and after the recordings were played for discussion and more.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 2: Building an Empire of Microservices</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-2-building-an-empire-of-microservices/</link><pubDate>Wed, 16 Feb 2022 15:29:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-2-building-an-empire-of-microservices/</guid><description>&lt;p&gt;&lt;strong&gt;Let&amp;rsquo;s dive into the world of microservices find out the complexities, best practices, and troubles. I will share all my learnings, as well!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In my &lt;a href="https://jmhreif.com/blog/microservices-level1/" target="_blank" rel="noopener noreferrer"&gt;last blog post&lt;/a&gt;
, we began building microservices in Java with two Spring Boot applications, passing a &amp;ldquo;Hello, World!&amp;rdquo; string from one application to the other. We focused on reduced complexity, minimum previous knowledge, and few components. Next, we can slowly add pieces that simulate microservices projects in the real world.&lt;/p&gt;</description></item><item><title>Playing practically with Stream API</title><link>https://foojayio.github.io/website/today/playing-practically-with-stream-api/</link><pubDate>Wed, 16 Feb 2022 00:43:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/playing-practically-with-stream-api/</guid><description>&lt;p&gt;We can find many Stream API examples on Google, but most of them don&amp;rsquo;t represent real life scenarios. Hence, it often remains a black box to understand the power of the Stream API for many rising programmers.&lt;/p&gt;
&lt;p&gt;In this article, I tried to make scenarios based problems where I have tried to make the solution with Stream API. These were initially for my personal practice purposes, and later, I added some more practice problems to demonstrate in my class at Pondit.&lt;/p&gt;</description></item><item><title>Cassandra Database Migration to Kubernetes with Zero Downtime</title><link>https://foojayio.github.io/website/today/cassandra-database-migration-to-kubernetes-with-zero-downtime/</link><pubDate>Tue, 15 Feb 2022 15:22:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/cassandra-database-migration-to-kubernetes-with-zero-downtime/</guid><description>&lt;p&gt;K8ssandra is a cloud-native distribution of the Apache Cassandra® database that runs on Kubernetes, with a suite of tools to ease and automate operational tasks. In this post, we&amp;rsquo;ll walk you through a database migration from a Cassandra cluster running in AWS EC2 to a K8ssandra cluster running in Kubernetes on AWS EKS, with zero downtime.&lt;/p&gt;
&lt;p&gt;As an Apache Cassandra user, your expectation should be that migrating to K8ssandra would happen without downtime. To make that happen with &amp;ldquo;classic&amp;rdquo; clusters running on virtual machines or bare metal instances, you will use the datacenter (DC) switch technique which is commonly used in the Cassandra community to transfer clusters to different hardware or environments. The good news is that it&amp;rsquo;s not very different for clusters running in Kubernetes as most Container Network Interfaces (CNI) will provide routable pod IPs.&lt;/p&gt;</description></item><item><title>Building Reactive Java Applications with Spring Framework</title><link>https://foojayio.github.io/website/today/building-reactive-java-applications-with-spring-framework/</link><pubDate>Tue, 15 Feb 2022 14:09:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-reactive-java-applications-with-spring-framework/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/building-reactive-java-applications-with-spring-framework/1_bAqotS_F1PipZLOHx_Tcww-1024x403.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In one of our many free tutorials on&lt;/em&gt; &lt;a href="https://www.youtube.com/c/DataStaxDevs/videos" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;DataStax Developers YouTube channel&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;, we walked you through&lt;/em&gt; &lt;a href="https://www.youtube.com/watch?v=1aRbndIcXV4" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;how to build a reactive implementation of Spring PetClinic&lt;/em&gt;&lt;/a&gt;
in &lt;em&gt;Apache Cassandra® using Spring WebFlux. The full series is&lt;/em&gt; &lt;a href="https://github.com/datastaxdevs/workshop-spring-reactive" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;available on YouTube&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;.&lt;/em&gt;{#08a7}&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re a Java developer who uses the Spring ecosystem, you&amp;rsquo;ve probably seen the &lt;a href="https://github.com/datastaxdevs/workshop-spring-reactive" target="_blank" rel="noopener noreferrer"&gt;Spring Pet Clinic&lt;/a&gt;
. In this workshop, we will walk you through a new reactive implementation of the Pet Clinic backend that uses Spring WebFlux and Apache &lt;a href="https://www.datastax.com/what-is/cassandra" target="_blank" rel="noopener noreferrer"&gt;Cassandra&lt;/a&gt;
® (via &lt;a href="https://astra.dev/3lSpuQp" target="_blank" rel="noopener noreferrer"&gt;DataStax Astra DB&lt;/a&gt;
).{#47b5}&lt;/p&gt;</description></item><item><title>What is Debugging in 140 Seconds</title><link>https://foojayio.github.io/website/today/what-is-debugging-in-140-seconds/</link><pubDate>Mon, 14 Feb 2022 12:50:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-is-debugging-in-140-seconds/</guid><description>&lt;p&gt;&lt;strong&gt;I&amp;rsquo;m launching a new twitter video series that will focus on teaching the concepts of debugging (and other concepts) in small video bites.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is the first video in the series. I hope to publish a new video every week. It starts with the very basics of debugging and builds up. I think debugging is a powerful tool that even experienced developers don&amp;rsquo;t leverage enough.&lt;/p&gt;
&lt;p&gt;See the video here:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;🦆 Duckling the 1st:&lt;/p&gt;</description></item><item><title>Backpressure in Reactive Systems</title><link>https://foojayio.github.io/website/today/backpressure-in-reactive-systems/</link><pubDate>Fri, 11 Feb 2022 10:07:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/backpressure-in-reactive-systems/</guid><description>&lt;p&gt;Mid-January, I held &lt;a href="https://www.youtube.com/watch?v=w0b4OQQmhBI" target="_blank" rel="noopener noreferrer"&gt;a talk at Kotlin.amsterdam&lt;/a&gt;
 based on my post &lt;a href="https://hazelcast.org/blog/migrating-from-imperative-to-reactive/" target="_blank" rel="noopener noreferrer"&gt;Migrating from Imperative to Reactive&lt;/a&gt;
 (a Spring Boot application).&lt;/p&gt;
&lt;p&gt;Because it was a Kotlin meetup, I demoed Kotlin code, and I added a step by migrating the codebase to coroutines.&lt;/p&gt;
&lt;p&gt;During Q&amp;amp;A, somebody asked whether coroutines implemented backpressure. I admit I was not sure of the answer, so I did a bit of research.&lt;/p&gt;
&lt;p&gt;This post provides information on backpressure in general and how &lt;a href="https://github.com/ReactiveX/RxJava" target="_blank" rel="noopener noreferrer"&gt;RxJava&lt;/a&gt;
 (v3), &lt;a href="https://projectreactor.io/" target="_blank" rel="noopener noreferrer"&gt;Project Reactor&lt;/a&gt;
 and Kotlin&amp;rsquo;s &lt;a href="https://kotlinlang.org/docs/reference/coroutines-overview.html" target="_blank" rel="noopener noreferrer"&gt;Coroutines&lt;/a&gt;
 handle it.&lt;/p&gt;</description></item><item><title>Detect and Fix Memory Leaks in Managed Languages</title><link>https://foojayio.github.io/website/today/debugging-ram-detect-fix-memory-leaks-in-managed-languages-heap-deep-dive-part-2/</link><pubDate>Thu, 10 Feb 2022 08:45:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-ram-detect-fix-memory-leaks-in-managed-languages-heap-deep-dive-part-2/</guid><description>&lt;p&gt;In the &lt;a href="https://foojayio.github.io/website/today/debugging-ram-java-garbage-collection-java-heap-deep-dive-part-1/"&gt;previous installment&lt;/a&gt;
, I talked about the Java garbage collector. In this part, I&amp;rsquo;ll discuss the most common memory issue: the memory leak. I focus on managed languages, specifically Java, but I will mention some native code tools which are interesting. A memory leak contributes to heap size, which isn&amp;rsquo;t the most pressing bug in most cases. But when left alone, memory usage can become a problem and, by that point, finding the issue is hard. Unlike a crash dump, where we get a reference to a specific line, a memory leak can remain hidden.&lt;/p&gt;</description></item><item><title>Building Scalable Streaming Applications with DataStax Astra Streaming</title><link>https://foojayio.github.io/website/today/building-scalable-streaming-applications-with-datastax-astra-streaming/</link><pubDate>Wed, 09 Feb 2022 19:09:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-scalable-streaming-applications-with-datastax-astra-streaming/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/building-scalable-streaming-applications-with-datastax-astra-streaming/0_Yj9vaj0to8ZAf9NJ-1-1024x682.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This post introduces developers to&lt;/em&gt; &lt;a href="https://astra.dev/3SZLxE1" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;DataStax Astra Streaming&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;with a step-by-step tutorial that illustrates how it can be used to easily build scalable, streaming applications.&lt;/em&gt;{#39ae}&lt;/p&gt;
&lt;p&gt;&lt;a href="https://astra.dev/3SZLxE1" target="_blank" rel="noopener noreferrer"&gt;Astra Streaming&lt;/a&gt;
 enables developers to build streaming applications on top of an elastically scalable, multi-cloud messaging and event streaming platform powered by &lt;a href="https://pulsar.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Pulsar&lt;/a&gt;
. &lt;a href="https://astra.dev/3SZLxE1" target="_blank" rel="noopener noreferrer"&gt;DataStax Astra Streaming&lt;/a&gt;
 is currently in beta, and we&amp;rsquo;ll be releasing a full demo soon. In the meantime, this article will walk you through a short demo that will provide a great starting point for familiarizing yourself with this powerful new streaming service.{#a6cf}&lt;/p&gt;</description></item><item><title>SQL vs. NoSQL: Pros &amp; Cons</title><link>https://foojayio.github.io/website/today/sql-vs-nosql-pros-cons/</link><pubDate>Wed, 09 Feb 2022 09:26:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/sql-vs-nosql-pros-cons/</guid><description>&lt;p&gt;What&amp;rsquo;s the best way to store, protect and access your data? This is a fundamental, yet critical decision. After all, data is the cornerstone of success for just about every modern organization. For most companies, the choice comes down to SQL and NoSQL databases. Each has unique strengths and weaknesses.&lt;/p&gt;
&lt;p&gt;SQL databases have been a proven option since the 1970s. They are made up of highly structured tables, consisting of rows and columns, related to one other through common attributes. Every column is required to have a value for its corresponding row. NoSQL (&amp;ldquo;not only SQL&amp;rdquo; or &amp;ldquo;non-SQL&amp;rdquo;) databases came along later to break the relational table straitjacket, with the ability to store and access all data types, structured and unstructured, together. They&amp;rsquo;re extremely flexible and easy for developers to work with and modify. &lt;a href="https://www.datastax.com/nosql" target="_blank" rel="noopener noreferrer"&gt;Learn more about SQL and NoSQL databases and their basic differences&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 13)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-13/</link><pubDate>Tue, 08 Feb 2022 08:15:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-13/</guid><description>&lt;p&gt;&lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-12/"&gt;Our previous article&lt;/a&gt;
 discussed different ways to create a Java thread pool and put and execute result-bearing tasks to the Pool. This article will go a bit in-depth about how many worker threads we could put in a pool to get the best result.&lt;/p&gt;
&lt;p&gt;Using the Executors factory class, we can create our thread pool; however, all the factory methods internally create an instance of ThreadPoolExcutors. This class is the representation of ThreadPool that we use. We can directly create a pool invoking its constructor. The constructor takes 7 arguments:&lt;/p&gt;</description></item><item><title>Installing Java with SDKMAN on Raspberry Pi</title><link>https://foojayio.github.io/website/today/installing-java-with-sdkman-on-raspberry-pi/</link><pubDate>Mon, 07 Feb 2022 12:23:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/installing-java-with-sdkman-on-raspberry-pi/</guid><description>&lt;p&gt;If you create a new SD card for a Raspberry Pi with the operating system, you can choose the &amp;ldquo;Raspberry Pi OS Full (32-bit)&amp;rdquo; edition, which includes Java 11. But a lot of the other available OS-versions don&amp;rsquo;t have Java included.&lt;/p&gt;
&lt;p&gt;There are many ways to install Java but, personally, I find &lt;a href="https://sdkman.io/" title="SDKMAN" target="_blank" rel="noopener noreferrer"&gt;SDKMAN&lt;/a&gt;
 the easiest one to use.&lt;/p&gt;
&lt;p&gt;It allows you to easily install a JDK, but also to switch between different versions.&lt;/p&gt;</description></item><item><title>Deploying to Multiple Kubernetes Clusters with the K8ssandra Operator</title><link>https://foojayio.github.io/website/today/deploying-to-multiple-kubernetes-clusters-with-the-k8ssandra-operator/</link><pubDate>Fri, 04 Feb 2022 22:10:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/deploying-to-multiple-kubernetes-clusters-with-the-k8ssandra-operator/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/deploying-to-multiple-kubernetes-clusters-with-the-k8ssandra-operator/0_cYkNr7XdB-MsJiu5-1024x674.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;We built the new K8ssandra Operator to simplify deploying multiple Apache Cassandra data centers in different regions and across multiple Kubernetes (K8s) clusters. We&amp;rsquo;re not at the finish line just yet, but we&amp;rsquo;ve hit the first major milestone. Now, it&amp;rsquo;s easier than ever to run Apache Cassandra® across multiple K8s clusters in multiple regions with the K8ssandraCluster!&lt;/p&gt;
&lt;p&gt;The K8ssandraCluster is a new custom resource for K8ssandra that covers all the bases necessary for installing a production-ready, multi-cluster K8ssandra deployment. Head over to the &lt;a href="https://medium.com/building-the-open-data-stack/deploying-to-multiple-kubernetes-clusters-with-the-k8ssandra-operator-f7562bee1841" target="_blank" rel="noopener noreferrer"&gt;DataStax Tech blog&lt;/a&gt;
 to learn more about how to specify your remote clusters with the K8ssandraCluster, its deployment architecture, and what&amp;rsquo;s coming next in our continued development of the K8ssandra operator.&lt;/p&gt;</description></item><item><title>GoF Design Patterns Using Java - Part 02</title><link>https://foojayio.github.io/website/today/gof-design-patterns-using-java-part-02/</link><pubDate>Fri, 04 Feb 2022 16:46:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/gof-design-patterns-using-java-part-02/</guid><description>&lt;p&gt;&lt;a href="https://youtu.be/vq9zkZBjWkw/" target="_blank" rel="noopener noreferrer"&gt;Link to YouTube Video - Introduction to Design Patterns&lt;/a&gt;
&lt;br&gt;
&lt;a href="https://foojayio.github.io/website/today/gang-of-four-design-patterns-using-core-java-part-01/" title="Link to Article : GoF Design Patterns Using Java - Part 01"&gt;Link to Article : GoF Design Patterns Using Java - Part 01&lt;/a&gt;
&lt;br&gt;
&lt;a href="https://github.com/sumithpuri/skp-code-marathon-pattaya" title="Link to GitHub Code Samples in Core Java for this Article" target="_blank" rel="noopener noreferrer"&gt;Link to GitHub Code Samples in Core Java for this Article&lt;/a&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="h2-0-adapter-pattern-sample-code"&gt;&lt;strong&gt;Adapter Pattern [&lt;a href="https://github.com/sumithpuri/skp-code-marathon-pattaya/tree/master/src/main/java/me/sumithpuri/github/pattaya/adapter" title="Sample Code" target="_blank" rel="noopener noreferrer"&gt;Sample Code&lt;/a&gt;
]&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;What can one do if he needs to use an Asian Hairdryer in a European Country, each with different socket types? I would seek an Adapter! As in real life, when we want to plug and play with similar but incompatible interfaces we use the Adapter. The Adapter adapts the Adaptee to the desired interface, by composing the Adaptee object and inheriting the desired interface or by multiple inheritance.&lt;/p&gt;</description></item><item><title>Video: SDKMAN Explained</title><link>https://foojayio.github.io/website/today/video-sdkman-explained/</link><pubDate>Fri, 04 Feb 2022 08:30:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/video-sdkman-explained/</guid><description>&lt;p&gt;One of the highlights of the &lt;a href="https://archive.fosdem.org/2021/schedule/track/friends_of_openjdk/" target="_blank" rel="noopener noreferrer"&gt;Friends of OpenJDK room at FOSDEM 2021&lt;/a&gt;
 was Marco Vermeulen, the creator of SDKMAN, talking about SDKMAN.&lt;/p&gt;
&lt;p&gt;Check it out here, in the Foojay YouTube channel:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/cvdXCs7mbHY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; More content from the &lt;a href="https://www.youtube.com/playlist?list=PL9sWkBuMiXne6b9ju2djnadlH0-XXQMw6" target="_blank" rel="noopener noreferrer"&gt;Foojay room at FOSDEM 2021 is here&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Even more, including cool techy prizes, in this year&amp;rsquo;s edition of the event, &lt;a href="https://foojayio.github.io/website/today/friends-of-openjdk-at-fosdem-2022/"&gt;as described here&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Backing up K8ssandra with MinIO</title><link>https://foojayio.github.io/website/today/backing-up-k8ssandra-with-minio-2/</link><pubDate>Thu, 03 Feb 2022 22:50:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/backing-up-k8ssandra-with-minio-2/</guid><description>&lt;p&gt;K8ssandra includes Medusa for Apache Cassandra® to handle backup and restore for your Cassandra nodes. Recently Medusa was upgraded to introduce support for all S3 compatible backends, including &lt;a href="https://min.io/" target="_blank" rel="noopener noreferrer"&gt;MinIO&lt;/a&gt;
, the popular k8s-native object storage suite. Let&amp;rsquo;s see how to set up K8ssandra and MinIO to backup Cassandra in just a few steps.&lt;/p&gt;
&lt;h2 id="deploy-minio"&gt;Deploy MinIO&lt;/h2&gt;
&lt;p&gt;Similar to K8ssandra, MinIO can be simply deployed through Helm.&lt;/p&gt;
&lt;p&gt;First, add the MinIO repository to your local list:&lt;/p&gt;</description></item><item><title>Lights, Camera, Action: GitHub Actions with Java (Part 3)</title><link>https://foojayio.github.io/website/today/lights-camera-action-github-actions-with-java-part-3/</link><pubDate>Thu, 03 Feb 2022 15:24:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/lights-camera-action-github-actions-with-java-part-3/</guid><description>&lt;br /&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/lights-camera-action-github-actions-with-java-part-3/Spidey_GitHub_Action_disco_latest.jpg" alt="Spiderman chooses GitHub Action&amp;rsquo;s Disco API" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The Java GitHub Action that Rules them all - Disco API{#caption-attachment-51347}&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;When we ended Part 2 of this blog series Lights, Camera, Action: GitHub Actions with Java &lt;a href="https://foojayio.github.io/website/today/github-actions-with-java-part-2" title="Part 2"&gt;Part 2&lt;/a&gt;
, I talked about the near future of GitHub Actions. Well, today the future is now, so let&amp;rsquo;s get into this!&lt;/p&gt;
&lt;p&gt;Welcome back to the series of articles on GitHub Actions with Java Part 3. If you didn&amp;rsquo;t catch Part 1 &amp;amp; 2 head over here: &lt;a href="https://foojayio.github.io/website/today/github-actions-with-java-part-1" title="Part 1"&gt;Part 1&lt;/a&gt;
 &amp;amp; &lt;a href="https://foojayio.github.io/website/today/github-actions-with-java-part-2" title="Part 2"&gt;Part 2&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Friends of OpenJDK at FOSDEM with Prizes</title><link>https://foojayio.github.io/website/today/friends-of-openjdk-schedule-at-fosdem-2022/</link><pubDate>Thu, 03 Feb 2022 10:42:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/friends-of-openjdk-schedule-at-fosdem-2022/</guid><description>&lt;p&gt;A great line up of known and less known OpenJDK users will be presenting new and unique content in the Friends of OpenJDK room at FOSDEM this weekend.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://fosdem.org/2022/schedule/track/friends_of_openjdk/" target="_blank" rel="noopener noreferrer"&gt;Check out the great program&lt;/a&gt;
, there&amp;rsquo;s likely something for everyone, starting with new features in Java, including the hot topic of Java security, expanding out from Java to Kotlin and beyond, as well as several sessions around JavaFX and Java on the Web and beyond.&lt;/p&gt;</description></item><item><title>Create a CRUD UI in Pure Java</title><link>https://foojayio.github.io/website/today/create-a-crud-ui-in-pure-java/</link><pubDate>Wed, 02 Feb 2022 17:10:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/create-a-crud-ui-in-pure-java/</guid><description>&lt;p&gt;In this guide, we create a web UI that performs full CRUD (create, read, update, and delete) operations on a Spring Data JPA backend. This UI is developed entirely in pure Java using &lt;a href="https://vaadin.com/docs/latest/flow/guide/quick-start" title="Vaadin Flow" target="_blank" rel="noopener noreferrer"&gt;Vaadin Flow&lt;/a&gt;
 (no HTML or JavaScript involved). You can explore the full source code on &lt;a href="https://github.com/tarekoraby/crud-ui-tutorial" title="GitHub" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
.&lt;/p&gt;
&lt;h3 id="h3-0-what-you-need"&gt;What You Need&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;About 15 minutes&lt;/li&gt;
&lt;li&gt;JDK 17 or later&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-1-step-1-import-a-starter-project"&gt;Step 1: Import a Starter Project&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://start.vaadin.com/dl?preset=no-views" title="Click here to download an empty project starter" target="_blank" rel="noopener noreferrer"&gt;Click here to download an empty project starter&lt;/a&gt;
. Unpack the downloaded zip into a folder on your computer, and import the project in the IDE of your choice.&lt;/p&gt;</description></item><item><title>Four Reasons Why Apache Pulsar is Essential to the Modern Data Stack</title><link>https://foojayio.github.io/website/today/four-reasons-why-apache-pulsar-is-essential-to-the-modern-data-stack/</link><pubDate>Tue, 01 Feb 2022 22:14:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/four-reasons-why-apache-pulsar-is-essential-to-the-modern-data-stack/</guid><description>&lt;p&gt;Messaging has been on DataStax&amp;rsquo;s radar for several years. A significant motivator for this is the increasing popularity of microservices-based architectures. Briefly, microservices architectures use a message bus to decouple communication between services and to simplify replay, error handling, and load spikes.
&lt;img src="https://foojayio.github.io/website/today/four-reasons-why-apache-pulsar-is-essential-to-the-modern-data-stack/0_GwQl23TRbFCO-uVu-1024x379.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;With Apache Cassandra™ and DataStax Astra Cassandra-as-a-service, developers and architects have a database ecosystem that is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Based on open source&lt;/li&gt;
&lt;li&gt;Well-suited for hybrid- and multi-cloud deployments&lt;/li&gt;
&lt;li&gt;Available in a cloud-native, consumption-priced service&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There is no current messaging solution that satisfies these requirements, so we&amp;rsquo;re building one. We started by evaluating the most popular option, Apache Kafka. We found that it came up short in four areas:&lt;/p&gt;</description></item><item><title>Unboxing K8ssandra: The Data Layer For Your Kubernetes-Powered Applications</title><link>https://foojayio.github.io/website/today/unboxing-k8ssandra-the-data-layer-for-your-kubernetes-powered-applications/</link><pubDate>Tue, 01 Feb 2022 17:51:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/unboxing-k8ssandra-the-data-layer-for-your-kubernetes-powered-applications/</guid><description>&lt;h4 id="a-complimentary-live-webinar-sponsored-by-datastax"&gt;A Complimentary Live Webinar, Sponsored by DataStax&lt;/h4&gt;
&lt;p&gt;Kubernetes made it easy to deploy and scale out your cloud-native applications. With &lt;a href="https://k8ssandra.io/" target="_blank" rel="noopener noreferrer"&gt;K8ssandra&lt;/a&gt;
, you can now scale application data with the same simplicity and high availability. Join us as we unbox K8ssandra a cloud native data layer for Kubernetes and explore how you can deploy it alongside your applications.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.k8ssandra.io/install/" target="_blank" rel="noopener noreferrer"&gt;Install k8ssandra&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Authenticate with &lt;a href="https://stargate.io/" target="_blank" rel="noopener noreferrer"&gt;Stargate&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Query your data via a convenient API (REST, document, or graphql)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Not familiar with Cassandra? &lt;a href="https://astra.dev/3f8QkAl" target="_blank" rel="noopener noreferrer"&gt;Astra DB&lt;/a&gt;
 is a great (free) place to learn without any of the infrastructure setup, or management headaches.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 12)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-12/</link><pubDate>Tue, 01 Feb 2022 16:02:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-12/</guid><description>&lt;p&gt;In our &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-11/"&gt;previous article&lt;/a&gt;
, we introduced ThreadPool through the Executor Framework. This article will discuss the different ways we can create ThreadPool.&lt;/p&gt;
&lt;p&gt;The Executors is a factory class, and it has a few static methods ( factory method). Let&amp;rsquo;s look at them one by one-&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Executors.newFixedThreadPool(int nThreads):&lt;/strong&gt; - this method takes an argument, and with that, we can specify the number of threads we want to have. The threads it creates are called worker Threads. It doesn&amp;rsquo;t matter how many tasks we put into this ThreadPool; the number of thread will remain the same the whole lifetime of this ThreadPool. If a thread dies for some reason, it will create a new one to keep the number the same.&lt;/p&gt;</description></item><item><title>The Flatten Maven plugin - fooay.io</title><link>https://foojayio.github.io/website/today/flatten-maven-plugin/</link><pubDate>Mon, 31 Jan 2022 14:06:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/flatten-maven-plugin/</guid><description>&lt;p&gt;One of the Apache Maven committers recently wrote about &lt;a href="https://www.javaadvent.com/2021/12/from-maven-3-to-maven-5.html" target="_blank" rel="noopener noreferrer"&gt;their plans for Maven 5&lt;/a&gt;
. I consider the following one of the most significant changes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In summary, we need to make a distinction between two POM types: the build POM, stored in the project source control, that uses v5 schema for build time, requiring a new Maven version able to use the new features associated with the new schema. The other one is the consumer POM, that is published to Maven Central in the good old v4 schema, so every past or future build tool can continue to consume pre-built artifacts as usual for their dependencies.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 1: Building an Empire of Microservices</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-1-building-an-empire-of-microservices/</link><pubDate>Fri, 28 Jan 2022 14:21:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-1-building-an-empire-of-microservices/</guid><description>&lt;p&gt;Microservices have been used and deployed in businesses and projects for awhile, and there is plenty of content available for architecting them into a system. For my next project, I want to dive into the world of microservices and begin building my own little virtual empire from different kinds of services to find out the complexities, best practices, power, and trouble that comes with them. I will share all my learnings along the way, as well.&lt;/p&gt;</description></item><item><title>Treat Security as a Risk</title><link>https://foojayio.github.io/website/today/treat-security-as-risk/</link><pubDate>Thu, 27 Jan 2022 11:26:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/treat-security-as-risk/</guid><description>&lt;p&gt;Security is the poster child of a Non-Functional Requirement: most people don&amp;rsquo;t care until the proverbial matter hits the rotary propeller.&lt;/p&gt;
&lt;p&gt;Consequences can range from losing reputation to legal liability to putting the business out. In my &lt;a href="https://blog.frankel.ch/running-untrusted-code/" target="_blank" rel="noopener noreferrer"&gt;post on running unsecured code&lt;/a&gt;
, I concluded that you should treat security as a risk - and left it at that. I think it warrants a dedicated post.&lt;/p&gt;
&lt;p&gt;Risk management is pretty &lt;a href="https://en.wikipedia.org/wiki/Risk_management" target="_blank" rel="noopener noreferrer"&gt;much documented&lt;/a&gt;
. You can find it in many engineering disciplines, if not every one of them. A risk management process consists of the following steps:&lt;/p&gt;</description></item><item><title>Java on Visual Studio Code Update – January 2022</title><link>https://foojayio.github.io/website/today/java-on-visual-studio-code-update-january-2022/</link><pubDate>Wed, 26 Jan 2022 08:22:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-visual-studio-code-update-january-2022/</guid><description>&lt;p&gt;Hi everyone, welcome to the January edition of Visual Studio Code Java update!&lt;/p&gt;
&lt;p&gt;Since this is our first blog post of the new year, we are going to look back on highlights of 2021 and take a look at our roadmap for 2022!&lt;/p&gt;
&lt;p&gt;We also have some exciting feature updates so let us get started.&lt;/p&gt;
&lt;h3 id="h3-0-highlights-of-2021"&gt;Highlights of 2021&lt;/h3&gt;
&lt;p&gt;2021 was a productive year for Java on Visual Studio Code. We have made substantial improvements on all extensions in the &lt;a href="https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack" target="_blank" rel="noopener noreferrer"&gt;Extension Pack for Java&lt;/a&gt;
. Among those achievements, we&amp;rsquo;d like to highlight a few important ones:&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 11)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-11/</link><pubDate>Wed, 26 Jan 2022 07:58:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-11/</guid><description>&lt;p&gt;In the &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-2/" title="second article of this series"&gt;second article of this series&lt;/a&gt;
, we saw that we can create a functional web server application using Java threads. With that, we could receive multiple requests from many clients and serve them properly.&lt;/p&gt;
&lt;p&gt;However, there is a limitation. We cannot just receive an unbounded number of requests simultaneously. The constraint is not on the sockets. The modern OS can handle millions of open sockets at a time. That means, in theory, we should be able to serve that many requests at a time.&lt;/p&gt;</description></item><item><title>The State of Java in 2022</title><link>https://foojayio.github.io/website/today/the-state-of-java-in-2022/</link><pubDate>Tue, 25 Jan 2022 10:24:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-state-of-java-in-2022/</guid><description/></item><item><title>Introduction to Maven Toolchains</title><link>https://foojayio.github.io/website/today/introduction-to-maven-toolchains/</link><pubDate>Tue, 25 Jan 2022 08:20:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-to-maven-toolchains/</guid><description>&lt;p&gt;Java evolves at a much faster pace than it used to do.&lt;/p&gt;
&lt;p&gt;But not all of the projects we work on keep up with that pace.&lt;/p&gt;
&lt;p&gt;I have projects on Java 8, 11, and 17 and sometimes I want to play with early access builds of newer versions as well.&lt;/p&gt;
&lt;p&gt;How to make sure I can build them without having to constantly switch Java runtimes?&lt;/p&gt;
&lt;h2 id="h2-0-switching-java-versions-the-whole-day-long"&gt;Switching Java versions the whole day long&lt;/h2&gt;
&lt;p&gt;Switching Java versions on the command line &lt;a href="https://maarten.mulders.it/2017/02/quickly-switch-java-versions-on-macos/" target="_blank" rel="noopener noreferrer"&gt;doesn&amp;rsquo;t have to be hard&lt;/a&gt;
. In my case, it&amp;rsquo;s as easy as typing &lt;code&gt;j8&lt;/code&gt;, &lt;code&gt;j11&lt;/code&gt;, &lt;code&gt;j17&lt;/code&gt;. But doing that every time you&amp;rsquo;re seeing that &amp;ldquo;release version 17 not supported&amp;rdquo; is a bit tedious. More importantly, it doesn&amp;rsquo;t solve the root cause of the issue.&lt;/p&gt;</description></item><item><title>Statically Spilling Your (Spring) Beans</title><link>https://foojayio.github.io/website/today/statically-spilling-your-spring-beans/</link><pubDate>Mon, 24 Jan 2022 11:25:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/statically-spilling-your-spring-beans/</guid><description>&lt;p&gt;UPDATE - To make it abundantly clear:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You should always try to refactor your code so you do not need this approach (something I&amp;rsquo;ll dive into in a follow up blogpost I&amp;rsquo;m working on).&lt;/strong&gt; There may be some edge cases where there truly is no other way but those situations are rare. Always try to refactor!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using this method can lead to &lt;em&gt;multiple unexpected and hard to debug issues&lt;/em&gt; as it does not follow the regular Spring Framework concepts.&lt;/strong&gt; As such, this approach is considered &lt;strong&gt;A VERY BAD IDEA&lt;/strong&gt; .&lt;/p&gt;</description></item><item><title>Introducing the GKE Autopilot Cluster</title><link>https://foojayio.github.io/website/today/introducing-the-gke-autopilot-cluster/</link><pubDate>Thu, 20 Jan 2022 08:28:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-the-gke-autopilot-cluster/</guid><description>&lt;p&gt;&lt;strong&gt;Learn about Google Kubernetes Engine Autopilot features. Also, let&amp;rsquo;s find out if it is worth managing your Kubernetes worker nodes yourself!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The following is an excerpt from my book &lt;strong&gt;Effortless Cloud-Native App Development Using Skaffold&lt;/strong&gt; from Packt Publishing.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1636304168731/qHmKbqm_y.jpeg" alt="B17385_Mockup Cover_High Res.jpg" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The book is available for order from &lt;a href="https://www.amazon.com/Effortless-Cloud-Native-Development-using-Skaffold/dp/1801077118" target="_blank" rel="noopener noreferrer"&gt;Amazon.com&lt;/a&gt;
 and directly from &lt;a href="https://www.packtpub.com/product/effortless-cloud-native-apps-development-using-skaffold/9781801077118" target="_blank" rel="noopener noreferrer"&gt;Packt&lt;/a&gt;
. The excerpt below comes from chapter 8: &amp;ldquo;Deploying a Spring Boot Application to the Google Kubernetes Engine Using Skaffold&amp;rdquo;.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Taking Your Database Beyond a Single Kubernetes Cluster</title><link>https://foojayio.github.io/website/today/taking-your-database-beyond-a-single-kubernetes-cluster/</link><pubDate>Wed, 19 Jan 2022 10:31:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/taking-your-database-beyond-a-single-kubernetes-cluster/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/taking-your-database-beyond-a-single-kubernetes-cluster/0_ntxtNVffHhl99weW-1-1024x535.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/bradfordcp/" target="_blank" rel="noopener noreferrer"&gt;Christopher Bradford&lt;/a&gt;
 and &lt;a href="https://www.linkedin.com/in/ty-morton-2b55b82/" target="_blank" rel="noopener noreferrer"&gt;Ty Morton&lt;/a&gt;
{#31db}&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;Global applications need a data layer that is as distributed as the users they serve. &lt;a href="https://cassandra.apache.org/_/index.html" target="_blank" rel="noopener noreferrer"&gt;Apache Cassandra&lt;/a&gt;
 has risen to this challenge, handling data needs for the likes of Apple, Netflix and Sony. Traditionally, managing data layers for a distributed application was handled with dedicated teams to manage the deployment and operations of thousands of nodes &amp;mdash; both on-premises and in the cloud.&lt;/p&gt;</description></item><item><title>Polyglot Cloud Native Debugging: Beyond Logs/APM</title><link>https://foojayio.github.io/website/today/polyglot-cloud-native-debugging-beyond-apm-and-logging/</link><pubDate>Tue, 18 Jan 2022 07:55:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/polyglot-cloud-native-debugging-beyond-apm-and-logging/</guid><description>&lt;p&gt;&lt;strong&gt;I&amp;rsquo;ve done quite a few conference talks since I became a developer advocate for &lt;a href="https://lightrun.com/" target="_blank" rel="noopener noreferrer"&gt;Lightrun&lt;/a&gt;
. One of my most popular talks has a title similar to the title of this article. In this article I&amp;rsquo;ll try to cover the gist of the talk.&lt;/strong&gt;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/cj--cJrYqhQ?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;h2 id="_cloud_native_applications"&gt;Cloud-Native Applications&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s practically an alphabet soup of terms covering public cloud, hybrid cloud, etc. There&amp;rsquo;s also a lot of overlap between the various terms. The nice thing about this topic is that it applies, regardless. You will run into problems with microservices, architecture and monolithic applications or serverless.&lt;/p&gt;</description></item><item><title>You're Running Untrusted Code!</title><link>https://foojayio.github.io/website/today/running-untrusted-code/</link><pubDate>Mon, 17 Jan 2022 08:28:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/running-untrusted-code/</guid><description>&lt;p&gt;Last December, Log4Shell shortened the nights of many people in the JVM world. Worse, using the earthquake analogy caused many aftershocks after the initial quake.&lt;/p&gt;
&lt;p&gt;I immediately made the connection between Log4Shell and the Security Manager. At first, I didn&amp;rsquo;t want to write about it, but I&amp;rsquo;ve received requests to do so, and I couldn&amp;rsquo;t walk away.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/nicolas_frankel/status/1471140080366632968" target="_blank" rel="noopener noreferrer"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="alignnone size-medium wp-image-51338" src="johannes-rab-700x119.png" alt="" width="700" height="119"&gt;
&lt;p&gt;](&lt;a href="https://twitter.com/nicolas_frankel/status/1471140080366632968" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/nicolas_frankel/status/1471140080366632968&lt;/a&gt;
)&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;As a reminder, the Oracle team deprecated the Security Manager in Java 17. One of the arguments it based its decision on is that it was initially designed to protect against applets. Applets were downloaded from the Internet, so they had to be considered untrusted code. Hence, we had to run them in a sandbox.&lt;/p&gt;</description></item><item><title>Kubernetes and Apache Cassandra: What Works (and What Doesn’t)</title><link>https://foojayio.github.io/website/today/kubernetes-and-apache-cassandra-what-works-and-what-doesnt/</link><pubDate>Fri, 14 Jan 2022 16:30:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/kubernetes-and-apache-cassandra-what-works-and-what-doesnt/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/kubernetes-and-apache-cassandra-what-works-and-what-doesnt/K15a-AdobeStock_459893049-1536x922-1-1024x615.jpeg" alt="" loading="lazy"&gt;
 &amp;ldquo;I need it now and I need it reliable&amp;rdquo;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ndash; ANYONE WHO HASN&amp;rsquo;T DEPLOYED APPLICATION INFRASTRUCTURE&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you&amp;rsquo;re on the receiving end of this statement, we understand you here in the &lt;a href="https://dtsx.io/3uZHFqS" target="_blank" rel="noopener noreferrer"&gt;K8ssandra community&lt;/a&gt;
. Although we do have reason for hope. Recent &lt;a href="https://dok.community/dokc-2021-report/" target="_blank" rel="noopener noreferrer"&gt;surveys&lt;/a&gt;
 have shown that &lt;a href="https://kubernetes.io/" target="_blank" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;
 (K8s) is growing in popularity, not only because it&amp;rsquo;s powerful technology, but because it actually delivers on reducing the toil of deployment.&lt;/p&gt;</description></item><item><title>Foojay Status Report: July – December 2021</title><link>https://foojayio.github.io/website/today/foojay-status-report-july-december-2021/</link><pubDate>Thu, 13 Jan 2022 14:21:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-status-report-july-december-2021/</guid><description>&lt;p&gt;Another 6 months are behind us&amp;hellip; and let&amp;rsquo;s take a look at some stats on Foojay, a central resource and community platform for friends of OpenJDK. (&lt;a href="https://foojayio.github.io/website/today/foojay-status-report-january-june-2021/"&gt;The previous report is here.&lt;/a&gt;
)&lt;/p&gt;
&lt;p&gt;In the back of my mind, in the first full year of Foojay, &lt;strong&gt;it would have been great to have had 50K unique visitors and 100K sessions&lt;/strong&gt; , in terms of Google Analytics. Below is the actual result over the whole of last year, i.e., significantly more unique visitors and sessions than anticipated: &lt;strong&gt;84K unique visitors and 131K sessions&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Template to Get Started with Pi4J and JavaFX on Raspberry Pi</title><link>https://foojayio.github.io/website/today/template-to-get-started-with-pi4j-and-javafx-on-raspberry-pi/</link><pubDate>Thu, 13 Jan 2022 12:07:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/template-to-get-started-with-pi4j-and-javafx-on-raspberry-pi/</guid><description>&lt;p&gt;The Pi4J project wants to be the starting point for everyone who wants to use Java on the Raspberry Pi, being it a headless, JavaFX-user interface and/or GPIO-controller project.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Pi4J is intended to provide &lt;strong&gt;a friendly object-oriented I/O API and implementation libraries for Java Programmers&lt;/strong&gt; to access the &lt;strong&gt;full I/O capabilities of the Raspberry Pi platform&lt;/strong&gt; . This project abstracts the low-level native integration and interrupt monitoring to enable Java programmers to &lt;strong&gt;focus on implementing their application business logic&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>How to Put a Database in Kubernetes?</title><link>https://foojayio.github.io/website/today/how-to-put-a-database-in-kubernetes/</link><pubDate>Thu, 13 Jan 2022 09:18:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-put-a-database-in-kubernetes/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/how-to-put-a-database-in-kubernetes/0_aX8FjIfXNHJhbSWU.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learn the key steps of deploying databases and stateful workloads in Kubernetes and meet the cloud-native technologies, like K8ssandra, that can streamline Apache Cassandra for K8s.&lt;/strong&gt;{#95cc}&lt;/p&gt;
&lt;p&gt;The idea of running a stateful workload in Kubernetes (K8s) can be intimidating, especially if you haven&amp;rsquo;t done it before. How do you deploy a database? Where is the actual storage? How is the storage mapped to the database or the application using it?{#6cde}&lt;/p&gt;</description></item><item><title>Monitoring Spring Boot Applications (Part 1)</title><link>https://foojayio.github.io/website/today/monitoring-spring-boot-applications-part-1/</link><pubDate>Wed, 12 Jan 2022 16:34:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/monitoring-spring-boot-applications-part-1/</guid><description>&lt;blockquote&gt;
&lt;p&gt;In part 1 of this series, we will learn about JDK Flight Recorder and how we can use it to monitor a Spring Boot application.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Application monitoring is one thing that we as developers cannot overlook. It doesn&amp;rsquo;t matter if you run a monolith or microservices application because application monitoring is a must for production workloads to know what&amp;rsquo;s happening with your application. If you are using Spring Boot, there are different ways to monitor an application. The most popular way to monitor a Spring Boot application is to enable the &lt;a href="https://github.com/spring-projects/spring-boot/tree/v2.6.0/spring-boot-project/spring-boot-actuator" target="_blank" rel="noopener noreferrer"&gt;spring-boot-actuator&lt;/a&gt;
 module to achieve the desired result.&lt;/p&gt;</description></item><item><title>Hype-Driven Development: Don't Be a Victim!</title><link>https://foojayio.github.io/website/today/hype-driven-development-dont-be-a-victim/</link><pubDate>Wed, 12 Jan 2022 09:38:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/hype-driven-development-dont-be-a-victim/</guid><description>&lt;p&gt;Don&amp;rsquo;t be a victim of development trends that are &amp;ldquo;hot&amp;rdquo; right now, but might not actually be best for your specific business!&lt;/p&gt;
&lt;p&gt;In this video, Rudy De Busscher warns against software investments based on &amp;ldquo;buzz&amp;rdquo; around a trend or product, rather than whether it actually works for your use case. He discusses what technologies, commonly used with Java and Jakarta EE, can often be a case of hype over helpfulness.&lt;/p&gt;</description></item><item><title>Debugging RAM: Java Garbage Collection - Java Heap Deep Dive (Part 1)</title><link>https://foojayio.github.io/website/today/debugging-ram-java-garbage-collection-java-heap-deep-dive-part-1/</link><pubDate>Tue, 11 Jan 2022 15:36:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-ram-java-garbage-collection-java-heap-deep-dive-part-1/</guid><description>&lt;p&gt;There are many excellent articles on Java Garbage Collection, Java Memory usage and generally Java heap. Unfortunately, they are all over the place. They mix architecture, concepts and problem solving as separate pieces. A lot of the material is out of date or doesn&amp;rsquo;t include pragmatic information for solving problems with the garbage collector. E.g. e.g. pause times, heap space usage etc.&lt;/p&gt;
&lt;p&gt;In this post I won&amp;rsquo;t go into memory leaks. They&amp;rsquo;re important but this is a different subject I would like to discuss in a post on its own.&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>Log4Shell Shows The Need for "Trustworthy Java"</title><link>https://foojayio.github.io/website/today/log4shell-shows-the-need-for-trustworthy-java/</link><pubDate>Mon, 10 Jan 2022 10:03:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/log4shell-shows-the-need-for-trustworthy-java/</guid><description>&lt;h2 id="h2-0-what-just-happened"&gt;What Just Happened?&lt;/h2&gt;
&lt;p&gt;I believe Log4Shell is Java&amp;rsquo;s biggest crisis. I reported on it in the &amp;ldquo;&lt;a href="https://betterprojectsfaster.com/guide/java-full-stack-report-2022-01-new-noteworthy" target="_blank" rel="noopener noreferrer"&gt;New &amp;amp; Noteworthy&lt;/a&gt;
&amp;rdquo; section of &lt;a href="https://bpfnl.substack.com" target="_blank" rel="noopener noreferrer"&gt;my newsletter&lt;/a&gt;
. A quick recap: The US cybersecurity and infrastructure agency director &lt;a href="https://www.zdnet.com/article/log4j-flaw-this-new-threat-is-going-to-affect-cybersecurity-for-a-long-time/" target="_blank" rel="noopener noreferrer"&gt;called Log4Shell&lt;/a&gt;
 &amp;ldquo;one of the most serious that I&amp;rsquo;ve seen in my entire career, if not the most serious&amp;rdquo;. Exploiting it may be as easy as sending an HTTP request to a Java application, with a JNDI link in the HTTP header. The last wide-spread software vulnerability of this magnitude &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2014-0160" target="_blank" rel="noopener noreferrer"&gt;scored 7.5&lt;/a&gt;
 - Log4Shell &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2021-44228#" target="_blank" rel="noopener noreferrer"&gt;scored a 10&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Hashcode and Equals: Debugging and Performance</title><link>https://foojayio.github.io/website/today/hashcode-and-equals-debugging-performance/</link><pubDate>Fri, 07 Jan 2022 13:31:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/hashcode-and-equals-debugging-performance/</guid><description>&lt;p&gt;A few weeks ago I ran into &lt;a href="https://www.reddit.com/r/java/comments/qi8yu8/hint_to_myself_and_other_poor_souls_dont_use/" target="_blank" rel="noopener noreferrer"&gt;this story on reddit&lt;/a&gt;
 that discusses the problem with using the URL class as a key in a Map. This boils down to a remarkably slow implementation of the hashcode() method in java.net.URL which makes this class unusable in such situations.&lt;/p&gt;
&lt;p&gt;Unfortunately, this is a part of the Java API specification and is no longer fixable without breaking backwards compatibility.&lt;/p&gt;
&lt;p&gt;What we can do is understand the problem with equals and hashcode. How can we avoid such problems in the future?&lt;/p&gt;</description></item><item><title>Requirements for Running K8ssandra for Development</title><link>https://foojayio.github.io/website/today/requirements-for-running-k8ssandra-for-development/</link><pubDate>Thu, 06 Jan 2022 12:15:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/requirements-for-running-k8ssandra-for-development/</guid><description>&lt;br /&gt;
&lt;p&gt;The K8ssandra &lt;a href="https://k8ssandra.io/get-started/" target="_blank" rel="noopener noreferrer"&gt;Quick start&lt;/a&gt;
 is a excellent guide for doing a full installation of K8ssandra on a dev laptop and trying out the various components of the K8ssandra stack. While this is a great way to get your first hands-on experience with K8ssandra, let&amp;rsquo;s state the obvious: running K8ssandra locally on a dev laptop is not aimed at performance. In this blog post, we will start Apache Cassandra® locally then explain how to run benchmarks to help evaluate what level of performance (especially throughput) you can expect from a dev laptop deployment.&lt;/p&gt;</description></item><item><title>Why K8ssandra?</title><link>https://foojayio.github.io/website/today/why-k8ssandra/</link><pubDate>Thu, 06 Jan 2022 12:10:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-k8ssandra/</guid><description>&lt;h2 id="the-problem-scalable-data-persistence-for-cloud-native-applications"&gt;The problem: scalable data persistence for cloud-native applications&lt;/h2&gt;
&lt;p&gt;The past decade and a half has brought tremendous change in how we in the software industry think about building and delivering internet applications. With the launch of Amazon Web Services (AWS) in 2006, companies of any size could access cloud computing infrastructure. The burst of creativity that followed gave birth to concepts like &lt;a href="http://pzf.fremantle.org/2010/05/cloud-native.html" target="_blank" rel="noopener noreferrer"&gt;cloud-native&lt;/a&gt;
 in 2010, and methodologies such as the &lt;a href="https://12factor.net/" target="_blank" rel="noopener noreferrer"&gt;twelve-factor app&lt;/a&gt;
 in 2011.&lt;/p&gt;</description></item><item><title>Sending sensor data from Raspberry Pi Pico to HiveMQ Cloud</title><link>https://foojayio.github.io/website/today/mqtt-on-raspberry-pi-part-3-sending-sensor-data-from-raspberry-pi-pico-to-hivemq-cloud/</link><pubDate>Wed, 05 Jan 2022 11:42:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/mqtt-on-raspberry-pi-part-3-sending-sensor-data-from-raspberry-pi-pico-to-hivemq-cloud/</guid><description>&lt;p&gt;In the previous two posts in this series, we used Java on the Raspberry Pi mini-computer to send sensor data to HiveMQ Cloud, and visualize it on a dashboard.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/mqtt-on-raspberry-pi-part-1-send-sensor-data-to-hivemq-cloud-with-java-and-pi4j/"&gt;&amp;ldquo;Part 1: MQTT on Raspberry Pi, Send Sensor Data to HiveMQ Cloud with Java and Pi4J&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/mqtt-on-raspberry-pi-part-2-using-mqtt-and-raspberry-pi-to-visualize-sensor-data-on-a-tilesfx-dashboard/"&gt;&amp;ldquo;Part 2: Using MQTT and Raspberry Pi to Visualize Sensor Data on a TilesFX Dashboard&amp;rdquo;&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now we are going to add some more data to our messaging system with another member of the Raspberry Pi family: the Pico, and add this new data to the JavaFX dashboard from part 2.&lt;/p&gt;</description></item><item><title>Simplify Migrating from Kafka to Pulsar with Kafka Connect Support</title><link>https://foojayio.github.io/website/today/simplify-migrating-from-kafka-to-pulsar-with-kafka-connect-support/</link><pubDate>Wed, 05 Jan 2022 11:30:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/simplify-migrating-from-kafka-to-pulsar-with-kafka-connect-support/</guid><description>&lt;p&gt;Large-scale implementations of any system, such as the event-streaming platform Apache Kafka, often involve customizations and tools and plugins developed in-house. When it&amp;rsquo;s time to transition from one system to another, the task can become complicated, drawn-out, and error-prone. Often the benefits of an alternative system (which can include &lt;a href="https://gigaom.com/report/the-cost-savings-of-replacing-kafka-with-pulsar/" target="_blank" rel="noopener noreferrer"&gt;significant cost savings&lt;/a&gt;
 and other efficiencies) are outweighed by the risks and costs of migration. As a result, an organization can end up locked into a suboptimal situation, footing a bigger bill than necessary and missing out on modern features that help move the business forward faster.&lt;/p&gt;</description></item><item><title>JReleaser 0.10.0 Released!</title><link>https://foojayio.github.io/website/today/jreleaser-0-10-0-released/</link><pubDate>Tue, 04 Jan 2022 13:30:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/jreleaser-0-10-0-released/</guid><description>&lt;p&gt;JReleaser is a tool that streamlines creating releases for [Java] projects.&lt;/p&gt;
&lt;p&gt;It can create a GitHub/GitLab/Gitea release, while also packaging binaries for Homebrew, Snapcraft, Docker, Chocolatey, Scoop, JBang and, more than that, announces releases to Twitter, SdkMan!, e-mail, Zulip, Discord, Gitter, Slack, Teams, and more.&lt;/p&gt;
&lt;p&gt;JReleaser &lt;a href="https://github.com/jreleaser/jreleaser/releases/tag/v0.10.0" title="v0.10.0" target="_blank" rel="noopener noreferrer"&gt;v0.10.0&lt;/a&gt;
 is the last push towards 1.0.0. We&amp;rsquo;ll concentrate on bug fixing and polishing from now on. Be mindful of the &lt;a href="https://github.com/jreleaser/jreleaser/issues?q=is%3Aissue&amp;#43;label%3A%22BREAKING&amp;#43;CHANGE%22&amp;#43;milestone%3Av0.10.0&amp;#43;is%3Aclosed" target="_blank" rel="noopener noreferrer"&gt;breaking changes&lt;/a&gt;
 introduced in this release.&lt;/p&gt;</description></item><item><title>Building Stateful Microservices in the Cloud Native World</title><link>https://foojayio.github.io/website/today/different-approaches-to-building-stateful-microservices-in-the-cloud-native-world/</link><pubDate>Tue, 04 Jan 2022 09:34:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/different-approaches-to-building-stateful-microservices-in-the-cloud-native-world/</guid><description>&lt;p&gt;&lt;img src="https://www.javaadvent.com/content/uploads/2021/11/pexels-photo-164170.jpeg" alt="Snow-capped mountains and landscape with clouds" loading="lazy"&gt;
Cloud Native computing is all about working with stateless data and serverless systems. But we all live in a stateful world, in which data flows through systems interconnected with one another through complex networks.&lt;/p&gt;
&lt;p&gt;So how can systems be able to manage and track the flow of data in a coherent fashion and in a stateless world?&lt;/p&gt;
&lt;h3 id="h3-0-navigating-the-maze-of-cloud-related-terminologies"&gt;Navigating the maze of cloud related terminologies&lt;/h3&gt;
&lt;p&gt;We will first iron out a few terminologies that some folks appear to be using almost interchangeably in the current cloud computing era:&lt;/p&gt;</description></item><item><title>FXGL Game Engine 17 Released</title><link>https://foojayio.github.io/website/today/fxgl-game-engine-17-released/</link><pubDate>Mon, 03 Jan 2022 10:43:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/fxgl-game-engine-17-released/</guid><description>&lt;p&gt;&lt;a href="https://github.com/AlmasB/FXGL/releases/tag/17" target="_blank" rel="noopener noreferrer"&gt;Version 17&lt;/a&gt;
 of the FXGL game engine brings a number of improvements in many areas. Key changes include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;FXGL source is now built with Java 17 and JavaFX 17.&lt;/li&gt;
&lt;li&gt;The changelog is now automatically generated from commits.&lt;/li&gt;
&lt;li&gt;Animated textures (sprite sheet animations) are now driven by the unified FXGL system, meaning you can use interpolators, play in reverse and many other supported features.&lt;/li&gt;
&lt;li&gt;3D skybox implementation.&lt;/li&gt;
&lt;li&gt;DialogueContext object for storing data that is local to the context in which the dialogue is being run.&lt;/li&gt;
&lt;li&gt;Improvements to avoid various crashes on the Raspberry Pi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-auto-generated-changelog"&gt;Auto-generated Changelog&lt;/h2&gt;
&lt;p&gt;The full changelog is given below.&lt;/p&gt;</description></item><item><title>The State of Pattern Matching in Java 17</title><link>https://foojayio.github.io/website/today/the-state-of-pattern-matching-in-java-17/</link><pubDate>Mon, 03 Jan 2022 10:35:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-state-of-pattern-matching-in-java-17/</guid><description>&lt;p&gt;So what exactly is pattern matching?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The act of checking a given sequence of tokens for the presence of the constituents of some pattern.&amp;rdquo; &amp;ndash; Wikipedia&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Or simply put, pattern matching is a language feature where you can test for a specific pattern on a character sequence or a data structure.&lt;/p&gt;
&lt;p&gt;Pattern matching can be classified into two types.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sequence patterns&lt;/strong&gt;: pattern matching on character sequence or strings. Also known as our beloved Regular Expressions 😉 &amp;mdash; I still wish I could write RegEx without cursing and looking up the syntax.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tree patterns&lt;/strong&gt;: testing for patterns on a data structure. This is what we are going to talk about today.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/M6xKDas.jpeg" alt="regex meme" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>New Survey Finds Data on Kubernetes Is No Longer a Pipe Dream</title><link>https://foojayio.github.io/website/today/new-survey-finds-data-on-kubernetes-is-no-longer-a-pipe-dream/</link><pubDate>Thu, 30 Dec 2021 15:52:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-survey-finds-data-on-kubernetes-is-no-longer-a-pipe-dream/</guid><description>&lt;p&gt;For people that work in infrastructure and application development, the pace of change is quick. Finish one project and it&amp;rsquo;s on to the next. Each iteration requires an evaluation asking if the right technology is being used and if it provides a new advantage. Kubernetes has been on the fast track of continuous evaluation. New projects and methodologies are continuously emerging and it can be hard to keep up. Then there is the question of running stateful services. The Data on Kubernetes community has &lt;a href="https://dok.community/dokc-2021-report/" target="_blank" rel="noopener noreferrer"&gt;released a report&lt;/a&gt;
 titled &amp;ldquo;Data on Kubernetes 2021&amp;rdquo; to give us a snapshot of where our industry sits with stateful workloads. Over 500 executives and tech leaders were asked some very direct and insightful questions about how they use Kubernetes. It turns out that there were a lot of surprising finds. Some that I would have never predicted. Let&amp;rsquo;s dig into some of the highlights that stood out to me.&lt;/p&gt;</description></item><item><title>The future of cloud-native databases begins with Apache Cassandra 4.0</title><link>https://foojayio.github.io/website/today/the-future-of-cloud-native-databases-begins-with-apache-cassandra-4-0/</link><pubDate>Wed, 29 Dec 2021 07:40:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-future-of-cloud-native-databases-begins-with-apache-cassandra-4-0/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Reliability at massive scale is one of the biggest challenges we face at Amazon.com, one of the largest e-commerce operations in the world; even the slightest outage has significant financial consequences and impacts customer trust.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This was the first line of the highly impactful &lt;a href="http://www.cs.cornell.edu/courses/cs5414/2017fa/papers/dynamo.pdf" target="_blank" rel="noopener noreferrer"&gt;paper&lt;/a&gt;
 titled &amp;ldquo;Dynamo: Amazon&amp;rsquo;s Highly Available Key-value Store.&amp;rdquo; Published in 2007, it was written at a time when the status quo of database systems was not working for the massive explosion of internet-based applications. A team of computer engineers and scientists at Amazon completely re-thought the idea of data storage in terms of what would be needed for the future, with a firm footing in the computer science of the past. They were trying to solve an immediate problem but they had unwittingly sparked a huge revolution with distributed databases and the eventual collision with cloud-native applications.&lt;/p&gt;</description></item><item><title>foojay - Santa Claus Issues YuleLog4J Advisory</title><link>https://foojayio.github.io/website/today/santa-claus-issues-yulelog4j-advisory/</link><pubDate>Fri, 24 Dec 2021 16:23:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/santa-claus-issues-yulelog4j-advisory/</guid><description>&lt;p&gt;Christmas revelers and elves are urged to patch their fireplaces, as a Remote Combustion Effect (RCE) vulnerability has been discovered in the traditional holiday YuleLog4J. YuleLog4J is one of the most popular holiday celebrations, appearing in &lt;a href="https://www.contrastsecurity.com/security-influencers/log4shell-by-the-numbers" target="_blank" rel="noopener noreferrer"&gt;approximately 64% of fireplaces&lt;/a&gt;
 and streamed to millions of homes over &lt;a href="https://www.netflix.com/title/70222873" target="_blank" rel="noopener noreferrer"&gt;Netflix&lt;/a&gt;
 and &lt;a href="https://www.amazon.com/Yule-Log-Christmas-Fireplace-Hours/dp/B01MZZWOWH" target="_blank" rel="noopener noreferrer"&gt;Amazon Prime&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The vulnerability occurs in the &lt;a href="https://docs.oracle.com/javase/jndi/tutorial/getStarted/overview/index.html#:~:text=The%20Java%20Naming%20and%20Directory,any%20specific%20directory%20service%20implementation." target="_blank" rel="noopener noreferrer"&gt;Jingle Naming and Directory Interface&lt;/a&gt;
 (JNDI), a utility that enables lookups of holiday cheer from remote sources. Unpatched versions of YuleLog4J can load potentially un-cheerful items such as coal, traditionally reserved as a stocking stuffer. The advisory was managed through &lt;a href="https://securitylab.github.com/advisories/GHSL-2021-1054_GHSL-2021-1055_log4j2/" target="_blank" rel="noopener noreferrer"&gt;coordinated disclosure&lt;/a&gt;
 between the North Pole and the GiftHub Security Research Team.&lt;/p&gt;</description></item><item><title>Java Modules in the Pi4J Project?</title><link>https://foojayio.github.io/website/today/java-modules-in-the-pi4j-project/</link><pubDate>Thu, 23 Dec 2021 15:28:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-modules-in-the-pi4j-project/</guid><description>&lt;p&gt;Java modules have been a big discussion point before in many places.&lt;/p&gt;
&lt;p&gt;And this is now also causing some headaches in the Pi4J project&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-about-pi4j-v2"&gt;About Pi4J V2&lt;/h2&gt;
&lt;p&gt;The Pi4J project (started in 2012) aims to unite Java programming with electronics. By using the Pi4J dependency in a project, electronic components connected to the GPIO-pins (General Purpose Input/Output) of the Raspberry Pi can be controlled as objects in the Java code. Pi4J uses native libraries to control the GPIOs so you - as a programmer - donʼt need to be fully aware of all the &amp;ldquo;magic&amp;rdquo; that relates to hardware communication.&lt;/p&gt;</description></item><item><title>Kubernetes Data Simplicity: Getting started with K8ssandra</title><link>https://foojayio.github.io/website/today/kubernetes-data-simplicity-getting-started-with-k8ssandra/</link><pubDate>Thu, 23 Dec 2021 08:56:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/kubernetes-data-simplicity-getting-started-with-k8ssandra/</guid><description>&lt;p&gt;You might have heard about the &lt;a href="https://github.com/k8ssandra/k8ssandra" target="_blank" rel="noopener noreferrer"&gt;K8ssandra&lt;/a&gt;
 project and want to start contributing, or maybe you want to start using all of its features. If you aren&amp;rsquo;t familiar with K8ssandra (pronounced like &amp;ldquo;Kate Sandra&amp;rdquo;), you can read this &lt;a href="https://k8ssandra.io/" target="_blank" rel="noopener noreferrer"&gt;overview&lt;/a&gt;
 before digging into the developer activities in this post.&lt;/p&gt;
&lt;p&gt;In a nutshell, K8ssandra is an open-source distribution of Apache Cassandra™ for Kubernetes, which includes a rich set of trusted open-source services and tooling. K8ssandra comes with handy features that are baked-in and pluggable, which allows for flexible deployment and configuration.&lt;/p&gt;</description></item><item><title>MQTT on Raspberry Pi (Part 2)</title><link>https://foojayio.github.io/website/today/mqtt-on-raspberry-pi-part-2-using-mqtt-and-raspberry-pi-to-visualize-sensor-data-on-a-tilesfx-dashboard/</link><pubDate>Wed, 22 Dec 2021 14:58:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/mqtt-on-raspberry-pi-part-2-using-mqtt-and-raspberry-pi-to-visualize-sensor-data-on-a-tilesfx-dashboard/</guid><description>&lt;p&gt;In &lt;a href="https://webtechie.be/post/2021-12-10-mqtt-on-raspberry-pi-send-sensor-data-to-hivemq-cloud-with-java-and-pi4j/" target="_blank" rel="noopener noreferrer"&gt;the previous post&lt;/a&gt;
 we started our discovery of HiveMQ Cloud with Java on the Raspberry Pi. We created an application to send measurements of various sensors to the HiveMQ Cloud MQTT broker. Using an online websocket client we verified the transition of the messages, and could see the data being published to this online message queue.&lt;/p&gt;
&lt;p&gt;Now we will take the next step and subscribe to these topics to receive the data in a dashboard, created with JavaFX.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 10)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-10/</link><pubDate>Wed, 22 Dec 2021 09:23:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-10/</guid><description>&lt;p&gt;In this article, I will discuss &lt;code&gt;BlockingQueue&lt;/code&gt;, one of the essential concurrent collections available in the concurrent package in the JDK. In &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-6/"&gt;one of our previous articles&lt;/a&gt;
, we discussed the Producer/Consumer pattern. We will implement the same pattern today using BlockingQueue.&lt;/p&gt;
&lt;p&gt;In that implementation, we used a buffer, and when Buffer is full, we put the producer thread in a waiting state. And if Buffer is empty, we put the consumer thread in a waiting state. To coordinate between threads, we had to use, wait(), notify() and notifyAll(), these low-level constructs. However, if we use BlockingQueue, we don&amp;rsquo;t have to use these low-level details. BlockingQueue was implemented with such details built in, so that we can just rely on it. It has two methods that are important in our discussion:&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>Say Goodbye to Project Files in Visual Studio Code</title><link>https://foojayio.github.io/website/today/say-goodbye-to-project-files-in-visual-studio-code/</link><pubDate>Tue, 21 Dec 2021 08:05:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/say-goodbye-to-project-files-in-visual-studio-code/</guid><description>&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=redhat.java" title="Recent 1.1.0 release of Language Support for Java™" target="_blank" rel="noopener noreferrer"&gt;Recent 1.1.0 release of Language Support for Java™&lt;/a&gt;
 contains an important update: now when the extension imports a new Java project, the project metadata files ( .project , .classpath , settings, etc.) will no longer be generated in the project path by default.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/redhat-developer/vscode-java/issues/618" title="This issue" target="_blank" rel="noopener noreferrer"&gt;This issue&lt;/a&gt;
 was reported more than three years ago and it has been there since 2018 . This blog post shares our journey of solving this problem and the final solution.&lt;/p&gt;</description></item><item><title>JDKMon 17.0.18 Released</title><link>https://foojayio.github.io/website/today/jdkmon-17-0-18-released/</link><pubDate>Mon, 20 Dec 2021 09:06:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdkmon-17-0-18-released/</guid><description>&lt;p&gt;JDKMon is a little tool written in JavaFX that tries to detect all OpenJDK distributions installed on your machine and keep track of updates for those distributions.&lt;/p&gt;
&lt;p&gt;It will scan for new updates every three hours and will inform you about available updates.&lt;/p&gt;
&lt;p&gt;JDKMon won&amp;rsquo;t install the distributions on your machine but will enable you to download them to a place of your choice.&lt;/p&gt;
&lt;p&gt;At the moment the following distributions are supported:&lt;/p&gt;</description></item><item><title>Java Logging: What To Log &amp; What Not To Log?</title><link>https://foojayio.github.io/website/today/java-logging-what-to-log-what-not-to-log/</link><pubDate>Sat, 18 Dec 2021 11:29:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-logging-what-to-log-what-not-to-log/</guid><description>&lt;p&gt;Logs are a handy tool to spot mistakes and debug code. For engineers and, specifically, in a DevOps environment, the logs are a very valuable tool.&lt;/p&gt;
&lt;p&gt;In addition to the functional aspect of logging, logs are also critical from a Java security perspective. When a security breach occurs, your log files are the first place to look for clues about what happened. But with a large number of different frameworks available for logging in Java applications, how do you pick the right one? More importantly, how to do Java logging right?&lt;/p&gt;</description></item><item><title>What is GitOps? What are its benefits?</title><link>https://foojayio.github.io/website/today/what-is-gitops-what-are-its-benefits/</link><pubDate>Fri, 17 Dec 2021 16:19:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-is-gitops-what-are-its-benefits/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Let&amp;rsquo;s understand what GitOps is and its benefits. You will also learn how ArgoCD can help with the continuous delivery of Kubernetes-based applications.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The following article is an excerpt from my book &lt;strong&gt;Effortless Cloud-Native App Development Using Skaffold&lt;/strong&gt; from Packt Publishing.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1636304168731/qHmKbqm_y.jpeg" alt="B17385_Mockup Cover_High Res.jpg" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;It is available for order from &lt;a href="https://www.amazon.com/Effortless-Cloud-Native-Development-using-Skaffold/dp/1801077118" target="_blank" rel="noopener noreferrer"&gt;Amazon.com&lt;/a&gt;
 and directly from &lt;a href="https://www.packtpub.com/product/effortless-cloud-native-apps-development-using-skaffold/9781801077118" target="_blank" rel="noopener noreferrer"&gt;Packt&lt;/a&gt;
. This excerpt comes from chapter 9: Creating a Production-Ready CI/CD Pipeline with Skaffold:&lt;/p&gt;
&lt;h3 id="h3-0-what-is-gitops"&gt;What is GitOps&lt;/h3&gt;
&lt;p&gt;The word GitOps was coined by a company named Weaveworks. The idea behind GitOps is to consider Git as a single source of truth for your application and declarative infrastructure. Using Git to manage your declarative infrastructure makes it easy for developers because they interact with Git daily. Once you add configuration inside Git, you get the benefits of version control, such as reviewing changes using pull requests, audit, and compliance.&lt;/p&gt;</description></item><item><title>Build a Status Dashboard Using Spring Boot and Astra DB</title><link>https://foojayio.github.io/website/today/build-a-status-dashboard-using-spring-boot-and-astra-db/</link><pubDate>Fri, 17 Dec 2021 09:28:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/build-a-status-dashboard-using-spring-boot-and-astra-db/</guid><description>&lt;p&gt;In this article, we are going to build &amp;ldquo;Tony Stark&amp;rsquo;s Avengers Status Dashboard&amp;rdquo;, used by The Avengers to monitor the status of the members of the team.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This will be built using &lt;a href="https://astra.dev/3BJ1lmW" target="_blank" rel="noopener noreferrer"&gt;DataStax Astra&lt;/a&gt;
, a DBaaS powered by &lt;a href="https://cassandra.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Cassandra&lt;/a&gt;
 using &lt;a href="https://stargate.io/?utm_medium=referral&amp;amp;utm_source=baeldung&amp;amp;utm_campaign=series-1-of-3&amp;amp;utm_content=avengers-dash-series-1" target="_blank" rel="noopener noreferrer"&gt;Stargate&lt;/a&gt;
 to offer additional APIs for working with it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On top of this, we will be using a Spring Boot application to render the dashboard and show what&amp;rsquo;s going on.&lt;/p&gt;</description></item><item><title>Build Web Apps in Pure Java with Vaadin Flow</title><link>https://foojayio.github.io/website/today/build-web-apps-in-pure-java-with-vaadin-flow/</link><pubDate>Thu, 16 Dec 2021 09:21:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/build-web-apps-in-pure-java-with-vaadin-flow/</guid><description>&lt;p&gt;Vaadin Flow enables you to quickly build web apps in &lt;em&gt;pure Java&lt;/em&gt;, without writing any HTML or JavaScript.&lt;/p&gt;
&lt;p&gt;In this guide, you learn how to build a small but fully functional ToDo application using Vaadin Flow.&lt;/p&gt;
&lt;h3 id="h3-0-what-you-need"&gt;What You Need&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;About 5 minutes&lt;/li&gt;
&lt;li&gt;JDK 11 or higher (For example, &lt;a href="https://adoptium.net/" title="Eclipse Temurin JDK" target="_blank" rel="noopener noreferrer"&gt;Eclipse Temurin JDK&lt;/a&gt;
).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-1-step-1-download-a-vaadin-project"&gt;Step 1: Download a Vaadin Project&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://start.vaadin.com/dl?preset=flow-quickstart-tutorial" title="here" target="_blank" rel="noopener noreferrer"&gt;Click here to download an empty project starter&lt;/a&gt;
. Unpack the downloaded zip into a folder on your computer, and import the project in the IDE of your choice.&lt;/p&gt;</description></item><item><title>Log4Shell / Leak4J</title><link>https://foojayio.github.io/website/today/log4shell-leak4j/</link><pubDate>Wed, 15 Dec 2021 12:49:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/log4shell-leak4j/</guid><description>&lt;p&gt;Over the last couple of days (and nights) I&amp;rsquo;ve been studying the new (extremely dangerous) vulnerability in log4j2 called &lt;a href="https://en.wikipedia.org/wiki/Log4Shell" target="_blank" rel="noopener noreferrer"&gt;Log4Shell&lt;/a&gt;
).&lt;/p&gt;
&lt;p&gt;All versions of log4j-core from 2.0-beta9 to 2.14.1 are affected by this, and it&amp;rsquo;s a &lt;strong&gt;big&lt;/strong&gt; one.&lt;/p&gt;
&lt;p&gt;This vulnerability allows the attacker to remotely execute code on your system, with the ability to get complete control of the underlying servers.&lt;/p&gt;
&lt;p&gt;Log4J has, for a long time, been the most used logging framework in the Java landscape. It&amp;rsquo;s extremely widely used and this attack has the most broad trigger you can imagine: It needs to log something.&lt;/p&gt;</description></item><item><title>7 Reasons to Choose Apache Pulsar over Apache Kafka</title><link>https://foojayio.github.io/website/today/7-reasons-to-choose-apache-pulsar-over-apache-kafka/</link><pubDate>Wed, 15 Dec 2021 10:03:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/7-reasons-to-choose-apache-pulsar-over-apache-kafka/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;I wrote an earlier version of this article in 2019, while I was CEO of Kesque, a real-time messaging service built on&lt;/strong&gt;&lt;/em&gt; &lt;a href="https://pulsar.apache.org/" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;&lt;strong&gt;Apache Pulsar&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;&lt;strong&gt;, the cloud-native distributed messaging and streaming platform. A lot of big changes have happened in the interim; perhaps the most significant of these is the fact that the company I founded in early 2019 was&lt;/strong&gt;&lt;/em&gt; &lt;a href="https://www.datastax.com/press-release/datastax-delivers-scale-out-enterprise-event-streaming-modern-data-apps" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;&lt;strong&gt;acquired&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;&lt;strong&gt;, in January, by DataStax. One thing that hasn&amp;rsquo;t changed, however, is the rationale behind our choice of Apache Pulsar.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>MQTT on Raspberry Pi: Sensor Data to HiveMQ Cloud with Java and Pi4J</title><link>https://foojayio.github.io/website/today/mqtt-on-raspberry-pi-part-1-send-sensor-data-to-hivemq-cloud-with-java-and-pi4j/</link><pubDate>Wed, 15 Dec 2021 09:54:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/mqtt-on-raspberry-pi-part-1-send-sensor-data-to-hivemq-cloud-with-java-and-pi4j/</guid><description>&lt;p&gt;A few years ago I did my first experiments with an MQTT server (Mosquitto) running on a Raspberry Pi to connect an Arduino and Raspberry Pi for &lt;a href="https://webtechie.be/post/2020-03-30-drumbooth-controller-with-java-javafx-raspberrypi-arduino/" target="_blank" rel="noopener noreferrer"&gt;the drumbooth of my son&lt;/a&gt;
. The full process is described in my book &lt;a href="https://webtechie.be/books/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Getting Started with Java on the Raspberry Pi&amp;rdquo;&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;In this series of articles we are going to take a different approach with an online MQTT-compatible service: &lt;a href="https://www.hivemq.com/mqtt-cloud-broker/" target="_blank" rel="noopener noreferrer"&gt;HiveMQ Cloud&lt;/a&gt;
. The biggest advantage: no need for an always-on server we must manage ourselves. Yes, Mosquitto runs on a inexpensive Raspberry Pi, but still we require to keep it up-and-running if we use it as the &amp;ldquo;central hub&amp;rdquo; to distribute data.&lt;/p&gt;</description></item><item><title>Fail-Fast Reliable Software Strategy. Debug Failures Effectively</title><link>https://foojayio.github.io/website/today/fail-fast-best-strategy-for-reliable-software/</link><pubDate>Tue, 14 Dec 2021 15:30:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/fail-fast-best-strategy-for-reliable-software/</guid><description>&lt;p&gt;&lt;strong&gt;I love cooking and use my &lt;a href="https://www.thermomix.com/" target="_blank" rel="noopener noreferrer"&gt;Thermomix&lt;/a&gt;
 a lot. If you hadn&amp;rsquo;t heard about that amazing innovation, it&amp;rsquo;s a kitchen robot&amp;hellip; Well, it&amp;rsquo;s a magical super cooking machine. When designing the Thermomix, its designers took the approach of &lt;a href="https://en.wikipedia.org/wiki/Fail-safe" target="_blank" rel="noopener noreferrer"&gt;fail-safe&lt;/a&gt;
 instead of &lt;a href="https://en.wikipedia.org/wiki/Fail-fast" target="_blank" rel="noopener noreferrer"&gt;fail-fast&lt;/a&gt;
. This is a smart choice in this case, but it has its drawbacks.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;E.g., my machine tried to recover from a failure which sent it into an infinite recovery loop. I literally couldn&amp;rsquo;t pull out the food from the lid that was sealed shut. But normally, it&amp;rsquo;s one of the most reliable devices I own.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 9)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-9/</link><pubDate>Tue, 14 Dec 2021 11:14:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-9/</guid><description>&lt;p&gt;&lt;strong&gt;In &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-8/"&gt;our last article&lt;/a&gt;
, we discussed thread-safety in naive terms and shared a couple of ways to ensure thread safety.&lt;/strong&gt; &lt;strong&gt;We also introduced a package containing thread-safe classes, which we can confidently use without worrying much, e.g., AtomicInteger. This is because they are designed in a thread-safe way.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Today in this article, we will continue the discussion and share a few more thread-safe classes that we can use in our day-to-day coding.&lt;/p&gt;</description></item><item><title>Log4j2 Isn’t Killing Java</title><link>https://foojayio.github.io/website/today/log4j-isnt-killing-java/</link><pubDate>Mon, 13 Dec 2021 18:51:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/log4j-isnt-killing-java/</guid><description>&lt;p&gt;In the season of resurrection, I&amp;rsquo;d like to join the ranks of those who have made &lt;a href="https://www.forrester.com/blogs/10-11-23-java_is_a_dead_end_for_enterprise_app_development/" target="_blank" rel="noopener noreferrer"&gt;long careers announcing the death of Java&lt;/a&gt;
 who follow up each obituary with an equally shocking revelation that &lt;a href="https://jaxenter.com/java-not-dead-yet-133459.html" target="_blank" rel="noopener noreferrer"&gt;it is alive again&lt;/a&gt;
 as one of the top programming languages &lt;a href="https://www.oracle.com/news/connect/25-years-of-java-technology-community-family.html" target="_blank" rel="noopener noreferrer"&gt;25 years running&lt;/a&gt;
. Even before the recent log4j2 vulnerability allegedly &amp;ldquo;killing&amp;rdquo; it yet again, we have a joke in the Foojay chat that a Java museum would be called a cemetery for the &lt;a href="https://redmonk.com/jgovernor/2016/02/24/on-lightbend-lagom-and-java-is-dead-is-dead/" target="_blank" rel="noopener noreferrer"&gt;number of times this has happened&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Native-image with Quarkus</title><link>https://foojayio.github.io/website/today/native-image-quarkus/</link><pubDate>Mon, 13 Dec 2021 17:50:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/native-image-quarkus/</guid><description>&lt;p&gt;So far, we have looked at how well &lt;a href="https://foojayio.github.io/website/today/native-spring-boot/"&gt;Spring Boot&lt;/a&gt;
 and &lt;a href="https://foojayio.github.io/website/today/native-image-micronaut/"&gt;Micronaut&lt;/a&gt;
 integrate GraalVM native image extension. In this post, I&amp;rsquo;ll focus on &lt;a href="https://quarkus.io/" target="_blank" rel="noopener noreferrer"&gt;Quarkus&lt;/a&gt;
:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A Kubernetes Native Java stack tailored for OpenJDK HotSpot and GraalVM, crafted from the best of breed Java libraries and standards.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h2-0-creating-a-new-project"&gt;Creating a new project&lt;/h2&gt;
&lt;p&gt;Just as Spring Boot and Micronaut, Quarkus provides options to create new projects:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A dedicated &lt;code&gt;quarkus&lt;/code&gt; &lt;a href="https://quarkus.io/guides/cli-tooling" target="_blank" rel="noopener noreferrer"&gt;CLI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://code.quarkus.io/" target="_blank" rel="noopener noreferrer"&gt;Web UI&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;img fetchpriority="high" decoding="async" class="aligncenter size-medium wp-image-50950" src="code-quarkus-700x477.jpg" alt="" width="700" height="477"&gt;
&lt;p&gt;Quarkus offers a definite improvement over its competitors. Every dependency has a detailed contextual menu that allows:&lt;/p&gt;</description></item><item><title>Log4Shell: Critical Log4j RCE Vulnerabilty -- Update to Version 2.15.0</title><link>https://foojayio.github.io/website/today/log4shell-critical-log4j-rce-vulnerabilty-update-to-version-2-15-0/</link><pubDate>Mon, 13 Dec 2021 07:16:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/log4shell-critical-log4j-rce-vulnerabilty-update-to-version-2-15-0/</guid><description>&lt;p&gt;On Dec.10, 2021, a new, critical &lt;a href="https://logging.apache.org/log4j/2.x/" target="_blank" rel="noopener noreferrer"&gt;Log4j&lt;/a&gt;
 vulnerability was disclosed: &lt;a href="https://techcrunch.com/2021/12/10/apple-icloud-twitter-and-minecraft-vulnerable-to-ubiquitous-zero-day-exploit/" target="_blank" rel="noopener noreferrer"&gt;Log4Shell&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This vulnerability within the popular Java logging framework was published as &lt;a href="https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHELOGGINGLOG4J-2314720" target="_blank" rel="noopener noreferrer"&gt;CVE-2021-44228&lt;/a&gt;
 and categorized as &lt;code&gt;Critical&lt;/code&gt; with a CVSS score of 10, which is the highest score possible. The vulnerability was discovered by Chen Zhaojun from Alibaba&amp;rsquo;s Cloud Security team.&lt;/p&gt;
&lt;p&gt;All current versions of log4j2 up to and including 2.14.1 are vulnerable. You can remediate this vulnerability by updating to &lt;a href="https://logging.apache.org/log4j/2.x/download.html" target="_blank" rel="noopener noreferrer"&gt;version 2.15.0 or later&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>JUnit 5 Display Names</title><link>https://foojayio.github.io/website/today/junit-5-display-names/</link><pubDate>Fri, 10 Dec 2021 12:31:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/junit-5-display-names/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/junit-5-introduction/"&gt;Part 1&lt;/a&gt;
 of this series, we looked at several annotations used in JUnit 5. We covered test methods as well as lifecycle methods.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/junit-5-testing-basics/"&gt;Part 2&lt;/a&gt;
, we looked at the basics of testing using JUnit 5. We covered test annotations such as marking a test method and asserting. We saw how a test method could be tagged and how assumptions can be used. We finally wrapped up with test execution ordering mechanisms.&lt;/p&gt;</description></item><item><title>Fast JMS for Apache Pulsar: Blazing Performance</title><link>https://foojayio.github.io/website/today/fast-jms-for-apache-pulsar-modernize-and-reduce-costs-with-blazing-performance/</link><pubDate>Fri, 10 Dec 2021 08:54:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/fast-jms-for-apache-pulsar-modernize-and-reduce-costs-with-blazing-performance/</guid><description>&lt;p&gt;DataStax recently announced the availability of &lt;a href="https://github.com/datastax/pulsar-jms" target="_blank" rel="noopener noreferrer"&gt;Fast JMS for Apache Pulsar&lt;/a&gt;
, a JMS 2.0 API. By combining the industry-standard Java Messaging Service (JMS) API with the cloud-native and horizontally scalable Apache Pulsar™ streaming platform, DataStax is providing a powerful way to modernize your JMS infrastructure, improve performance, and reduce costs. Fast JMS is open source and is included in DataStax&amp;rsquo;s Luna Streaming Enterprise support of Apache Pulsar.&lt;/p&gt;
&lt;h2 id="h2-0-what-is-jms"&gt;What is JMS?&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Jakarta_Messaging" target="_blank" rel="noopener noreferrer"&gt;Java Message Service&lt;/a&gt;
 (JMS), or &lt;a href="https://jakarta.ee/specifications/messaging/" target="_blank" rel="noopener noreferrer"&gt;Jakarta Messaging&lt;/a&gt;
 as it is now known, is a standard messaging API that is part of the Java Enterprise Edition (now &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
) ecosystem. It defines how to create, send, receive, and read messages between loosely coupled producers and consumers.&lt;/p&gt;</description></item><item><title>Adelphi: Apache Cassandra Testing Goes Cloud Native</title><link>https://foojayio.github.io/website/today/adelphi-apache-cassandra-testing-goes-cloud-native/</link><pubDate>Thu, 09 Dec 2021 15:55:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/adelphi-apache-cassandra-testing-goes-cloud-native/</guid><description>&lt;p&gt;|&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash;|
| &lt;strong&gt;adelphi&lt;/strong&gt; (ancient greek ἀδελφός) - Subs.: brother or sister, son of the same mother. Adj.: double, twin, in pairs. |&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/adelphi-apache-cassandra-testing-goes-cloud-native/Screen-Shot-2021-05-11-at-14.44.17-1024x129.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is Adelphi?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/datastax/adelphi" target="_blank" rel="noopener noreferrer"&gt;Adelphi&lt;/a&gt;
 is an open-source QA tool for Apache Cassandra™, it&amp;rsquo;s packaged as a &lt;a href="https://helm.sh/" target="_blank" rel="noopener noreferrer"&gt;Helm&lt;/a&gt;
 chart and it simplifies the tasks of running data integrity and performance tests on Kubernetes.&lt;/p&gt;
&lt;p&gt;Built for simplicity, Adelphi is an opinionated tool; it runs an &lt;a href="https://argoproj.github.io/argo-workflows/" target="_blank" rel="noopener noreferrer"&gt;Argo&lt;/a&gt;
 workflow of well-defined steps and prefers convention over configuration, but it exposes some knobs that you can override.&lt;/p&gt;</description></item><item><title>Non-blocking with Spring WebFlux, Kotlin and Coroutines</title><link>https://foojayio.github.io/website/today/build-and-test-non-blocking-web-applications-with-spring-webflux-kotlin-and-coroutines/</link><pubDate>Thu, 09 Dec 2021 14:03:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/build-and-test-non-blocking-web-applications-with-spring-webflux-kotlin-and-coroutines/</guid><description>&lt;p&gt;When a HTTP request comes in, a &amp;rsquo;normal&amp;rsquo; web application would map the request to a specific thread from the thread pool. This assigned thread stays with the request until a response can be returned to the request socket. Along the way, we might need to fetch data from some web service or database, read or write to a file or do other I/O calls, during which the thread is blocked and has to wait until it gets a response. For applications with high request rates, the thread pool can at some point become exhausted and then no new requests can be handled anymore.&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>JDKMon 17.0.17 Released</title><link>https://foojayio.github.io/website/today/jdkmon-17-0-17-released/</link><pubDate>Wed, 08 Dec 2021 09:11:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdkmon-17-0-17-released/</guid><description>&lt;p&gt;JDKMon is a little tool written in JavaFX that tries to detect all OpenJDK distributions installed on your machine and keep track of updates for those distributions.&lt;/p&gt;
&lt;p&gt;It will scan for new updates every three hours and will inform you about available updates. JDKMon won&amp;rsquo;t install the distributions on your machine but will only enable you to download them to a place of your choice.&lt;/p&gt;
&lt;p&gt;At the moment the following distributions are supported:&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 8)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-8/</link><pubDate>Tue, 07 Dec 2021 18:15:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-8/</guid><description>&lt;p&gt;The term thread safety is a frequently and commonly pronounced word among Java developers. However, it is still one of the misunderstood terms as well. In this article, I will try to explain in a very simplified way what it is and how we can achieve it while we write our day-to-day code.&lt;/p&gt;
&lt;p&gt;The idea is, when writing a piece of code, it usually contains method and data. If we write a class, it may hold some data in terms of state. For example, if we want to write a Counter class, we will have a variable inside the counter class that holds the current count.&lt;/p&gt;</description></item><item><title>Debugging the Technical Interview: Methods and Cheating</title><link>https://foojayio.github.io/website/today/debugging-the-technical-interview-methods-and-cheating/</link><pubDate>Tue, 07 Dec 2021 09:00:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-the-technical-interview-methods-and-cheating/</guid><description>&lt;p&gt;The headline caught my attention right away &amp;ldquo;&lt;a href="https://levelup.gitconnected.com/i-was-shocked-to-catch-a-candidate-cheating-in-an-online-interview-2441fef0ab4" target="_blank" rel="noopener noreferrer"&gt;I was shocked to catch a candidate cheating in an online interview&lt;/a&gt;
&amp;rdquo;. How do you cheat in an interview? Does &lt;a href="https://en.wikipedia.org/wiki/Cyrano_de_Bergerac_%28play%29" target="_blank" rel="noopener noreferrer"&gt;Cyrano de Bergerac&lt;/a&gt;
 whisper the answer from outside the camera?&lt;/p&gt;
&lt;p&gt;Well, close enough. The candidate was googling answers and copying them into a shared screen, pretending this was his code. Hiding this is lying. That&amp;rsquo;s never OK. But this really reminded me of a tweet I read ages ago which unfortunately I can&amp;rsquo;t find&amp;hellip; It went something like this:&lt;/p&gt;</description></item><item><title>Friends of OpenJDK at FOSDEM 2022</title><link>https://foojayio.github.io/website/today/friends-of-openjdk-at-fosdem-2022/</link><pubDate>Sun, 05 Dec 2021 12:00:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/friends-of-openjdk-at-fosdem-2022/</guid><description>&lt;p&gt;Over the last few years at &lt;a href="https://fosdem.org/2022/" target="_blank" rel="noopener noreferrer"&gt;FOSDEM&lt;/a&gt;
&amp;mdash;the free event for software developers, many of them in the open source ecosystem, for meeting, sharing ideas and collaborating&amp;mdash;one of the developer rooms has been focused on short presentations dealing with demos and overviews of free tools and editors.&lt;/p&gt;
&lt;p&gt;The programs for 2020 and 2019 are listed below:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://archive.fosdem.org/2020/schedule/track/free_tools_and_editors/" target="_blank" rel="noopener noreferrer"&gt;https://archive.fosdem.org/2020/schedule/track/free_tools_and_editors&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://archive.fosdem.org/2019/schedule/track/free_tools_and_editors/" target="_blank" rel="noopener noreferrer"&gt;https://archive.fosdem.org/2019/schedule/track/free_tools_and_editors&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;You can see in the above that the room was organized by developers connected to, in particular, Eclipse, IntelliJ IDEA, and NetBeans.&lt;/p&gt;</description></item><item><title>JUnit 5 Testing Basics</title><link>https://foojayio.github.io/website/today/junit-5-testing-basics/</link><pubDate>Fri, 03 Dec 2021 12:29:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/junit-5-testing-basics/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/junit-5-introduction/"&gt;Part 1&lt;/a&gt;
 of this series of articles, we looked at several annotations used in JUnit5. We covered test methods as well as lifecycle methods.&lt;/p&gt;
&lt;p&gt;This article will share examples of a JUnit test which makes use of a few of these annotations.&lt;/p&gt;
&lt;h2 id="h2-0-testing"&gt;Testing&lt;/h2&gt;
&lt;h3 id="h3-1-marking-a-method-as-a-test"&gt;Marking a method as a Test&lt;/h3&gt;
&lt;p&gt;Tests in JUnit5 are annotated with the &lt;strong&gt;@Test&lt;/strong&gt; annotation. &lt;em&gt;Unlike prior versions of JUnit, the JUnit5 &lt;code&gt;@Test&lt;/code&gt; annotation does not have any attributes. Prior versions supported extensions via attributes, while JUnit5 fosters a custom annotation based extension&lt;/em&gt; (more on this in a future article).&lt;/p&gt;</description></item><item><title>New Java 17 Features for Improved Security and Serialization</title><link>https://foojayio.github.io/website/today/new-java-17-features-for-improved-security-and-serialization/</link><pubDate>Thu, 02 Dec 2021 08:06:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-java-17-features-for-improved-security-and-serialization/</guid><description>&lt;p&gt;In December 2020, I wrote the article&lt;a href="https://snyk.io/blog/serialization-and-deserialization-in-java/" target="_blank" rel="noopener noreferrer"&gt;Serialization and deserialization in Java: explaining the Java deserialize vulnerability&lt;/a&gt;
 about the problems Java has with its custom serialization implementation. The serialization framework is so deeply embedded inside Java that knowing how dangerous some implementation can be is important. Insecure deserialization can lead to arbitrary code executions if a gadget chain is created from your classpath classes.&lt;/p&gt;
&lt;p&gt;Recently, Java 17 &amp;mdash; the new LTS version &amp;mdash; was released. But how do the new features impact this problem, and can we prevent deserialization vulnerabilities better using these features?&lt;/p&gt;</description></item><item><title>Vaadin 22 released with Quarkus support and stateless Fusion</title><link>https://foojayio.github.io/website/today/vaadin-22-released-with-quarkus-support-and-stateless-fusion/</link><pubDate>Wed, 01 Dec 2021 15:38:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/vaadin-22-released-with-quarkus-support-and-stateless-fusion/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/vaadin-22-released-with-quarkus-support-and-stateless-fusion/1200x630-vaadin-release-v22-700x368.jpg" alt="Vaadin 22 released" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Vaadin is an open source development platform for building modern web applications on Java backends. It includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A large set of &lt;a href="https://vaadin.com/docs/latest/ds/components" target="_blank" rel="noopener noreferrer"&gt;UI components&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vaadin.com/flow" target="_blank" rel="noopener noreferrer"&gt;Vaadin Flow&lt;/a&gt;
 - a framework for building web apps 100% in Java.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vaadin.com/fusion" target="_blank" rel="noopener noreferrer"&gt;Vaadin Fusion&lt;/a&gt;
 - a framework for building reactive frontend apps in TypeScript with type-safe communication to a Spring Boot backend.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Visit &lt;a href="https://vaadin.com/" target="_blank" rel="noopener noreferrer"&gt;vaadin.com&lt;/a&gt;
 to get started.&lt;/p&gt;
&lt;h2 id="h2-0-new-and-noteworthy-since-vaadin-21"&gt;New and Noteworthy Since Vaadin 21&lt;/h2&gt;
&lt;p&gt;Here are the highlighted new and improved features in vaadin 22. To see the full list of bug fixes and improvements, check Included Projects and Change Log.&lt;/p&gt;</description></item><item><title>Why a Serverless Data API Might be Your Next Database</title><link>https://foojayio.github.io/website/today/why-a-serverless-data-api-might-be-your-next-database/</link><pubDate>Wed, 01 Dec 2021 14:53:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-a-serverless-data-api-might-be-your-next-database/</guid><description>&lt;p&gt;App development stacks have been improving so rapidly and effectively that today there are a number of easy, straightforward paths to push code to production, on the cloud platform of your choice. But what use are applications without the data that users interact with? Persistent data is such an indispensable piece of the IT puzzle that it&amp;rsquo;s perhaps the reason the other pieces even exist.&lt;/p&gt;
&lt;p&gt;Enter cloud and internet scale requirements, essentially mandating that back-end services must be independently scalable / modular subsystems to succeed. Traditionally, this requirement has been difficult in the extreme for stateful systems. No doubt, database as-a-service (DBaaS) has made provisioning, operations, and security easier. But as anyone who has tried to run databases on Kubernetes will tell you: auto scaling databases, especially ones that are easy for developers to use, remain out of reach for mere mortals.&lt;/p&gt;</description></item><item><title>Backing up K8ssandra with MinIO</title><link>https://foojayio.github.io/website/today/backing-up-k8ssandra-with-minio/</link><pubDate>Tue, 30 Nov 2021 17:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/backing-up-k8ssandra-with-minio/</guid><description>&lt;p&gt;K8ssandra includes Medusa for Apache Cassandra® to handle backup and restore for your Cassandra nodes. Recently Medusa was upgraded to introduce support for all S3 compatible backends, including &lt;a href="https://min.io/" target="_blank" rel="noopener noreferrer"&gt;MinIO&lt;/a&gt;
, the popular k8s-native object storage suite. Let&amp;rsquo;s see how to set up K8ssandra and MinIO to backup Cassandra in just a few steps. If you don&amp;rsquo;t want to self-manage Kubernetes and Cassandra, you can always use &lt;a href="https://dtsx.io/3nHk38t" target="_blank" rel="noopener noreferrer"&gt;Astra DB&lt;/a&gt;
, where this is all set up for you.&lt;/p&gt;</description></item><item><title>JReleaser 0.9.0 Released!</title><link>https://foojayio.github.io/website/today/jreleaser-0-9-0-released/</link><pubDate>Tue, 30 Nov 2021 10:29:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/jreleaser-0-9-0-released/</guid><description>&lt;p&gt;JReleaser is a tool that streamlines creating releases for [Java] projects. It can create a GitHub/GitLab/Gitea release, while also packaging binaries for Homebrew, Snapcraft, Docker, Chocolatey, Scoop, JBang and, more than that, announces releases to Twitter, SdkMan!, e-mail, Zulip, Discord, Gitter, Slack, Teams, and more.&lt;/p&gt;
&lt;p&gt;JReleaser &lt;a href="https://github.com/jreleaser/jreleaser/releases/tag/v0.9.0" title="v0.9.0" target="_blank" rel="noopener noreferrer"&gt;v0.9.0&lt;/a&gt;
 has just been released! JReleaser v0.9.0 is a big update as we gear towards v1.0.0. Plenty of improvements were added to this release to make it the best one so far. Be mindful of the &lt;a href="https://github.com/jreleaser/jreleaser/issues?q=is%3Aclose&amp;#43;is%3Aissue&amp;#43;label%3A%22BREAKING&amp;#43;CHANGE%22&amp;#43;milestone%3Av0.9.0" title="breaking" target="_blank" rel="noopener noreferrer"&gt;breaking changes&lt;/a&gt;
 introduced in this release.There are plenty of improvements in several areas, a quick summary of the highlights follows:&lt;/p&gt;</description></item><item><title>Developer Productivity Masterclass: Interview With Leonid Blouvshtein</title><link>https://foojayio.github.io/website/today/developer-productivity-masterclass-interview-with-leonid-blouvshtein/</link><pubDate>Tue, 30 Nov 2021 09:09:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/developer-productivity-masterclass-interview-with-leonid-blouvshtein/</guid><description>&lt;p&gt;&lt;strong&gt;On December 7th, Lightrun will &lt;a href="https://www.linkedin.com/events/developerproductivitymasterclas6870717107772907520/" title="host a free master class" target="_blank" rel="noopener noreferrer"&gt;host a free master class&lt;/a&gt;
 with Mykyta Protsenko, Senior Software Engineer at Netflix; Michael Wood, Field CTO, HashiCorp; Ryan Menezez, Software Engineering Manager, Meta; and Leonid Blouvshtein, CTO of Lightrun.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/events/developerproductivitymasterclas6870717107772907520/" target="_blank" rel="noopener noreferrer"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="alignnone size-medium wp-image-50863" src="devprodmaster-700x227.png" alt="" width="700" height="227"&gt;
&lt;p&gt;](&lt;a href="https://www.linkedin.com/events/developerproductivitymasterclas6870717107772907520/" target="_blank" rel="noopener noreferrer"&gt;https://www.linkedin.com/events/developerproductivitymasterclas6870717107772907520/&lt;/a&gt;
)&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;I got a chance to grab Leonid and make him sit down for this quick interview&amp;hellip;&lt;/p&gt;
&lt;h3 id="h3-0-q-tell-us-a-bit-about-yourself"&gt;Q: Tell us a bit about yourself?&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve worked in several successful startups while most of my experience is with distributed systems that require high performance. This was after I graduated from the elite 8200 intelligence unit of the IDF.&lt;/p&gt;</description></item><item><title>Port Management in Local Kubernetes Clusters</title><link>https://foojayio.github.io/website/today/port-management-in-local-kubernetes-clusters/</link><pubDate>Mon, 29 Nov 2021 08:44:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/port-management-in-local-kubernetes-clusters/</guid><description>&lt;p&gt;Most of my talks contain a demo. A fair share of these demos require multiple &amp;ldquo;infrastructure&amp;rdquo; dependencies: a database (or more), Elasticsearch, you name it. To ease my setup and avoid messing up my machine, I use either Docker Compose or Kubernetes locally on my Mac. Both rely on Docker Desktop.&lt;/p&gt;
&lt;p&gt;To expose a cluster &lt;code&gt;Service&lt;/code&gt; on my host, I use &lt;code&gt;nodePort&lt;/code&gt;. Hence, I set a dedicated node port for each service. I need to remember each of them for each demo. Worse, services might be (are) declared across different manifest files.&lt;/p&gt;</description></item><item><title>JUnit 5 Introduction</title><link>https://foojayio.github.io/website/today/junit-5-introduction/</link><pubDate>Fri, 26 Nov 2021 15:22:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/junit-5-introduction/</guid><description>&lt;p&gt;Code Katas are a great way of teaching programming practices. The effectiveness of a code kata is to &amp;ldquo;solve&amp;rdquo; something repeatedly in order to gain a &amp;ldquo;muscle memory&amp;rdquo; of sorts on the subject matter.&lt;/p&gt;
&lt;p&gt;Nothing stresses repeatability more than unit tests. Code Katas thus, in many cases can be associated with or run via unit tests.&lt;/p&gt;
&lt;p&gt;Many of us have been long used to JUnit 4 as a formidable unit testing framework. This article is not going to be a comparison between JUnit 4 and JUnit 5, but you will notice some differences as italicized text.&lt;/p&gt;</description></item><item><title>Book Review: “Effortless Cloud-Native App Development Using Skaffold”</title><link>https://foojayio.github.io/website/today/book-review-effortless-cloud-native-app-development-using-skaffold-2/</link><pubDate>Thu, 25 Nov 2021 12:52:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-effortless-cloud-native-app-development-using-skaffold-2/</guid><description>&lt;p&gt;I&amp;rsquo;m a developer who cares deeply about production. But I&amp;rsquo;m not a devops and unfortunately I&amp;rsquo;m pretty bad at that. That&amp;rsquo;s why when I heard about Skaffold it instantly piqued my interest. Write Kubernetes cloud native apps without well&amp;hellip; Writing Kubernetes native apps&amp;hellip; Sign me up!&lt;/p&gt;
&lt;p&gt;Unfortunately, as we all know. The time to pick up a new technology is when we actually need it and then it&amp;rsquo;s a rush to get something out. Few of us have time to take off from our busy day to study something and learn something new. That&amp;rsquo;s why when &lt;a href="https://twitter.com/iASHeeesh" target="_blank" rel="noopener noreferrer"&gt;Ashish Choudhary&lt;/a&gt;
, the author of the book &amp;ldquo;&lt;strong&gt;Effortless Cloud Native App Development Using Skaffold&lt;/strong&gt; &amp;quot; asked for reviewers in the &lt;a href="https://foojayio.github.io/website/"&gt;foojay.io&lt;/a&gt;
 slack group, I jumped on the opportunity. I can learn something interesting and be productive (this book review).&lt;/p&gt;</description></item><item><title>Enterprise-Level Apache Cassandra Sink Connector for Apache Pulsar</title><link>https://foojayio.github.io/website/today/developing-an-enterprise-level-apache-cassandra-sink-connector-for-apache-pulsar/</link><pubDate>Wed, 24 Nov 2021 19:16:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/developing-an-enterprise-level-apache-cassandra-sink-connector-for-apache-pulsar/</guid><description>&lt;p&gt;When &lt;a href="https://techcrunch.com/2021/01/27/datastax-acquires-kesque-as-it-gets-into-data-streaming/" target="_blank" rel="noopener noreferrer"&gt;DataStax started investing in streaming with Apache Pulsar&lt;/a&gt;
™, we knew that one of the first things people would want to do was connect existing enterprise data sources to Apache Cassandra™ using Pulsar.&lt;/p&gt;
&lt;p&gt;Apache Pulsar has a powerful framework called Pulsar IO to enable this kind of use case, and at DataStax we already had a best-in-class &lt;a href="https://docs.datastax.com/en/kafka/doc/kafka/kafkaIntro.html" target="_blank" rel="noopener noreferrer"&gt;Kafka Connect Sink&lt;/a&gt;
 that enables you to store structured data coming from one or more Kafka topics into DataStax Enterprise, Apache Cassandra, and Astra.&lt;/p&gt;</description></item><item><title>K8ssandra: Production-Ready Platform for Cassandra on Kubernetes</title><link>https://foojayio.github.io/website/today/k8ssandra-production-ready-platform-for-running-apache-cassandra-on-kubernetes/</link><pubDate>Wed, 24 Nov 2021 09:45:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/k8ssandra-production-ready-platform-for-running-apache-cassandra-on-kubernetes/</guid><description>&lt;p&gt;&lt;a href="https://k8ssandra.io/" target="_blank" rel="noopener noreferrer"&gt;K8ssandra&lt;/a&gt;
, an open-source distribution of Apache Cassandra for Kubernetes, aims to provide a &amp;ldquo;production-ready platform&amp;rdquo;, and this includes automation for operational tasks such as repairs, backups, and monitoring. Cassandra is a distributed NoSQL database designed for global scale and fault tolerance for the most demanding applications on the planet, written in Java.&lt;/p&gt;
&lt;p&gt;K8ssandra is deployed using Helm and supports stateful workloads out of the box, which enables database administrators (DBAs) and site reliability engineers (SREs) to set up and operate Cassandra clusters using best practices in a Kubernetes environment.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 7)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-7/</link><pubDate>Tue, 23 Nov 2021 10:10:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-7/</guid><description>&lt;p&gt;&lt;strong&gt;In &lt;a href="https://foojayio.github.io/website/today/author/bazlur-rahman/"&gt;our previous Java threading articles in this series&lt;/a&gt;
, we learned a great deal about how we can create threads and how to use them while avoiding the issues that come with them. But what does this leave us with? Can we create as many threads as we want? I wish I could answer this with a straight yes or no. In this article, I will try to come up with an answer via an exercise, so bear with me!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Native-image with Micronaut</title><link>https://foojayio.github.io/website/today/native-image-micronaut/</link><pubDate>Mon, 22 Nov 2021 10:18:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/native-image-micronaut/</guid><description>&lt;p&gt;Last week, I wrote a native web app that queried the Marvel API &lt;a href="https://foojayio.github.io/website/today/native-spring-boot/"&gt;using Spring Boot&lt;/a&gt;
. This week, I want to do the same with the Micronaut framework.&lt;/p&gt;
&lt;h2 id="h2-0-creating-a-new-project"&gt;Creating a new project&lt;/h2&gt;
&lt;p&gt;Micronaut offers two options to create a new project:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A &lt;a href="https://micronaut.io/launch" target="_blank" rel="noopener noreferrer"&gt;web UI&lt;/a&gt;
:&lt;/li&gt;
&lt;/ol&gt;
&lt;img fetchpriority="high" decoding="async" class="aligncenter wp-image-50794 size-medium" src="micronaut-launch-700x330.jpg" alt="Micronaut Launch Web UI" width="700" height="330"&gt;
&lt;p&gt;As for Spring Initializr, it provides several features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preview the project before you download it&lt;/li&gt;
&lt;li&gt;Share the configuration&lt;/li&gt;
&lt;li&gt;An API&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I do like that you can check the impact that the added features have on the POM.
2. A &lt;a href="https://docs.micronaut.io/1.3.3/guide/index.html#buildCLI" target="_blank" rel="noopener noreferrer"&gt;Command-Line Interface&lt;/a&gt;
:In parallel to the webapp, you can install the on different systems. Then you can use the &lt;code&gt;mn&lt;/code&gt; command to create new projects.&lt;/p&gt;</description></item><item><title>Equals and Hashcode Implementation Considerations</title><link>https://foojayio.github.io/website/today/equals-and-hashcode-implementation-considerations/</link><pubDate>Sun, 21 Nov 2021 11:55:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/equals-and-hashcode-implementation-considerations/</guid><description>&lt;p&gt;I always struggled with how to implement equals and hashcode, until I learned about the difference between entities and value objects.&lt;/p&gt;
&lt;h3 id="_why_implement_equals_and_hashcode"&gt;Why implement equals and hashcode?&lt;/h3&gt;
&lt;p&gt;All classes in Java inherit from &lt;code&gt;java.lang.Object&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#equals%28java.lang.Object%29" target="_blank" rel="noopener noreferrer"&gt;equals()&lt;/a&gt;
 and &lt;a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#hashCode%28%29" target="_blank" rel="noopener noreferrer"&gt;hashCode()&lt;/a&gt;
 methods are two important methods that you usually should override when defining your own classes.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;equals()&lt;/code&gt; is important for comparing 2 objects to check if they represent &lt;em&gt;the same thing&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;We will see in a bit what that means exactly for different types of objects.&lt;/p&gt;</description></item><item><title>Understanding Apache Maven (Part 9): Versions in Maven</title><link>https://foojayio.github.io/website/today/understanding-apache-maven-part-9-versions-in-maven/</link><pubDate>Sat, 20 Nov 2021 11:40:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-apache-maven-part-9-versions-in-maven/</guid><description>&lt;p&gt;In the final part, Part 9 of the series, versions in Maven are covered!&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/understanding-apache-maven-part-3-maven-coordinates-pom-inheritance/"&gt;Part 3&lt;/a&gt;
, version schemes in Maven were briefly covered. A quick recap: a version is a string that uniquely identifies a set of changes made to the project. Maven &lt;strong&gt;does not understand version schemes&lt;/strong&gt; and &lt;strong&gt;cannot compare versions&lt;/strong&gt; using numeric (or alphanumeric) comparisons. Some plugins may build additional intelligence for such.&lt;/p&gt;
&lt;p&gt;Maven uses the &lt;strong&gt;version as a coordinate&lt;/strong&gt; in identifying an artifact.&lt;/p&gt;</description></item><item><title>Native-image with Spring Boot</title><link>https://foojayio.github.io/website/today/native-spring-boot/</link><pubDate>Fri, 19 Nov 2021 11:47:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/native-spring-boot/</guid><description>&lt;p&gt;The Cloud has enabled a lot of new usages that were not possible before. Among them stands Serverless:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Serverless computing is a cloud computing execution model in which the cloud provider allocates machine resources on demand, taking care of the servers on behalf of their customers. Serverless computing does not hold resources in volatile memory; computing is rather done in short bursts with the results persisted to storage. When an app is not in use, there are no computing resources allocated to the app.&lt;/p&gt;</description></item><item><title>A List of Cache Providers</title><link>https://foojayio.github.io/website/today/a-list-of-cache-providers/</link><pubDate>Thu, 18 Nov 2021 08:01:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-list-of-cache-providers/</guid><description>&lt;p&gt;Recently, we described &lt;a href="https://foojayio.github.io/website/today/choosing-a-cache-1/"&gt;several criteria to look at to choose a cache&lt;/a&gt;
. Now it&amp;rsquo;s time to list Java cache providers based on these criteria.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#java-caching-system"&gt;Java Caching System&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#guava"&gt;Guava&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#caffeine"&gt;Caffeine&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#ehcache"&gt;Ehcache&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#infinispan"&gt;Infinispan&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#coherence-community-edition"&gt;Coherence Community Edition&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#ignite"&gt;Ignite&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#geode"&gt;Geode&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#hazelcast"&gt;Hazelcast&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="java-caching-system"&gt;Java Caching System&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;JCS is a distributed caching system written in Java. It is intended to speed up applications by providing a means to manage cached data of various dynamic natures. Like any caching system, JCS is most useful for high read, low put applications. Latency times drop sharply and bottlenecks move away from the database in an effectively cached system.&lt;/p&gt;</description></item><item><title>SKP's Agile Cheatsheet : Part 03</title><link>https://foojayio.github.io/website/today/skps-agile-cheatsheet-part-03/</link><pubDate>Wed, 17 Nov 2021 21:18:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/skps-agile-cheatsheet-part-03/</guid><description>&lt;p&gt;SKP&amp;rsquo;s Agile Cheatsheet is a three part series of articles focused on daily agile terminology, ideal to be printed out and pinned up near your workstation. Part 1 is available &lt;a href="https://foojayio.github.io/website/today/skps-agile-cheatsheet-part-01" title="Here"&gt;here&lt;/a&gt;
 and part 2 &lt;a href="https://foojayio.github.io/website/today/skps-agile-cheatsheet-part-02" title="Here"&gt;here&lt;/a&gt;
while the PDF cheatsheet is &lt;a href="https://rebrand.ly/skp-agile-cheat-sheet-all" title="Here" target="_blank" rel="noopener noreferrer"&gt;here&lt;/a&gt;
.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://imgur.com/LGzevOM.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release Train&lt;/strong&gt;. The Agile Release Train (ART) is a long-lived team of Agile teams, which, along with other stakeholders, incrementally develops, delivers, and where applicable operates, one or more solutions in a value stream. [Type &amp;ndash; Agile Product Management]&lt;/p&gt;</description></item><item><title>A Walk to Lazy Fetching With Hibernate and Spring Data JPA</title><link>https://foojayio.github.io/website/today/a-walk-to-lazy-fetching-with-hibernate-and-spring-data-jpa/</link><pubDate>Wed, 17 Nov 2021 11:47:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-walk-to-lazy-fetching-with-hibernate-and-spring-data-jpa/</guid><description>&lt;figure class="wp-block-image is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="oie_koKWLHXsUxuL.jpg" alt="" style="width:452px;height:226px" width="452" height="226"&gt;
&lt;/figure&gt;
&lt;h3 id="h3-0-background"&gt;Background&lt;/h3&gt;
&lt;p&gt;Using &lt;code&gt;FetchType.EAGER&lt;/code&gt; is a very bad practice, since our services may not require all the data of the mapped entities in all cases. And moreover, it is a bad idea to fetch so much data in a single session and makes the session heavy.&lt;/p&gt;
&lt;p&gt;Therefore we will refactor the code and use &lt;code&gt;FetchType.LAZY&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Our old code for the entity was below:
&lt;img src="https://foojayio.github.io/website/today/a-walk-to-lazy-fetching-with-hibernate-and-spring-data-jpa/1_Tr3xvq9hSvqoK3LHNaib6g-445x510.png" alt="Domain model with fetch type EAGER" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;After using FetchType.LAZY our new code will be like below:
&lt;img src="https://foojayio.github.io/website/today/a-walk-to-lazy-fetching-with-hibernate-and-spring-data-jpa/1_Tr3xvq9hSvqoK3LHNaib6g-1-441x510.png" alt="Domain model with fetch type LAZY" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 6)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-6/</link><pubDate>Tue, 16 Nov 2021 15:02:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-6/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Have you ever wondered what is the purpose of the &amp;ldquo;wait()&amp;rdquo;, &amp;ldquo;notify()&amp;rdquo;, &amp;ldquo;notifyAll()&amp;rdquo; methods that come with each Java object? Well, this article will explain that!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-5/"&gt;the previous article&lt;/a&gt;
, we learned how to use shared variables in a multi-threaded context and ensure thread safety avoiding data race and race conditions. However, in programming, sometimes multiple threads require to coordinate with each other by sending signals. For example -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For a thread, it&amp;rsquo;s not yet their turn to start work; rather it&amp;rsquo;s waiting for a signal to start.&lt;/li&gt;
&lt;li&gt;A thread is working, but to complete its work, it needs more data; it can send a signal to the Producer to produce more data.&lt;/li&gt;
&lt;li&gt;Another thread that are producing data can signal other thread that data is ready.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Basically, there are many similar cases when we need to coordinate among multiple threads. Let&amp;rsquo;s discuss this in this article.&lt;/p&gt;</description></item><item><title>Customer Miscommunication Leads to Ongoing Nightmare</title><link>https://foojayio.github.io/website/today/production-horrors-customer-miscommunication-leads-to-ongoing-nightmare/</link><pubDate>Tue, 16 Nov 2021 08:28:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/production-horrors-customer-miscommunication-leads-to-ongoing-nightmare/</guid><description>&lt;h3 id="h3-0-production-disasters-are-sometimes-those-pileups-we-can-see-coming-from-miles-away-but-the-train-is-moving-so-fast-we-can-t-possibly-stop-it-this-is-one-of-those-stories-in-it-a-combination-of-bad-communication-missing-skills-immature-technological-choices-created-a-pile-up"&gt;&lt;strong&gt;Production disasters are sometimes those pileups we can see coming from miles away. But the train is moving so fast we can&amp;rsquo;t possibly stop it. This is one of those stories. In it a combination of bad communication, missing skills, immature technological choices created a pile up.&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;You can&amp;rsquo;t debug a specification. You must stay vigilant during the development cycle to find conceptual mistakes and reorient the Titanic.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is a bit of a different story in the series. When I came up with the concept for production horrors my thoughts were mostly about a single day or a single event that made our production fail. Naturally our mind gravitates towards crashes or issues like the recent Facebook outage. But last time around, I gave the example of problematic caching that led to a billing problem&amp;hellip;&lt;/p&gt;</description></item><item><title>Lights, Camera, Action: GitHub Actions with Java (Part 2)</title><link>https://foojayio.github.io/website/today/github-actions-with-java-part-2/</link><pubDate>Mon, 15 Nov 2021 14:35:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/github-actions-with-java-part-2/</guid><description>&lt;figure class="alignright is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="distro-choice.jpg" alt="Distro Choice 337" width="308" height="465"&gt;
&lt;/figure&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Have you ever been given too many choices resulting in the feeling of indifference (&amp;ldquo;not a big deal, doesn&amp;rsquo;t really matter either way&amp;rdquo;)? However, when given &lt;strong&gt;two&lt;/strong&gt; choices, somehow you feel torn or become more critical of one versus the other.&lt;/p&gt;
&lt;p&gt;In this short overview, you will learn how to create a GitHub Action workflow that allows you to choose a particular OpenJDK build distribution.&lt;/p&gt;
&lt;p&gt;And welcome back to the series of articles on GitHub Actions with Java &lt;strong&gt;Part 2&lt;/strong&gt; . If you didn&amp;rsquo;t catch &lt;strong&gt;Part 1&lt;/strong&gt; head over here: &lt;a href="https://foojayio.github.io/website/today/github-actions-with-java-part-1/"&gt;https://foojay.io/today/github-actions-with-java-part-1&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>7 Reasons to Switch to OpenJDK 17 as a Jakarta EE Developer</title><link>https://foojayio.github.io/website/today/7-reasons-to-switch-to-openjdk-17-as-a-jakarta-ee-developer/</link><pubDate>Mon, 15 Nov 2021 08:19:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/7-reasons-to-switch-to-openjdk-17-as-a-jakarta-ee-developer/</guid><description>&lt;p&gt;&lt;a href="https://openjdk.java.net/projects/jdk/17/" target="_blank" rel="noopener noreferrer"&gt;JDK 17,&lt;/a&gt;
 the next Long-Term Release of &lt;a href="https://www.oracle.com/java/technologies/downloads/" target="_blank" rel="noopener noreferrer"&gt;Java SE&lt;/a&gt;
, launched in September.&lt;/p&gt;
&lt;p&gt;You may have seen many of the great blogs, articles, and videos about what this means for Java developers. For just a few places to start, we like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;a href="https://www.jetbrains.com/" target="_blank" rel="noopener noreferrer"&gt;JetBrains&lt;/a&gt;
 team&amp;rsquo;s &lt;a href="https://www.youtube.com/watch?v=4VPqwWuFPD4&amp;amp;ab_channel=IntelliJIDEAbyJetBrains" target="_blank" rel="noopener noreferrer"&gt;discussion on migrating to JDK 17&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://todd.ginsberg.com/" target="_blank" rel="noopener noreferrer"&gt;Todd Ginsberg&lt;/a&gt;
 on &lt;a href="https://todd.ginsberg.com/post/java-17/ten-things-i-love/?utm_content=183298400&amp;amp;utm_medium=social&amp;amp;utm_source=twitter&amp;amp;hss_channel=tw-2599580401" target="_blank" rel="noopener noreferrer"&gt;his ten favourite features&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mydeveloperplanet.com/about/" target="_blank" rel="noopener noreferrer"&gt;Gunter Rotsaert&lt;/a&gt;
 mapping out the &lt;a href="https://dzone.com/articles/whats-new-between-java-11-and-java-17?edition=697399&amp;amp;utm_content=182786191&amp;amp;utm_medium=social&amp;amp;utm_source=twitter&amp;amp;hss_channel=tw-2599580401" target="_blank" rel="noopener noreferrer"&gt;differences between Java 11 and Java 17.&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But what does the new release mean for &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 developers specifically?&lt;/p&gt;</description></item><item><title>Working with Multiple Carets in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/working-with-multiple-carets-in-intellij-idea/</link><pubDate>Sun, 14 Nov 2021 12:21:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/working-with-multiple-carets-in-intellij-idea/</guid><description>&lt;p&gt;Sometimes you need to modify multiple lines of code on separate lines inside IntelliJ IDEA with the same change. The fastest way to achieve that is with &lt;a href="https://www.jetbrains.com/help/idea/working-with-source-code.html?keymap=primary_windows#multiple_cursor" target="_blank" rel="noopener noreferrer"&gt;multiple carets&lt;/a&gt;
. In IntelliJ IDEA you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create multiple carets in a vertical line&lt;/li&gt;
&lt;li&gt;Create multiple carets at the end of lines&lt;/li&gt;
&lt;li&gt;Create multiple carets at any point in your code&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 id="h3-0-create-multiple-carets-in-a-vertical-line"&gt;Create Multiple Carets in a Vertical Line&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.jetbrains.com/help/idea/working-with-source-code.html?keymap=primary_windows#multiple_cursor" target="_blank" rel="noopener noreferrer"&gt;Creating carets&lt;/a&gt;
 that are stacked vertically where you have content on different lines, like a list, can save you a lot of time when you&amp;rsquo;re editing your code.&lt;/p&gt;</description></item><item><title>Understanding Apache Maven (Part 8): Maven Plugins</title><link>https://foojayio.github.io/website/today/understanding-apache-maven-part-8-maven-plugins/</link><pubDate>Fri, 12 Nov 2021 13:34:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-apache-maven-part-8-maven-plugins/</guid><description>&lt;p&gt;In Part 8 of the series, below, a deeper dive on Maven Plugins is covered.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/understanding-apache-maven-part-4-maven-lifecycle/"&gt;Part 4&lt;/a&gt;
, Maven Lifecycles and Phases were introduced. A brief overview of Plugins and Goals were also included.&lt;/p&gt;
&lt;p&gt;A quick recap:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apache Maven provides standard &lt;strong&gt;lifecycles&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycles&lt;/strong&gt; have &lt;strong&gt;phases&lt;/strong&gt; that execute sequentially.&lt;/li&gt;
&lt;li&gt;Execution of maven is done via &lt;strong&gt;plugins&lt;/strong&gt; which define &lt;strong&gt;goals&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Goals&lt;/strong&gt; can be associated with &lt;strong&gt;phases&lt;/strong&gt; (or may simply be run independent of phases).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-what-are-plugins"&gt;What are plugins?&lt;/h2&gt;
&lt;p&gt;Maven is a plugin-execution framework. Plugins are an assembly of goals, code written as MOJOs (&lt;em&gt;Maven&amp;rsquo;s plain Old Java Objects, Modern MOJOs are not restricted to being written in Java&lt;/em&gt;). Goals have names and can be bound to phases. A MOJO declares its goal name and optionally, a phase association, which binds the class to a part of a lifecycle.
&lt;img src="https://cgunturme.files.wordpress.com/2020/07/mavenplugins.png?w=1024" alt="Image displays a plugin-lifecycle relationship. Plugins define goals. Goals can be bound to phases. Goals from multiple plugins can be bound to a single phase." loading="lazy"&gt;
 Plugins define goals. Goals can be bound to phases. Goals from multiple plugins can be bound to a single phase.&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>Streams Set Distinct Java Code Quiz</title><link>https://foojayio.github.io/website/today/streams-set-distinct-java-code-quiz/</link><pubDate>Thu, 11 Nov 2021 09:36:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/streams-set-distinct-java-code-quiz/</guid><description>&lt;p&gt;Using Streams and Set Collection Factory methods with Java makes code easier to read and maintain.&lt;/p&gt;
&lt;p&gt;By using these features, we can also make it more difficult for bugs to remain hidden. If you can use the latest &lt;a href="https://foojayio.github.io/website/almanac/java-17/" title="LTS (Long-term support) Java version"&gt;LTS (Long-term support) Java version&lt;/a&gt;
 in your project, it&amp;rsquo;s the best scenario, so that you can use cool Java features such as Collection Factories from Java 9 onwards.&lt;/p&gt;
&lt;p&gt;Now that we know why it&amp;rsquo;s important to understand Java features well, it&amp;rsquo;s time for the Java Challenge!&lt;/p&gt;</description></item><item><title>Let’s Use Optional to Fix Method Contracts</title><link>https://foojayio.github.io/website/today/lets-use-optional-to-fix-method-contracts/</link><pubDate>Wed, 10 Nov 2021 11:56:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/lets-use-optional-to-fix-method-contracts/</guid><description>&lt;p&gt;A method is a contract: when we define one, we put thought into it. We specify parameters with their type and also a return type. When we invoke a method, we expect it to behave according to the contract. If it doesn&amp;rsquo;t, it&amp;rsquo;s a violation of the contract.&lt;/p&gt;
&lt;p&gt;We have been dealing with such violations all the time. We invoke a method with its proper arguments and we get a return. However, sometimes we end up getting a null, which is, in fact, a clear violation. We shouldn&amp;rsquo;t accept such a violation. If a method cannot return the value of the specified type, it should mention that in the method signature, the method may or may not be returning the value you are expecting. If we know it from the method signature, we then write our code accordingly.&lt;/p&gt;</description></item><item><title>Book Review: Why Programs Fail by Andreas Zeller</title><link>https://foojayio.github.io/website/today/book-review-why-programs-fail/</link><pubDate>Tue, 09 Nov 2021 10:18:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-why-programs-fail/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/book-review-why-programs-fail/wpf3-415x510.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;When I got my new job as developer advocate at Lightrun, one of the first things I asked for was books. Lots of books. Some of them cover my new job and others talk about debugging. I&amp;rsquo;ve been debugging for decades, but I feel like the theory around debugging is a bit vague. My goal was to bolster my terminology used by academics and peers. A secondary goal is to see how others teach ideas related to debugging.&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>Understanding Apache Maven (Part 7): Configuring Apache Maven</title><link>https://foojayio.github.io/website/today/understanding-apache-maven-part-7-configuring-apache-maven/</link><pubDate>Fri, 05 Nov 2021 16:51:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-apache-maven-part-7-configuring-apache-maven/</guid><description>&lt;p&gt;In this, &lt;a href="https://foojayio.github.io/website/today/author/c-guntur/"&gt;part 7 of the series&lt;/a&gt;
, various means of configuring Apache Maven are covered!&lt;/p&gt;
&lt;h2 id="h2-0-why-configure-apache-maven"&gt;Why Configure Apache Maven?&lt;/h2&gt;
&lt;p&gt;Over several parts in this series, Maven was touted to be &lt;em&gt;&lt;strong&gt;convention-over-configuration&lt;/strong&gt;&lt;/em&gt;. Maven assumes defaults and allows for overrides where possible.&lt;/p&gt;
&lt;p&gt;However, Maven can depend on constraints external to what is packaged. Examples include &lt;strong&gt;&lt;em&gt;the&lt;/em&gt; &lt;em&gt;JDK to use&lt;/em&gt;&lt;/strong&gt; (assuming there are several JDKs on the computing device), &lt;strong&gt;the flags to set (memory, garbage collection flags for tests etc.)&lt;/strong&gt; , &lt;em&gt;&lt;strong&gt;system / environment variables&lt;/strong&gt;&lt;/em&gt; , &lt;em&gt;&lt;strong&gt;repository information&lt;/strong&gt;&lt;/em&gt; , &lt;em&gt;&lt;strong&gt;extensions to Maven&lt;/strong&gt;&lt;/em&gt; and so on.&lt;/p&gt;</description></item><item><title>SKP's Agile Cheatsheet: Part 02</title><link>https://foojayio.github.io/website/today/skps-agile-cheatsheet-part-02/</link><pubDate>Fri, 05 Nov 2021 07:58:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/skps-agile-cheatsheet-part-02/</guid><description>&lt;p&gt;SKP&amp;rsquo;s Agile Cheatsheet is a three part series of articles focused on daily agile terminology, ideal to be printed out and pinned up near your workstation. Part 1 of this article is available &lt;a href="https://foojayio.github.io/website/today/skps-agile-cheatsheet-part-01" title="Here"&gt;here&lt;/a&gt;
 and you can download the PDF of this cheatsheet &lt;a href="https://rebrand.ly/skp-agile-cheat-sheet-all" title="Here" target="_blank" rel="noopener noreferrer"&gt;here&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://imgur.com/3Fzra1d.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;**Epic.**An epic is a large user story. [Type &amp;ndash; Agile Estimation / Agile Product Management]&lt;/p&gt;
&lt;p&gt;**Fibonacci Scale.**In Agile software development, the Fibonacci scale consists of a sequence of numbers used for estimating the relative size of user stories in points. Agile Scrum is based on the concept of working iteratively in short sprints, typically two weeks long, where the requirements and development are continuously being improved. The Fibonacci sequence consists of numbers that are the summation of the two preceding numbers, starting with [0, 1]. Agile uses the Fibonacci sequence to achieve better results by reducing complexity, effort, and doubt when determining the development time required for a task, which can range from a few minutes to several weeks. [Type &amp;ndash; Agile Estimation / Agile Product Management]&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>How Social Trends Help Me Fix Essential Vulnerabilities</title><link>https://foojayio.github.io/website/today/how-social-trends-help-me-fix-essential-vulnerabilities/</link><pubDate>Thu, 04 Nov 2021 14:14:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-social-trends-help-me-fix-essential-vulnerabilities/</guid><description>&lt;p&gt;Recently, Snyk added &lt;a href="https://snyk.io/blog/social-media-for-security-intelligence/" target="_blank" rel="noopener noreferrer"&gt;social trends&lt;/a&gt;
 to its &lt;a href="https://snyk.io/product/vulnerability-database/" target="_blank" rel="noopener noreferrer"&gt;vulnerability data&lt;/a&gt;
. This new indicator shows you what vulnerabilities are trending so you can better prioritize remediation. Our research team found a strong correlation between socially trending vulnerabilities and the existence of exploits that can actually harm your application.&lt;/p&gt;
&lt;p&gt;Following the social trends of security vulnerabilities makes practical sense. When a specific vulnerability is gaining a lot of interest in social &amp;mdash; Twitter, for instance &amp;mdash; it means a lot of people are aware of the problem. Statistically, this also means more people that want to do you harm. Therefore, it can be important to put some extra focus on the vulnerabilities in your system that are socially trending.&lt;/p&gt;</description></item><item><title>Production Horrors - Handling Disasters: Public Debrief. Handling failures</title><link>https://foojayio.github.io/website/today/production-horrors-handling-disasters-public-debrief/</link><pubDate>Wed, 03 Nov 2021 10:49:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/production-horrors-handling-disasters-public-debrief/</guid><description>&lt;p&gt;&lt;strong&gt;Just in time for Halloween failures in production are scarier than most movie monsters. Here&amp;rsquo;s a personal scary story of a production fail&amp;hellip;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Halloween is probably the most appropriate time to start this new series of articles. I &lt;a href="https://foojayio.github.io/website/today/author/shai-almog/"&gt;talk a lot about theory on Foojay&lt;/a&gt;
, but when you&amp;rsquo;re on the front line of a production disaster, it &amp;ldquo;gets real&amp;rdquo; very fast. People often think of production disasters as crashes or sites going down like the recent Facebook downtime. While that&amp;rsquo;s an interesting subject, a lot of these things can go under the radar and hit you like a brick wall.&lt;/p&gt;</description></item><item><title>Announcement: JReleaser 0.8.0 Released!</title><link>https://foojayio.github.io/website/today/jreleaser-0-8-0-released/</link><pubDate>Tue, 02 Nov 2021 12:12:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/jreleaser-0-8-0-released/</guid><description>&lt;p&gt;JReleaser is a tool that streamlines creating releases for [Java] projects.&lt;/p&gt;
&lt;p&gt;It can create a GitHub/GitLab/Gitea release, while also packaging binaries for Homebrew, Snapcraft, Docker, Chocolatey, Scoop, JBang and, more than that, announces releases to Twitter, SdkMan!, e-mail, Zulip, Discord, Gitter, Slack, Teams, and more.&lt;/p&gt;
&lt;p&gt;This release closes all required items in the v1.0.0 roadmap, opening the door for v1.0.0 to be released next after polish and housekeeping items are taken care of.&lt;/p&gt;</description></item><item><title>Kotlin and FaaS: An Impossible Union?</title><link>https://foojayio.github.io/website/today/kotlin-faas-impossible-union/</link><pubDate>Tue, 02 Nov 2021 08:40:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/kotlin-faas-impossible-union/</guid><description>&lt;p&gt;Some time ago, I read a post describing how to run a serverless Kotlin function on &lt;a href="https://www.openfaas.com/" target="_blank" rel="noopener noreferrer"&gt;OpenFaaS&lt;/a&gt;
. While the content is technically correct, I believe the concept itself is very wrong. Such posts can lead people to make ill-advised decisions: &amp;ldquo;because we can&amp;rdquo; is hardly a winning strategy.&lt;/p&gt;
&lt;p&gt;In this article, I&amp;rsquo;d like to first explain why the JVM platform is a bad idea for . Then, I&amp;rsquo;ll proceed to propose alternatives to use Kotlin nonetheless.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 5)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-5/</link><pubDate>Tue, 02 Nov 2021 08:29:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-5/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-4/"&gt;our previous article&lt;/a&gt;
, we discussed the &amp;ldquo;data race&amp;rdquo; concept and how we can solve it using volatile keywords. However, this is not the only problem we face when dealing with code that runs in multi-threaded environments. In this article, we will discuss another situation called &amp;ldquo;race conditions&amp;rdquo; and how we can resolve it.&lt;/p&gt;
&lt;p&gt;By now, we know that threads share memory space so that multiple threads can read from and write to the same variable. Unfortunately, although this ability gives us faster memory access, it has an unpleasant side effect which we call &amp;ldquo;race condition,&amp;rdquo; and it creates data inconsistency in the program. To understand the problem, let&amp;rsquo;s see an example.&lt;/p&gt;</description></item><item><title>VS Code Java September 2021 Update</title><link>https://foojayio.github.io/website/today/vs-code-java-september-2021-update/</link><pubDate>Mon, 01 Nov 2021 08:49:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/vs-code-java-september-2021-update/</guid><description>&lt;p&gt;Hi everyone, welcome to the September edition of the Visual Studio Code Java update!&lt;/p&gt;
&lt;p&gt;In this article, we are going cover the new release of Gradle extension, more convenient Code Actions and the recent 1.0 language server release.&lt;/p&gt;
&lt;h2 id="h2-0-language-server-for-java-1-0-release"&gt;Language Server for Java™ 1.0 Release&lt;/h2&gt;
&lt;p&gt;The 1.0 release of the Language Server for Java™ was officially released recently! We believe this is an important milestone and result of a multi-year collaboration between Microsoft and Red Hat. Please visit this &lt;a href="https://foojayio.github.io/website/today/announcing-the-1-0-release-of-language-support-for-java-on-visual-studio-code/"&gt;special announcement here on Foojay&lt;/a&gt;
 to see the release highlights as well as future plans in detail.&lt;/p&gt;</description></item><item><title>Understanding Apache Maven (Part 6): POM Reference</title><link>https://foojayio.github.io/website/today/understanding-apache-maven-part-6-pom-reference/</link><pubDate>Fri, 29 Oct 2021 08:20:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-apache-maven-part-6-pom-reference/</guid><description>&lt;p&gt;In Part 6 &lt;a href="https://foojayio.github.io/website/today/author/c-guntur/"&gt;of the series&lt;/a&gt;
, a walkthrough of POM content (XML) is covered!&lt;/p&gt;
&lt;p&gt;This article is not meant for a full dissection of a &lt;code&gt;pom.xml&lt;/code&gt;, since the Apache Maven doc does the job so well that anything else written will at best be a copy of that content. It is strongly recommended to peruse the linked doc below.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Excellent documentation of a &lt;code&gt;pom.xml&lt;/code&gt; on the Apache Maven site: &lt;a href="https://maven.apache.org/ref/3.6.3/maven-model/maven.html" target="_blank" rel="noopener noreferrer"&gt;https://maven.apache.org/ref/3.6.3/maven-model/maven.html&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>SKP's Agile Cheatsheet: Part 01 | On Foojay.io Today</title><link>https://foojayio.github.io/website/today/skps-agile-cheatsheet-part-01/</link><pubDate>Thu, 28 Oct 2021 17:39:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/skps-agile-cheatsheet-part-01/</guid><description>&lt;p&gt;SKP&amp;rsquo;s Agile Cheatsheet is a three part series of articles focused on daily agile terminology, ideal to be printed out and pinned up near your workstation.&lt;/p&gt;
&lt;p&gt;**Acceptance Testing.**An acceptance test is a formal description of the behavior of a software product, generally expressed as an example or a usage scenario. Several different notations and approaches have been proposed for such examples or scenarios. In many cases the aim is that it should be possible to automate the execution of such tests by a software tool, either ad-hoc to the development team or off the shelf. [Type &amp;ndash; Software Testing / Product Management]&lt;/p&gt;</description></item><item><title>Lights, Camera, Action: GitHub Actions with Java (Part 1)</title><link>https://foojayio.github.io/website/today/github-actions-with-java-part-1/</link><pubDate>Thu, 28 Oct 2021 12:36:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/github-actions-with-java-part-1/</guid><description>&lt;h4 id="have-you-ever-heard-of-jenkins-travis-teamcity-or-bamboo"&gt;Have you ever heard of &lt;a href="https://www.jenkins.io/" target="_blank" rel="noopener noreferrer"&gt;Jenkins&lt;/a&gt;
, &lt;a href="https://www.travis-ci.com/" target="_blank" rel="noopener noreferrer"&gt;Travis&lt;/a&gt;
, &lt;a href="https://www.jetbrains.com/teamcity/" target="_blank" rel="noopener noreferrer"&gt;TeamCity&lt;/a&gt;
 or &lt;a href="https://www.atlassian.com/software/bamboo" target="_blank" rel="noopener noreferrer"&gt;Bamboo&lt;/a&gt;
?&lt;/h4&gt;
&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="github_smothie.jpg" alt="GitHub Actions with Java" class="wp-image-50461" width="332" height="442"&gt;
 &lt;figcaption&gt;
 "Github smoothie" Acarlos1000
 &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;For those who do not know, these are build infrastructure software services that manage and schedule (notify) the building of software artifacts (yours).&lt;/p&gt;
&lt;p&gt;Often, you might hear the term &amp;ldquo;CI/CD pipelines&amp;rdquo;, which refers to the concept of Continuous Integration and/or Continuous Delivery. In layman&amp;rsquo;s terms, it&amp;rsquo;s all about building, testing and deploying software in an automated fashion.&lt;/p&gt;</description></item><item><title>Exception Chaos Java Code Quiz</title><link>https://foojayio.github.io/website/today/exception-chaos-java-code-quiz/</link><pubDate>Wed, 27 Oct 2021 15:03:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/exception-chaos-java-code-quiz/</guid><description>&lt;p&gt;Working correctly with exceptions is crucial to a high-quality application that users enjoy using. This quiz reinforces some of the basic concepts of exceptions.&lt;/p&gt;
&lt;p&gt;Therefore, what do you think will happen when running the following code?&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java"&gt;import java.io.FileNotFoundException;

public class ExceptionChaosChallenge {
 static String s = "-";

 public static void main(String... doYouBest) {
 try {
 throw new IllegalArgumentException();
 } catch (Exception e) {
 try {
 try {
 throw new FileNotFoundException();
 } catch (RuntimeException ex) {
 s += "run";
 }
 throw new NullPointerException();
 } catch (Exception x) {
 s += "exc";
 } finally {
 s += "fin";
 }
 } finally {
 s += "of";
 try {
 throw new VirtualMachineError("JVMError") {};
 } catch (Error error) {
 s += "error" + error.getMessage();
 }
 }

 System.out.println(s);
 }

}&lt;/pre&gt;
&lt;p&gt;A) -runfinoferror&lt;/p&gt;</description></item><item><title>Debugging Tutorial 1 – Introduction: Conditional Breakpoints &amp; Set Value</title><link>https://foojayio.github.io/website/today/debugging-tutorial-1-introduction-conditional-breakpoints-set-value/</link><pubDate>Wed, 27 Oct 2021 08:03:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-tutorial-1-introduction-conditional-breakpoints-set-value/</guid><description>&lt;p&gt;In this series, I&amp;rsquo;ll walk you through the process of debugging applications and finding issues within them. As we debug, we&amp;rsquo;ll cover the techniques important for most developers. I will cover the following debuggers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IntelliJ/IDEA &amp;ndash; with Java/Kotlin&lt;/li&gt;
&lt;li&gt;PyCharm &amp;ndash; Python&lt;/li&gt;
&lt;li&gt;VSCode &amp;ndash; for JavaScript&lt;/li&gt;
&lt;li&gt;WebStorm &amp;ndash; for JavaScript&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These should cover most use cases you&amp;rsquo;ll run into and some things will seem duplicate/redundant so you can just skip to the applicable section if you feel you &amp;ldquo;got the gist&amp;rdquo;.&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>Java Thread Programming (Part 4)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-4/</link><pubDate>Tue, 26 Oct 2021 13:04:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-4/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-3/"&gt;the previous article&lt;/a&gt;
, we discussed the visibility problem while working with multiple threads.&lt;/p&gt;
&lt;p&gt;We will discuss another similar situation in this article. However, we will use symbols and pseudocode to explain this.&lt;/p&gt;
&lt;h2 id="h2-0-symbols"&gt;Symbols&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s define the symbols first.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;L&lt;/code&gt; - Local variable, e.g., &lt;code&gt;L1&lt;/code&gt;, &lt;code&gt;L2&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;S&lt;/code&gt; - Shared variable, e.g., &lt;code&gt;S1&lt;/code&gt;, &lt;code&gt;S2&lt;/code&gt;, etc. These variables are visible among multiple threads. They can be static as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;S.X&lt;/code&gt; - here &lt;code&gt;X&lt;/code&gt; is a field of an object where &lt;code&gt;S&lt;/code&gt; is the reference of that Object, e.g., &lt;code&gt;S1.X&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Discussion: The State of Java 2021</title><link>https://foojayio.github.io/website/today/discussion-state-of-java-2021/</link><pubDate>Mon, 25 Oct 2021 14:05:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/discussion-state-of-java-2021/</guid><description>&lt;p&gt;There is a lot going in the Java world lately. A lot of this is already captured is the &lt;a href="https://snyk.io/jvm-ecosystem-report-2021/" target="_blank" rel="noopener noreferrer"&gt;Snyk JVM Ecosystem Report 2021&lt;/a&gt;
 based on a joint survey by &lt;a href="http://azul.com" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
 and &lt;a href="http://snyk.io" target="_blank" rel="noopener noreferrer"&gt;Snyk&lt;/a&gt;
. In addition, Java 17 &amp;mdash; the new LTS version &amp;mdash; was released in September and Oracle uncovered their plans to shorten the LTS release cycle to every 2 years.&lt;/p&gt;
&lt;p&gt;In a recent livestream, I had a discussion with some great folks in the Java world about the highlights of the Snyk Java Ecosystem report and the current developments in the Java world.&lt;/p&gt;</description></item><item><title>1.0 Release of Language Support for Java on Visual Studio Code</title><link>https://foojayio.github.io/website/today/announcing-the-1-0-release-of-language-support-for-java-on-visual-studio-code/</link><pubDate>Mon, 25 Oct 2021 07:53:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-the-1-0-release-of-language-support-for-java-on-visual-studio-code/</guid><description>&lt;p&gt;We are excited to announce the 1.0 release of &lt;a href="https://marketplace.visualstudio.com/items?itemName=redhat.java" title="Language Support for Java™ by Red Hat" target="_blank" rel="noopener noreferrer"&gt;Language Support for Java™ by Red Hat&lt;/a&gt;
 on Visual Studio Code.&lt;/p&gt;
&lt;p&gt;We believe this is a significant milestone for Java support on Visual Studio Code and the result of a multi-year collaboration between Microsoft, Red Hat and the entire Visual Studio Code and Java community. This release wouldn&amp;rsquo;t have been possible without your support and we want to thank everyone who has provided feedback or made contributions.&lt;/p&gt;</description></item><item><title>Git Archeology: Removing the Sands of Time from Code</title><link>https://foojayio.github.io/website/today/git-archeology/</link><pubDate>Sat, 23 Oct 2021 06:55:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/git-archeology/</guid><description>&lt;p&gt;Working on a large codebase, it&amp;rsquo;s pretty normal to not remember every small or large subsystem or implementation choice. Be it whether you&amp;rsquo;re new to a codebase, or you&amp;rsquo;ve been focused on a specific area of the codebase.&lt;/p&gt;
&lt;p&gt;When working on refactorings or bug fixes, I often end up in areas I might not be too familiar with. Generally not dramatic, it happens quite often that I&amp;rsquo;m stopping what I&amp;rsquo;m doing because I need to decide on how to move forward. As software engineers, we have to make so many micro-decisions every minute that we&amp;rsquo;re pretty used to it.&lt;/p&gt;</description></item><item><title>Understanding Apache Maven (Part 5): Dependencies in Maven</title><link>https://foojayio.github.io/website/today/understanding-apache-maven-part-5-dependencies-in-maven/</link><pubDate>Fri, 22 Oct 2021 20:48:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-apache-maven-part-5-dependencies-in-maven/</guid><description>&lt;p&gt;In this, &lt;a href="https://foojayio.github.io/website/today/author/c-guntur/"&gt;part 5 of the series&lt;/a&gt;
, a walkthrough of the topic of Maven dependencies is covered!&lt;/p&gt;
&lt;h2 id="h2-0-what-are-dependencies"&gt;What are dependencies&lt;/h2&gt;
&lt;p&gt;Dependencies are the basic building blocks of a Maven project.&lt;/p&gt;
&lt;p&gt;Imagine writing code that requires logging output or using String utilities or parsing JSON text. The logic can be coded into the project&amp;hellip; or a library can be used. Most of the time, it makes sense to harness an existing library to minimize the amount of code needed. This also encourages reuse.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 3)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-3/</link><pubDate>Thu, 21 Oct 2021 13:20:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-3/</guid><description>&lt;p&gt;Continuing &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-2/"&gt;from part 2&lt;/a&gt;
, let&amp;rsquo;s start this article with a bit of context first (&lt;em&gt;and if you don&amp;rsquo;t like reading text, you can skip this introduction, and go directly to the section below where I discuss pieces of code&lt;/em&gt;).&lt;/p&gt;
&lt;h2 id="h2-0-context"&gt;Context&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When we start an application program, the operating system creates a process.&lt;/li&gt;
&lt;li&gt;Each process has a unique id (we call it PID) and a memory boundary.&lt;/li&gt;
&lt;li&gt;A process allocates its required memory from the main memory, and it manipulates data within a boundary.&lt;/li&gt;
&lt;li&gt;No other process can access the allocated memory that is already acquired by a process.&lt;/li&gt;
&lt;li&gt;It works like a sandbox, and in that way avoids processes stepping on one another&amp;rsquo;s foot.&lt;/li&gt;
&lt;li&gt;Ideally, we can have many small processes to run multiple things simultaneously on our computers and let the operating systems scheduler schedule them as it sees fit.&lt;/li&gt;
&lt;li&gt;In fact, this is how it was done before the development of threads. However, when we want to do large pieces of work, breaking them into smaller pieces, we need to accumulate them once they are finished.&lt;/li&gt;
&lt;li&gt;And not all tiny pieces can be independent, some of them must rely on each other, and thus we need to share information amongst them.&lt;/li&gt;
&lt;li&gt;To do that, we use inter-process communication. The problem with this idea is that having too many processes on a computer and then communicating with each other isn&amp;rsquo;t cheap. And precisely that is where the notion of threads comes into the picture.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The idea of the thread is that a process can have many tiny processes within itself. These small processes can share the memory space that a process acquires. These little processes are called a thread. So the bottom line is, threads are independent execution environments in the CPU and share the same memory space. That allows them faster memory access and better performance.&lt;/p&gt;</description></item><item><title>PSA: The Risks of Remote JDWP Debugging: It's Like a Wide Open Door</title><link>https://foojayio.github.io/website/today/psa-the-risks-of-remote-jdwp-debugging/</link><pubDate>Wed, 20 Oct 2021 08:13:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/psa-the-risks-of-remote-jdwp-debugging/</guid><description>&lt;p&gt;&lt;strong&gt;It isn&amp;rsquo;t so much a security risk as it is a wide open door with everything labeled for anyone to take freely and matches to burn it all down&amp;hellip;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When I teach or lecture and mention security, I always love the analogy of security as an onion. This is a common cliché yet it&amp;rsquo;s still a powerful analogy for people who are new to the concepts. The equivalent analogy I would pick for remote debugging is like leaving your front door open with all your valuables piled in easy to spot and well labeled boxes. Calling JDWP insecure doesn&amp;rsquo;t make any sense. It wasn&amp;rsquo;t designed to be secure so it isn&amp;rsquo;t&amp;hellip;&lt;/p&gt;</description></item><item><title>Foojay Podcast #4: Why Are There So Many JDKs?</title><link>https://foojayio.github.io/website/today/foojay-podcast-4/</link><pubDate>Tue, 19 Oct 2021 15:38:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-4/</guid><description>&lt;p&gt;In this podcast, we explore the topic of why there are so many JDKs, how are they the same, and how they are different. We balance the Java perspective with a special guest from the Rust foundation to learn how a peer ecosystem works.&lt;/p&gt;
&lt;p&gt;Quick summary&amp;mdash;the role of Java as a central system runtime lead to multiple implementations and the companies that make different distributions offer support and sponsor different work. For example Azul and Microsoft worked on Apple M1, and Bellsoft and Microsoft worked on Alpine Musl. All JREs are compatible through the TCK and vendors work together on security patches for the entire ecosystem.&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>Contributing to OpenJDK Mission Control</title><link>https://foojayio.github.io/website/today/contributing-to-openjdk-mission-control/</link><pubDate>Mon, 18 Oct 2021 08:33:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/contributing-to-openjdk-mission-control/</guid><description>&lt;p&gt;Since this month is &lt;a href="https://hacktoberfest.digitalocean.com/" target="_blank" rel="noopener noreferrer"&gt;Hacktoberfest&lt;/a&gt;
, I thought it would be a good idea to talk a bit about how to contribute to the OpenJDK Mission Control project.&lt;/p&gt;
&lt;p&gt;Some of the content of this article will be applicable to any of the OpenJDK projects, especially the Skara (OpenJDK on Git) bits.&lt;/p&gt;
&lt;h2 id="h2-0-the-openjdk-mission-control-project"&gt;The OpenJDK Mission Control Project&lt;/h2&gt;
&lt;p&gt;The OpenJDK Mission Control project is the observability tools suite for OpenJDK. It contains a JMX Console, a JFR visualizer and analyzer, a heap waste analysis tool, and many other little useful tools and utilities. Since it is all open source, pretty much anyone can contribute to the project.&lt;/p&gt;</description></item><item><title>JavaFX Templates for Desktop Applications</title><link>https://foojayio.github.io/website/today/javafx-templates-for-desktop-applications/</link><pubDate>Fri, 15 Oct 2021 08:48:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-templates-for-desktop-applications/</guid><description>&lt;p&gt;Here on Foojay we already talked about JavaFX write-once-run-everywhere applications and how they can be created on GitHub with Gluon and GraalVM:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx-part-1/"&gt;Creating Mobile Apps with JavaFX&lt;/a&gt;
 by Gail Anderson&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/cross-platform-development-in-java-with-gluon-and-graalvm/"&gt;Cross-Platform Development in Java with Gluon and GraalVM&lt;/a&gt;
 by Bruno Lowagie&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/native-applications-for-multiple-devices-from-a-single-javafx-project-with-gluon-mobile-and-github-actions/"&gt;Native Applications for Multiple Devices from a Single JavaFX Project with Gluon Mobile and GitHub Actions&lt;/a&gt;
 by myself&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this post, we are going to take a look at other different approaches.&lt;/p&gt;</description></item><item><title>Book Review: "Effortless Cloud-Native App Development Using Skaffold"</title><link>https://foojayio.github.io/website/today/book-review-effortless-cloud-native-app-development-using-skaffold/</link><pubDate>Fri, 15 Oct 2021 08:19:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-effortless-cloud-native-app-development-using-skaffold/</guid><description>&lt;figure class="wp-block-image size-large is-resized"&gt;
 &lt;a target="_blank" href="https://www.packtpub.com/product/effortless-cloud-native-app-development-using-skaffold/9781801077118"&gt;&lt;img fetchpriority="high" decoding="async" src="effortless-cloud-skaffold-835x1024.png" alt="" class="wp-image-49805" width="299" height="367"&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;In &amp;ldquo;&lt;a href="https://www.packtpub.com/product/effortless-cloud-native-app-development-using-skaffold/9781801077118" target="_blank" rel="noopener noreferrer"&gt;Effortless Cloud-Native App Development Using Skaffold&lt;/a&gt;
&amp;rdquo;, Ashish Choudhary provides a thorough overview of &lt;a href="https://skaffold.dev/" target="_blank" rel="noopener noreferrer"&gt;Skaffold&lt;/a&gt;
, with the book&amp;rsquo;s subtitle clearly defining its agenda: &amp;ldquo;Simplify the development and deployment of Cloud-native SpringBoot applications on Kubernetes with Skaffold&amp;rdquo;.&lt;/p&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Section 1, &amp;ldquo;The Kubernetes Nightmare &amp;ndash; Skaffold to the Rescue&amp;rdquo;, promises to describe &amp;ldquo;the pain and suffering of developing an application with Kubernetes&amp;rdquo;, with Skaffold as the solution to help in automating the building, pushing, and deployment of applications running on Kubernetes.&lt;/p&gt;</description></item><item><title>Faster Maven Builds (Part 2): Inside Docker</title><link>https://foojayio.github.io/website/today/faster-maven-builds-part-2/</link><pubDate>Thu, 14 Oct 2021 08:33:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/faster-maven-builds-part-2/</guid><description>&lt;p&gt;Following on from &lt;a href="https://foojayio.github.io/website/today/faster-maven-builds-1/"&gt;different techniques&lt;/a&gt;
 to speed up your Maven builds, I&amp;rsquo;d like to widen the scope and do the same for Maven builds &lt;em&gt;inside Docker&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Between each run, we change the source code by adding a single blank line; between each section, we remove all built images, including the intermediate ones that are the results of the multi-stage build. The idea is to avoid reusing a previously built image.&lt;/p&gt;
&lt;h2 id="h2-0-baseline"&gt;Baseline&lt;/h2&gt;
&lt;p&gt;To compute a helpful baseline, we need a sample project. I created &lt;a href="https://github.com/nfrankel/fast-maven-builds" target="_blank" rel="noopener noreferrer"&gt;one&lt;/a&gt;
 just for this purpose: it&amp;rsquo;s a relatively small Kotlin project.&lt;/p&gt;</description></item><item><title>How to Do Faster Maven Builds (Part 1)</title><link>https://foojayio.github.io/website/today/faster-maven-builds-1/</link><pubDate>Thu, 14 Oct 2021 08:27:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/faster-maven-builds-1/</guid><description>&lt;p&gt;Builds require a few properties, chief among them reproducibility. I would consider speed to be low on the order of priorities. However, it&amp;rsquo;s also one of the most limiting factors to your release cycle: if your build takes &lt;em&gt;T&lt;/em&gt; , you cannot release faster than each &lt;em&gt;T&lt;/em&gt;. Hence, you&amp;rsquo;ll probably want to speed up your builds after you&amp;rsquo;ve reached a certain maturity level to enable more frequent releases.&lt;/p&gt;
&lt;p&gt;I want to detail some techniques you can leverage to make your Maven builds faster in this article. The &lt;a href="https://foojayio.github.io/website/today/faster-maven-builds-part-2/"&gt;next article&lt;/a&gt;
 focuses on how to do the same inside of Docker.&lt;/p&gt;</description></item><item><title>GlassFish &amp; Payara Auto-Clustering for Jakarta EE Applications</title><link>https://foojayio.github.io/website/today/glassfish-payara-auto-clustering-jakarta-ee/</link><pubDate>Wed, 13 Oct 2021 13:27:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/glassfish-payara-auto-clustering-jakarta-ee/</guid><description>&lt;figure class="alignleft is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="https://jelastic.com/blog/wp-content/uploads/2021/09/GlassFish-and-Payara-clustering.png" alt="" class="wp-image-55851" width="400" height="216"&gt;
&lt;/figure&gt;
&lt;p&gt;Ensuring trouble-proof 24/7 service delivery is among one of the most discussed areas in cloud hosting for the last few years. And the very obvious and commonly used solution here is building a clustered infrastructure for your project.&lt;/p&gt;
&lt;p&gt;Intending to help our customers to deal with such a non-trivial task and save time for other project-related activities, we created a special high-availability solution, designed to facilitate the Jakarta EE application hosting &amp;ndash; embedded &lt;strong&gt;Auto-Clustering for GlassFish and Payara&lt;/strong&gt; application servers.&lt;/p&gt;</description></item><item><title>Getting Started with Jakarta EE 9: Jakarta EE 9.1</title><link>https://foojayio.github.io/website/today/getting-started-with-jakarta-ee-9-jakarta-ee-9-1/</link><pubDate>Wed, 13 Oct 2021 08:02:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-jakarta-ee-9-jakarta-ee-9-1/</guid><description>&lt;p&gt;Jakarta EE 9.1 was officially released at the end of May 2021.&lt;/p&gt;
&lt;p&gt;The objective of Jakarta EE 9.1 is to provide certification on Java SE 11 and not to deliver new features. These are scheduled for Jakarta EE 10.&lt;/p&gt;
&lt;p&gt;In this article, we describe how you can use Jakarta EE 9.1 and some background around Jakarta EE 9.1.&lt;/p&gt;
&lt;h2 id="h2-0-using-jakarta-ee-9-1"&gt;Using Jakarta EE 9.1&lt;/h2&gt;
&lt;p&gt;Just as with Jakarta EE 9, you can easily define all dependencies on Jakarta EE 9.1 for your web application by defining the &lt;code&gt;jakarta.jakartaee-web-api&lt;/code&gt; artifact in your Maven pom file.&lt;/p&gt;</description></item><item><title>Payara Platform October 2021 Survey</title><link>https://foojayio.github.io/website/today/payara-platform-october-2021-survey/</link><pubDate>Wed, 13 Oct 2021 07:58:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/payara-platform-october-2021-survey/</guid><description>&lt;p&gt;&lt;a href="https://www.payara.fish/Survey" target="_blank" rel="noopener noreferrer"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="alignnone wp-image-49781 size-medium" src="MicrosoftTeams-image-33-700x394.jpg" alt="" width="700" height="394"&gt;
&lt;p&gt;](&lt;a href="https://www.payara.fish/Survey" target="_blank" rel="noopener noreferrer"&gt;https://www.payara.fish/Survey&lt;/a&gt;
)&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;We are inviting all Payara Platform community users to &lt;a href="https://www.payara.fish/Survey" target="_blank" rel="noopener noreferrer"&gt;answer a few questions&lt;/a&gt;
 about your use of the Payara Platform and ecosystem components.&lt;/p&gt;
&lt;p&gt;We want to know what you like, what you want to see improved, and we&amp;rsquo;re giving you the opportunity to vote on new features you&amp;rsquo;d like to see added to the Payara Platform.&lt;/p&gt;
&lt;p&gt;Your survey answers help drive future development efforts for the Payara Platform.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 2)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-2/</link><pubDate>Tue, 12 Oct 2021 09:07:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-2/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-1/"&gt;our earlier article&lt;/a&gt;
, we explained the background to threading and how to create and start a thread.&lt;/p&gt;
&lt;p&gt;In this article, let&amp;rsquo;s see an example where we can use Threads to our benefit.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s assume we are going to build a web server. For the sake of the example, let&amp;rsquo;s constrain ourselves to one single use case, which is that the web server will listen to any client, and if it receives a URL, it will return the top five most frequently used words in that website.&lt;/p&gt;</description></item><item><title>On The Costs of Hidden Logging</title><link>https://foojayio.github.io/website/today/the-costs-of-hidden-logging/</link><pubDate>Mon, 11 Oct 2021 08:05:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-costs-of-hidden-logging/</guid><description>&lt;p&gt;A while ago I received a customer escalation ticket regarding performance degradation when using &lt;a href="https://docs.datadoghq.com/tracing/profiler/" target="_blank" rel="noopener noreferrer"&gt;Datadog Continuous Profiler for Java&lt;/a&gt;
. The degradation was observable as an increased CPU usage as well as unexpected latency.&lt;/p&gt;
&lt;h2 id="h2-0-the-beginning-unusual-customer-escalation"&gt;The Beginning: Unusual Customer Escalation&lt;/h2&gt;
&lt;p&gt;To bootstrap the troubleshooting, I usually try to isolate the area which might be causing the regression.&lt;/p&gt;
&lt;p&gt;The profiler is packaged as a Java agent and for ease of use it is bundled together with the Datadog Java tracer agent. The profiler itself uses JDK Flight Recorder (JFR) under the hood.&lt;/p&gt;</description></item><item><title>JReleaser: Looking for Translation Contributions</title><link>https://foojayio.github.io/website/today/jreleaser-looking-for-translation-contributions/</link><pubDate>Fri, 08 Oct 2021 20:45:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/jreleaser-looking-for-translation-contributions/</guid><description>&lt;p&gt;The &lt;a href="https://jreleaser.org/" target="_blank" rel="noopener noreferrer"&gt;JReleaser project&lt;/a&gt;
 has recently added internationalization support to its CLI tool, with complete translations for English, German, French, and Brazilian Portuguese. A translation to Italian is currently in the works.&lt;/p&gt;
&lt;p&gt;The project is looking for people who would like to contribute translations to their native language, allowing JReleaser to reach and help an even wider audience.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in joining these efforts, please open a ticket at &lt;a href="https://github.com/jreleaser/jreleaser/issues" target="_blank" rel="noopener noreferrer"&gt;https://github.com/jreleaser/jreleaser/issues&lt;/a&gt;
, letting the project maintainers know which language you&amp;rsquo;d like to tackle.&lt;/p&gt;</description></item><item><title>Understanding Apache Maven (Part 4): Maven Lifecycle</title><link>https://foojayio.github.io/website/today/understanding-apache-maven-part-4-maven-lifecycle/</link><pubDate>Fri, 08 Oct 2021 09:00:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-apache-maven-part-4-maven-lifecycle/</guid><description>&lt;p&gt;In Part 4 of the series, a walkthrough of the Maven lifecycles and executions is covered.&lt;/p&gt;
&lt;p&gt;Apache Maven executions are tied to &lt;strong&gt;lifecycles&lt;/strong&gt;. A lifecycle groups a sequence of activities. Maven provides three basic lifecycles for its standard build management. More lifecycles can be created as needed, though that is a rare need. There are three standard lifecycles provided by Maven.&lt;/p&gt;
&lt;h2 id="h2-0-standard-lifecycles"&gt;Standard lifecycles&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;clean&lt;/strong&gt; &amp;ndash; Intended for clean-up of any prior build-managed outputs and artifacts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;default (build)&lt;/strong&gt; &amp;ndash; Intended for project build, test and deployment of artifacts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;site&lt;/strong&gt; &amp;ndash; Intended for project site documentation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-1-what-s-in-a-lifecycle"&gt;What&amp;rsquo;s in a lifecycle?&lt;/h3&gt;
&lt;p&gt;A lifecycle is a collection of related activities pertaining to a specific type of build-management. Standard lifecycles include generation of build output artifacts, creation of a documentation site as well as cleaning any artifacts produced from a prior execution.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 1)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-1/</link><pubDate>Thu, 07 Oct 2021 10:07:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-1/</guid><description>&lt;h2 id="h2-0-what-is-a-thread"&gt;What is a Thread?&lt;/h2&gt;
&lt;p&gt;We write code in a file line by line, and then it gets executed. To be able to execute a piece of code requires an execution environment. In Java, &lt;strong&gt;a thread is an execution environment&lt;/strong&gt;. If a program has only one execution environment, then we call this program a single-threaded program.&lt;/p&gt;
&lt;p&gt;Interestingly, in Java, we can create a lot of threads to run different parts of the code of a program executing independently. And when we have achieved that, we call it a multi-threaded program.&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>Understand Stack Traces and how you can Debug Better With them</title><link>https://foojayio.github.io/website/today/understanding-stack-traces-and-debugging-them-further/</link><pubDate>Tue, 05 Oct 2021 10:57:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-stack-traces-and-debugging-them-further/</guid><description>&lt;p&gt;Recently a junior developer sent me an obfuscated stack trace and was pretty surprised when I instantly knew the problem and pointed him at the necessary change. To be fair, I had the advantage of being the person who put that bug there in the first place&amp;hellip; But still the ability to glean information from a stack trace, even an obfuscated one, is a serious skill.&lt;/p&gt;
&lt;p&gt;The stack trace in question was a &lt;code&gt;ClassNotFoundException&lt;/code&gt;, that&amp;rsquo;s typically pretty easy and already tells you everything you need to know. The class isn&amp;rsquo;t there. Why it isn&amp;rsquo;t there is really a matter of what we did wrong. In this case, since the project was obfuscated, the bug was that this class wasn&amp;rsquo;t excluded from obfuscation.&lt;/p&gt;</description></item><item><title>Book Review: Quarkus for Spring Developers</title><link>https://foojayio.github.io/website/today/book-review-quarkus-for-spring-developers/</link><pubDate>Mon, 04 Oct 2021 08:25:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-quarkus-for-spring-developers/</guid><description>&lt;h2 id="h2-0-"&gt;&lt;a href="https://developers.redhat.com/e-books/quarkus-spring-developers" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/book-review-quarkus-for-spring-developers/quarkus-book-340x510.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;h2 id="h2-1-key-take-aways"&gt;Key Take-Aways&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Quarkus and Spring are both powerful frameworks.&lt;/li&gt;
&lt;li&gt;Developers with years of Spring experience can consult side-by-side examples to quickly shift code and tests to Quarkus.&lt;/li&gt;
&lt;li&gt;Quarkus has moved quickly by leveraging proven technologies from existing Java frameworks and standards.&lt;/li&gt;
&lt;li&gt;Cloud-Native and Java-Native-Image (GraalVM / Mandrel) combine to run Quarkus apps very quickly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://developers.redhat.com/e-books/quarkus-spring-developers" target="_blank" rel="noopener noreferrer"&gt;Quarkus for Spring Developers&lt;/a&gt;
 is a straight-forward guide to enable senior developers to quickly shift their Spring skills to leverage the &amp;ldquo;supersonic subatomic&amp;rdquo; Quarkus framework, and junior/mid-level developers to learn two frameworks at once.&lt;/p&gt;</description></item><item><title>Understanding Apache Maven: Maven Coordinates &amp; POM Inheritance</title><link>https://foojayio.github.io/website/today/understanding-apache-maven-part-3-maven-coordinates-pom-inheritance/</link><pubDate>Fri, 01 Oct 2021 10:05:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-apache-maven-part-3-maven-coordinates-pom-inheritance/</guid><description>&lt;p&gt;In Part 3 of the series, an explanation of dependency coordinates and &amp;ldquo;distinguishers&amp;rdquo; as well as a more detailed look at POM hierarchies are covered.&lt;/p&gt;
&lt;h2 id="h2-0-what-are-dependency-coordinates"&gt;What are dependency coordinates?&lt;/h2&gt;
&lt;p&gt;There are hundreds or thousands of projects that produce artifacts. Some such artifacts can potentially be used in a current project as libraries. For instance, a project may depend on a logging framework or a JSON library. It is possible to host many such dependency artifacts on a central repository. Maven&amp;rsquo;s primary such repository is called &lt;strong&gt;Maven Central&lt;/strong&gt;. Many other such repositories also exist. More on this later!&lt;/p&gt;</description></item><item><title>K8ssandra Performance Benchmarks on Cloud Managed Kubernetes</title><link>https://foojayio.github.io/website/today/k8ssandra-performance-benchmarks-on-cloud-managed-kubernetes/</link><pubDate>Thu, 30 Sep 2021 08:06:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/k8ssandra-performance-benchmarks-on-cloud-managed-kubernetes/</guid><description>&lt;p&gt;Is there a cost to running Apache Cassandra in containers? How about on Kubernetes? We decided to answer those questions and benchmark K8ssandra on Amazon Web Services (AWS), Google Cloud Platform (GCP) and Azure managed Kubernetes services, comparing it to a Cassandra cluster running on AWS EC2 instances. The latter, being a very common setup for enterprises operating Cassandra clusters, serves as our baseline comparing apples to &amp;ldquo;apples in containers&amp;rdquo;.&lt;/p&gt;</description></item><item><title>This Just In: JReleaser 0.7.0 Released!</title><link>https://foojayio.github.io/website/today/jreleaser-0-7-0-released/</link><pubDate>Wed, 29 Sep 2021 12:12:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/jreleaser-0-7-0-released/</guid><description>&lt;p&gt;JReleaser is a tool that streamlines creating releases for [Java] projects.&lt;/p&gt;
&lt;p&gt;It can create a GitHub/GitLab/Gitea release, while also packaging binaries for Homebrew, Snapcraft, Docker, Chocolatey, Scoop, JBang and, more than that, announces releases to Twitter, SdkMan!, e-mail, Zulip, Discord, Gitter, Slack, Teams, and more.&lt;/p&gt;
&lt;p&gt;This is a small release as core features are mostly complete:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;JDKs:&lt;/strong&gt; The jdks-gradle-plugin now unpacks the chosen JDK distribution in a subdirectory that matches the configured named. This is a breaking change! Additionally, tasks for removing cached JDKs were also added.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; Linking a release to a discussion is automatically skipped if the release is a draft or early access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changelog:&lt;/strong&gt; You can now specify if a full or partial changelog should be generated when the release is early access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Homebrew:&lt;/strong&gt; Fixes automatic generation of Cask v.s Formula.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Release:&lt;/strong&gt; You may skip creating a release but keep the tag. This is useful for the case when you&amp;rsquo;d like to push release assets via an uploader but want to skip creating a Git release.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Full changelog can be found at the &lt;a href="https://github.com/jreleaser/jreleaser/releases/tag/v0.7.0" target="_blank" rel="noopener noreferrer"&gt;v0.7.0&lt;/a&gt;
 release page.&lt;/p&gt;</description></item><item><title>Arrays and Object Reference Java Challenge Code Quiz</title><link>https://foojayio.github.io/website/today/arrays-and-object-reference-java-challenge-code-quiz/</link><pubDate>Wed, 29 Sep 2021 11:18:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/arrays-and-object-reference-java-challenge-code-quiz/</guid><description>&lt;p&gt;Arrays are objects in Java.&lt;/p&gt;
&lt;p&gt;Variables in Java actually store references to the object, instead of the real object.&lt;/p&gt;
&lt;p&gt;When we pass an object reference to a method, we are changing the object that is in the heap of the memory.&lt;/p&gt;
&lt;p&gt;Considering the explanation above, can you solve the following &lt;strong&gt;Java Challenge&lt;/strong&gt;? What is going to happen when you run the following code?&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java"&gt;public class ArrayChallenge2 {
 public static void main(String... doYourBest) {
 int[] anyArray = new int[5];
 anyArray[0] = 0;
 anyArray[1] = 2;
 anyArray[2] = 4;
 anyArray[3] = 6;
 anyArray[4] = 8;

 int[] otherArray = anyArray;
 doSum(anyArray);
 doSum(otherArray);

 Arrays.stream(anyArray).forEach(System.out::println);
 }
 private static void doSum(int[] anyArray) {
 for (int i = 0; i &amp;lt; anyArray.length; i++) {
 anyArray[i] = anyArray[i] + 2;
 }
 }
}
&lt;/pre&gt;
&lt;p&gt;a) 0&lt;/p&gt;</description></item><item><title>Debug Real World Applications using a Systemic Proven Process</title><link>https://foojayio.github.io/website/today/the-debugger-checklist-part-ii/</link><pubDate>Tue, 28 Sep 2021 08:54:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-debugger-checklist-part-ii/</guid><description>&lt;p&gt;In the &lt;a href="https://foojayio.github.io/website/today/the-debugger-checklist-part-i/"&gt;Debugger Checklist (Part I)&lt;/a&gt;
, I introduced some of the high level concepts and reviewed some of the common things you can do. In this part, we&amp;rsquo;ll get down to the process. Again, it&amp;rsquo;s important to stress that this is boiled down and concentrated!&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t want to discuss issue trackers, unit testing and proper TDD. I think there are many resources covering all of these. The focus of these posts is the debug process itself which often gets neglected as &amp;ldquo;tools&amp;rdquo;. There&amp;rsquo;s a lot of technique that separates the seasoned developer from a junior. Furthermore, there are many small advancements and changes we can&amp;rsquo;t possibly keep up with. I&amp;rsquo;d like to cover all of those things (some in future posts).&lt;/p&gt;</description></item><item><title>Introducing Jetpack Compose for Desktop</title><link>https://foojayio.github.io/website/today/state-jvm-desktop-frameworks-jetpack-compose-for-desktop/</link><pubDate>Mon, 27 Sep 2021 07:36:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/state-jvm-desktop-frameworks-jetpack-compose-for-desktop/</guid><description>&lt;p&gt;The previous articles of this series were dedicated to frameworks that adopted the same traditional Object-Oriented-Programming approach. Components were modeled as classes. This week&amp;rsquo;s article is dedicated to Jet Compose for Desktop, the new kid on the block that offers a completely different approach.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/state-jvm-desktop-frameworks/1/" target="_blank" rel="noopener noreferrer"&gt;The state of JVM desktop frameworks: introduction&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/state-jvm-desktop-frameworks/2/" target="_blank" rel="noopener noreferrer"&gt;The state of JVM desktop frameworks: Swing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/state-jvm-desktop-frameworks/3/" target="_blank" rel="noopener noreferrer"&gt;The state of JVM desktop frameworks: SWT&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/state-jvm-desktop-frameworks/4/" target="_blank" rel="noopener noreferrer"&gt;The state of JVM desktop frameworks: TornadoFX&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="_getting_your_feet_wet"&gt;Getting your feet wet&lt;/h2&gt;
&lt;p&gt;Originally, Jetpack Compose is a framework for the Android runtime. Compose for Desktop is its port to the .&lt;/p&gt;</description></item><item><title>Getting Started with Java 17 on the Raspberry Pi</title><link>https://foojayio.github.io/website/today/java-17-on-the-raspberry-pi/</link><pubDate>Sat, 25 Sep 2021 13:56:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-17-on-the-raspberry-pi/</guid><description>&lt;p&gt;As part of the &lt;a href="https://foojayio.github.io/website/today/schedule-for-foojay-virtual-openjdk-17-jug-tour/"&gt;Foojay Virtual OpenJDK 17+ JUG Tour&lt;/a&gt;
, I was asked to present the state of Java and JavaFX 17 on the Raspberry Pi.&lt;/p&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;So, a perfect opportunity to freshen up my &lt;a href="https://twitter.com/hashtag/JavaOnRaspberryPi" target="_blank" rel="noopener noreferrer"&gt;#JavaOnRaspberryPi&lt;/a&gt;
 presentation with some hot-off-the-press versions.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;UPDATE 2021-08-30: the recording of the presentation has been published on YouTube.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/m4mP140npqc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;In the past, I have been experimenting with Java 16 on the Raspberry Pi (see &amp;ldquo;&lt;a href="https://foojayio.github.io/website/today/building-openjdk-from-github-sources-on-64-bit-raspberry-pi/"&gt;Building OpenJDK from GitHub Sources on 64-bit Raspberry Pi&lt;/a&gt;
&amp;rdquo;) but now that version 17 is waiting around the corner, it&amp;rsquo;s time to prepare our Raspberry Pi for the upcoming new &amp;ldquo;long-term-supported&amp;rdquo; (LTS) version.&lt;/p&gt;</description></item><item><title>Reclaim 25% of Java Heap Memory &amp; Lower Your Cloud Bills</title><link>https://foojayio.github.io/website/today/compact-strings-reclaim-25-of-java-heap-memory-lower-your-cloud-bills/</link><pubDate>Fri, 24 Sep 2021 09:15:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/compact-strings-reclaim-25-of-java-heap-memory-lower-your-cloud-bills/</guid><description>&lt;p&gt;Did you know that you can save up to 25% of your heap memory and your Cloud bills without any effort? Well, it&amp;rsquo;s true. Many exciting features have been added to the latest releases of Java recently and I&amp;rsquo;m going to cover one that is often overlooked in this article.&lt;/p&gt;
&lt;p&gt;We all know that Strings are the most used Object in any Java application. In fact, they probably take up almost half of the heap size of any Java application. Before delving into this much further, let me answer your obvious question: what are Strings made of?&lt;/p&gt;</description></item><item><title>Building Command Line Interfaces with Kotlin using picoCLI</title><link>https://foojayio.github.io/website/today/building-command-line-interfaces-with-kotlin-using-picocli/</link><pubDate>Thu, 23 Sep 2021 07:05:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-command-line-interfaces-with-kotlin-using-picocli/</guid><description>&lt;p&gt;&lt;em&gt;TL;DR : We&amp;rsquo;ll dive into a few interesting bits about CLI applications and picoCLI. But you can directly &lt;a href="https://github.com/jlengrand/swacli" target="_blank" rel="noopener noreferrer"&gt;see the code here&lt;/a&gt;
, or view my related conference talk &lt;a href="https://www.youtube.com/watch?v=Rc_D4OTKidU&amp;amp;amp;t=460s" target="_blank" rel="noopener noreferrer"&gt;here&lt;/a&gt;
.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As a developer, there is a large chance that you use Command Line Interfaces (CLIs) every day. From Git, to kubectl or Maven, they are everywhere. In this article, we&amp;rsquo;ll look into use cases where CLIs are a great idea. We&amp;rsquo;ll also dive into best practises, and discover one of the most used library for CLIs in the JVM world: &lt;strong&gt;&lt;a href="https://picocli.info/" target="_blank" rel="noopener noreferrer"&gt;picoCLI&lt;/a&gt;
&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Thorntail Fat, Thin and Skinny Approach for Java Microservices</title><link>https://foojayio.github.io/website/today/thorntail-fat-thin-skinny-java-microservices/</link><pubDate>Wed, 22 Sep 2021 16:25:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/thorntail-fat-thin-skinny-java-microservices/</guid><description>&lt;p&gt;&lt;a href="https://thorntail.io/" target="_blank" rel="noopener noreferrer"&gt;Thorntail&lt;/a&gt;
, originally &lt;a href="https://wildfly-swarm.io/" target="_blank" rel="noopener noreferrer"&gt;WildFly Swarm&lt;/a&gt;
, is most suitable for packaging applications as &lt;em&gt;JAR&lt;/em&gt; , &lt;em&gt;WAR,&lt;/em&gt; or &lt;em&gt;EAR&lt;/em&gt; files. The most important value is in the functional agility the Thorntail provides. You can start with the stripped down version of Thorntail, adding the required parts and application code on top.&lt;/p&gt;
&lt;figure class="aligncenter is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="https://jelastic.com/blog/wp-content/uploads/2018/09/jvm-microservice.png" alt="microservices" class="wp-image-30149" width="329" height="411"&gt;
&lt;/figure&gt;
&lt;p&gt;Below we will describe how to build and deploy Thorntail based applications using Fat, Thin and Skinny approaches. The application will be packaged in the Jar/War format automatically with the help of &lt;a href="https://github.com/jelastic-jps/thorntail" target="_blank" rel="noopener noreferrer"&gt;Builder add-ons&lt;/a&gt;
 prepared by Jelastic. The topology will consist of Maven build node and JVM containers for running microservices.&lt;/p&gt;</description></item><item><title>Debugger Checklist: Bug Solving Process</title><link>https://foojayio.github.io/website/today/the-debugger-checklist-part-i/</link><pubDate>Tue, 21 Sep 2021 09:37:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-debugger-checklist-part-i/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/the-debugger-checklist-part-i/Blog-Header-1200x600-px1-700x350.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Win at debugging by following an organized process and leveraging the tools you already have!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a disorganized person by nature. When I follow a process it&amp;rsquo;s by habit and intuition. But when a debugging problem keeps me up at night and gets me to that state of mind where a career of raising sheep in New Zealand seems like an attractive option&amp;hellip; That&amp;rsquo;s when I need to back off and walk through this process in an orderly fashion. This process never fails. When you walk through it, you can track any problem.&lt;/p&gt;</description></item><item><title>VS Code: SpringOne Updates, UX Improvements, Community Feedback</title><link>https://foojayio.github.io/website/today/vs-code-java-august-updates-springone-updates-ux-improvements-community-feedback/</link><pubDate>Mon, 20 Sep 2021 06:46:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/vs-code-java-august-updates-springone-updates-ux-improvements-community-feedback/</guid><description>&lt;p&gt;Hi everyone, welcome to the August edition of the Visual Studio Code Java update!&lt;/p&gt;
&lt;p&gt;In this article, we are going to share some exciting updates from the SpringOne 2021 conference, as well as various user experience improvements.&lt;/p&gt;
&lt;p&gt;When it comes to Java development, we always keep Spring developers in mind. In this year&amp;rsquo;s &lt;a href="https://devblogs.microsoft.com/java/join-microsoft-at-springone-2021/" title="SpringOne conference" target="_blank" rel="noopener noreferrer"&gt;SpringOne conference&lt;/a&gt;
, we shared an update on our Spring tooling support in Visual Studio Code, and showcased various Spring related features in two breakout sessions.&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>Parallel Streams Java Code Quiz</title><link>https://foojayio.github.io/website/today/parallel-streams-java-code-quiz/</link><pubDate>Wed, 15 Sep 2021 09:04:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/parallel-streams-java-code-quiz/</guid><description>&lt;p&gt;Using streams concurrently with the parallel method is a good idea to optimize performance.&lt;/p&gt;
&lt;p&gt;However, it&amp;rsquo;s not always the case that we can use the parallel method, for example, when we depend on the order of logic execution. When we can process the method concurrently, the parallel method comes in handy.&lt;/p&gt;
&lt;p&gt;In the following Java Challenge, we will explore the use of parallel streams with the forEachOrdered method!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s time to improve your Java skills with this Parallel Stream Java Challenge&lt;/p&gt;</description></item><item><title>Getting Started with Java 17 and IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/getting-started-with-java-17-and-intellij-idea/</link><pubDate>Tue, 14 Sep 2021 09:20:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-java-17-and-intellij-idea/</guid><description>&lt;p&gt;A new Java release every six months can be exciting, overwhelming, or both. Given that &lt;a href="https://openjdk.java.net/projects/jdk/17/" target="_blank" rel="noopener noreferrer"&gt;Java 17&lt;/a&gt;
 is also an &lt;a href="https://www.oracle.com/java/technologies/java-se-support-roadmap.html" target="_blank" rel="noopener noreferrer"&gt;LTS&lt;/a&gt;
 release, it&amp;rsquo;s not just the developers but enterprises also noticing it. If you have been &lt;a href="https://www.ted.com/talks/tim_urban_inside_the_mind_of_a_master_procrastinator" target="_blank" rel="noopener noreferrer"&gt;waiting&lt;/a&gt;
 to move on from Java 8 or 11, now is the time to weigh its advantages.&lt;/p&gt;
&lt;p&gt;In this article, I will limit the coverage of Java 17 to its language features &amp;ndash; &lt;a href="https://openjdk.java.net/jeps/409" target="_blank" rel="noopener noreferrer"&gt;Sealed Classes&lt;/a&gt;
 and &lt;a href="https://openjdk.java.net/jeps/406" target="_blank" rel="noopener noreferrer"&gt;Pattern Matching for switch&lt;/a&gt;
. I&amp;rsquo;ll cover what these features are, why you might need them, and how you can start using them in &lt;a href="https://blog.jetbrains.com/idea/2021/08/intellij-idea-2021-2-1/" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA&lt;/a&gt;
. I will also highlight how these features can reduce the &lt;em&gt;cognitive complexity&lt;/em&gt; for developers. You can use &lt;a href="https://openjdk.java.net/projects/jdk/17/" target="_blank" rel="noopener noreferrer"&gt;this link&lt;/a&gt;
 for a comprehensive list of all the new Java 17 features.&lt;/p&gt;</description></item><item><title>Project Panama for Newbies (Part 3)</title><link>https://foojayio.github.io/website/today/project-panama-for-newbies-part-3/</link><pubDate>Mon, 13 Sep 2021 08:53:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/project-panama-for-newbies-part-3/</guid><description>&lt;p&gt;&lt;strong&gt;Updated December 31, 2025:&lt;/strong&gt; This article now features Java 25 and the Foreign Function &amp;amp; Memory (FFM) API, which has been a standard feature since JDK 22 (&lt;a href="https://openjdk.java.net/jeps/454" target="_blank" rel="noopener noreferrer"&gt;JEP-454&lt;/a&gt;
).&lt;/p&gt;
&lt;figure class="wp-block-image size-full is-resized is-style-default"&gt;
 &lt;img fetchpriority="high" decoding="async" width="218" height="407" src="panama_part3.png" alt="Panama for newbies Part 3" class="wp-image-46521" style="width:140px;height:230px"&gt;
 &lt;figcaption class="wp-element-caption"&gt;
 Panama for newbies Part 3
 &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Welcome to the third part of the series on Java&amp;rsquo;s Project Panama for newbies. Before jumping into this article, I want to congratulate you for getting this far, you deserve a virtual pat on the back!&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>8 Debugging Tips for IntelliJ IDEA Users You Never Knew Existed</title><link>https://foojayio.github.io/website/today/eight-debugging-tips-for-intellijidea-users-you-never-knew-existed/</link><pubDate>Thu, 09 Sep 2021 07:15:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/eight-debugging-tips-for-intellijidea-users-you-never-knew-existed/</guid><description>&lt;p&gt;As developers, we&amp;rsquo;re all familiar with debuggers. We use debugging tools on a daily basis &amp;ndash; they&amp;rsquo;re an essential part of programming. But let&amp;rsquo;s be honest. Usually, we only use the breakpoint option. If we&amp;rsquo;re feeling frisky, we might use a conditional breakpoint.&lt;/p&gt;
&lt;p&gt;But guess what, the &lt;a href="https://www.jetbrains.com/idea/" title="IntelliJ IDEA" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA&lt;/a&gt;
 debugger has many powerful and cutting-edge features that are useful for debugging more easily and efficiently. To help, we&amp;rsquo;ve compiled a list of tips and tricks from our very own developers here at &lt;a href="https://go.lightrun.com/request-a-demo?utm_source=blog&amp;amp;amp;utm_medium=LR_blog&amp;amp;amp;utm_campaign=eight-debugging-tips-for-intellijidea" title="Lightrun" target="_blank" rel="noopener noreferrer"&gt;Lightrun&lt;/a&gt;
. We hope these tips will help you find and resolve bugs faster.&lt;/p&gt;</description></item><item><title>Daemon Thread Java Code Quiz</title><link>https://foojayio.github.io/website/today/daemon-thread-java-code-quiz/</link><pubDate>Wed, 08 Sep 2021 07:29:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/daemon-thread-java-code-quiz/</guid><description>&lt;p&gt;When we are working with Threads, it&amp;rsquo;s important to know when to use a daemon or a non-daemon Thread.&lt;/p&gt;
&lt;p&gt;Do you know if the main Thread is a daemon or not? And do you know what a daemon Thread is?&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s what you will find out by trying out the following Java Challenge!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s time to improve your Java skills with this Daemon Thread Challenge&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-daemon-thread-challenge"&gt;Daemon Thread Challenge&lt;/h2&gt;
&lt;p&gt;What will happen when running the following main method?&lt;/p&gt;</description></item><item><title>Demystifying Memory Management in Modern Programming Languages</title><link>https://foojayio.github.io/website/today/demystifying-memory-management-in-modern-programming-languages/</link><pubDate>Tue, 07 Sep 2021 08:13:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/demystifying-memory-management-in-modern-programming-languages/</guid><description>&lt;p&gt;&lt;img src="https://i.imgur.com/R0mdaId.png" alt="Cover" title="Cover" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In this multi-part series, I aim to demystify the concepts behind memory management and take a deeper look at memory management in some of the modern programming languages.&lt;/p&gt;
&lt;p&gt;I hope the series would give you some insights into what is happening under the hood of these languages in terms of memory management.&lt;/p&gt;
&lt;p&gt;Learning about memory management will also help us to write more performant code as the way we write code also has an impact on memory management regardless of the automatic memory management technique used by the language.&lt;/p&gt;</description></item><item><title>Everyday Shortcuts in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/everyday-shortcuts-in-intellij-idea/</link><pubDate>Mon, 06 Sep 2021 07:27:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/everyday-shortcuts-in-intellij-idea/</guid><description>&lt;p&gt;Let&amp;rsquo;s take a look at some of my favourite keyboard shortcuts in &lt;a href="https://www.jetbrains.com/idea/" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s really helpful to use keyboard shortcuts because it speeds you up and keeps you in the flow of coding!&lt;/p&gt;
&lt;h2 id="h2-0-intention-actions-alt-enter"&gt;Intention Actions - ⌥⏎ / Alt+Enter&lt;/h2&gt;
&lt;p&gt;You can use &lt;a href="https://www.jetbrains.com/help/idea/intention-actions.html" target="_blank" rel="noopener noreferrer"&gt;this shortcut&lt;/a&gt;
 in a number of places, even when it&amp;rsquo;s not an error or when IntelliJ IDEA has not given you any indication that you could use it. It&amp;rsquo;s always worth trying it just to see what your options are.&lt;/p&gt;</description></item><item><title>Understanding Apache Maven (Part 2): POM Hierarchy and Effective POM</title><link>https://foojayio.github.io/website/today/understanding-apache-maven-part-2-pom-hierarchy/</link><pubDate>Fri, 03 Sep 2021 08:57:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-apache-maven-part-2-pom-hierarchy/</guid><description>&lt;p&gt;Following on from &lt;a href="https://foojayio.github.io/website/today/understanding-apache-maven-part-1-the-basics/"&gt;the first article on Maven basics&lt;/a&gt;
, the Project Object Model (POM) is explored, below.&lt;/p&gt;
&lt;h2 id="h2-0-what-is-the-project-object-model"&gt;What is the Project Object Model?&lt;/h2&gt;
&lt;p&gt;First, a maven POM is not a &lt;a href="https://www.pomwonderful.com/" target="_blank" rel="noopener noreferrer"&gt;popular pomegranate juice&lt;/a&gt;
 nor is it related to the colorful &lt;a href="https://www.bing.com/images/search?q=pom&amp;#43;poms" target="_blank" rel="noopener noreferrer"&gt;pom-poms&lt;/a&gt;
. A Maven POM is definitely is wonderful and brings as much joy to a developer as does a pom-pom to a kid.&lt;/p&gt;
&lt;p&gt;A POM describes build management needs of a project:&lt;/p&gt;</description></item><item><title>Do Java/Jakarta EE Standards Matter?</title><link>https://foojayio.github.io/website/today/do-java-jakarta-ee-standards-matter/</link><pubDate>Thu, 02 Sep 2021 14:43:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/do-java-jakarta-ee-standards-matter/</guid><description>&lt;p&gt;In this myth-busting webinar, Steve Millidge, founder of &lt;a href="https://www.payara.fish/dismiss-the-myths/" target="_blank" rel="noopener noreferrer"&gt;Payara&lt;/a&gt;
, will show you why standards like Java EE (i.e., now &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
) are beneficial.&lt;/p&gt;
&lt;p&gt;In this webinar, learn the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How standards help with vendor neutrality and why that is important&lt;/li&gt;
&lt;li&gt;How standards help drive competition (and why that&amp;rsquo;s good for you)&lt;/li&gt;
&lt;li&gt;How standards help you develop future proof applications&lt;/li&gt;
&lt;li&gt;How a working group offers the opportunity to shape the future of the industry&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;ve been thinking standards like Jakarta EE don&amp;rsquo;t matter, this video will show you how having standards gives you the opportunity to develop future proof applications, among other benefits.&lt;/p&gt;</description></item><item><title>Function Calculation Java Challenge</title><link>https://foojayio.github.io/website/today/function-calculation-java-challenge/</link><pubDate>Wed, 01 Sep 2021 10:10:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/function-calculation-java-challenge/</guid><description>&lt;p&gt;Functional programming is a very powerful paradigm that makes code more concise and easier to understand.&lt;/p&gt;
&lt;p&gt;In Java, the &amp;ldquo;Function&amp;rdquo; functional interface can be used as a first-class citizen function, meaning that we can pass a function to a method and declare it as a variable, giving the developer a lot of power.&lt;/p&gt;
&lt;p&gt;And now it&amp;rsquo;s time for you now to test your abilities with lambdas and functional interfaces! Get ready!&lt;/p&gt;</description></item><item><title>Foojay Podcast #3: Journey to Jakarta EE</title><link>https://foojayio.github.io/website/today/foojay-podcast-3/</link><pubDate>Tue, 31 Aug 2021 14:26:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-3/</guid><description>&lt;p&gt;Foojay community members discuss the modernization of Jakarta EE applications from the older Java EE form, including backwards-compatibility, as well as forwards-excitement about cool new developments like Microprofile.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/OgafP0YeoTE?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://open.spotify.com/show/6CpTfgn9LirzJGAtc4ICdQ" target="_blank" rel="noopener noreferrer"&gt;Spotify&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://podcasts.apple.com/be/podcast/foojay-io-the-friends-of-openjdk/id1652281304" target="_blank" rel="noopener noreferrer"&gt;Apple Podcasts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;And most others&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-guests"&gt;Guests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Rudy De Busscher, product manager of &lt;a href="https://www.payara.fish/solutions/cloud-and-payara-platform/" target="_blank" rel="noopener noreferrer"&gt;Payara&lt;/a&gt;
 and EE contributor.&lt;/li&gt;
&lt;li&gt;Josh Juneau, consultant and author of &lt;a href="https://www.amazon.com/Jakarta-EE-Recipes-Problem-Solution-Approach/dp/1484255860/ref=sr_1_3?dchild=1&amp;amp;qid=1630357538&amp;amp;refinements=p_27%3AJosh&amp;#43;Juneau&amp;amp;s=books&amp;amp;sr=1-3" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE Recipes&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Ivar Grimstad, Jakarta EE Advocate for the &lt;a href="https://www.eclipse.org/org/foundation/" target="_blank" rel="noopener noreferrer"&gt;Eclipse Foundation&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Erik Costlow, Developer Relations for &lt;a href="https://www.contrastsecurity.com/" target="_blank" rel="noopener noreferrer"&gt;Contrast Security&lt;/a&gt;
 to secure Java/Jakarta EE applications.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Announcement: Pi4J V.2 Released!</title><link>https://foojayio.github.io/website/today/pi4j-v-2-released/</link><pubDate>Mon, 30 Aug 2021 12:13:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/pi4j-v-2-released/</guid><description>&lt;p&gt;After long rework, the Pi4J library (&lt;strong&gt;a friendly object-oriented I/O API and implementation libraries for Java Programmers&lt;/strong&gt; to access the &lt;strong&gt;full I/O capabilities of the Raspberry Pi platform&lt;/strong&gt;) has taken a big step with the first release of the V.2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Pi4J Project&lt;/strong&gt; was started in &lt;strong&gt;2012&lt;/strong&gt; by &lt;strong&gt;&lt;a href="https://twitter.com/savageautomate" target="_blank" rel="noopener noreferrer"&gt;Robert Savage&lt;/a&gt;
&lt;/strong&gt; , the same year the Raspberry Pi was introduced as a tool to provide Java developers a simple and familiar object-oriented interface library to access the low-level I/O capabilities of the Raspberry Pi including &lt;strong&gt;GPIO&lt;/strong&gt; , &lt;strong&gt;I2C&lt;/strong&gt; , &lt;strong&gt;SPI&lt;/strong&gt; , &lt;strong&gt;PWM&lt;/strong&gt; , and &lt;strong&gt;Serial&lt;/strong&gt; communications.
&lt;img src="https://foojayio.github.io/website/today/pi4j-v-2-released/pi4j-overview-1024x427.jpg" alt="" loading="lazy"&gt;
 Pi4j program structure&lt;/p&gt;</description></item><item><title>Tomcat and TomEE Clustering Automation in the Cloud</title><link>https://foojayio.github.io/website/today/tomcat-tomee-clustering-automation/</link><pubDate>Mon, 30 Aug 2021 07:18:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/tomcat-tomee-clustering-automation/</guid><description>&lt;figure class="alignleft"&gt;
 &lt;img decoding="async" src="https://jelastic.com/blog/wp-content/uploads/2021/08/image11.png" alt="Tomcat TomEE Automatic Clustering"&gt;
&lt;/figure&gt;
&lt;p&gt;Apache &lt;a href="https://tomcat.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Tomcat&lt;/a&gt;
 is an open-source application server maintained by the Apache community. It is one of the most popular solutions for hosting Java applications due to its ease-of-use and lightweight yet versatile functionality. However, if you run the projects based on &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 8 (or higher), you may be interested to use &lt;a href="https://tomee.apache.org/" target="_blank" rel="noopener noreferrer"&gt;TomEE&lt;/a&gt;
 server with built-in required enterprise technology that isn&amp;rsquo;t found in Tomcat.&lt;/p&gt;
&lt;p&gt;Due to the extreme popularity of these stacks globally, and within Jelastic PaaS in particular, we&amp;rsquo;ve decided to share tips on how to install automatically clustered Tomcat and TomEE servers to get a highly available solution that can efficiently serve a large number of users, process high traffic, and be reliable.&lt;/p&gt;</description></item><item><title>Understanding Apache Maven (Part 1): The Basics</title><link>https://foojayio.github.io/website/today/understanding-apache-maven-part-1-the-basics/</link><pubDate>Fri, 27 Aug 2021 09:52:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-apache-maven-part-1-the-basics/</guid><description>&lt;p&gt;Apache Maven (commonly referred to as &amp;ldquo;Maven&amp;rdquo;) is a &lt;strong&gt;Build Management&lt;/strong&gt; tool. Maven is primarily used to build Java projects. Other language projects can also be built using Maven. Apache Maven is written in Java, for the most part. It is &lt;a href="https://maven.apache.org/" target="_blank" rel="noopener noreferrer"&gt;an open source project&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Maven follows a &lt;strong&gt;convention-over-configuration&lt;/strong&gt; philosophy. More on this follows.&lt;/p&gt;
&lt;h3 id="block-26a619e1-4ead-4d98-9783-d0af7673e045"&gt;Why is Maven a Build Management tool?&lt;/h3&gt;
&lt;p&gt;Maven aims at achieving the following for a project:&lt;/p&gt;</description></item><item><title>Is the Java/Jakarta EE Deployment Model Out of Date?</title><link>https://foojayio.github.io/website/today/is-the-java-jakarta-ee-deployment-model-out-of-date/</link><pubDate>Wed, 25 Aug 2021 13:05:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/is-the-java-jakarta-ee-deployment-model-out-of-date/</guid><description>&lt;p&gt;In this myth-busting webinar, Steve Millidge, founder of &lt;a href="https://www.payara.fish" target="_blank" rel="noopener noreferrer"&gt;Payara&lt;/a&gt;
, will show you why the Java EE/&lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 deployment model is not old fashioned or out of date.&lt;/p&gt;
&lt;p&gt;In this webinar, learn the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Benefits of using thin WARs over fat JARs:
&lt;ul&gt;
&lt;li&gt;Do you know what&amp;rsquo;s in your Spring fat JAR?&lt;/li&gt;
&lt;li&gt;Do you know who&amp;rsquo;s tracking security issues with Spring?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Security benefits of patched runtimes&lt;/li&gt;
&lt;li&gt;Advantages of building container images to build applications, not infrastructure messaging&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you think you have to switch to Spring for a modern deployment model, this video will show you how the Jakarta EE deployment model using thin WARs allows you to modernize your application development, today!&lt;/p&gt;</description></item><item><title>Looking For Free Docker Registries</title><link>https://foojayio.github.io/website/today/looking-for-free-docker-registries/</link><pubDate>Tue, 24 Aug 2021 07:19:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/looking-for-free-docker-registries/</guid><description>&lt;p&gt;Since Docker announced that it would remove unused images from Docker Hub, I&amp;rsquo;ve been interested in listing places where I could host mine.&lt;/p&gt;
&lt;p&gt;As it&amp;rsquo;s for personal purposes, I&amp;rsquo;m interested in free plans. Here&amp;rsquo;s what I found:&lt;/p&gt;
&lt;p&gt;| Provider | Private? | Monthly limit || Details |&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Provider&lt;/th&gt;
					&lt;th&gt;Private?&lt;/th&gt;
					&lt;th&gt;Storage&lt;/th&gt;
					&lt;th&gt;Transfer&lt;/th&gt;
					&lt;th&gt;Details&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://www.docker.com/pricing" target="_blank" rel="noopener noreferrer"&gt;Docker Hub&lt;/a&gt;
&lt;/td&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;❓&lt;/td&gt;
					&lt;td&gt;* Anonymous: 100 pulls / 6 hours * Authenticated: 200 pulls / 6 hours&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://docs.gitlab.com/ee/user/packages/container_registry/" target="_blank" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt;
&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;10Gb&lt;/td&gt;
					&lt;td&gt;❓&lt;/td&gt;
					&lt;td&gt;* Storage quota is per-project * Quota includes &lt;strong&gt;all&lt;/strong&gt; artifacts, including code&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://docs.github.com/en/packages/guides/about-github-container-registry" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;&amp;gt; GitHub Container Registry is currently in public beta and subject to change. During the beta, storage and bandwidth are free&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://aws.amazon.com/ecr/pricing/" target="_blank" rel="noopener noreferrer"&gt;AWS&lt;/a&gt;
&lt;/td&gt;
					&lt;td&gt;* First year only * 500Mb storage&lt;/td&gt;
					&lt;td&gt;50Gb&lt;/td&gt;
					&lt;td&gt;* Anonymous: 500Gb * Authenticated: 5Tb&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://cloud.ibm.com/registry/catalog" target="_blank" rel="noopener noreferrer"&gt;IBM Cloud&lt;/a&gt;
&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;500Mb&lt;/td&gt;
					&lt;td&gt;5Gb&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Here are some additional options with their associated pricing model:&lt;/p&gt;</description></item><item><title>Better Error Handling for Your Spring Boot REST APIs</title><link>https://foojayio.github.io/website/today/better-error-handling-for-your-spring-boot-rest-apis/</link><pubDate>Sat, 21 Aug 2021 07:41:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/better-error-handling-for-your-spring-boot-rest-apis/</guid><description>&lt;p&gt;One of the things that distinguishes a decent API from one that is a pleasure to work with is robust error handling. Nothing is more frustrating than using some API and getting back cryptic errors where you can only guess why the server is not accepting your request.&lt;/p&gt;
&lt;p&gt;Spring Boot lets you &lt;a href="https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc" target="_blank" rel="noopener noreferrer"&gt;customize the error handling&lt;/a&gt;
 for your application, but there is quite a lot of low-level coding involved if you want to do this correctly. What consititutes good error handling and good error responses in particular might be up for debate, but I think we can agree on a few general guidelines:&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>SolarWinds Hack: What Does This Mean For Us?</title><link>https://foojayio.github.io/website/today/solarwinds-hack-and-the-executive-order-of-cybersecurity-what-does-this-mean-for-us/</link><pubDate>Thu, 19 Aug 2021 08:19:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/solarwinds-hack-and-the-executive-order-of-cybersecurity-what-does-this-mean-for-us/</guid><description>&lt;p&gt;In the past two years, we have had to learn a lot about cybersecurity. New attack vectors are becoming more and more sophisticated and are directed more and more against the value chain in general.&lt;/p&gt;
&lt;p&gt;But what does that mean for us? What can be done about it, and what reactions have the state already taken?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s start with the story that got all of this rolling and made sure that the general attention was drawn to the vulnerabilities of the available IT infrastructure.&lt;/p&gt;</description></item><item><title>Updating Data Files: Commits vs. Pull Requests?</title><link>https://foojayio.github.io/website/today/updating-data-files-commits-vs-pull-requests/</link><pubDate>Wed, 18 Aug 2021 17:22:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/updating-data-files-commits-vs-pull-requests/</guid><description>&lt;p&gt;For once, I&amp;rsquo;m wondering a bit if this article can be helpful to somebody else since I believe my context is pretty specific. Anyway, just in case it might be the helpful case, here it is!&lt;/p&gt;
&lt;p&gt;My &lt;a href="https://github.com/hazelcast/jet-train" target="_blank" rel="noopener noreferrer"&gt;Jet Train&lt;/a&gt;
 project makes use of &lt;a href="https://developers.google.com/transit/gtfs" target="_blank" rel="noopener noreferrer"&gt;GTFS&lt;/a&gt;
. GTFS stands for General Transit Feed Specification. It models public transportation schedules and their associated geographic information.&lt;/p&gt;
&lt;p&gt;GTFS is based on two kinds of data, static data, and dynamic data. Static data may change but do so rarely, &lt;em&gt;e.g.&lt;/em&gt;, transit agencies and bus stations. They are available as static files that you need to download now and then. Before, I had to download and overwrite them every time I run the demo.&lt;/p&gt;</description></item><item><title>Is Java/Jakarta EE Cloud-Native?</title><link>https://foojayio.github.io/website/today/is-java-jakarta-ee-cloud-native/</link><pubDate>Wed, 18 Aug 2021 09:14:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/is-java-jakarta-ee-cloud-native/</guid><description>&lt;p&gt;In this myth-busting webinar, Steve Millidge (founder of &lt;a href="https://www.payara.fish/" target="_blank" rel="noopener noreferrer"&gt;Payara&lt;/a&gt;
), shows you that Java/Jakarta EE &lt;strong&gt;IS&lt;/strong&gt; Cloud-native and can handle microservices and containers in the Cloud.&lt;/p&gt;
&lt;p&gt;In this webinar, learn:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What is Cloud-Native?&lt;/li&gt;
&lt;li&gt;How &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 (Java EE) applications run securely in the Cloud&lt;/li&gt;
&lt;li&gt;Why you should build applications, not runtimes&lt;/li&gt;
&lt;li&gt;How to keep your runtime easily up-to-date&lt;/li&gt;
&lt;li&gt;Learn about an upcoming project,&lt;strong&gt;&lt;a href="https://www.payara.fish/products/payara-cloud/" target="_blank" rel="noopener noreferrer"&gt;Payara Cloud&lt;/a&gt;
&lt;/strong&gt;, that separates the deployment from the runtime to make running Jakarta EE applications on the cloud even easier&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;ve been hearing that Java/Jakarta EE is not Cloud-native or it&amp;rsquo;s difficult to get your Java/Jakarta EE applications running in the Cloud, watch this webinar to see why that&amp;rsquo;s not true and how you can continue using your existing Java/Jakarta EE development skills to modernize your application development!&lt;/p&gt;</description></item><item><title>Stream Limit Filter Java Challenge</title><link>https://foojayio.github.io/website/today/stream-limit-filter-java-challenge/</link><pubDate>Tue, 17 Aug 2021 07:00:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/stream-limit-filter-java-challenge/</guid><description>&lt;p&gt;To manipulate data from a collection by using a Java stream is handy and cleaner than the alternatives.&lt;/p&gt;
&lt;p&gt;When you learn how to use streams, your Java code will be much better, and knowing how to limit and filter data with streams is crucial for you to do something useful with streams in Java.&lt;/p&gt;
&lt;p&gt;Without further ado, let&amp;rsquo;s go to the next Java Challenge!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s time to improve your Java skills with this Limit Stream Challenge.&lt;/p&gt;</description></item><item><title>Announcing VS Code Java July 2021 Update</title><link>https://foojayio.github.io/website/today/vs-code-java-july-2021-update-new-testing-experience-maven-improvements-and-product-roadmap-progress-update/</link><pubDate>Mon, 16 Aug 2021 07:23:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/vs-code-java-july-2021-update-new-testing-experience-maven-improvements-and-product-roadmap-progress-update/</guid><description>&lt;p&gt;Hi everyone and welcome to the July 2021 edition of the Visual Studio Code Java update!&lt;/p&gt;
&lt;p&gt;In this article, we are going to share the progress of our overall product roadmap, and highlight improved user experience of our features for testing, Maven dependency management, and project management.&lt;/p&gt;
&lt;p&gt;Our Java extensions are among the first to adopt the &lt;a href="https://code.visualstudio.com/updates/v1_59#_testing-apis" title="new Testing API" target="_blank" rel="noopener noreferrer"&gt;new Testing API&lt;/a&gt;
 from Visual Studio Code to provide for a better testing experience.&lt;/p&gt;</description></item><item><title>Book Review: "Help Your Boss Help You"</title><link>https://foojayio.github.io/website/today/book-review-help-your-boss-help-you/</link><pubDate>Fri, 13 Aug 2021 12:19:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-help-your-boss-help-you/</guid><description>&lt;figure class="wp-block-image size-medium"&gt;
 &lt;a target="_blank" href="https://pragprog.com/titles/kkmanage/help-your-boss-help-you/"&gt;&lt;img fetchpriority="high" decoding="async" width="415" height="510" src="book-help-your-boss-help-you-415x510.png" alt="" class="wp-image-46413"&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;Some books were written to be read once and put aside, others to be read thoroughly several times over and then to be placed behind glass to be broken in case of emergency. This book is of the latter kind&amp;mdash;once you&amp;rsquo;ve read through it a few times, and dipped into the areas that speak to you most, you want to have it nearby both as a PDF and in hard copy format
&amp;mdash;as a backup just in case you can&amp;rsquo;t find that PDF at the crucial moment when you really need to have a response at hand in times of crisis. You&amp;rsquo;ll also gradually find your hard copy filled with yellow sticky notes at the points in the book that speak to you most, with underlinings of the crucial passages that resonate back to battles long gone but frequently relived in anguish.&lt;/p&gt;</description></item><item><title>Are Java/Jakarta EE Application Servers Heavy?</title><link>https://foojayio.github.io/website/today/are-java-jakarta-ee-application-servers-heavy/</link><pubDate>Thu, 12 Aug 2021 07:10:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/are-java-jakarta-ee-application-servers-heavy/</guid><description>&lt;p&gt;In this myth-busting webinar, Steve Millidge (founder of &lt;a href="https://www.payara.fish/" target="_blank" rel="noopener noreferrer"&gt;Payara&lt;/a&gt;
), demonstrates that Java/Jakarta EE application servers are not resource-heavy or slow.&lt;/p&gt;
&lt;p&gt;Watch live demonstrations of application servers that show it&amp;rsquo;s possible to have a small footprint and low resource usage in&lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 runtimes.&lt;/p&gt;
&lt;p&gt;In this webinar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;See a new Jakarta EE (Java EE) runtime that allows for single jar deployment&lt;/li&gt;
&lt;li&gt;Watch a demo of a small start up/small footprint Jakarta EE runtime&lt;/li&gt;
&lt;li&gt;See a Jakarta EE application server that is not fat or heavy with high resource usage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;ve been hearing that Java EE application servers are all resource hogs and slow to start up &amp;ndash; watch this webinar to see why that&amp;rsquo;s not true and how you can continue using your existing Java EE development skills to modernize your application development!&lt;/p&gt;</description></item><item><title>Why You Should Upgrade to Maven Version 3.8.1 Today or Very Soon</title><link>https://foojayio.github.io/website/today/why-you-should-upgrade-to-maven-version-3-8-1-today-or-very-soon/</link><pubDate>Wed, 11 Aug 2021 08:06:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-you-should-upgrade-to-maven-version-3-8-1-today-or-very-soon/</guid><description>&lt;p&gt;If you are working in the Java ecosystem and building your applications with an older Maven version, this message is for you.&lt;/p&gt;
&lt;p&gt;Check your Maven version by typing &lt;code&gt;mvn -version&lt;/code&gt;! If you are still running on an old Maven version like 3.6.3 or below you definitely need to upgrade to version 3.8.1 because of security reasons. Be aware that to run Maven 3.8.1, Java 7+ is required.&lt;/p&gt;
&lt;p&gt;Luckily we found out in the &lt;a href="https://snyk.io/jvm-ecosystem-report-2021/" target="_blank" rel="noopener noreferrer"&gt;JVM Ecosystem report 2021&lt;/a&gt;
 that not many people work with Java 6 or below. We do see that a lot of people use Maven so not upgrading can end up in serious issues for a large part of the ecosystem.&lt;/p&gt;</description></item><item><title>Schedule for Foojay Virtual OpenJDK 17+ JUG Tour</title><link>https://foojayio.github.io/website/today/schedule-for-foojay-virtual-openjdk-17-jug-tour/</link><pubDate>Tue, 10 Aug 2021 12:04:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/schedule-for-foojay-virtual-openjdk-17-jug-tour/</guid><description>&lt;p&gt;As announced &lt;a href="https://foojayio.github.io/website/today/virtual-foojay-openjdk-17-jug-tour/"&gt;last month&lt;/a&gt;
, to celebrate the OpenJDK 17 and Foojay.io as &lt;a href="https://adtmag.com/blogs/watersworks/2021/02/foojay-for-openjdk.aspx" target="_blank" rel="noopener noreferrer"&gt;a vendor-neutral community platform for its users&lt;/a&gt;
, we&amp;rsquo;re kicking off the Virtual Foojay JUG Tour to be held during and around its release month of September.&lt;/p&gt;
&lt;p&gt;And here&amp;rsquo;s the schedule, note that it will change as more meetups are confirmed, and if your JUG is missing, i.e., you&amp;rsquo;d like to still be included in the tour, no worries, let&amp;rsquo;s see what can be done, simply contact JFrog&amp;rsquo;s Ari Waller (ariw at jfrog dot com) and Payara&amp;rsquo;s Jadon Ortlepp (jadon.ortlepp at payara.fish), Foojay&amp;rsquo;s Event Managers, and specify a date and time (&lt;a href="https://foojayio.github.io/website/today/virtual-foojay-openjdk-17-jug-tour/"&gt;and preferred topics&lt;/a&gt;
) together with some dates and times that would work for your JUG.&lt;/p&gt;</description></item><item><title>JDK Mission Control 8.1.0 Released!</title><link>https://foojayio.github.io/website/today/jdk-mission-control-8-1-0-released/</link><pubDate>Mon, 09 Aug 2021 18:02:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdk-mission-control-8-1-0-released/</guid><description>&lt;p&gt;Yay, the latest release of JDK Mission Control was just released!&lt;/p&gt;
&lt;p&gt;Since this is the source release, it may still take a bit of time until the downstream vendors release binary builds of JDK Mission Control 8.1.0.&lt;/p&gt;
&lt;p&gt;I will try to remember to &lt;a href="https://twitter.com/hirt" target="_blank" rel="noopener noreferrer"&gt;tweet&lt;/a&gt;
 or say something on the &lt;a href="https://www.facebook.com/javamissionctrl" target="_blank" rel="noopener noreferrer"&gt;JMC Facebook page&lt;/a&gt;
 once the binaries start showing up.&lt;/p&gt;
&lt;h2 id="h2-0-mission-control-8-1-new-and-noteworthy"&gt;Mission Control 8.1 &amp;ndash; New and Noteworthy&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="h3-1-general"&gt;General&lt;/h3&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;JMC 8.1 &amp;ndash; New Release!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Announcing New Book: "Practical Vaadin"</title><link>https://foojayio.github.io/website/today/new-book-practical-vaadin/</link><pubDate>Mon, 09 Aug 2021 18:02:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-book-practical-vaadin/</guid><description>&lt;p&gt;I am pleased to announce the publication of Practical Vaadin by Alejandro Duarte.&lt;/p&gt;
&lt;p&gt;The book is available now as an eBook, and print availability will follow within a few days:&lt;/p&gt;
&lt;figure class="wp-block-embed is-type-rich is-provider-amazon wp-block-embed-amazon"&gt;
 &lt;div class="wp-block-embed__wrapper"&gt;
 &lt;iframe title="Practical Vaadin: Developing Web Applications in Java" type="text/html" width="500" height="550" frameborder="0" allowfullscreen style="max-width:100%" src="https://read.amazon.com/kp/card?preview=inline&amp;amp;linkCode=kpd&amp;amp;ref_=k4w_oembed_Pn2dEsswHsNWme&amp;amp;asin=B09BYC4QWD&amp;amp;tag=kpembed-20"&gt;&lt;/iframe&gt;
 &lt;/div&gt;
&lt;/figure&gt;
&lt;p&gt;Alejandro&amp;rsquo;s book shows how to implement web applications in Java using the open source Vaadin framework version 20 and later.&lt;/p&gt;
&lt;p&gt;The book covers the key concepts and steps to become competent with modern versions of Vaadin, including everything from setting up the development environment to implementing advanced features such as Server Push and database connectivity.&lt;/p&gt;</description></item><item><title>No-Cost IBM Semeru Runtimes for Java</title><link>https://foojayio.github.io/website/today/no-cost-ibm-semeru-runtimes-for-java/</link><pubDate>Mon, 09 Aug 2021 10:57:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/no-cost-ibm-semeru-runtimes-for-java/</guid><description>&lt;p&gt;With the launch of &lt;a href="https://developer.ibm.com/blogs/introducing-the-ibm-semeru-runtimes/" target="_blank" rel="noopener noreferrer"&gt;IBM Semeru Runtimes&lt;/a&gt;
, IBM makes it easier than ever to develop and run Java applications more cost-effectively in hybrid cloud environments, from public cloud to data centers.&lt;/p&gt;
&lt;p&gt;IBM Semeru Runtimes use the class libraries from OpenJDK, along with the Eclipse OpenJ9 Java Virtual Machine to enable developers to build and deploy Java applications that will start quickly, deliver great performance, all while using less memory.&lt;/p&gt;</description></item><item><title>Introducing SAST, DAST, IAST and RASP</title><link>https://foojayio.github.io/website/today/sast-dast-iast-and-rasp/</link><pubDate>Thu, 05 Aug 2021 08:28:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/sast-dast-iast-and-rasp/</guid><description>&lt;p&gt;In this article, we&amp;rsquo;re going to look at the differences between the various cybersecurity defence techniques. Here you can identify four main groups, which we will go through briefly one after another to illustrate the advantages and disadvantages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SAST: Static Application Security Testing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SAST describes the process in which the components of an application are subjected to a static analysis. This approach not only searches for security gaps but also determines the licenses for the individual elements. In the following, however, I will only deal with the consideration of vulnerabilities.&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>Announcement: JReleaser 0.6.0 Released!</title><link>https://foojayio.github.io/website/today/jreleaser-0-6-0-released/</link><pubDate>Tue, 03 Aug 2021 18:15:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/jreleaser-0-6-0-released/</guid><description>&lt;p&gt;&lt;strong&gt;JReleaser is a tool that streamlines creating releases for [Java] projects. It can create a GitHub/GitLab/Gitea release, while also packaging binaries for Homebrew, Snapcraft, Docker, Chocolatey, Scoop, JBang and, more than that, announces releases to Twitter, SdkMan!, e-mail, Zulip, Discord, Gitter, Slack, Teams, and more.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this release you&amp;rsquo;ll find updates and features such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Several updates to the Homebrew packager, such as multi-platform (OSX &amp;amp; Linux) support, ability to use the &lt;code&gt;binary&lt;/code&gt; stanza with &lt;code&gt;.zip&lt;/code&gt; artifacts, ability to use the &lt;code&gt;appcast&lt;/code&gt; stanza with casks, ability to explicitly enable or disable generation of Casks.&lt;/li&gt;
&lt;li&gt;Sdkman has been split into packager and announcer, giving you more options to publish multiple candidates per project. The old behavior remains in place, that is, the announcer can publish and announce a single candidate for the whole project.&lt;/li&gt;
&lt;li&gt;Uploaders such as JFrog Artifactory and HTTP can now configure a downloadURL variable that can be used in templates.&lt;/li&gt;
&lt;li&gt;You can now target with pinpoint accuracy how artifacts, files, and globs should be uploaded, released, checksumed, and signed. These 4 sections offer configurable properties to activate or deactivate their targets. You also have the choice of adding extra properties to artifacts fur further tweaking the desired behavior.&lt;/li&gt;
&lt;li&gt;Partial model evaluation lets you execute a release for artifacts matching a particular platform. Useful when dealing with Native Image and Native Package distributions when not all artifacts are locally available. Model properties may also be overridden from the command line, user or project properties (Maven), or project properties (Gradle).&lt;/li&gt;
&lt;li&gt;Changelog formatting options now include the ability to hide specific commit categories (such as merge commits if you have configured such category) as well as contributors (such as bots). You can also format how contributors are displayed, for example linking to their Git profile with their username or name.&lt;/li&gt;
&lt;li&gt;The Docker packager now lets you publish packaged files (Dockerfile + supporting files) to a Git repository of your choice.&lt;/li&gt;
&lt;li&gt;The Article announcer lets you bootstrap a blog post or article based on templates.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Full changelog can be found at the &lt;a href="https://github.com/jreleaser/jreleaser/releases/tag/v0.6.0" title="v0.6.0 release" target="_blank" rel="noopener noreferrer"&gt;v0.6.0 release&lt;/a&gt;
 page.&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>Getting Started with Snyk for Secure Java Development</title><link>https://foojayio.github.io/website/today/getting-started-with-snyk-for-secure-java-development/</link><pubDate>Thu, 29 Jul 2021 06:39:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-snyk-for-secure-java-development/</guid><description>&lt;p&gt;If you&amp;rsquo;re a Java developer who wants to develop your applications more securely, you&amp;rsquo;ve come to the right place. Snyk can help you with that mission.&lt;/p&gt;
&lt;p&gt;This article will explain how to begin with Snyk for &lt;a href="https://snyk.io/blog/10-java-security-best-practices/" target="_blank" rel="noopener noreferrer"&gt;secure Java development&lt;/a&gt;
 so you can be more secure from the get-go.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re new to Snyk, it&amp;rsquo;s important to know that we offer a variety of developer-focused products and tools. Some of these tools, like our CLI and some IDE integration, support multiple products. However, we can distinguish four different products within Snyk:&lt;/p&gt;</description></item><item><title>Is Java/Jakarta EE Outdated &amp; Dead?</title><link>https://foojayio.github.io/website/today/is-java-ee-outdated-dead/</link><pubDate>Wed, 28 Jul 2021 08:08:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/is-java-ee-outdated-dead/</guid><description>&lt;p&gt;Java was created in 1995 and, despite being over 25 years old, is still one of the most popular and widely used programming languages in the world.&lt;/p&gt;
&lt;p&gt;Due to its longevity &amp;ndash; many myths around Java EE (now &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
) have circulated.&lt;/p&gt;
&lt;p&gt;In the &lt;a href="https://www.payara.fish/dismiss-the-myths/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Dismiss the Myths&amp;rdquo; webinar series&lt;/a&gt;
, Steve Millidge, founder of Payara, discusses these common myths and shows you the programming language is still relevant, keeps up with the changes in the IT world, and that there is a future in Jakarta EE.&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>Neo Stream Search Java Challenge</title><link>https://foojayio.github.io/website/today/neo-stream-search-java-challenge/</link><pubDate>Mon, 26 Jul 2021 08:32:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/neo-stream-search-java-challenge/</guid><description>&lt;p&gt;Understanding the mechanics of the functional interface Predicate of a Stream is crucial if you want to create something meaningful with streams. On this challenge, we will explore important key methods when we work with a stream so that it becomes clear for you what they do.&lt;/p&gt;
&lt;p&gt;Without further ado, let&amp;rsquo;s go to the Java Challenge!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s time to improve your Java skills with this Neo Stream Search Challenge&lt;/p&gt;
&lt;h2 id="_neo_stream_search_challenge"&gt;Neo Stream Search Challenge&lt;/h2&gt;
&lt;p&gt;What do you think will happen when running the following code?&lt;/p&gt;</description></item><item><title>Connect Stateful Workloads Across Kubernetes Clusters</title><link>https://foojayio.github.io/website/today/connect-stateful-workloads-across-kubernetes-clusters/</link><pubDate>Fri, 23 Jul 2021 08:44:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/connect-stateful-workloads-across-kubernetes-clusters/</guid><description>&lt;p&gt;One of the biggest selling points of Apache Cassandra™ is its shared-nothing architecture, making it an ideal choice for deployments that span multiple physical datacenters. So when our &lt;a href="https://astra.datastax.com/" target="_blank" rel="noopener noreferrer"&gt;Cassandra as-a-service&lt;/a&gt;
 single-region offering reached maturity, we naturally started looking into offering it cross-region and cross-cloud.&lt;/p&gt;
&lt;p&gt;One of the biggest challenges in providing a solution that spans multiple regions and clouds is correctly configuring the network so that Cassandra nodes in different data centers can communicate with each other successfully, even as individual nodes are added, replaced, or removed. From the start of the cloud journey at DataStax, we selected Kubernetes as our orchestration platform, so our search for a networking solution started there. While we&amp;rsquo;ve benefited immensely from the ecosystem and have our share of war stories, this time we chose to forge our own path, landing on ad-hoc overlay virtual application networks (how&amp;rsquo;s that for a buzzword soup?).&lt;/p&gt;</description></item><item><title>Foojay Podcast #2: Embedded Java -- Robots and FX</title><link>https://foojayio.github.io/website/today/foojay-podcast-2/</link><pubDate>Thu, 22 Jul 2021 14:13:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-2/</guid><description>&lt;p&gt;Foojay community members and beyond discuss embedded Java:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/errcraft" target="_blank" rel="noopener noreferrer"&gt;James Gosling&lt;/a&gt;
, creator of Java and embedded enthusiast. Distinguished engineer of AWS GreenGrass and former Liquid Robotics, an autonomous ocean vehicle powered by water.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/FrankDelporte" target="_blank" rel="noopener noreferrer"&gt;Frank Delporte&lt;/a&gt;
, engineer with Toadi, an autonomous lawn-mowing robot (no wires) and Pi4J contributor of Raspberry-pi based robots.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/johanvos" target="_blank" rel="noopener noreferrer"&gt;Johan Vos&lt;/a&gt;
, founder of Gluon, helping make fully cross-platform applications where a single JavaFX codebase runs natively on embedded, iOS, Android, PCs, and browsers.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/costlow/" target="_blank" rel="noopener noreferrer"&gt;Erik Costlow&lt;/a&gt;
, developer relations for Contrast Security, locating security flaws in backend systems. Developer of home fuel/gas sensors.&lt;/li&gt;
&lt;/ul&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/jtB5KLrglSY?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;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>New Book Review: Seriously Good Software</title><link>https://foojayio.github.io/website/today/book-review-seriously-good-software/</link><pubDate>Thu, 22 Jul 2021 07:17:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-seriously-good-software/</guid><description>&lt;p&gt;&lt;img src="https://horstmann.com/unblog/2021-07-05/Faella-SGS-HI.jpeg" alt="Cover" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;I recently &lt;a href="https://foojayio.github.io/website/today/book-review-java-by-comparison/%27"&gt;reviewed the book &amp;ldquo;Java by Comparison&amp;rdquo;&lt;/a&gt;
 by Simon Harrer, Jörg Lenhard, and Linus Dietz. That book is intended for programmers who know the basics of the Java language, perhaps from a university curriculum. The book teaches programmers to improve their Java language and library usage through seventy &amp;ldquo;before and after&amp;rdquo; examples, covering topics such as coding style, naming, exceptions, streams, and class design.&lt;/p&gt;
&lt;p&gt;For contrast, I&amp;rsquo;ll now review Marco Faella&amp;rsquo;s book &amp;ldquo;&lt;a href="https://www.manning.com/books/seriously-good-software" target="_blank" rel="noopener noreferrer"&gt;Seriously Good Software&lt;/a&gt;
&amp;rdquo; that also teaches intermediate Java programmers to write better software, using an entirely different approach. (Disclaimer: Marco talked me into writing the preface for his book.)&lt;/p&gt;</description></item><item><title>Announcement: Virtual Foojay OpenJDK 17+ JUG Tour</title><link>https://foojayio.github.io/website/today/virtual-foojay-openjdk-17-jug-tour/</link><pubDate>Wed, 21 Jul 2021 16:07:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/virtual-foojay-openjdk-17-jug-tour/</guid><description>&lt;p&gt;To celebrate OpenJDK 17 and Foojay as a community platform for its users, we&amp;rsquo;re kicking off the Virtual Foojay OpenJDK 17+ JUG Tour, focused on OpenJDK 17, plus more!&lt;/p&gt;
&lt;p&gt;Ari Waller, JFrog&amp;rsquo;s Event Manager, well known to many JUGs, will continue to wear a second hat, as he did on the previous tour&amp;mdash;that of Foojay Event Manager, together with Jadon Ortlepp from Payara, newly added to the Foojay Event Team!&lt;/p&gt;</description></item><item><title>Join The Jedi Lambda Join Java Challenge!</title><link>https://foojayio.github.io/website/today/jedi-lambda-join-java-challenge/</link><pubDate>Wed, 21 Jul 2021 08:08:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/jedi-lambda-join-java-challenge/</guid><description>&lt;p&gt;There are many concepts involved in Java Challenge! In essence, we will explore lambdas and the Function interface the most. However, we also have static methods introduced in Java 8 the private method in interfaces introduced in Java 9. In the invocation of the interface methods, we are using anonymous inner classes too!&lt;/p&gt;
&lt;p&gt;Are you ready for this Java Challenge? Less introduction, more action, try out this Java Challenge, and master Java concepts by having fun!&lt;/p&gt;</description></item><item><title>Announcement: FXGL Game Engine 11.17 Release</title><link>https://foojayio.github.io/website/today/fxgl-game-engine-11-17-release/</link><pubDate>Tue, 20 Jul 2021 11:23:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/fxgl-game-engine-11-17-release/</guid><description>&lt;p&gt;The &lt;a href="https://github.com/AlmasB/FXGL" target="_blank" rel="noopener noreferrer"&gt;FXGL game engine&lt;/a&gt;
 is now at 11.17. Most of the changes in this release focus on internal code quality and fixes.&lt;/p&gt;
&lt;p&gt;Major additions to note:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Added download file API to NetService. Using this API developers can download files from any URL. For example, if certain assets are stored remotely.&lt;/li&gt;
&lt;li&gt;Rotation and scale in 3D now support origin points (pivot points). This is a beneficial addition since some animations will need specific origin points for transformations to achieve the desired effect.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Other minor changes include:&lt;/p&gt;</description></item><item><title>How To Get Your JDK As Easily As Possible!</title><link>https://foojayio.github.io/website/today/get-your-jdk-as-easily-as-possible/</link><pubDate>Tue, 20 Jul 2021 07:00:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/get-your-jdk-as-easily-as-possible/</guid><description>&lt;p&gt;Have you ever been in the situation where you&amp;rsquo;ve been looking for a specific JDK version of a specific distribution? I think most of us have been there and, I don&amp;rsquo;t know how you handle this, but in the past I used to save links to distributions in my browser and then I usually I started searching through the vendor website for the package I was looking for.&lt;/p&gt;
&lt;p&gt;Sometimes that was easy&amp;hellip; sometimes it was hard&amp;hellip; but it never was fun. And if you&amp;rsquo;re used to working with JavaFX, the whole thing got even harder when JDK 11 came out and JavaFX was not bundled with the distribution any longer.&lt;/p&gt;</description></item><item><title>VSCode Java: Roadmap Update and New Features</title><link>https://foojayio.github.io/website/today/vscode-java-roadmap-update-and-new-features/</link><pubDate>Mon, 19 Jul 2021 07:24:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/vscode-java-roadmap-update-and-new-features/</guid><description>&lt;p&gt;Welcome to the special mid-year edition for Visual Studio Code Java updates.&lt;/p&gt;
&lt;p&gt;As the highlight of this post, we are going to take a look at our product roadmap for the next few months.&lt;/p&gt;
&lt;p&gt;We will also showcase some important new features &amp;amp; improvements as we did &lt;a href="https://foojayio.github.io/website/today/category/tools/vscode/"&gt;in previous blog posts&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;So let&amp;rsquo;s get right into it!&lt;/p&gt;
&lt;p&gt;Visual Studio Code Java has come a long way since the initial launch, and we couldn&amp;rsquo;t have done it without your support, so thank you for all the suggestions and feedback, and please keep them coming! 🙂&lt;/p&gt;</description></item><item><title>The Search for a Cloud-Native Database</title><link>https://foojayio.github.io/website/today/the-search-for-a-cloud-native-atabase/</link><pubDate>Fri, 16 Jul 2021 07:40:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-search-for-a-cloud-native-atabase/</guid><description>&lt;p&gt;The concept of &amp;ldquo;cloud-native&amp;rdquo; has come to stand for a collection of best practices for application logic and infrastructure, including databases. However, many of the databases supporting our applications have been around for decades, before the cloud or cloud-native was a thing. The data gravity associated with these legacy solutions has limited our ability to move applications and workloads.&lt;/p&gt;
&lt;p&gt;As we move to the cloud, how do we evolve our data storage approach? Do we need a cloud-native database? What would it even mean for a database to be cloud-native? Let&amp;rsquo;s take a look at these questions.&lt;/p&gt;</description></item><item><title>Best Practices for Data Pipeline Error Handling in Apache NiFi</title><link>https://foojayio.github.io/website/today/best-practices-for-data-pipeline-error-handling-in-apache-nifi/</link><pubDate>Thu, 15 Jul 2021 05:25:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/best-practices-for-data-pipeline-error-handling-in-apache-nifi/</guid><description>&lt;p&gt;&lt;strong&gt;Learn actionable strategies for error management modeling in Apache NiFi data pipelines, and understand the benefits of planning for error handling.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;According to a &lt;a href="https://www.mckinsey.com/business-functions/mckinsey-analytics/our-insights/achieving-business-impact-with-data" target="_blank" rel="noopener noreferrer"&gt;McKinsey&lt;/a&gt;
 report, &amp;ldquo;the best analytics are worth nothing with bad data&amp;rdquo;. We as data engineers and developers know this simply as &amp;ldquo;garbage in, garbage out&amp;rdquo;. Today, with the success of the cloud, data sources are many and varied. Data pipelines help us to consolidate data from these different sources and work on it. However, we must ensure that the data used is of good quality. As data engineers, we mold data into the right shape, size, and type with high attention to detail.&lt;/p&gt;</description></item><item><title>CVSS 101: First Steps with Common Vulnerability Scoring System</title><link>https://foojayio.github.io/website/today/cvss-101-first-steps-with-common-vulnerability-scoring-system/</link><pubDate>Wed, 14 Jul 2021 06:56:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/cvss-101-first-steps-with-common-vulnerability-scoring-system/</guid><description>&lt;p&gt;What is the &lt;a href="https://www.first.org/cvss/v3.0/specification-document" target="_blank" rel="noopener noreferrer"&gt;Common Vulnerability Scoring System&lt;/a&gt;
 (CVSS), who is behind it, what are we doing with it, and what does a CVSS Value mean for you?&lt;/p&gt;
&lt;p&gt;On Foojay, you can apply the insights below to understand the &lt;a href="https://foojayio.github.io/website/java-15/?quarter=102020&amp;amp;tab=cve&amp;amp;version=15.0.1"&gt;Security/CVE Views in the OpenJDK Update &amp;amp; Release Details pages&lt;/a&gt;
, such as the one shown here:
&lt;a href="https://foojayio.github.io/website/java-15/?quarter=102020&amp;amp;tab=cve&amp;amp;version=15.0.1"&gt;&lt;img src="https://foojayio.github.io/website/today/cvss-101-first-steps-with-common-vulnerability-scoring-system/image-3-1024x481.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;I will explain how a CVSS Score is calculated, what the different elements of it mean, and what are the differences between the different CVSS versions.&lt;/p&gt;</description></item><item><title>A Case for Databases on Kubernetes from a Former Skeptic</title><link>https://foojayio.github.io/website/today/a-case-for-databases-on-kubernetes-from-a-former-skeptic/</link><pubDate>Tue, 13 Jul 2021 09:12:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-case-for-databases-on-kubernetes-from-a-former-skeptic/</guid><description>&lt;p&gt;Kubernetes is everywhere. Transactional apps, video streaming services and machine learning workloads are finding a home on this ever-growing platform. But what about databases?&lt;/p&gt;
&lt;p&gt;If you had asked me this question five years ago, the answer would have been a resounding &amp;ldquo;&lt;strong&gt;No!&lt;/strong&gt; &amp;quot; &amp;mdash; based on my experience in development and operations. In the following years, as more resources emerged for stateful applications, my answer would have changed to &amp;ldquo;&lt;em&gt;&lt;strong&gt;Maybe&lt;/strong&gt;,&amp;rdquo;&lt;/em&gt; but always with a qualifier: &amp;ldquo;It&amp;rsquo;s fine for development or test environments&amp;hellip;&amp;rdquo; or &amp;ldquo;If the rest of your tooling is Kubernetes-based, and you have extensive experience&amp;hellip;&amp;rdquo;&lt;/p&gt;</description></item><item><title>Learn JShell with JavaFX in Only 60 Seconds</title><link>https://foojayio.github.io/website/today/learn-javafx-with-jshell-in-60-seconds/</link><pubDate>Mon, 12 Jul 2021 10:54:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/learn-javafx-with-jshell-in-60-seconds/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Spoon boy&lt;/strong&gt; : Do not try and bend the spoon. That&amp;rsquo;s impossible. Instead&amp;hellip; only try to realize the truth.&lt;br&gt;
&lt;strong&gt;Neo&lt;/strong&gt; : What truth?&lt;br&gt;
&lt;strong&gt;Spoon boy&lt;/strong&gt; : There is no spoon.&lt;br&gt;
&lt;strong&gt;Neo&lt;/strong&gt; : There is no spoon?&lt;br&gt;
&lt;strong&gt;Spoon boy&lt;/strong&gt; : Then you&amp;rsquo;ll see, that it is not the spoon that bends, it is only yourself.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;ndash; The Matrix, a conversation between Neo and Spoon boy.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/learn-javafx-with-jshell-in-60-seconds/matrix-rain-effect.gif" alt="Matrix Rain Code Effect" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In the classic science fiction movie, The Matrix, there&amp;rsquo;s a cool special effect better known as the &lt;em&gt;falling&lt;/em&gt; or &lt;em&gt;raining green code&lt;/em&gt; effect. In &lt;a href="https://youtu.be/MvEXkd3O2ow?t=27" title="one scene" target="_blank" rel="noopener noreferrer"&gt;one scene&lt;/a&gt;
 the character named &lt;strong&gt;&amp;lsquo;Cypher&amp;rsquo;&lt;/strong&gt; played by &lt;a href="https://www.imdb.com/name/nm0001592/" title="Joe Pantoliano" target="_blank" rel="noopener noreferrer"&gt;Joe Pantoliano&lt;/a&gt;
 explains how they can monitor activity inside the &lt;strong&gt;matrix&lt;/strong&gt; by looking at the patterns as the code rains down. He claims it&amp;rsquo;s done this way to simplify seeing people in the matrix than other means due to the fact that there is just way too much data (movie scifi magic talk).&lt;/p&gt;</description></item><item><title>Announcement: Friends of OpenJDK Podcast #1</title><link>https://foojayio.github.io/website/today/foojay-podcast-1/</link><pubDate>Fri, 09 Jul 2021 08:39:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-1/</guid><description>&lt;p&gt;Foojay community members discuss recent news:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JavaFX Skins for cross-platform apps on Android, iOS, and regular computers.&lt;/li&gt;
&lt;li&gt;BlockHound, for detecting cases of blocking in reactive (non-blocking) applications.&lt;/li&gt;
&lt;li&gt;JEP 411, the SecurityManager deprecation&lt;/li&gt;
&lt;li&gt;The recent Snyk/Azul community survey&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Sorry, this recording got &amp;ldquo;lost in cyberspace&amp;hellip;&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>About The Lifecycle of a Security Vulnerability</title><link>https://foojayio.github.io/website/today/the-lifecycle-of-a-security-vulnerability/</link><pubDate>Thu, 08 Jul 2021 08:40:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-lifecycle-of-a-security-vulnerability/</guid><description>&lt;p&gt;Again and again, we read in the IT news about new security gaps that have been identified. The more severe the classification of the loophole, the more attention the information receives in the general press. Most of the time, you don&amp;rsquo;t even hear or read anything about all the security holes found that are not as well known as the SolarWinds Hack, for example.&lt;/p&gt;
&lt;p&gt;But what is the typical lifecycle of such a security gap?&lt;/p&gt;</description></item><item><title>Ask Yourself: Do You Really Need Kubernetes?</title><link>https://foojayio.github.io/website/today/do-you-really-need-kubernetes/</link><pubDate>Wed, 07 Jul 2021 07:37:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/do-you-really-need-kubernetes/</guid><description>&lt;p&gt;These days, it seems &lt;a href="https://kubernetes.io/" target="_blank" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;
 is a topic that is never too far from people&amp;rsquo;s lips. The tool, and the associated tools built around it, are talked about so often it seems it&amp;rsquo;s the only subject important to developers these days - especially as the IT world becomes increasingly orientated towards cloud and microservices.&lt;/p&gt;
&lt;p&gt;But in spite of all the conversation around Kubernetes&amp;hellip; do you &lt;em&gt;really&lt;/em&gt; need Kubernetes for your environment? Or is it just another case of the next &amp;rsquo;new and shiny&amp;rsquo; object, with people distracted by the novelty and possibility, rather than the facts? In this article, I&amp;rsquo;ll take a closer look at why Kubernetes might be a case of the hype outweighing the helpfulness in most cases.&lt;/p&gt;</description></item><item><title>JDKMon: Your Friendly JDK Distribution Updater</title><link>https://foojayio.github.io/website/today/jdkmon-your-friendly-jdk-distribution-updater/</link><pubDate>Tue, 06 Jul 2021 06:59:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdkmon-your-friendly-jdk-distribution-updater/</guid><description>&lt;p&gt;I don&amp;rsquo;t know if you have the same problem but I have around 8 OpenJDK distributions installed on my machine and I always have the problem of keeping them up to date. I know there is &lt;a href="https://sdkman.io/" title="sdkman" target="_blank" rel="noopener noreferrer"&gt;sdkman&lt;/a&gt;
 which is awesome but I somehow never got used to it.&lt;/p&gt;
&lt;p&gt;Meaning to say I download the OpenJDK distributions manually and install them on my machine. So the main problem is that there so many different distributions out there and all of them have a different way on how to get the latest version. To solve exactly this problem we at foojay.io created the DiscoAPI which keeps track on (hopefully) all available OpenJDK distributions available. Well and because we like to eat our own dogfood I&amp;rsquo;ve created a little tool that helps me keeping my installed OpenJDK distributions up to date&amp;hellip; &lt;a href="https://github.com/HanSolo/JDKMon" title="JDKMon" target="_blank" rel="noopener noreferrer"&gt;JDKMon&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Soprano ofNullable stream Java Challenge</title><link>https://foojayio.github.io/website/today/soprano-ofnullable-stream-java-challenge/</link><pubDate>Mon, 05 Jul 2021 08:21:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/soprano-ofnullable-stream-java-challenge/</guid><description>&lt;p&gt;Since Java 9, it&amp;rsquo;s possible to use Optional with a stream when we need to manipulate values from a List.&lt;/p&gt;
&lt;p&gt;In this Java Challenge, we will explore the use of a stream in an Optional!&lt;/p&gt;
&lt;p&gt;Are you ready to solve this Java Challenge? It&amp;rsquo;s time to improve your Java skills with this Soprano ofNullable stream Challenge&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-soprano-ofnullable-filter-challenge"&gt;Soprano ofNullable filter Challenge&lt;/h2&gt;
&lt;p&gt;What will happen after the main method is executed as follows?&lt;/p&gt;</description></item><item><title>Troubleshooting Java Processes Running on Your Machine</title><link>https://foojayio.github.io/website/today/jps/</link><pubDate>Fri, 02 Jul 2021 09:27:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/jps/</guid><description>&lt;p&gt;When your application has some problem, the first thing to check is running processes on the machine.&lt;/p&gt;
&lt;p&gt;For Linux OS we generally use &lt;code&gt;ps -ef&lt;/code&gt;. &lt;em&gt;&lt;strong&gt;ps&lt;/strong&gt;&lt;/em&gt; is one of the most used Linux troubleshooting commands. The JDK provides similar functionality for Java processes through &lt;code&gt;jps&lt;/code&gt;. The &lt;em&gt;&lt;strong&gt;jps&lt;/strong&gt;&lt;/em&gt; command-line utility provides a list of all running Java processes on a machine for which the user has access rights. The access rights are determined by access-control mechanisms specific to the operating system.&lt;/p&gt;</description></item><item><title>Announcement: JReleaser 0.5.0 Released!</title><link>https://foojayio.github.io/website/today/jreleaser-0-5-0-released/</link><pubDate>Thu, 01 Jul 2021 07:54:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/jreleaser-0-5-0-released/</guid><description>&lt;p&gt;JReleaser v0.5.0 has been released!&lt;/p&gt;
&lt;p&gt;JReleaser is a tool that streamlines creating releases for [Java] projects. It can create a GitHub/GitLab/Gitea release, while also packaging binaries for Homebrew, Snapcraft, Docker, Chocolatey, Scoop, JBang and, more than that, announces releases to Twitter, SdkMan!, e-mail, Zulip, Discord, Gitter, Slack, Teams, and more.&lt;/p&gt;
&lt;p&gt;In this release you&amp;rsquo;ll find updates and features such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for two additional distribution types: NATIVE_PACKAGE and BINARY. The first type enables artifacts of type &lt;code&gt;.dmg&lt;/code&gt;, &lt;code&gt;.pkg&lt;/code&gt;, &lt;code&gt;.deb&lt;/code&gt;, &lt;code&gt;.rpm&lt;/code&gt;, &lt;code&gt;.msi&lt;/code&gt;, &lt;code&gt;.exe&lt;/code&gt; to be used with packagers (currently Homebrew); the second type enables non-Java distributions as long as they provide an executable or launcher script.&lt;/li&gt;
&lt;li&gt;The Homebrew packager supports generating casks for &lt;code&gt;.dmg&lt;/code&gt; and &lt;code&gt;.pkg&lt;/code&gt; artifacts.&lt;/li&gt;
&lt;li&gt;Artifacts of distributions of type NATIVE_IMAGE must now be packaged as zip file; the nativeImage assembler has been updated to produce zip files.&lt;/li&gt;
&lt;li&gt;The Sdkman announcer can publish distributions of type JLINK and NATIVE_IMAGE.&lt;/li&gt;
&lt;li&gt;Speaking of announcers, there are two brand new announcers, the first is Google ChatBot, the second is for generic incoming webhooks.&lt;/li&gt;
&lt;li&gt;When updating a Git release you can now choose a combination of title, body, assets.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Full changelog can be found at the &lt;a href="https://github.com/jreleaser/jreleaser/releases/tag/v0.5.0" title="v0.5.0 release" target="_blank" rel="noopener noreferrer"&gt;v0.5.0 release&lt;/a&gt;
 page.&lt;/p&gt;</description></item><item><title>Kubernetes Is The Best Technology For Running A Cloud-Native Database</title><link>https://foojayio.github.io/website/today/why-kubernetes-is-the-best-technology-for-running-a-cloud-native-database/</link><pubDate>Wed, 30 Jun 2021 09:13:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-kubernetes-is-the-best-technology-for-running-a-cloud-native-database/</guid><description>&lt;p&gt;We&amp;rsquo;ve been talking about migrating workloads to the cloud for a long time, but a look at the application portfolios of many IT organizations demonstrates that there&amp;rsquo;s still a lot of work to be done. In many cases, challenges with persisting and moving data in clouds continue to be the key limiting factor slowing cloud adoption, despite the fact that databases in the cloud have been available for years.&lt;/p&gt;
&lt;p&gt;For this reason, there has been a surge of recent interest in data infrastructure that is designed to take maximum advantage of the benefits that cloud computing provides. A &lt;a href="https://k8ssandra.io/blog/2021/03/23/the-search-for-a-cloud-native-database/?ref=hackernoon.com" target="_blank" rel="noopener noreferrer"&gt;cloud-native database&lt;/a&gt;
 is one that achieves the goals of scalability, elasticity, resiliency, observability, and automation; the &lt;a href="https://k8ssandra.io/?utm_medium=referral&amp;amp;utm_source=hackernoon&amp;amp;utm_campaign=k8ssandra&amp;amp;ref=hackernoon.com" target="_blank" rel="noopener noreferrer"&gt;K8ssandra&lt;/a&gt;
 project is a great example. It packages Apache Cassandra and supporting tools into a production-ready Kubernetes deployment.&lt;/p&gt;</description></item><item><title>Method Reference VS Lambda Java Challenge</title><link>https://foojayio.github.io/website/today/method-reference-vs-lambda-java-challenge/</link><pubDate>Tue, 29 Jun 2021 19:31:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/method-reference-vs-lambda-java-challenge/</guid><description>&lt;p&gt;Do you know what the differences are between method references and lambdas?&lt;/p&gt;
&lt;p&gt;In this Java Challenge, we will explore how lambdas and method references behave so that you can really understand how they work!&lt;/p&gt;
&lt;p&gt;Now that you know the main context, it&amp;rsquo;s time for the Java Challenge!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s time to improve your Java skills with this Method Reference VS Lambda Challenge.&lt;/p&gt;
&lt;h3 id="h3-0-method-reference-vs-lambda-challenge"&gt;Method Reference VS Lambda Challenge&lt;/h3&gt;
&lt;p&gt;What will happen when we run the following main method?&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>Introduction to Simplify Protocol Refactoring</title><link>https://foojayio.github.io/website/today/simplify-protocol-refactoring/</link><pubDate>Mon, 28 Jun 2021 13:22:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/simplify-protocol-refactoring/</guid><description>&lt;p&gt;The other day, I went grocery shopping. While waiting in line, I thought about some struggles I had in a test I wrote earlier that day. When it was my turn, the cashier scanned my items and said what I owe him. And I just gave him my whole wallet. He stared at me blankly and gave it back. A little confused for a second, I took out my card, paid, and left the store. And at that point, it hit me what was wrong with my test.&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>Announcement: JMC 8.0.1 Has Been Released!</title><link>https://foojayio.github.io/website/today/jmc-8-0-1-released/</link><pubDate>Fri, 25 Jun 2021 18:10:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/jmc-8-0-1-released/</guid><description>&lt;p&gt;The &lt;a href="https://github.com/openjdk/jmc/releases/tag/8.0.1-ga" title="8.0.1-ga" target="_blank" rel="noopener noreferrer"&gt;8.0.1-ga&lt;/a&gt;
 tag was just set in the jmc8 repository on GitHub. This is a patch update release, and will therefore not include any new features.&lt;/p&gt;
&lt;p&gt;The 8.0.1 release contains the following fixes:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Jira Issue&lt;/th&gt;
					&lt;th&gt;Summary&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;7188&lt;/td&gt;
					&lt;td&gt;JMC fails to dump file and gets stuck when flightrecording is attempted on jmxremote connection&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;7172&lt;/td&gt;
					&lt;td&gt;Fix spell mistake in secure store class&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;6920&lt;/td&gt;
					&lt;td&gt;UI improvements&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;6336&lt;/td&gt;
					&lt;td&gt;Remove Triple DES Cipher in Secure store&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;6398&lt;/td&gt;
					&lt;td&gt;Better JNDI Usage&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;It is up to individual vendors to release binaries of JMC 8.0.1, and some vendors already have binary builds available, for example &lt;a href="https://jdk.java.net/jmc/8/" title="Oracle" target="_blank" rel="noopener noreferrer"&gt;Oracle&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Creating a JavaFX World Clock from Scratch (Part 6)</title><link>https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-6/</link><pubDate>Fri, 25 Jun 2021 16:48:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-6/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Wherever you go, no matter what the weather, always bring your own sunshine. &amp;ndash; Anthony J. D&amp;rsquo;Angelo&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hello, and welcome to the last part of this series of articles on creating a JavaFX World Clock from scratch!&lt;/p&gt;
&lt;p&gt;In this part, I will show you how to make WebService calls (RESTful) to retrieve weather data based on geographic locations.&lt;/p&gt;
&lt;p&gt;If you remember, &lt;a href="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-5/"&gt;in Part 5&lt;/a&gt;
 you learned how to use the JavaFX WebView and the popular mapping library Leaflet JS enabling the user to discover geographic locations. In Part 6, I will show you how I used Java 11&amp;rsquo;s Http Client to retrieve and display weather content. If you are new to this series, you can visit Part &lt;a href="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-1/" title="1"&gt;1&lt;/a&gt;
-&lt;a href="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-5/" title="5"&gt;5&lt;/a&gt;
.&lt;br&gt;
&lt;img src="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-6/JFX-World-Clock-Part-6.png" alt="JFX World Clock Part 6" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Creating Mobile Apps with JavaFX - Part 3</title><link>https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx-part-3/</link><pubDate>Fri, 25 Jun 2021 09:04:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx-part-3/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx---part-1/"&gt;Part 1&lt;/a&gt;
, we introduced a mobile app game, TiltMaze, written completely in JavaFX, which you can download from either the &lt;a href="https://apps.apple.com/app/id1566464439" target="_blank" rel="noopener noreferrer"&gt;Apple App Store&lt;/a&gt;
 or &lt;a href="https://play.google.com/store/apps/details?id=com.asgteach.accelerometer.TiltMaze" target="_blank" rel="noopener noreferrer"&gt;Google Play&lt;/a&gt;
 and install it on your mobile device or tablet. In &lt;a href="https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx---part-1/"&gt;P&lt;/a&gt;
&lt;a href="https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx---part-2/"&gt;art 2&lt;/a&gt;
, we showed you how to work with Gluon and GraalVM to build native images that execute on either Apple or Android mobile devices and tablets.&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll discuss how to upload your application to the respective mobile app stores so the world can install your application on their devices.&lt;/p&gt;</description></item><item><title>How to Debug Java on the Command Line</title><link>https://foojayio.github.io/website/today/jdb/</link><pubDate>Thu, 24 Jun 2021 16:51:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdb/</guid><description>&lt;p&gt;Some bugs are hard to replicate on your personal computer but easily replicated on production or test machines. It is a common situation that professional Java developers deal with frequently. To debug such problems, OpenJDK provides two tools, &lt;code&gt;remote debugging&lt;/code&gt; and &lt;code&gt;jdb&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This article focuses on &lt;code&gt;jdb&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For Java applications, typical production and test machines are Linux servers without display managers, so that only command line tools are available. Here we cannot use professional IDEs like IntelliJ IDEA, Eclipse, or Apache NetBeans IDE.&lt;/p&gt;</description></item><item><title>OpenJDK and the Future of Production Profiling</title><link>https://foojayio.github.io/website/today/openjdk-and-the-future-of-production-profiling/</link><pubDate>Thu, 24 Jun 2021 08:46:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/openjdk-and-the-future-of-production-profiling/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Some thoughts on the future of continuous production profiling on the OpenJDK platform.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A long time ago, the JRockit Runtime Analyzer (JRA) was introduced into the JRockit JVM as a means of being able to figure out what was going on in the JVM. It was mainly there to find out how customers were using the JVM, so that the JVM could be optimized for actual real-world production work-loads. The JRA output the data as XML, since customers insisted on the data being human readable so that they could see exactly what they would be sending us. Later LAT (LATency Analyzer) was introduced, since after the introduction of the JRockit low latency garbage collector (a.k.a the DetGC), some customers complained about the GC not keeping its latency promises. More often than not, it turned out it was other kinds of thread stalls causing the latencies, so LAT was introduced so that the JRockit team could figure out where the problematic code was. Since there could be a considerable amount of data in LAT, a binary format was introduced for the events recorded.&lt;/p&gt;</description></item><item><title>Introduction to New AutoScale Feature Available in Payara Server</title><link>https://foojayio.github.io/website/today/introduction-to-new-autoscale-feature-available-in-payara-server/</link><pubDate>Wed, 23 Jun 2021 07:47:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-to-new-autoscale-feature-available-in-payara-server/</guid><description>&lt;p&gt;Running your application sometimes requires multiple instances to handle the requests of the users. Within the Payara Platform, the Domain Data Grid helps you configure your environment to run your application in a cluster. Besides the setup of a cluster itself, many applications can benefit from an environment that scales dynamically.&lt;/p&gt;
&lt;p&gt;The number of instances must increase when the application usage peaks and should decrease when activity is low to reduce the resource usage and the corresponding costs associated with it. The introduction of the &lt;a href="https://docs.payara.fish/community/docs/documentation/extensions/autoscale/" target="_blank" rel="noopener noreferrer"&gt;AutoScale feature in Payara Server Community 5.2021.4&lt;/a&gt;
 helps us achieve this dynamic scalability.&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>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>Apache Cassandra 4.0: Taming Tail Latencies with Java 16 ZGC</title><link>https://foojayio.github.io/website/today/apache-cassandra-4-0-taming-tail-latencies-with-java-16-zgc/</link><pubDate>Tue, 22 Jun 2021 07:45:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/apache-cassandra-4-0-taming-tail-latencies-with-java-16-zgc/</guid><description>&lt;p&gt;With Apache Cassandra 4.0, you not only get the direct improvements to performance added by the Apache Cassandra committers, you also unlock the ability to take advantage of seven years of improvements in the JVM itself. This article focuses on improvements in Java garbage collection that Cassandra 4.0 coupled with Java 16 offers over Cassandra 3.11 on Java 8.&lt;/p&gt;
&lt;p&gt;Like so many others in the Apache Cassandra community, I&amp;rsquo;m extremely excited to see that the 4.0 release is finally here. There are &lt;a href="https://cassandra.apache.org/doc/latest/new/" target="_blank" rel="noopener noreferrer"&gt;many, many improvements to Cassandra 4.0&lt;/a&gt;
. One enhancement that is more important than it might look is the addition of support for Java versions 9 and up. This was not trivial, because Java 9 made changes to some internal APIs that the most performance-oriented Java projects like Cassandra relied on (you can read more about this &lt;a href="https://issues.apache.org/jira/browse/CASSANDRA-9608" target="_blank" rel="noopener noreferrer"&gt;here&lt;/a&gt;
).&lt;/p&gt;</description></item><item><title>New Book Announcement: "Taming Thymeleaf"</title><link>https://foojayio.github.io/website/today/new-book-taming-thymeleaf/</link><pubDate>Mon, 21 Jun 2021 16:27:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-book-taming-thymeleaf/</guid><description>&lt;p&gt;Spring Boot is heavily promoted as the best way to write REST API&amp;rsquo;s in Java, but it can also be used as a very good alternative to Laravel/PHP, Rails/Ruby, or Django/Python to write server-side rendered HTML for Java developers.&lt;/p&gt;
&lt;p&gt;When combining the ease of use of Spring Boot with the power of Java and the easy templating of Thymeleaf, you have a very powerful combination that makes Java developers extremely productive to write web applications.&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>New JVM Ecosystem Report 2021 Has Arrived!</title><link>https://foojayio.github.io/website/today/new-jvm-ecosystem-report-2021-has-arrived/</link><pubDate>Fri, 18 Jun 2021 08:14:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-jvm-ecosystem-report-2021-has-arrived/</guid><description>&lt;p&gt;Snyk has just released the annual JVM ecosystem report! This report presents the results of the largest annual survey on the state of the JVM ecosystem.&lt;/p&gt;
&lt;p&gt;This year&amp;rsquo;s survey is a cooperation between &lt;a href="https://snyk.io/" target="_blank" rel="noopener noreferrer"&gt;Snyk&lt;/a&gt;
 and &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
 and was slightly different from the previous surveys. We aimed for the survey to be more concise and focus only on the most important aspects of JVM developers today. Additionally, this year every participant was allowed to choose multiple options. We believe that the way the 2021 survey was designed, we have a better and more comprehensive view of the current JVM ecosystem. In this report, we also looked at different open data sources like GitHub and Google Trends to see how that data compares to the survey results.&lt;/p&gt;</description></item><item><title>Creating Mobile Apps with JavaFX - Part 2</title><link>https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx-part-2/</link><pubDate>Fri, 18 Jun 2021 07:10:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx-part-2/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx---part-1/"&gt;Part 1&lt;/a&gt;
, we introduced a mobile app game, TiltMaze, written completely in JavaFX, which you can download from either the &lt;a href="https://apps.apple.com/app/id1566464439" target="_blank" rel="noopener noreferrer"&gt;Apple App Store&lt;/a&gt;
 or &lt;a href="https://play.google.com/store/apps/details?id=com.asgteach.accelerometer.TiltMaze" target="_blank" rel="noopener noreferrer"&gt;Google Play&lt;/a&gt;
 and install it on your mobile device or tablet.&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll discuss the technologies we use with JavaFX to build the JVM byte code version as well as native images that target iOS and Android devices.&lt;/p&gt;
&lt;h3 id="h3-0-gluonfx-plugin-for-maven"&gt;GluonFX plugin for Maven&lt;/h3&gt;
&lt;p&gt;Gluon (&lt;a href="https://docs.gluonhq.com/#_the_gluon_client_plugin_for_maven" target="_blank" rel="noopener noreferrer"&gt;https://docs.gluonhq.com/&lt;/a&gt;
) has a Maven plugin that lets you build native-image JavaFX applications targeting multiple platforms. While Java has always been about compiling Java byte code that runs in a Java Virtual Machine (JVM) anywhere and everywhere (Write Once, Run Anywhere), there are prohibitions with running byte code in the mobile environment. Besides the performance penalties of executing byte code in a virtual machine and the relatively long startup time, Apple prohibits JVM applications on mobile targets and Android Java is non-standard. If you choose to leave the JavaFX world for native toolkits, you need to acquire expertise in Objective C/Swift as well as the respective native UI toolkits to target these platforms. Spoiler alert: I didn&amp;rsquo;t do that!&lt;/p&gt;</description></item><item><title>Getting Started with Game Development Basics with FXGL</title><link>https://foojayio.github.io/website/today/game-development-basics-with-fxgl/</link><pubDate>Thu, 17 Jun 2021 08:48:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/game-development-basics-with-fxgl/</guid><description>&lt;p&gt;Game Development is a large field of Computer Science with a lot of underpinning theory behind the concepts and practices used in the industry. In this short article, we will learn some fundamental basics of these concepts, which will be explored within the context of the &lt;a href="https://github.com/AlmasB/FXGL" target="_blank" rel="noopener noreferrer"&gt;FXGL&lt;/a&gt;
 game engine.&lt;/p&gt;
&lt;p&gt;However, the concepts themselves are language-agnostic and engine-agnostic. Please note that the material presented here is deliberately simplified to provide a gentle introduction. Those seeking in-depth coverage are encouraged to pursue further research.&lt;/p&gt;</description></item><item><title>Jakarta EE Application Deployment to Kubernetes Cluster in Jelastic PaaS</title><link>https://foojayio.github.io/website/today/jakarta-ee-application-deployment-kubernetes-cluster-jelastic-paas/</link><pubDate>Wed, 16 Jun 2021 06:58:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/jakarta-ee-application-deployment-kubernetes-cluster-jelastic-paas/</guid><description>&lt;p&gt;Recently, we were asked to sponsor cloud hosting of a Jakarta EE project, called &lt;a href="https://cargo-tracker.j.scaleforce.net/" target="_blank" rel="noopener noreferrer"&gt;Cargo Tracker&lt;/a&gt;
. Being a member of Jakarta EE Working Group, Jelastic wanted to support the community and thus we started to run this application at one of our service providers (&lt;a href="https://jelastic.cloud/details/scaleforce/" target="_blank" rel="noopener noreferrer"&gt;Scaleforce&lt;/a&gt;
).&lt;/p&gt;
&lt;figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"&gt;
 &lt;div class="wp-block-embed__wrapper"&gt;
 &lt;blockquote class="twitter-tweet" data-width="500" data-dnt="true"&gt;
 &lt;p lang="en" dir="ltr"&gt;Cargo Tracker is now deployed to Kubernetes on the cloud using GitHub Actions. Thanks sponsors Jelastic and Scaleforce! &lt;a target="_blank" href="https://t.co/zhnmj0TB7Z"&gt;https://t.co/zhnmj0TB7Z&lt;/a&gt; // &lt;a target="_blank" href="https://twitter.com/Jelastic?ref_src=twsrc%5Etfw"&gt;@Jelastic&lt;/a&gt;, &lt;a target="_blank" href="https://twitter.com/scaleforce?ref_src=twsrc%5Etfw"&gt;@scaleforce&lt;/a&gt; &lt;a target="_blank" href="https://t.co/BRGkwxban2"&gt;pic.twitter.com/BRGkwxban2&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Concurrency in Java (Compared with Other Programming Languages)</title><link>https://foojayio.github.io/website/today/concurrency-in-java-and-how-it-compares-with-other-modern-programming-languages/</link><pubDate>Tue, 15 Jun 2021 08:05:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/concurrency-in-java-and-how-it-compares-with-other-modern-programming-languages/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/concurrency-in-java-and-how-it-compares-with-other-modern-programming-languages/evgeniya-litovchenko-3whkjP9a9ZI-unsplash-700x467.jpg" alt="cover image" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;This is a multi-part series where I talk about concurrency in modern programming languages and build and benchmark a concurrent web server, inspired by the example from the &lt;a href="https://doc.rust-lang.org/book/ch20-00-final-project-a-web-server.html" target="_blank" rel="noopener noreferrer"&gt;Rust book&lt;/a&gt;
, in popular languages like Java, Rust, Go, JavaScript (NodeJS), TypeScript (Deno) and Kotlin to compare concurrency and its performance between these languages/platforms.&lt;/p&gt;
&lt;p&gt;The chapters of this series are as below, with part 6 here on Foojay.io, the place for friends of OpenJDK.&lt;/p&gt;</description></item><item><title>Hidden Dracula Polymorphism Java Challenge</title><link>https://foojayio.github.io/website/today/hidden-dracula-polymorphism-java-challenge/</link><pubDate>Mon, 14 Jun 2021 11:26:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/hidden-dracula-polymorphism-java-challenge/</guid><description>&lt;p&gt;Polymorphism is one of the most important Java concepts. We might not even be aware we&amp;rsquo;re using it all the time but when we instantiate an &lt;code&gt;ArrayList&lt;/code&gt; and assign it to a variable of the &lt;code&gt;List&lt;/code&gt; type, we are using polymorphism. It&amp;rsquo;s a powerful concept because it helps us to decouple responsibilities, therefore, making code more flexible and easier to maintain.&lt;/p&gt;
&lt;p&gt;This Java Challenge is one of the hardest ones, are you ready for this one? Now is your time to improve your Java skills by doing this Java Challenge!&lt;/p&gt;</description></item><item><title>Creating Mobile Apps with JavaFX - Part 1</title><link>https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx-part-1/</link><pubDate>Fri, 11 Jun 2021 07:14:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx-part-1/</guid><description>&lt;p&gt;Mobile application offerings for both IOS and Android &lt;a href="https://www.statista.com/statistics/271644/worldwide-free-and-paid-mobile-app-store-downloads/" target="_blank" rel="noopener noreferrer"&gt;continue increasing each year&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;In this three-part series, I&amp;rsquo;ll show how to use JavaFX for mobile app development: JavaFX looks great and runs on both mobile platforms.&lt;/p&gt;
&lt;p&gt;You use the same JavaFX code targeting Google Play and Apple App stores. Performance is excellent and startup time is fast with native images. You use Java 11+ and the latest JavaFX.&lt;/p&gt;
&lt;p&gt;Our game is TiltMaze Labyrinth. Figure 1 shows TiltMaze running on an Android Nexus 5X. Figure 2 shows TiltMaze running on an iPhone 8 Plus.&lt;br&gt;
&lt;img src="https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx-part-1/TiltMaze-android-small.png" alt="" loading="lazy"&gt;
 Figure 1. TiltMaze on Android&lt;br&gt;
&lt;img src="https://foojayio.github.io/website/today/creating-mobile-apps-with-javafx-part-1/TiltMaze-iPhone-small.png" alt="TiltMaze on iPhone" loading="lazy"&gt;
 Figure 2. TiltMaze on iPhone&lt;/p&gt;</description></item><item><title>Learn All About Java Encryption and Hashing</title><link>https://foojayio.github.io/website/today/java-encryption-and-hashing/</link><pubDate>Thu, 10 Jun 2021 08:04:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-encryption-and-hashing/</guid><description>&lt;p&gt;If you need to store sensitive data in your system, you have to be sure that you have proper encryption in place. First of all, you need to decide what kind of encryption you need &amp;mdash;for instance, symmetric or asymmetric. Also, you need to choose how secure it needs to be. Stronger encryption takes more time and consumes more CPU. The most important part is that you don&amp;rsquo;t need to implement the encryption algorithms yourself. Encryption is hard and a trusted library solves encryption for you.&lt;/p&gt;</description></item><item><title>Foojay Status Report: January - June 2021</title><link>https://foojayio.github.io/website/today/foojay-status-report-january-june-2021/</link><pubDate>Wed, 09 Jun 2021 09:16:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-status-report-january-june-2021/</guid><description>&lt;p&gt;The 1/2 year mark of 2021 is a good moment to reflect on the current status of Foojay.io (a central resource for the Java community&amp;rsquo;s daily ​information needs, a place for friends of OpenJDK, ​and a community platform for the Java ecosystem​ &amp;mdash; bringing together and helping Java professionals everywhere), and to look at where we are and where to go next!&lt;/p&gt;
&lt;p&gt;First, some data! Here&amp;rsquo;s the Google Analytics graph showing total unique visitors to Foojay.io over the past half year, with several interesting spikes, explained in detail below.&lt;/p&gt;</description></item><item><title>Podcast with Ken Fogel: "What Are You Leaving Behind?"</title><link>https://foojayio.github.io/website/today/ken-fogel-what-are-you-leaving-behind/</link><pubDate>Tue, 08 Jun 2021 08:02:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/ken-fogel-what-are-you-leaving-behind/</guid><description>&lt;p&gt;I recently had the good fortune to be interviewed by Robbie Russel on his podcast &amp;ldquo;Maintainable: The Art of Improving Existing Software&amp;rdquo; (&lt;a href="https://twitter.com/_maintainable" target="_blank" rel="noopener noreferrer"&gt;@_maintainable&lt;/a&gt;
).&lt;/p&gt;
&lt;h3 id="h3-0-episode-summary"&gt;EPISODE SUMMARY&lt;/h3&gt;
&lt;p&gt;Robby speaks with Ken Fogel, College Instructor, JCP EC member, and Java Champion. They discuss the benefits of unit testing, how Dawson approaches internship placement, and the importance of code documentation. Ken also talks about how software is about more than just getting things to work, and why it&amp;rsquo;s important to focus on the long-term impact of coding decisions.&lt;/p&gt;</description></item><item><title>Avoid Multithreading Bugs Using Immutable Java Records</title><link>https://foojayio.github.io/website/today/immutable-records/</link><pubDate>Mon, 07 Jun 2021 07:52:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/immutable-records/</guid><description>&lt;p&gt;In a multi-threaded Java application, any thread can change the state of an object. The &lt;a href="https://foojayio.github.io/website/today/demystifying-jvm-memory-management/"&gt;Java memory model&lt;/a&gt;
 in Java language specification specifies when exactly updates made by one thread are going to be visible to other threads. This is one of the biggest problems professional Java developers deal with every day. Java records are immutable, an object is considered immutable if its state cannot change after it is constructed. The immutable nature of the record eliminates problems of its usage in a multithreaded environment.&lt;/p&gt;</description></item><item><title>Gluon Update, Dual Screen Raspberry Pi , IntelliJ JavaFX Project Wizard</title><link>https://foojayio.github.io/website/today/javafx-gluon-status-update-dual-screen-on-raspberry-pi-sample-intellij-new-javafx-project-wizard/</link><pubDate>Fri, 04 Jun 2021 07:27:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-gluon-status-update-dual-screen-on-raspberry-pi-sample-intellij-new-javafx-project-wizard/</guid><description>&lt;p&gt;Last week, Johan Vos of Gluon, released a video with a status update of JavaFX. In this post we are going to take a deeper look into one of the announcements: dual screen support on Raspberry Pi.&lt;/p&gt;
&lt;h2 id="h2-0-announcements-by-gluon"&gt;Announcements by Gluon&lt;/h2&gt;
&lt;p&gt;Since Java switched to a 6-month release cycle, JavaFX has done the same, so next version will be number 17. Keep in mind, although Java and JavaFX are on the same version-number, you can still use Java 11 and combine it with the JavaFX 17 runtime if you want to benefit from its improvements. Up till now, there were no breaking changes in either of the frameworks which force you to use a Java-version higher than 11.&lt;/p&gt;</description></item><item><title>New Java/JavaFX Library FXSkins Released</title><link>https://foojayio.github.io/website/today/new-java-javafx-library-fxskins-released/</link><pubDate>Thu, 03 Jun 2021 14:02:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-java-javafx-library-fxskins-released/</guid><description>&lt;p&gt;A new Java / JavaFX library has been released. It&amp;rsquo;s called FXSkins.&lt;/p&gt;
&lt;p&gt;FXSkins is a collection of new Skins for existing JavaFX controls. These Skins will add more functionality to the controls used in your applications with almost no need to make changes to your application&amp;rsquo;s code.&lt;/p&gt;
&lt;p&gt;This library is targeted for the most recent Java versions.&lt;/p&gt;
&lt;h2 id="h2-0-fxskins-details"&gt;FXSkins Details&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/new-java-javafx-library-fxskins-released/ScrollPane4.gif" alt="FXSkins ScrollPane Skin" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;FXSkins is a Java / JavaFX library targeted for Java 11 and above, up until the most recent Java version (but should also work with Java 9 and 10). It is currently being built and tested using the current LTS Java version which is Java 11.&lt;/p&gt;</description></item><item><title>JEP 411: Java's Security Model and the Principle of Least Privilege</title><link>https://foojayio.github.io/website/today/jep-411-what-it-means-for-javas-security-model/</link><pubDate>Thu, 03 Jun 2021 07:47:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/jep-411-what-it-means-for-javas-security-model/</guid><description>&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/0/07/Swiss_cheese_model.svg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Java, like most platforms or languages has layers of security, this article intends to look at Java&amp;rsquo;s Authorization layer, which is unlike in other languages, and to distinguish between two different ways this layer is typically utilized, why one is effective while the other isn&amp;rsquo;t and investigate why JEP 411 only considers the least effective method and hopefully increase awareness of the Principle of Least Privilege as it&amp;rsquo;s applied to Java Authorization, improve adoption, encourage people to take advantage of the improved security it provides, as well as prolong its support and possibly even improve it in future.&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>Announcing New Book Review: "Java by Comparison"</title><link>https://foojayio.github.io/website/today/book-review-java-by-comparison/</link><pubDate>Wed, 02 Jun 2021 08:13:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-java-by-comparison/</guid><description>&lt;figure class="wp-block-image size-medium"&gt;
 &lt;a target="_blank" href="https://pragprog.com/titles/javacomp/java-by-comparison/"&gt;&lt;img fetchpriority="high" decoding="async" width="423" height="510" src="book-java-by-comparison-423x510.png" alt="" class="wp-image-46411"&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;The book &lt;a href="https://pragprog.com/titles/javacomp/java-by-comparison/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Java by Comparison&amp;rdquo; by Simon Harrer, Jörg Lenhard, and Linus Dietz&lt;/a&gt;
, promises the reader to become a &amp;ldquo;Java Craftsman&amp;rdquo; through the study of 70 examples. The book is published by The Pragmatic Bookshelf.&lt;/p&gt;
&lt;p&gt;Each &amp;ldquo;example&amp;rdquo; is structured as a before-and-after comparison. It&amp;rsquo;s best to illustrate that with, well, an example:&lt;/p&gt;
&lt;h3 id="h3-0-return-boolean-expressions-directly"&gt;&lt;strong&gt;Return Boolean Expressions Directly&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;boolean isValid() {
 if (missions &amp;lt; 0 || name == null || name.trim().isEmpty()) {
 return false;
 } else {
 return true;
 }
}&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Asynchronous CompletableFuture Java Challenge</title><link>https://foojayio.github.io/website/today/asynchronous-completablefuture-san-francisco-adventure-java-challenge/</link><pubDate>Tue, 01 Jun 2021 07:42:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/asynchronous-completablefuture-san-francisco-adventure-java-challenge/</guid><description>&lt;p&gt;The Completable Future feature is powerful for better performance when running asynchronous methods.&lt;/p&gt;
&lt;p&gt;In Java 5, there is the Future interface, however, the Future interface doesn&amp;rsquo;t have many methods that would help us to create robust code. To solve the limitations of the Future interface, we have the CompletableFuture API with methods that will help us to build reliable high-performant software.&lt;/p&gt;
&lt;p&gt;Now that we had the intro about CompletableFuture, let&amp;rsquo;s go to the Java Challenge!&lt;/p&gt;</description></item><item><title>Released: JReleaser 0.4.0 is Now Available</title><link>https://foojayio.github.io/website/today/jreleaser-0-4-0-is-now-available/</link><pubDate>Mon, 31 May 2021 20:11:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/jreleaser-0-4-0-is-now-available/</guid><description>&lt;p&gt;JReleaser v0.4.0 has been released!&lt;/p&gt;
&lt;p&gt;JReleaser is a tool that streamlines creating releases for [Java] projects. It can create a GitHub/GitLab/Gitea release, while also packaging binaries for Homebrew, Snapcraft, Docker, Chocolatey, Scoop, JBang and, more than that, announces releases to Twitter, SdkMan!, e-mail, Zulip, Discord, Gitter, Slack, Teams, and more.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s CI friendly and runs on a variety of services.&lt;/p&gt;
&lt;p&gt;JReleaser provides a unified model across all supported services and delivers equal user experience on local environments and CI servers.&lt;/p&gt;</description></item><item><title>Creating a Simple Spring Boot Application in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/creating-a-simple-spring-boot-application-in-intellij-idea/</link><pubDate>Mon, 31 May 2021 17:06:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-a-simple-spring-boot-application-in-intellij-idea/</guid><description>&lt;p&gt;This tutorial uses IntelliJ IDEA Ultimate because we want to create a new project using Spring Initializr. This functionality is only available with IntelliJ IDEA Ultimate. It is based off &lt;a href="https://spring.io/guides/gs/spring-boot/" target="_blank" rel="noopener noreferrer"&gt;Building an Application with Spring Boot&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-creating-your-spring-boot-project"&gt;Creating your Spring Boot Project&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;If you&amp;rsquo;re in an IntelliJ IDEA project already, select &lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project&lt;/strong&gt; . Alternatively click the &lt;strong&gt;New Project&lt;/strong&gt; button on the Welcome screen.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select &lt;strong&gt;Spring Initializr&lt;/strong&gt; on the left-hand side and then enter the following options:&lt;/p&gt;</description></item><item><title>Automatic WildFly Managed Domain Clustering &amp; Scaling in Containers</title><link>https://foojayio.github.io/website/today/automatic-wildfly-clustering-managed-domain-scaling-containers/</link><pubDate>Mon, 31 May 2021 08:08:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/automatic-wildfly-clustering-managed-domain-scaling-containers/</guid><description>&lt;p&gt;Nowadays it&amp;rsquo;s easy to get up and running WildFly standalone server in a container. But what if you need to enable clustering in Managed Domain mode, which is one of the key features of &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 in general? That is a not so easy task. Some people claim it&amp;rsquo;s nearly impossible in the cloud-native world, because Jakarta EE clustering was designed before the containers era. The old question at the official &lt;a href="https://developer.jboss.org/thread/249340" target="_blank" rel="noopener noreferrer"&gt;developers portal&lt;/a&gt;
 is still not answered with any adequate instructions, just proving the presence of the issue.&lt;/p&gt;</description></item><item><title>Interviews with Robert Savage &amp; Johan Vos on Java on the Raspberry Pi</title><link>https://foojayio.github.io/website/today/interviews-with-robert-savage-and-johan-vos-on-the-state-of-java-on-raspberry-pi/</link><pubDate>Fri, 28 May 2021 07:14:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/interviews-with-robert-savage-and-johan-vos-on-the-state-of-java-on-raspberry-pi/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This post is part of an &lt;a href="https://kiosk.entwickler.de/java-magazin/java-magazin-6-2021/status-quo-und-expertenstimmen/" target="_blank" rel="noopener noreferrer"&gt;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;Here on Foojay.io, you can find already &lt;a href="https://foojayio.github.io/website/today/category/java/embedded/raspberry-pi/"&gt;a long list of articles about Java on the Raspberry Pi&lt;/a&gt;
. As you may know, already I&amp;rsquo;m a big fan of this combination. The Raspberry Pi on one side is a very cheap computer that allows you to experiment with electronic components thanks to the Pi4J library. And on the other hand, JavaFX is the ideal framework to build user interfaces that can directly control these components, all in one application!&lt;/p&gt;</description></item><item><title>Getting Started Hacking Third-Party APIs on the JVM</title><link>https://foojayio.github.io/website/today/hacking-third-party-api-jvm/</link><pubDate>Thu, 27 May 2021 06:27:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/hacking-third-party-api-jvm/</guid><description>&lt;p&gt;The JVM ecosystem is mature and offers plenty of libraries, so you don&amp;rsquo;t need to reinvent the wheel. Basic - and not so basic - functionalities are just a dependency away. Sometimes, however, the dependency and your use-case are slightly misaligned.&lt;/p&gt;
&lt;p&gt;The correct way to fix this would be to create a Pull Request. But your deadline is tomorrow: you need to make it work &lt;em&gt;now&lt;/em&gt;! It&amp;rsquo;s time to hack the provided API.&lt;/p&gt;</description></item><item><title>Getting Started with Jakarta EE 9: Context &amp; Dependency Injection</title><link>https://foojayio.github.io/website/today/getting-started-with-jakarta-ee-9-context-and-dependency-injection-cdi/</link><pubDate>Wed, 26 May 2021 06:56:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-jakarta-ee-9-context-and-dependency-injection-cdi/</guid><description>&lt;p&gt;In the next part of the &amp;ldquo;&lt;a href="https://foojayio.github.io/website/today/getting-started-with-jakarta-ee-9-how-to-create-a-rest-api-with-jakarta-ee-9/"&gt;Getting Started with Jakarta EE&lt;/a&gt;
&amp;rdquo; series, we discuss Context and Dependency Injection (CDI) and the CDI specification.&lt;/p&gt;
&lt;p&gt;The CDI specification is an important backbone of Jakarta EE as it brings several specifications together. Over the years, it has become more and more important as an increasing number of specifications started using CDI as the basis for it.&lt;/p&gt;
&lt;p&gt;We will also tell you a bit about the different scopes, the interceptor mechanism, and the Event system.&lt;/p&gt;</description></item><item><title>Announcement: Jakarta EE 9.1 Has Been Released!</title><link>https://foojayio.github.io/website/today/jakarta-ee-91-released/</link><pubDate>Tue, 25 May 2021 14:57:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/jakarta-ee-91-released/</guid><description>&lt;p&gt;&lt;strong&gt;Join us in celebrating a new release of Jakarta EE!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jakarta.ee/news/jakarta-ee-9-1-released/" target="_blank" rel="noopener noreferrer"&gt;The Jakarta EE Working Group Releases Jakarta EE 9.1 as Industry Continues to Embrace Open Source Enterprise Java&lt;/a&gt;
! Jakarta EE 9.1 adds support for Java SE 11 runtimes to the foundational Jakarta EE 9 release.&lt;/p&gt;
&lt;p&gt;This gives developers more flexibility when migrating from previous Jakarta EE releases.&lt;br&gt;
&lt;a href="https://www.agilejava.eu/wp-content/uploads/2021/05/JakartaEE91_release.png" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://www.agilejava.eu/wp-content/uploads/2021/05/JakartaEE91_release.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;In order to upgrade to the new version, simply change the dependency version in your &lt;em&gt;pom.xml&lt;/em&gt; to &lt;code&gt;9.1.0&lt;/code&gt;. If you are upgrading from a version prior to Jakarta EE 9, follow the &lt;a href="https://www.agilejava.eu/2021/01/22/migration-guide/" target="_blank" rel="noopener noreferrer"&gt;migration steps&lt;/a&gt;
 for the namespace change from &lt;code&gt;javax.*&lt;/code&gt; to &lt;code&gt;jakarta.*&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Welcome to the FXGL Game Engine 11.16 Release</title><link>https://foojayio.github.io/website/today/fxgl-game-engine-11-16-release/</link><pubDate>Tue, 25 May 2021 12:10:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/fxgl-game-engine-11-16-release/</guid><description>&lt;p&gt;FXGL is a JavaFX game engine: &lt;a href="https://github.com/AlmasB/FXGL" target="_blank" rel="noopener noreferrer"&gt;https://github.com/AlmasB/FXGL&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-release-highlights"&gt;Release Highlights&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;The restored Multiplayer Service allows easy replications of input, events and entities on a remote machine. For example, by just adding a single line of code (see MultiplayerService API), any key or mouse inputs that occur on one end of the connection can be replicated on the other end.&lt;/li&gt;
&lt;li&gt;The new FPS camera allows easy control of the player (or their &amp;ldquo;line of sight&amp;rdquo;) in the context of a first-person 3D game.&lt;/li&gt;
&lt;li&gt;There is no longer a transitive dependency on the &lt;code&gt;javafx.swing&lt;/code&gt; module. This means FXGL users will not need an extra module in their module graph.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="h2-1-release-notes"&gt;Release Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Restored and refactored MultiplayerService&lt;/li&gt;
&lt;li&gt;Added ReplicationEvent (javafx event that can be replicated on a remote machine)&lt;/li&gt;
&lt;li&gt;FPS camera (&lt;code&gt;camera3D.setFPSCamera(true)&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Mouse sensitivity setting&lt;/li&gt;
&lt;li&gt;Removed dependency on &lt;code&gt;javafx.swing&lt;/code&gt; module, thanks to @FDelporte&lt;/li&gt;
&lt;li&gt;Performance improvements in Tiled map loading, thanks to @adambocco&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isExperimental3D&lt;/code&gt; -&amp;gt; &lt;code&gt;3D&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isExperimentalNative&lt;/code&gt; -&amp;gt; &lt;code&gt;isNative&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Model3D can be loaded from an .obj&lt;/li&gt;
&lt;li&gt;Model3D now has a copy()&lt;/li&gt;
&lt;li&gt;Added Cuboid shape&lt;/li&gt;
&lt;li&gt;EntityGroup::size(), thanks to @adambocco&lt;/li&gt;
&lt;li&gt;Allow providing a custom default cursor for all scenes&lt;/li&gt;
&lt;li&gt;Internal physics refactoring&lt;/li&gt;
&lt;li&gt;Entity no longer throws an exception when adding a duplicate Component (warns instead), thanks to @Zhack47&lt;/li&gt;
&lt;li&gt;JavaFX 15 -&amp;gt; 16&lt;/li&gt;
&lt;li&gt;Compile target for Kotlin: 1.8 -&amp;gt; 11&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/fuDQg7W0v4g?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;</description></item><item><title>Take the Type Erasure Generics Java Challenge!</title><link>https://foojayio.github.io/website/today/type-erasure-generics-java-challenge/</link><pubDate>Tue, 25 May 2021 06:50:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/type-erasure-generics-java-challenge/</guid><description>&lt;p&gt;It&amp;rsquo;s possible to use type erasure generics in a method with Java. To know how to use generics is important because then you are able to create highly reusable code.&lt;/p&gt;
&lt;p&gt;In the following Java Challenge, you will see the generic type that will be erased by the compiler and then will be replaced by the type we defined at runtime.&lt;/p&gt;
&lt;p&gt;Note also that we are using the extends keyword which means that the generic type will extend the other type.&lt;/p&gt;</description></item><item><title>Why JEP 411 Will Have a Negative Impact on Java Security</title><link>https://foojayio.github.io/website/today/why-jep-411-will-have-a-negative-impact-on-java-security/</link><pubDate>Sat, 22 May 2021 07:43:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-jep-411-will-have-a-negative-impact-on-java-security/</guid><description>&lt;p&gt;&lt;em&gt;&lt;a href="https://openjdk.java.net/jeps/411" target="_blank" rel="noopener noreferrer"&gt;JEP 411&lt;/a&gt;
 specifies the &amp;ldquo;deprecation of the Security Manager for removal in a future release. The Security Manager dates from Java 1.0. It has not been the primary means of securing client-side Java code for many years, and it has rarely been used to secure server-side code. To move Java forward, we intend to deprecate the Security Manager for removal in concert with the legacy Applet API (JEP 398).&amp;rdquo; Below, Peter Firmstone describes how this relates to the principle of least privilege and what the impact of this JEP will be. Agree or disagree, add your comments, or your full articles on this topic are also welcome here on Foojay.&lt;/em&gt;&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>Demystifying Java Virtual Machine Memory Management</title><link>https://foojayio.github.io/website/today/demystifying-jvm-memory-management/</link><pubDate>Thu, 20 May 2021 07:26:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/demystifying-jvm-memory-management/</guid><description>&lt;p&gt;&lt;img src="https://i.imgur.com/Kv9ichJ.gif" alt="cover-image" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://deepu.tech/memory-management-in-programming/" target="_blank" rel="noopener noreferrer"&gt;this multi-part series&lt;/a&gt;
, I aim to demystify the concepts behind memory management and take a deeper look at memory management in some of the modern programming languages, in particular Java, Kotlin, Scala, Groovy, and Clojure.&lt;/p&gt;
&lt;p&gt;I hope the series would give you some insights into what is happening under the hood of these languages in terms of memory management. In this chapter, we will look at the memory management of the &lt;strong&gt;Java Virtual Machine (JVM)&lt;/strong&gt; used by languages like Java, Kotlin, Scala, Clojure, Groovy, and so on.&lt;/p&gt;</description></item><item><title>Creating a JavaFX World Clock from Scratch (Part 5)</title><link>https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-5/</link><pubDate>Wed, 19 May 2021 15:05:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-5/</guid><description/></item><item><title>Controlling an LCD Display with Spring and Thymeleaf on the Raspberry Pi</title><link>https://foojayio.github.io/website/today/controlling-an-lcd-display-with-spring-and-thymeleaf-on-the-raspberry-pi/</link><pubDate>Wed, 19 May 2021 07:10:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/controlling-an-lcd-display-with-spring-and-thymeleaf-on-the-raspberry-pi/</guid><description>&lt;p&gt;&lt;a href="https://twitter.com/Igfasouza" target="_blank" rel="noopener noreferrer"&gt;Igor De Souza&lt;/a&gt;
 shares on his blog a lot fun and inspirational experiments with Java on Raspberry Pi. Some of those were already shared here on Foojay.io:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/electronics-quarkus-qute-on-raspberry-pi/"&gt;Electronics &amp;amp; Quarkus Qute on Raspberry Pi&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/electronics-micronaut-velocity-with-raspberry-pi/"&gt;Electronics &amp;amp; Micronaut Velocity with Raspberry Pi&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/vert-x-example-on-the-raspberry-pi-with-a-virtual-potentiometer/"&gt;Vert.x Example on the Raspberry Pi with a Virtual Potentiometer&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This time we want to highlight his work which combines a web app made with Spring and Thymeleaf, to control an LCD display connected to a Raspberry PI.
&lt;img src="https://foojayio.github.io/website/today/controlling-an-lcd-display-with-spring-and-thymeleaf-on-the-raspberry-pi/spring_lcd.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>VS Code s Getting Better &amp; Better for Java</title><link>https://foojayio.github.io/website/today/vs-code-getting-better-and-better-for-java/</link><pubDate>Tue, 18 May 2021 07:13:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/vs-code-getting-better-and-better-for-java/</guid><description>&lt;p&gt;VS Code is getting better and better for Java. In the last two months, we have made progresses in all key areas including core language support, testing, debugging, refactoring and project management. Let&amp;rsquo;s uncover the new hidden and less hidden gems!&lt;/p&gt;
&lt;h3 id="h3-0-type-hierarchy"&gt;Type hierarchy&lt;/h3&gt;
&lt;p&gt;VS Code has already supported call hierarchy for Java, so what about type hierarchy?&lt;/p&gt;
&lt;p&gt;Together with Red Hat, we are very happy to announce type hierarchy is publicly available from the latest release of &lt;a href="https://marketplace.visualstudio.com/items?itemName=redhat.java" title="Language Support for Java published by Red Hat" target="_blank" rel="noopener noreferrer"&gt;Language Support for Java published by Red Hat&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>The Map, Equals, Hashcode Java Challenge</title><link>https://foojayio.github.io/website/today/map-equals-hashcode-java-challenge/</link><pubDate>Mon, 17 May 2021 08:38:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/map-equals-hashcode-java-challenge/</guid><description>&lt;p&gt;Understanding deeply how to use a Map, equals, and hashcode in Java will be a massive help for you to create high-quality code. The Map and object reference concepts are not only present in the Java language but in almost all programming languages. Therefore, if you master the concept of object references, equals and hashcode, and Maps, you can apply this in other programming languages and master them far more easily.&lt;/p&gt;</description></item><item><title>Sanitize All Input! Sanitize All Input! Sanitize All Input!</title><link>https://foojayio.github.io/website/today/sanitize-all-input/</link><pubDate>Thu, 13 May 2021 07:23:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/sanitize-all-input/</guid><description>&lt;p&gt;Cross-site scripting (XSS) is a well-known issue and mostly utilized in JavaScript applications. However, Java is not immune to this. XSS is nothing more than an injection of JavaScript code that&amp;rsquo;s executed remotely. Rule #0 for preventing XSS, according to OWASP, is &amp;ldquo;Never insert untrusted data except in allowed locations.&amp;rdquo; The basic solution to this Java security risk is to prevent untrusted data, as much as possible, and sanitize everything else before using the data.&lt;/p&gt;</description></item><item><title>Introducing Teeing: A Hidden Gem in the Java API</title><link>https://foojayio.github.io/website/today/teeing-java-api/</link><pubDate>Wed, 12 May 2021 07:15:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/teeing-java-api/</guid><description>&lt;p&gt;Last week, I &lt;a href="https://blog.frankel.ch/real-world-stream-collector/" target="_blank" rel="noopener noreferrer"&gt;described a use-case&lt;/a&gt;
 for a custom Stream &lt;code&gt;Collector&lt;/code&gt;. I received a intriguing comment on Twitter:&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="aligncenter wp-image-44873 size-medium" src="Screenshot-2021-05-09-at-15.31.46-700x171.png" alt="" width="700" height="171"&gt;
&lt;br /&gt;
&lt;p&gt;Hats off to you, Miguel! Your comment revealed a method I didn&amp;rsquo;t know!&lt;/p&gt;
&lt;p&gt;So I decided to investigate what is the &lt;code&gt;teeing()&lt;/code&gt; method about.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Returns a Collector that is a composite of two downstream collectors. Every element passed to the resulting collector is processed by both downstream collectors, then their results are merged using the specified merge function into the final result.&lt;/p&gt;</description></item><item><title>7 Functional Programming Techniques in Java: A Primer</title><link>https://foojayio.github.io/website/today/7-functional-programming-techniques-in-java-a-primer/</link><pubDate>Tue, 11 May 2021 07:34:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/7-functional-programming-techniques-in-java-a-primer/</guid><description>&lt;p&gt;&lt;img src="https://thepracticaldev.s3.amazonaws.com/i/zf8mvgix8icaz64mgj89.png" alt="header image" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;There is a lot of hype around functional programming (FP) and a lot of cool kids are doing it but it is not a silver bullet. Like other programming paradigms/styles, functional programming also has its pros and cons and one may prefer one paradigm over the other. If you are a Java developer and wants to venture into functional programming, do not worry, you don&amp;rsquo;t have to learn functional programming oriented languages like Haskell or Clojure(or even Scala or JavaScript though they are not pure functional programming languages) since Java has you covered and this post is for you.&lt;/p&gt;</description></item><item><title>Optional takeWhile dropWhile Java Challenge</title><link>https://foojayio.github.io/website/today/optional-takewhile-dropwhile-java-challenge/</link><pubDate>Mon, 10 May 2021 08:05:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/optional-takewhile-dropwhile-java-challenge/</guid><description>&lt;p&gt;The Optional concept is present in many programming languages. The main goal of the Optional class is to avoid &lt;code&gt;NullPointerException&lt;/code&gt;. It&amp;rsquo;s much easier to deal with null values when we use the concepts of an Optional.&lt;/p&gt;
&lt;p&gt;In this challenge, we will also explore the takeWhile and dropWhile methods from Java 9. Therefore you will be upgrading your knowledge with &lt;code&gt;Optional&lt;/code&gt;, &lt;code&gt;takeWhile&lt;/code&gt;, and &lt;code&gt;dropWhile&lt;/code&gt;!&lt;/p&gt;
&lt;p&gt;Are you prepared to have fun with this Java Challenge and refine your Java skills?&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>Preventing YAML Parsing Vulnerabilities in Java</title><link>https://foojayio.github.io/website/today/preventing-yaml-parsing-vulnerabilities-in-java/</link><pubDate>Thu, 06 May 2021 16:09:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/preventing-yaml-parsing-vulnerabilities-in-java/</guid><description>&lt;p&gt;YAML is a human-readable language to serialize data that&amp;rsquo;s commonly used for config files. The word YAML is an acronym for &amp;ldquo;YAML ain&amp;rsquo;t a markup language&amp;rdquo; and was first released in 2001. You can compare YAML to JSON or XML as all of them are text-based structured formats.&lt;/p&gt;
&lt;p&gt;YAML files are often used to configure applications, application servers, or clusters. It is a very common format in Spring Boot applications and, of course, to configure Kubernetes. However, similarly to JSON and XML, you can use YAML to serialize and deserialize data.&lt;/p&gt;</description></item><item><title>Payara Services Wins Prestigious Queen’s Award!</title><link>https://foojayio.github.io/website/today/payara-services-wins-prestigious-queens-award/</link><pubDate>Thu, 06 May 2021 08:07:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/payara-services-wins-prestigious-queens-award/</guid><description>&lt;p&gt;Micro-multinational open source software company, Payara Services, has been commended for its achievements within global trading and exporting with the Queen&amp;rsquo;s Award for Enterprise for International Trade.&lt;/p&gt;
&lt;figure class="alignright size-large is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="4.-Payara-Services-QA-Logo-2021-1-3-593x1024.png" alt="" class="wp-image-44793" width="259" height="448"&gt;
&lt;/figure&gt;
&lt;p&gt;Now in its 55^th^ year, the Queen&amp;rsquo;s Award for Enterprise: International Trade is the UK&amp;rsquo;s most prestigious business award, honouring organisations that have excelled in overseas exports whilst maintaining the highest standards in social, economic, and environmental activity.&lt;/p&gt;
&lt;p&gt;Payara&amp;rsquo;s win attests to the growing success of the open source software business model. Payara&amp;rsquo;s open source product offering, the Payara Platform, is based on the global initiatives of the Jakarta EE and MicroProfile standards. Community users can download the Payara Platform Community Edition for their development projects and containerized Jakarta EE and MicroProfile applications, while the fully supported, subscription based Payara Enterprise Edition is designed for mission critical systems in production and containerized Jakarta EE and MicroProfile applications.&lt;/p&gt;</description></item><item><title>Elastic JVM: Configuring G1 GC for Automatic Vertical Memory Scaling</title><link>https://foojayio.github.io/website/today/elastic-jvm-configuring-g1-for-automatic-vertical-memory-scaling/</link><pubDate>Wed, 05 May 2021 13:45:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/elastic-jvm-configuring-g1-for-automatic-vertical-memory-scaling/</guid><description>&lt;figure class="alignleft"&gt;
 &lt;img decoding="async" src="https://jelastic.com/blog/wp-content/uploads/2018/12/elastic-jvm-e1545213859238.png" alt="Automatic Vertical Memory Scaling" class="wp-image-31447"&gt;
&lt;/figure&gt;
&lt;p&gt;Nowadays, JVM-based applications can benefit from elasticity and density of container technology. However, there are still some issues that may prevent from unleashing the full potential of Java and containers &amp;ldquo;marriage.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Releasing unused but committed Heap memory by the major JVM implementations based on OpenJDK, in most cases, is not performed automatically, or requires specific knowledge to be configured.&lt;/p&gt;
&lt;p&gt;To solve this problem and make &lt;a href="https://jelastic.com/blog/java-ram-usage-in-containers-top-5-tips-not-to-lose-your-memory/" target="_blank" rel="noopener noreferrer"&gt;Java RAM usage in containers&lt;/a&gt;
 more efficient, the Jelastic team collaborated with different experts involved in JVM development. We have periodically published articles highlighting this issue and motivating the community to help in finding a solution. As a result, attention to this topic has increased, and new improvements were introduced in different Garbage Collection implementations in order to make automatic vertical memory scaling possible.&lt;/p&gt;</description></item><item><title>Why Java Developers Continue to Rely on Jakarta EE</title><link>https://foojayio.github.io/website/today/why-java-developers-continue-to-rely-on-jakarta-ee/</link><pubDate>Wed, 05 May 2021 07:53:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-java-developers-continue-to-rely-on-jakarta-ee/</guid><description>&lt;p&gt;Over the past year, the Eclipse Foundation spoke to leading Java developers around the world to discuss why they rely on&lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 and the unique benefits of using Jakarta EE technologies. Their input is captured in our white paper, which describes the important advantages Jakarta EE offers today and for the future.&lt;/p&gt;
&lt;figure class="aligncenter size-large is-resized"&gt;
 &lt;a href="https://outreach.jakartaee.org/white-paper-java-applications" target="_blank" rel="noopener"&gt;&lt;img fetchpriority="high" decoding="async" src="https://www.agilejava.eu/wp-content/uploads/2021/03/JakartaEEWhitepaper.png" alt="" class="wp-image-3727" width="222" height="288"&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a href="https://outreach.jakartaee.org/white-paper-java-applications" target="_blank" rel="noopener noreferrer"&gt;Download the Jakarta EE white paper!&lt;/a&gt;
&lt;/p&gt;
&lt;h4 id="they"&gt;&lt;strong&gt;They&amp;rsquo;re Looking Ahead, Not Back&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;With Jakarta EE&amp;rsquo;s long history as Java EE, it&amp;rsquo;s sometimes easy for developers to dismiss the technology as yesterday&amp;rsquo;s approach. But Jakarta EE technologies are embedded, and relied upon, in a way no other technologies are. Here are some examples you might not be aware of:&lt;/p&gt;</description></item><item><title>Snake Game with JavaFX FXGL in Three Pair-Programming Sessions</title><link>https://foojayio.github.io/website/today/creating-a-snake-game-with-javafx-fxgl-in-three-pair-programming-sessions/</link><pubDate>Tue, 04 May 2021 07:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-a-snake-game-with-javafx-fxgl-in-three-pair-programming-sessions/</guid><description>&lt;p&gt;In this article, Almas and I will show you how to start with an idea for a game and bring it to life in a prototype application. We will then modify the application to run on a Raspberry Pi and on a mobile device.&lt;/p&gt;
&lt;p&gt;To give some background, some time ago my 10y old son challenged me to create a Snake-like game with emojis. He selected the emoji images and I &amp;ldquo;only&amp;rdquo; needed to do the programming bit, the easy part&amp;hellip; Luckily Almas asked me if I had a topic for some pair-programming for his &lt;a href="https://www.youtube.com/channel/UCmjXvUa36DjqCJ1zktXVbUA/videos" target="_blank" rel="noopener noreferrer"&gt;YouTube channel&lt;/a&gt;
, and his question turned into a three-part series. My son is delighted because his idea is now a real game!&lt;/p&gt;</description></item><item><title>New Book Announcement: "Java Challengers"</title><link>https://foojayio.github.io/website/today/new-book-java-challengers/</link><pubDate>Mon, 03 May 2021 07:03:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-book-java-challengers/</guid><description>&lt;p&gt;To get the best jobs and create massive value, you need to know Java very well. The &lt;a href="https://leanpub.com/javachallengers" target="_blank" rel="noopener noreferrer"&gt;newly released &amp;ldquo;Java Challengers&amp;rdquo; book&lt;/a&gt;
 is a way for you to challenge yourself with fun code challenges so that you will become a better Java developer.&lt;/p&gt;
&lt;p&gt;This book contains more than 70 well-elaborated Java Challenges that will help you break your limits on your Java skills. Want to challenge yourself and become better? The Java Challengers is the book for you!&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>Are You New Yo Java? Here Are Some Resources</title><link>https://foojayio.github.io/website/today/new-to-java-some-resources/</link><pubDate>Fri, 30 Apr 2021 07:16:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-to-java-some-resources/</guid><description>&lt;p&gt;In &lt;a href="https://twitter.com/helenjoscott/status/1372477062263496704?s=21" target="_blank" rel="noopener noreferrer"&gt;this tweet&lt;/a&gt;
, I was asked if I had a list of resources for developers who are new to Java. I didn&amp;rsquo;t at the time, but I&amp;rsquo;ve spent some time researching and here is that list.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve listed content that is both free and paid. It&amp;rsquo;s not that one type is superior; it&amp;rsquo;s just to give you plenty of choices. These are the resources that I&amp;rsquo;ve used and do still use to re-learn Java. So, if you&amp;rsquo;re new to Java or looking to pick it up again after a break, this article is for you.&lt;/p&gt;</description></item><item><title>Fix Java Security Issues While Coding in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/fix-java-security-issues-while-coding-in-intellij-idea/</link><pubDate>Thu, 29 Apr 2021 17:10:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/fix-java-security-issues-while-coding-in-intellij-idea/</guid><description>&lt;p&gt;Nowadays, developers are responsible for more than just creating the application. Besides working on features, developers have to focus on their applications&amp;rsquo; maintainability, scalability, reliability, &lt;strong&gt;and&lt;/strong&gt; security. Many developers are unsure of where to start with security. In addition, most companies still work with a dedicated security team instead of having security expertise inside the team.&lt;/p&gt;
&lt;p&gt;A lot of developers practically live in their integrated development environment (IDE). A good IDE is like a swiss army knife: it is your go-to tool to do almost everything. Having everything I need to build, run, test, debug, and&lt;strong&gt;secure&lt;/strong&gt; my application, makes a good IDE invaluable for many developers.&lt;/p&gt;</description></item><item><title>Java Garbage Collection Types &amp; Settings Customization via Jelastic PaaS</title><link>https://foojayio.github.io/website/today/java-garbage-collection-types-and-settings-customization-via-jelastic-paas/</link><pubDate>Thu, 29 Apr 2021 07:54:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-garbage-collection-types-and-settings-customization-via-jelastic-paas/</guid><description>&lt;figure class="alignleft is-resized"&gt;
 &lt;img decoding="async" src="https://jelastic.com/blog/wp-content/uploads/2019/08/java-gc.png" alt="java gc" class="wp-image-34173" width="250"&gt;
&lt;/figure&gt;
&lt;p&gt;Performance and price are two big considerations in application hosting that always matter. And, often, we question ourselves on how to decrease the spends, without affecting the performance of your apps at the same time. In this article, we&amp;rsquo;d like to address automatic memory management for Java applications hosted with Jelastic using garbage collection.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s clarify what garbage collection is, what it does for Java applications and how it works within Jelastic PaaS.&lt;/p&gt;</description></item><item><title>Beginning JavaFX Applications with IntelliJ IDE</title><link>https://foojayio.github.io/website/today/beginning-javafx-with-intellij/</link><pubDate>Wed, 28 Apr 2021 19:33:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/beginning-javafx-with-intellij/</guid><description>&lt;figure class="alignleft size-large"&gt;
 &lt;img src="https://foojayio.github.io/website/today/beginning-javafx-with-intellij/duke-intellij-shirt.png" alt="" width="174" height="313" loading="lazy" class="is-zoomable"&gt;&lt;figcaption class="wp-element-caption"&gt;JavaFX in IntelliJ IDE&lt;/figcaption&gt;&lt;/figure&gt;

&lt;p&gt;This article is for the beginner who wants to get started developing JavaFX applications using &lt;a href="https://www.jetbrains.com/idea/" target="_blank" rel="noopener noreferrer"&gt;Jetbrains&amp;rsquo; IntelliJ&lt;/a&gt;
 IDE. The article will create three flavors of a HelloWorld JavaFX application as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Plain - Create a new project from scratch using no build tools&lt;/li&gt;
&lt;li&gt;Maven - Create a new project using the Maven build tool&lt;/li&gt;
&lt;li&gt;Gradle - Create a new project using the Gradle build tool&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While this article may seem elementary for some, I believe it can help newcomers to the JavaFX platform avoid some pitfalls and really hit the ground running.&lt;/p&gt;</description></item><item><title>SKP's Core Java/Java EE Roots : Gang of Four Design Patterns - Part 01</title><link>https://foojayio.github.io/website/today/gang-of-four-design-patterns-using-core-java-part-01/</link><pubDate>Wed, 28 Apr 2021 13:43:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/gang-of-four-design-patterns-using-core-java-part-01/</guid><description>&lt;p&gt;&lt;strong&gt;[About SKP&amp;rsquo;s Core Java/Java EE Roots]&lt;/strong&gt;&lt;br&gt;
Series of Articles on Rooted Concepts in Core Java and J2EE. They Revolve Around Memory Architecture, Connection &amp;amp; Memory Leaks, Core Java Syntax &amp;amp; Semantics, Java Object Layout/Anatomy, Multi-Threading, Asynchronous Task Execution, Design Patterns, Java Agents, Class Loading, API Design, OOPs &amp;amp; SOLID.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;To understand the philosophical and historical perspective on the Gang of Four&amp;rsquo;s design patterns, I made a short, 10-minute video. (This was also my PluralSight Author Audition). Please take time to view the [Introduction to Gang of Four Design Patterns] Video.&lt;/p&gt;</description></item><item><title>An Example of Overengineering - Keep it WET</title><link>https://foojayio.github.io/website/today/an-example-of-overengineering-keep-it-wet/</link><pubDate>Wed, 28 Apr 2021 09:20:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/an-example-of-overengineering-keep-it-wet/</guid><description>&lt;p&gt;This week&amp;rsquo;s post is pretty short. I&amp;rsquo;ve already &lt;a href="https://blog.frankel.ch/are-you-guilty-of-overengineering/" target="_blank" rel="noopener noreferrer"&gt;written about overengineering&lt;/a&gt;
, but this adds a personal touch.&lt;/p&gt;
&lt;p&gt;I had to rewrite my &lt;a href="https://github.com/hazelcast/jet-train" target="_blank" rel="noopener noreferrer"&gt;Jet Train demo&lt;/a&gt;
 to use another data provider, switching from a Swiss one to a Bay Area one. One of the main components of the demo is a streaming pipeline.&lt;/p&gt;
&lt;p&gt;The pipeline:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Reads data from a web endpoint&lt;/li&gt;
&lt;li&gt;Transforms data through several steps&lt;/li&gt;
&lt;li&gt;Writes the final data into an in-memory data grid&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Most of the transform steps in #2 enrich the data. Each of them requires an implementation of a &lt;code&gt;BiFunction&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>JavaFX Running in Kiosk Mode on the Raspberry Pi</title><link>https://foojayio.github.io/website/today/javafx-running-in-kiosk-mode-on-the-raspberry-pi/</link><pubDate>Tue, 27 Apr 2021 14:39:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-running-in-kiosk-mode-on-the-raspberry-pi/</guid><description>&lt;p&gt;Combined with an inexpensive touch screen, the Raspberry Pi makes for a perfect controller for a machine or game console. Let&amp;rsquo;s see how we can use Java and JavaFX to build a test application that also communicates with the pins of the Raspberry Pi to control a LED.&lt;/p&gt;
&lt;p&gt;We have done something before already in the post &lt;a href="https://foojayio.github.io/website/today/light-up-your-christmas-tree-with-java-and-raspberry-pi/"&gt;&amp;ldquo;Light Up your Christmas Tree with Java and Raspberry Pi&amp;rdquo;&lt;/a&gt;
, so what&amp;rsquo;s new here?&lt;/p&gt;</description></item><item><title>Modern JavaFX Game Development with FXGL - Pong</title><link>https://foojayio.github.io/website/today/modern-javafx-game-development-with-fxgl-pong-simple/</link><pubDate>Tue, 27 Apr 2021 07:48:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/modern-javafx-game-development-with-fxgl-pong-simple/</guid><description>&lt;p&gt;In this tutorial we will make a very simple clone of the classic Pong game using the &lt;a href="https://github.com/AlmasB/FXGL" target="_blank" rel="noopener noreferrer"&gt;FXGL game engine&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;We will be using the latest (currently 11.15) version of FXGL via Maven (or Gradle):&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java"&gt;&amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;com.github.almasb&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactId&amp;gt;fxgl&amp;lt;/artifactId&amp;gt;
 &amp;lt;version&amp;gt;11.15&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/pre&gt;
&lt;p&gt;The full source code is available at the end of this page. The game will look like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://raw.githubusercontent.com/AlmasB/git-server/master/storage/images/fxgl_pong.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Whilst this tutorial is meant to teach basic concepts, building on them will allow us to produce much more &lt;a href="https://youtu.be/yhr1b4061os?t=496" target="_blank" rel="noopener noreferrer"&gt;complex examples&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Take the 2021 Jakarta EE Developer Survey</title><link>https://foojayio.github.io/website/today/2021-jakarta-ee-developer-survey/</link><pubDate>Mon, 26 Apr 2021 07:47:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/2021-jakarta-ee-developer-survey/</guid><description>&lt;p&gt;The annual &lt;a href="https://www.surveymonkey.com/r/F9SWSDF" target="_blank" rel="noopener noreferrer"&gt;2021Jakarta EE Developer Survey&lt;/a&gt;
 is out. Make sure to use this opportunity to make your voice heard!
&lt;a href="https://www.surveymonkey.com/r/F9SWSDF" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://www.agilejava.eu/wp-content/uploads/2021/04/JakartaEESurvey2021-1024x574.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;This is the fourth Jakarta EE Developer Survey, so it is safe to say that it has become an annual tradition and is your chance to influence the direction of the Jakarta EE working group.&lt;/p&gt;
&lt;p&gt;The survey last year had more than 2000 responses from individuals around the World. Let&amp;rsquo;s beat that number this year!&lt;/p&gt;</description></item><item><title>How to Create a REST API with Jakarta EE 9</title><link>https://foojayio.github.io/website/today/getting-started-with-jakarta-ee-9-how-to-create-a-rest-api-with-jakarta-ee-9/</link><pubDate>Mon, 26 Apr 2021 07:18:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-jakarta-ee-9-how-to-create-a-rest-api-with-jakarta-ee-9/</guid><description>&lt;p&gt;In this second article of the &amp;ldquo;&lt;a href="https://foojayio.github.io/website/today/getting-started-with-jakarta-ee-9-hello-world/"&gt;Getting Started with Jakarta EE 9&lt;/a&gt;
&amp;rdquo; series, we show you some basic scenarios using the REST specification. Although most people are using the term REST or RESTful API just to indicate they do data transfer over HTTP, and ignore the &amp;ldquo;Hypermedia as the engine of application State (HATEOS)&amp;rdquo; part of REST. The technology is used a lot lately to connect the front-end with the back-end.&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>Namespace Shadowing (a.k.a. “Dependency Confusion”) Attack</title><link>https://foojayio.github.io/website/today/namespace-shadowing-a-k-a-dependency-confusion-attack/</link><pubDate>Thu, 22 Apr 2021 06:31:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/namespace-shadowing-a-k-a-dependency-confusion-attack/</guid><description>&lt;h3 id="h3-0-tl-dr-yet-another-case-for-using-exclude-patterns-in-remote-repositories"&gt;TL;DR: Yet Another Case for Using Exclude Patterns in Remote Repositories&lt;/h3&gt;
&lt;p&gt;The npm Registry is vulnerable to supply chain namespace shadowing, also known as &amp;ldquo;Dependency Confusion&amp;rdquo; attacks. Make sure you create npm scoped packages and force exclude patterns.&lt;/p&gt;
&lt;h3 id="h3-1-long-time-obsession-with-exclude-patterns"&gt;Long-time Obsession with Exclude Patterns&lt;/h3&gt;
&lt;p&gt;I remember the first JFrog customer training I delivered in February 2012. This slide was the one where I explained the importance of setting exclude patterns on your repositories (you can see it is 2012 by the slide design, right? Also, Ant was a thing.):&lt;/p&gt;</description></item><item><title>Building Microservices with Spring Boot Fat (Uber) Jar</title><link>https://foojayio.github.io/website/today/building-microservices-spring-boot-fat-uber-jar/</link><pubDate>Wed, 21 Apr 2021 09:28:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-microservices-spring-boot-fat-uber-jar/</guid><description>&lt;p&gt;In most minds,&lt;em&gt;microservices&lt;/em&gt; is an approach to make a traditional monolithic system more structured, dividing it into logical components that correspond to different functional areas of application. Thus, acting as a microservice, each component becomes self-contained, easily scaled, maintained and even upgraded without affecting the overall system. Also, with &lt;em&gt;microservice&lt;/em&gt; architecture, you can use a software written in different programming languages, including Java. Such freedom attracts but may frighten at the same time.&lt;/p&gt;</description></item><item><title>Welcome to the New Java Welcome Page for VS Code</title><link>https://foojayio.github.io/website/today/new-java-welcome-page-for-vs-code/</link><pubDate>Mon, 19 Apr 2021 09:02:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-java-welcome-page-for-vs-code/</guid><description>&lt;p&gt;For many of us, it&amp;rsquo;s Spring now, a season for being refreshed, no exception to VS Code. In this blog, we will share with you our experiments with a new Welcome Page.&lt;/p&gt;
&lt;h3 id="h3-0-new-welcome-page"&gt;New Welcome Page&lt;/h3&gt;
&lt;p&gt;A common thing at first-time use is spending a couple of minutes browsing the Welcome Page and trying features from there. Users&amp;rsquo; satisfaction with the Welcome Page has a direct reflection on their satisfaction with the product and consequently affects their decision of adoption. Therefore, we believe it&amp;rsquo;s worth the effort to experiment with a refreshed Java Welcome Page.&lt;/p&gt;</description></item><item><title>About IntelliJ IDEA Changelists and Git Staging</title><link>https://foojayio.github.io/website/today/intellij-idea-changelists-and-git-staging/</link><pubDate>Fri, 16 Apr 2021 07:13:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/intellij-idea-changelists-and-git-staging/</guid><description>&lt;p&gt;Since the release of IntelliJ IDEA 2020.3, there are now two ways to manage your commits to Git. The first one is through existing functionality with &lt;a href="https://www.jetbrains.com/help/idea/managing-changelists.html" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA changelists&lt;/a&gt;
, the second is through support for &lt;a href="https://www.jetbrains.com/help/idea/commit-and-push-changes.html#use-git-staging-area-to-commit-changes" target="_blank" rel="noopener noreferrer"&gt;Git staging&lt;/a&gt;
. This blog will take you through both approaches and highlight the differences. There is no right or wrong answer, it&amp;rsquo;s a case of choosing the method that works best for you, or that you&amp;rsquo;re most familiar with.&lt;/p&gt;</description></item><item><title>8 Best Practices to Prevent SQL Injection Attacks</title><link>https://foojayio.github.io/website/today/8-best-practices-to-prevent-sql-injection-attacks/</link><pubDate>Thu, 15 Apr 2021 08:33:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/8-best-practices-to-prevent-sql-injection-attacks/</guid><description>&lt;p&gt;SQL injection is one of the most dangerous vulnerabilities for online applications. It occurs when a user adds untrusted data to a database query. For instance, when filling in a web form. If SQL injection is possible, smart attackers can create user input to steal valuable data, bypass authentication, or corrupt the records in your database.&lt;/p&gt;
&lt;p&gt;There are different types of SQL injection attacks, but in general, they all have a similar cause. The untrusted data that the user enters is concatenated with the query string. Therefore the user&amp;rsquo;s input can alter the query&amp;rsquo;s original intent.&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>Taking A Deep Dive Into Multi-Threading in Java</title><link>https://foojayio.github.io/website/today/deep-dive-into-multi-threading-in-java/</link><pubDate>Tue, 13 Apr 2021 07:21:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/deep-dive-into-multi-threading-in-java/</guid><description>&lt;p&gt;&lt;strong&gt;[About SKP&amp;rsquo;s Core Java/Java EE Roots]&lt;/strong&gt;&lt;br&gt;
Series of Articles on Rooted Concepts in Core Java and J2EE. They Revolve Around Memory Architecture, Connection &amp;amp; Memory Leaks, Core Java Syntax &amp;amp; Semantics, Java Object Layout/Anatomy, Multi-Threading, Asynchronous Task Execution, Design Patterns, Java Agents, Class Loading, API Design, OOPs &amp;amp; SOLID.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Multi-threading represents a very intriguing topic, even after years of research and development for high quality, robust, and efficient software. With equal emphasis on hardware improvements and the software that runs on it &amp;ndash; we have newer paradigms for parallelism. The most important yet basic concepts are the ones which I present here. I then explain the intricacies of multi-threading in the Java programming language. Some of these are newer features and supported only from the Java Platform Standard Edition 5.0. Let us start with a quick overview and understanding of the core concepts.&lt;/p&gt;</description></item><item><title>Jenkins Cluster for Continuous Integration and Delivery in Jelastic PaaS</title><link>https://foojayio.github.io/website/today/jenkins-cluster-continuous-integration-delivery-in-jelastic-paas/</link><pubDate>Mon, 12 Apr 2021 12:44:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/jenkins-cluster-continuous-integration-delivery-in-jelastic-paas/</guid><description>&lt;p&gt;Jenkins is an open-source continuous integration and delivery system designed to ensure build and deploy automation. It is well-suited to be installed in the cloud to run self-hosted pipelines.&lt;/p&gt;
&lt;p&gt;Jenkins supports clustering via master-slave mode. A build process can be delegated to several slave (worker) nodes. This allows serving multiple projects in a single Jenkins cluster setup.&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll describe how to install Jenkins cluster with slave nodes auto-discovering and self-registering inside a master node. Jelastic PaaS implemented this solution in &lt;strong&gt;Jenkins DevOps Pack&lt;/strong&gt; that can be installed from the &lt;a href="https://docs.jelastic.com/marketplace/" target="_blank" rel="noopener noreferrer"&gt;Marketplace&lt;/a&gt;
 or through environment setup wizard as a &lt;strong&gt;New Environment&lt;/strong&gt;. In this tutorial we&amp;rsquo;ll cover both. Also, you will find out how to build a simple Java project hosted on GitHub using Jelastic Maven plugin.&lt;/p&gt;</description></item><item><title>Creating a JavaFX World Clock from Scratch (Part 4)</title><link>https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-4/</link><pubDate>Fri, 09 Apr 2021 07:51:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-4/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities.&amp;rdquo; &amp;ndash; Edsger W. Dijkstra, 18 June 1975&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-4/Screen-Shot-2021-03-28-at-4.05.45-PM.png" alt="JFX World Clock &amp;amp; JPackager" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Hello and welcome to Part 4 of a series of blog entries on how I created a &amp;ldquo;sci-fi&amp;rdquo; looking world clock using JavaFX. If you are new to this series you can visit Part &lt;a href="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-1/" title="Part 1"&gt;1&lt;/a&gt;
, &lt;a href="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-2/" title="Part 2"&gt;2&lt;/a&gt;
, &amp;amp; &lt;a href="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-3/" title="Part3"&gt;3&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>How to Change a Field's Type in Recent JDKs</title><link>https://foojayio.github.io/website/today/changing-field-type-recent-jdks/</link><pubDate>Thu, 08 Apr 2021 07:40:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/changing-field-type-recent-jdks/</guid><description>&lt;p&gt;A couple of years ago, I attended a talk by my former colleague (but still friend) &lt;a href="https://twitter.com/volker_simonis" target="_blank" rel="noopener noreferrer"&gt;Volker Simonis&lt;/a&gt;
. It gave me the idea to dig a bit into the subject of how to secure the JVM. From the material, I created a &lt;a href="https://blog.frankel.ch/focus/jvm-security/" target="_blank" rel="noopener noreferrer"&gt;series of blog posts&lt;/a&gt;
 as well as &lt;a href="https://www.youtube.com/watch?v=Bgo7dcCbqV8" target="_blank" rel="noopener noreferrer"&gt;a talk&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;From that point on, I submitted the talk at meetups and conferences, where it was well-received. Because I like to explore different areas, I stopped to submit other proposals. Still, the talk is in my portfolio, and it was requested again in 2021. I have already presented it twice since the beginning of the year at the time of this writing.&lt;/p&gt;</description></item><item><title>Getting Started with Jakarta EE 9: Hello World</title><link>https://foojayio.github.io/website/today/getting-started-with-jakarta-ee-9-hello-world/</link><pubDate>Wed, 07 Apr 2021 08:55:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-jakarta-ee-9-hello-world/</guid><description>&lt;p&gt;The &lt;a href="https://jakarta.ee/release/9/" target="_blank" rel="noopener noreferrer"&gt;release of Jakarta EE 9&lt;/a&gt;
, at the end of 2020, was in many ways a historic event. The Java Enterprise framework is already 20 years old, having its first release in 1999. It has changed names a few times but the main concepts of the first release can still be found in this new release. During all those years, it has adapted itself to keep it up to date but has always adhered to its main principle of stability and backward compatibility.&lt;/p&gt;</description></item><item><title>Getting Started with Java 16 and IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/java-16-and-intellij-idea/</link><pubDate>Tue, 06 Apr 2021 07:11:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-16-and-intellij-idea/</guid><description>&lt;p&gt;If you are still working with Java 8, you might have mixed feelings about the news of the release of &lt;a href="http://openjdk.java.net/projects/jdk/16/" target="_blank" rel="noopener noreferrer"&gt;Java 16&lt;/a&gt;
. However, you&amp;rsquo;ll see these numbers are going to increment at a much faster and predictable rate with Java&amp;rsquo;s six-month release cadence.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m personally excited about Java 16! It adds &lt;a href="https://openjdk.java.net/jeps/395" target="_blank" rel="noopener noreferrer"&gt;Records&lt;/a&gt;
 and &lt;a href="https://openjdk.java.net/jeps/394" target="_blank" rel="noopener noreferrer"&gt;Pattern Matching for instanceof&lt;/a&gt;
 as standard language features with &lt;a href="https://openjdk.java.net/jeps/397" target="_blank" rel="noopener noreferrer"&gt;Sealed classes&lt;/a&gt;
 continuing to be a &lt;a href="https://openjdk.java.net/jeps/12" target="_blank" rel="noopener noreferrer"&gt;preview feature&lt;/a&gt;
 (in the second preview).&lt;/p&gt;</description></item><item><title>Creating a JavaFX World Clock from Scratch (Part 3)</title><link>https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-3/</link><pubDate>Fri, 02 Apr 2021 09:51:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-3/</guid><description>&lt;blockquote&gt;
&lt;p&gt;An old trick well done is far better than a new trick with no effect. &amp;ndash; Harry Houdini&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-3/Screen-Shot-2021-03-25-at-4.04.43-PM.png" alt="World Clock Location Config Form" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Welcome back to the series of blog entries on how I created a &amp;ldquo;sci-fi&amp;rdquo; looking world clock using JavaFX. If you are new to this series you can visit Part &lt;a href="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-1/" title="Creating a JavaFX World Clock from Scratch (Part 1)"&gt;[1]&lt;/a&gt;
 &amp;amp; &lt;a href="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-2/" title="Creating a JavaFX World Clock from Scratch (Part 2)"&gt;[2]&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Participate in the Java Ecosystem Survey 2021</title><link>https://foojayio.github.io/website/today/java-ecosystem-survey-2021/</link><pubDate>Thu, 01 Apr 2021 16:03:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-ecosystem-survey-2021/</guid><description>&lt;p&gt;Just like in 2020, &lt;a href="https://snyk.io" target="_blank" rel="noopener noreferrer"&gt;Snyk&lt;/a&gt;
 is creating a comprehensive Java 2021 report that reflects the state of the JVM ecosystem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Friday, 2 April, the survey will come to an end, after running since the middle of February, spread the word! 🙂&lt;br&gt;
&lt;a href="https://snykteam.typeform.com/to/ZHuh7NzJ" target="_blank" rel="noopener noreferrer"&gt;Go to the Java 2021 survey&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the summary of the &lt;a href="https://snyk.io/blog/jvm-ecosystem-report-2020" target="_blank" rel="noopener noreferrer"&gt;JVM Ecosystem 2020&lt;/a&gt;
 report:&lt;/p&gt;
&lt;figure class="aligncenter is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="https://lh6.googleusercontent.com/pE3ECVjEXTzDVr3fus4nGAzSoY7288RU21Vb-KQ5Xmu7FJpi8zEvjWQeSCb9gQAdHn4EqApLc0CncLDS0JkxDNi0XRHqqRsxjyqkYhfK69jrSkHOTMNflNrrAdY1KkywbfdAo-02" alt="" width="800" height="435"&gt;
&lt;/figure&gt;
&lt;p&gt;As always, we couldn&amp;rsquo;t have done this without you! So, once again, we ask for your help with the 2021 edition of the JVM Ecosystem Report.&lt;br&gt;
&lt;a href="https://snykteam.typeform.com/to/ZHuh7NzJ" target="_blank" rel="noopener noreferrer"&gt;Go to the Java 2021 survey&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Introduction to Java Records: Data carrier classes</title><link>https://foojayio.github.io/website/today/records/</link><pubDate>Wed, 31 Mar 2021 07:16:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/records/</guid><description>&lt;p&gt;Professional Java developers need immutable data carrier-classes for communication with databases and web Services. We need to write a lot of boilerplate code to create a simple data carrier-class, we typically implement constructor, accessors, equals(), hashCode(), and toString(). &lt;em&gt;&lt;strong&gt;This process is repetitive and error-prone. Developers also complain &amp;ldquo;Java is too verbose&amp;rdquo;.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Record classes provide a way to model data in Java. An example of data is a row in a database table. This feature simplifies coding, makes Java code more concise and readable, increasing productivity for professional Java developers. Java14 introduced Records as a preview feature, Java15 brings in some updates as a second preview, and Java16 makes it a final feature, no changes will be needed for Records after this.&lt;/p&gt;</description></item><item><title>Latest Java Releases and Eclipse Java IDE</title><link>https://foojayio.github.io/website/today/keeping-pace-with-java-using-eclipse-ide/</link><pubDate>Tue, 30 Mar 2021 07:51:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/keeping-pace-with-java-using-eclipse-ide/</guid><description>&lt;p&gt;The Java language has been evolving at a fast pace with a six month release cadence and preview features.&lt;/p&gt;
&lt;p&gt;With faster Java releases, it&amp;rsquo;s an exciting time to be a Java developer. Every new release of Java promises interesting features and updates.&lt;/p&gt;
&lt;p&gt;To give them a spin, you have the tooling support in Eclipse Java IDE ready at your disposal.&lt;/p&gt;
&lt;h2 id="h2-0-under-the-hood"&gt;Under the Hood&lt;/h2&gt;
&lt;p&gt;The Java tooling in Eclipse IDE has its own compiler implementation which not only generates class files, but also produces a Java document model which forms the basis for implementing a large number of tooling features.&lt;/p&gt;</description></item><item><title>A (Definitive?) Guide to LazyInitializationException</title><link>https://foojayio.github.io/website/today/guide-lazyinitializationexception/</link><pubDate>Mon, 29 Mar 2021 07:19:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/guide-lazyinitializationexception/</guid><description>&lt;p&gt;Posts that have been written about Hibernate&amp;rsquo;s &lt;code&gt;LazyInitializationException&lt;/code&gt; could probably fill whole books.&lt;/p&gt;
&lt;p&gt;Yet, I believe each of them focuses on a particular aspect of it: some on a specific solution, some on how to solve it with Spring Boot, etc.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d like this post to be the definitive guide on the subject, even though I&amp;rsquo;m pretty sure it won&amp;rsquo;t. At least, I&amp;rsquo;ll be able to point others to it!&lt;/p&gt;</description></item><item><title>Interview on Machine Learning and Disruptive Data Science</title><link>https://foojayio.github.io/website/today/fabiane-nardon-machine-learning-data-science/</link><pubDate>Fri, 26 Mar 2021 13:15:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/fabiane-nardon-machine-learning-data-science/</guid><description>&lt;p&gt;I attended sessions and spoke with Java Champion Fabiane Bizinella Nardon at many JavaOne conferences over the past years. I remember, in our conversations in the hallways, discussing various entrepreneurial ventures she was working on. One of the ideas was &lt;a href="https://www.tail.digital" title="Tail Target" target="_blank" rel="noopener noreferrer"&gt;Tail Target&lt;/a&gt;
. Fast forward almost a decade, and Tail Target has truly come to fruition.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/fabiane-nardon-machine-learning-data-science/fabiane-tailtarget.com_8314_small-2-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Fabiane Bizinella Nardon has an MSc in Computer Science and a PhD in Electronic Engineering. She is an expert in Data Engineering and Machine Language Engineering. She is the program committee leader for the Machine Learning Engineering track of QCon São Paulo, a frequent speaker on the subject, and author of several articles.&lt;/p&gt;</description></item><item><title>Billion Events Per Second, Millisecond Latency: Giga Streaming Analytics</title><link>https://foojayio.github.io/website/today/billion-events-per-second-with-millisecond-latency/</link><pubDate>Thu, 25 Mar 2021 17:04:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/billion-events-per-second-with-millisecond-latency/</guid><description>&lt;p&gt;This post is a part of a series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-real-time-streaming/"&gt;Part 1 (Intro and high-throughput streaming benchmark)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-batch-processing/"&gt;Part 2 (batch workload benchmark)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-the-low-latency-rematch/"&gt;Part 3 (low-latency benchmark)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/sub-10-ms-latency-in-java-concurrent-gc-with-green-threads/"&gt;Part 4 (concurrent GC with green threads)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Part 5 (you are here)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&amp;rsquo;re preparing a scientific paper on Hazelcast Jet, describing its architecture based on symmetric, data-local, non-blocking distributed event processing. As a part of this effort, we implemented the vendor-neutral &lt;a href="http://datalab.cs.pdx.edu/niagara/NEXMark/" target="_blank" rel="noopener noreferrer"&gt;NEXMark&lt;/a&gt;
 benchmark suite, consisting of 8 streaming queries that aim to capture typical kinds of questions you&amp;rsquo;re likely to ask about your real-time data.&lt;/p&gt;</description></item><item><title>DevOps 101 Part III: Package Management</title><link>https://foojayio.github.io/website/today/devops-101-part-iii-package-management/</link><pubDate>Wed, 24 Mar 2021 07:35:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/devops-101-part-iii-package-management/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This post was originally published by &lt;a href="https://dev.to/katcosgrove" target="_blank" rel="noopener noreferrer"&gt;Kat Costgove&lt;/a&gt;
 at &lt;a href="https://dev.to/jfrog/devops-101-package-management-1i14" target="_blank" rel="noopener noreferrer"&gt;Dev.to&lt;/a&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When you&amp;rsquo;re new to an industry, you encounter a lot of new concepts. This can make it really difficult to get your feet underneath you on an unfamiliar landscape, especially for junior engineers. What&amp;rsquo;s all this jargon? What does DevOps really mean? What&amp;rsquo;s all this software? Is DevOps a methodology, or a toolset? Is any of this actually going to make my life easier, or is it just a bunch of industry buzzwords?&lt;/p&gt;</description></item><item><title>Spring Boot, Java 16, and New Java Records</title><link>https://foojayio.github.io/website/today/spring-boot-java-16-records/</link><pubDate>Tue, 23 Mar 2021 09:55:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-java-16-records/</guid><description>&lt;p&gt;In this article, we will discuss Records, which is an official feature in Java 16, and we will apply this knowledge while using it in conjunction with a Spring Boot application.&lt;/p&gt;
&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;On March 16th, 2021, Java 16 was GA. With this new release, tons of new exciting features are added. Check out &lt;a href="https://foojayio.github.io/website/today/highlights-of-new-jeps-in-java-16/"&gt;the highlights here on Foojay&lt;/a&gt;
 to know more about these changes.&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll focus on Java Records, defined in &lt;a href="https://openjdk.java.net/jeps/395" target="_blank" rel="noopener noreferrer"&gt;JEP 395&lt;/a&gt;
. Records were first introduced in JDK 14 as a preview feature, proposed by JEP 359, and with JDK 15 they remained in preview with JEP 384. However, with JDK 16, Records are now no longer in preview: they&amp;rsquo;re an official part of the Java language now.&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>Secure Code Review Best Practices (Part 2)</title><link>https://foojayio.github.io/website/today/secure-code-review-best-practices-part-2/</link><pubDate>Thu, 18 Mar 2021 15:14:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/secure-code-review-best-practices-part-2/</guid><description>&lt;p&gt;Code reviews are hard to do well. Particularly when you&amp;rsquo;re not entirely sure about the errors you should be looking for!&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/secure-code-review-best-practices-part-1/"&gt;part 1 of this series&lt;/a&gt;
, we focused on four best practices, such as &lt;strong&gt;sanitization&lt;/strong&gt; , &lt;strong&gt;storing secrets,&lt;/strong&gt; and &lt;strong&gt;scanning your application&lt;/strong&gt; are explained so take a quick look if you missed the first part.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s move on to the second and final part of this topic, tips 5 through 8!&lt;/p&gt;</description></item><item><title>DevOps 101 Part II: Introduction to Container Registries</title><link>https://foojayio.github.io/website/today/devops-101-part-ii-container-registries/</link><pubDate>Wed, 17 Mar 2021 08:58:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/devops-101-part-ii-container-registries/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This post was originally published by &lt;a href="https://dev.to/katcosgrove" target="_blank" rel="noopener noreferrer"&gt;Kat Costgove&lt;/a&gt;
 at &lt;a href="https://dev.to/jfrog/devops-101-container-registries-1lil" target="_blank" rel="noopener noreferrer"&gt;Dev.to&lt;/a&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When you&amp;rsquo;re new to an industry, you encounter a lot of new concepts. This can make it really difficult to get your feet underneath you on an unfamiliar landscape, especially for junior engineers.&lt;/p&gt;
&lt;p&gt;In this series (&lt;a href="https://foojayio.github.io/website/today/devops-101-part-i-ci-cd/"&gt;part 1 is here&lt;/a&gt;
), I&amp;rsquo;m covering tools and terminology common to the DevOps space, plus the occasional newbie-friendly tutorial for emerging or established technologies. If you have a request or suggestion, let me know!&lt;/p&gt;</description></item><item><title>Highlights of the Newest and Latest JEPs in Java 16</title><link>https://foojayio.github.io/website/today/highlights-of-new-jeps-in-java-16/</link><pubDate>Tue, 16 Mar 2021 18:02:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/highlights-of-new-jeps-in-java-16/</guid><description>&lt;p&gt;The JDK Enhancement Proposal (or JEP) is a community process for collecting proposals for enhancements to the OpenJDK.&lt;/p&gt;
&lt;p&gt;Java 16, released today, incorporates the JEPs below:&lt;/p&gt;
&lt;p&gt;|&amp;mdash;&amp;mdash;&amp;mdash;|&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-|&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-|
| &lt;strong&gt;JEP&lt;/strong&gt; | &lt;strong&gt;Name&lt;/strong&gt; | &lt;strong&gt;Summary&lt;/strong&gt; |
| 338 | &lt;a href="https://openjdk.java.net/jeps/338" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Vector API (Incubator)&lt;/strong&gt;&lt;/a&gt;
 | Provide an initial iteration of an &lt;a href="https://openjdk.java.net/jeps/11" target="_blank" rel="noopener noreferrer"&gt;incubator module&lt;/a&gt;
, &lt;code&gt;jdk.incubator.vector&lt;/code&gt;, to express vector computations that reliably compile at runtime to optimal vector hardware instructions on supported CPU architectures and thus achieve superior performance to equivalent scalar computations. |
| 347 | &lt;a href="https://openjdk.java.net/jeps/347" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Enable C++14 Language Features&lt;/strong&gt;&lt;/a&gt;
 | Allow the use of C++14 language features in JDK C++ source code, and give specific guidance about which of those features may be used in HotSpot code. |
| 357 | &lt;a href="https://openjdk.java.net/jeps/357" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Migrate from Mercurial to Git&lt;/strong&gt;&lt;/a&gt;
 | Migrate the OpenJDK Community&amp;rsquo;s source code repositories from Mercurial (hg) to Git. |
| 369 | &lt;a href="https://openjdk.java.net/jeps/369" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Migrate to GitHub&lt;/strong&gt;&lt;/a&gt;
 | Host the OpenJDK Community&amp;rsquo;s Git repositories on &lt;a href="https://www.github.com/" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
. In concert with &lt;a href="https://openjdk.java.net/jeps/357" target="_blank" rel="noopener noreferrer"&gt;JEP 357 (Migrate from Mercurial to Git)&lt;/a&gt;
, this would migrate all single-repository OpenJDK Projects to GitHub, including both &lt;a href="https://openjdk.java.net/projects/jdk/" target="_blank" rel="noopener noreferrer"&gt;JDK feature releases&lt;/a&gt;
 and &lt;a href="https://openjdk.java.net/projects/jdk-updates/" target="_blank" rel="noopener noreferrer"&gt;JDK update releases&lt;/a&gt;
 for versions 11 and later. |
| 376 | &lt;a href="https://openjdk.java.net/jeps/376" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Concurrent Thread-Stack Processing&lt;/strong&gt;&lt;/a&gt;
 | Move ZGC thread-stack processing from safepoints to a concurrent phase. |
| 380 | &lt;a href="https://openjdk.java.net/jeps/380" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Unix-Domain Socket Channels&lt;/strong&gt;&lt;/a&gt;
 | Add Unix-domain (&lt;code&gt;AF_UNIX&lt;/code&gt;) socket support to the &lt;a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/nio/channels/SocketChannel.html" target="_blank" rel="noopener noreferrer"&gt;socket channel&lt;/a&gt;
 and &lt;a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/nio/channels/ServerSocketChannel.html" target="_blank" rel="noopener noreferrer"&gt;server-socket channel&lt;/a&gt;
 APIs in the &lt;code&gt;java.nio.channels&lt;/code&gt; package. Extend the &lt;a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/nio/channels/spi/SelectorProvider.html#inheritedChannel%28%29" target="_blank" rel="noopener noreferrer"&gt;inherited channel mechanism&lt;/a&gt;
 to support Unix-domain socket channels and server socket channels. |
| 386 | &lt;a href="https://openjdk.java.net/jeps/386" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Alpine Linux Port&lt;/strong&gt;&lt;/a&gt;
 | Port the JDK to Alpine Linux, and to other Linux distributions that use musl as their primary C library, on both the x64 and AArch64 architectures, |
| 387 | &lt;a href="https://openjdk.java.net/jeps/387" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Elastic Metaspace&lt;/strong&gt;&lt;/a&gt;
 | Return unused HotSpot class-metadata (i.e., &lt;em&gt;metaspace&lt;/em&gt;) memory to the operating system more promptly, reduce metaspace footprint, and simplify the metaspace code in order to reduce maintenance costs. |
| 388 | &lt;a href="https://openjdk.java.net/jeps/388" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Windows/AArch64 Port&lt;/strong&gt;&lt;/a&gt;
 | Port the JDK to Windows/AArch64. |
| 389 | &lt;a href="https://openjdk.java.net/jeps/389" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Foreign Linker API (Incubator)&lt;/strong&gt;&lt;/a&gt;
 | Introduce an API that offers statically-typed, pure-Java access to native code. This API, together with the Foreign-Memory API (&lt;a href="https://openjdk.java.net/jeps/393" target="_blank" rel="noopener noreferrer"&gt;JEP 393&lt;/a&gt;
), will considerably simplify the otherwise error-prone process of binding to a native library. |
| 390 | &lt;a href="https://openjdk.java.net/jeps/390" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Warnings for Value-Based Classes&lt;/strong&gt;&lt;/a&gt;
 | Designate the primitive wrapper classes as &lt;em&gt;value-based&lt;/em&gt; and deprecate their constructors for removal, prompting new deprecation warnings. Provide warnings about improper attempts to synchronize on instances of any value-based classes in the Java Platform. |
| 392 | &lt;a href="https://openjdk.java.net/jeps/392" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Packaging Tool&lt;/strong&gt;&lt;/a&gt;
 | Provide the &lt;code&gt;jpackage&lt;/code&gt; tool, for packaging self-contained Java applications. |
| 393 | &lt;a href="https://openjdk.java.net/jeps/393" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Foreign-Memory Access API (Third Incubator)&lt;/strong&gt;&lt;/a&gt;
 | Introduce an API to allow Java programs to safely and efficiently access foreign memory outside of the Java heap. |
| 394 | &lt;a href="https://openjdk.java.net/jeps/394" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pattern Matching for instanceof&lt;/strong&gt;&lt;/a&gt;
 | Enhance the Java programming language with &lt;em&gt;pattern matching&lt;/em&gt; for the&lt;code&gt;instanceof&lt;/code&gt; operator. &lt;a href="https://cr.openjdk.java.net/~briangoetz/amber/pattern-match.html" target="_blank" rel="noopener noreferrer"&gt;Pattern matching&lt;/a&gt;
 allows common logic in a program, namely the conditional extraction of components from objects, to be expressed more concisely and safely. |
| 395 | &lt;a href="https://openjdk.java.net/jeps/395" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Records&lt;/strong&gt;&lt;/a&gt;
 | Enhance the Java programming language with &lt;a href="https://cr.openjdk.java.net/~briangoetz/amber/datum.html" target="_blank" rel="noopener noreferrer"&gt;records&lt;/a&gt;
, which are classes that act as transparent carriers for immutable data. Records can be thought of as &lt;em&gt;nominal tuples&lt;/em&gt;. |
| 396 | &lt;a href="https://openjdk.java.net/jeps/396" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Strongly Encapsulate JDK Internals by Default&lt;/strong&gt;&lt;/a&gt;
 | Strongly encapsulate all internal elements of the JDK by default, except for &lt;a href="https://openjdk.java.net/jeps/260#Description" target="_blank" rel="noopener noreferrer"&gt;critical internal APIs&lt;/a&gt;
 such as &lt;code&gt;sun.misc.Unsafe&lt;/code&gt;. Allow end users to choose the relaxed strong encapsulation that has been the default since JDK 9. |
| 397 | &lt;a href="https://openjdk.java.net/jeps/397" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sealed Classes (Second Preview)&lt;/strong&gt;&lt;/a&gt;
 | Enhance the Java programming language with &lt;a href="https://cr.openjdk.java.net/~briangoetz/amber/datum.html" target="_blank" rel="noopener noreferrer"&gt;sealed classes and interfaces&lt;/a&gt;
. Sealed classes and interfaces restrict which other classes or interfaces may extend or implement them. |&lt;/p&gt;</description></item><item><title>Getting Started with Java Testing with VS Code</title><link>https://foojayio.github.io/website/today/java-testing-with-vs-code/</link><pubDate>Mon, 15 Mar 2021 12:24:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-testing-with-vs-code/</guid><description>&lt;p&gt;In our &lt;a href="https://foojayio.github.io/website/today/welcome-to-vs-code-for-java/" title="last post"&gt;last post&lt;/a&gt;
, we talked about starting a new Java project and running and debugging it with VS Code. In this post, we will cover testing.&lt;/p&gt;
&lt;p&gt;To run Java tests on VS Code, we recommend using the &lt;a href="https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-test" title="Java Test Runner extension" target="_blank" rel="noopener noreferrer"&gt;Java Test Runner extension&lt;/a&gt;
 or the &lt;a href="https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack" title="Java Extension Pack" target="_blank" rel="noopener noreferrer"&gt;Java Extension Pack&lt;/a&gt;
, which includes the extension. The extension supports the JUnit4, JUnit5, and TestNG frameworks.&lt;/p&gt;
&lt;h3 id="h3-0-running-tests"&gt;Running Tests&lt;/h3&gt;
&lt;p&gt;When a project with test cases is imported into VS Code, VS Code can automatically detect the test cases and get them ready for you to run.&lt;/p&gt;</description></item><item><title>Custom Controls in JavaFX (Part VII): JDK Butler</title><link>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-vii/</link><pubDate>Fri, 12 Mar 2021 09:10:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-vii/</guid><description>&lt;p&gt;Welcome the &lt;a href="https://foojayio.github.io/website/today/custom-controls-in-javafx-part-i/"&gt;final article of this little series&lt;/a&gt;
 about custom controls in JavaFX.&lt;/p&gt;
&lt;p&gt;This time, I have created an application that makes use of custom controls. I won&amp;rsquo;t go through the whole code on how I&amp;rsquo;ve created this application but only on the custom controls that I&amp;rsquo;ve created for it.&lt;/p&gt;
&lt;p&gt;But first, let me show you the application&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/custom-controls-in-javafx-part-vii/JDK-Butler-2021-02-10-11-57-56-700x504.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/HanSolo/jdkbutler" target="_blank" rel="noopener noreferrer"&gt;JDK Butler&lt;/a&gt;
 is an app that makes use of the &lt;a href="https://github.com/foojay2020/discoapi" target="_blank" rel="noopener noreferrer"&gt;Foojay Disco API&lt;/a&gt;
 to enable you to drill down to a JDK of your choice and download it to your machine. As you can see in the screenshot, we have columns where we can select things like major version, version, distribution etc.&lt;/p&gt;</description></item><item><title>Secure Code Review Best Practices (Part 1)</title><link>https://foojayio.github.io/website/today/secure-code-review-best-practices-part-1/</link><pubDate>Thu, 11 Mar 2021 16:58:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/secure-code-review-best-practices-part-1/</guid><description>&lt;p&gt;Code reviews are hard to do well. Particularly when you&amp;rsquo;re not entirely sure about the errors you should be looking for!&lt;/p&gt;
&lt;p&gt;Be sure when you&amp;rsquo;re reviewing code to understand that all code isn&amp;rsquo;t written equal! Think also about what lies behind the code that you&amp;rsquo;re reviewing and thus the data and assets you are trying to protect. This working knowledge is something that isn&amp;rsquo;t easy to add into a checklist.&lt;/p&gt;</description></item><item><title>Embracing JVM unified logging (JEP-158 / JEP-271)</title><link>https://foojayio.github.io/website/today/embracing-jvm-unified-logging/</link><pubDate>Wed, 10 Mar 2021 18:20:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/embracing-jvm-unified-logging/</guid><description>&lt;p&gt;In the previous &lt;a href="https://foojayio.github.io/website/today/introduction-to-jvm-unified-logging-jep-158-jep-271/"&gt;blog post&lt;/a&gt;
, I briefly introduced unified logging and a simple GC configuration. However for the savvy GC tuners, there are many more options. And there are other logging options that transitionned to unified logging infrastructure as well.&lt;/p&gt;
&lt;p&gt;I wasn&amp;rsquo;t satisfied with the official documentation and other blog posts as they usually present only a fragmented picture of the previous options. This led me to dig in.&lt;/p&gt;
&lt;h2 id="_migrating_the_gc_logging_continued"&gt;Migrating the GC logging (continued)&lt;/h2&gt;
&lt;p&gt;|&amp;mdash;&amp;mdash;|&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash;|
| Note | These log are based on JDK11u. |&lt;/p&gt;</description></item><item><title>Download OpenJDK Today!</title><link>https://foojayio.github.io/website/today/download-openjdk-today/</link><pubDate>Tue, 09 Mar 2021 10:35:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/download-openjdk-today/</guid><description>&lt;p&gt;Multiple different vendors provide the OpenJDK and Foojay.io gives you access to them all.&lt;/p&gt;
&lt;p&gt;Simply go here: &lt;a href="https://foojayio.github.io/website/download/"&gt;&lt;strong&gt;foojay.io/download&lt;/strong&gt;&lt;/a&gt;

&lt;img src="https://foojayio.github.io/website/today/download-openjdk-today/image-1-1024x748.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Note: in the lower part of the navigation bar on the left, you can finetune your selection so that you can download exactly the OpenJDK distribution that you need:
&lt;img src="https://foojayio.github.io/website/today/download-openjdk-today/image-2-441x1024.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Intro for Java Devs to DevOps 101 Part I: CI/CD</title><link>https://foojayio.github.io/website/today/devops-101-part-i-ci-cd/</link><pubDate>Tue, 09 Mar 2021 08:00:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/devops-101-part-i-ci-cd/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This post was originally published by &lt;a href="https://dev.to/katcosgrove" target="_blank" rel="noopener noreferrer"&gt;Kat Costgove&lt;/a&gt;
 at &lt;a href="https://dev.to/jfrog/devops-101-ci-cd-49il" target="_blank" rel="noopener noreferrer"&gt;Dev.to&lt;/a&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When you&amp;rsquo;re new to an industry, you encounter a lot of new concepts. This can make it really difficult to get your feet underneath you on an unfamiliar landscape, especially for junior engineers.&lt;/p&gt;
&lt;p&gt;In this series, I&amp;rsquo;ll cover &lt;a href="https://jfrog.com/devops-tools/" target="_blank" rel="noopener noreferrer"&gt;tools&lt;/a&gt;
 and terminology common to the DevOps space, plus the occasional newbie-friendly tutorial for emerging or established technologies. If you have a request or suggestion, let me know!&lt;/p&gt;</description></item><item><title>How to Convert a 3rd Party Library to the New Jakarta Namespace</title><link>https://foojayio.github.io/website/today/how-to-use-eclipse-transformer-to-convert-a-3rd-party-library-to-the-new-jakarta-namespace/</link><pubDate>Mon, 08 Mar 2021 16:56:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-use-eclipse-transformer-to-convert-a-3rd-party-library-to-the-new-jakarta-namespace/</guid><description>&lt;p&gt;The release of Jakarta EE 9 breaks a tradition of Java Enterprise. A legal requirement of the Java EE code donation from Oracle to the Eclipse Foundation is the change of the namespace of &lt;em&gt;javax&lt;/em&gt; to&lt;em&gt;jakarta.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;But the change of the package and XML namespace in Jakarta EE 9 is only the beginning. The change of the namespace allows for new development and functionality, but all frameworks and libraries using one of the Java Enterprise specifications also need to be adjusted to the new version.&lt;/p&gt;</description></item><item><title>Foojay Announces Initial Companies Making Up Its Advisory Board</title><link>https://foojayio.github.io/website/today/foojay-announces-initial-companies-making-up-its-advisory-board-sd-times/</link><pubDate>Mon, 08 Mar 2021 14:21:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-announces-initial-companies-making-up-its-advisory-board-sd-times/</guid><description>&lt;p&gt;Today, published &lt;a href="https://sdtimes.com/java/whats-coming-in-java-16/" target="_blank" rel="noopener noreferrer"&gt;by Jenna Sargent in SD Times&lt;/a&gt;
:
&lt;img src="https://foojayio.github.io/website/today/foojay-announces-initial-companies-making-up-its-advisory-board-sd-times/image-3-1024x385.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Custom Controls in JavaFX (Part VI) -- Canvas Class</title><link>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-vi/</link><pubDate>Fri, 05 Mar 2021 08:21:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-vi/</guid><description>&lt;p&gt;We are slowly coming to the end of &lt;a href="https://foojayio.github.io/website/today/custom-controls-in-javafx-part-i/"&gt;all the different ways&lt;/a&gt;
 in which one can create a custom control in JavaFX. Today I will show you how to create a custom control that is based on the JavaFX Canvas node.&lt;/p&gt;
&lt;p&gt;To understand the Canvas node and why it is good to have it, let me briefly explain how rendering in JavaFX is done.&lt;/p&gt;
&lt;p&gt;In JavaFX, the so-called&lt;a href="http://https://en.wikipedia.org/wiki/Retained_mode" title=" retained mode rendering" target="_blank" rel="noopener noreferrer"&gt;retained mode rendering&lt;/a&gt;
 is used. That means that you, as a developer, don&amp;rsquo;t have to take care about when to render which area of the screen when you change something (remember rendering artefacts in Swing?). Instead, JavaFX takes care of the rendering of the scene graph. That makes developing applications a lot less complicated because you do not have to track dirty areas and trigger repaints, etc.&lt;/p&gt;</description></item><item><title>"Biggest Project Yet for the New Java Community Platform, Foojay"</title><link>https://foojayio.github.io/website/today/virtual-tour-is-the-biggest-project-yet-for-the-new-java-community-platform-foojay-dzone/</link><pubDate>Thu, 04 Mar 2021 14:02:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/virtual-tour-is-the-biggest-project-yet-for-the-new-java-community-platform-foojay-dzone/</guid><description>&lt;p&gt;Today, published &lt;a href="https://dzone.com/articles/virtual-tour-is-biggest-project-yet-for-new-java-c" target="_blank" rel="noopener noreferrer"&gt;by Steve Millidge on DZone&lt;/a&gt;
:
&lt;img src="https://foojayio.github.io/website/today/virtual-tour-is-the-biggest-project-yet-for-the-new-java-community-platform-foojay-dzone/image-1-1024x981.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Running Spring Boot Applications on OpenShift</title><link>https://foojayio.github.io/website/today/running-spring-boot-applications-on-openshift/</link><pubDate>Thu, 04 Mar 2021 08:36:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/running-spring-boot-applications-on-openshift/</guid><description>&lt;p&gt;This article will demonstrate how to deploy a Spring Boot application on OpenShift (Minishift).&lt;/p&gt;
&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Cloud platforms have dramatically changed the way we develop and deploy modern applications. Not so long ago, everything was on-premise infra. However, things have changed dramatically over the years. Now, there are a number of vendors offering solutions for different cloud computing models, i.e., Saas, Paas, and Iaas.&lt;/p&gt;
&lt;p&gt;This article will cover Openshift developed by Redhat, which comes under the Paas cloud computing model.&lt;/p&gt;</description></item><item><title>Virtual Tour Is Biggest Project Yet For Java Community Platform Foojay</title><link>https://foojayio.github.io/website/today/virtual-tour-is-biggest-project-yet-for-new-java-community-platform-foojay/</link><pubDate>Wed, 03 Mar 2021 18:27:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/virtual-tour-is-biggest-project-yet-for-new-java-community-platform-foojay/</guid><description>&lt;p&gt;&lt;a href="https://foojayio.github.io/website/today/schedule-for-foojay-virtual-jug-tour/"&gt;Fifteen events are already confirmed&lt;/a&gt;
 in an ambitious virtual tour of Java User Groups across the globe, marking a strong start for new Java community platform Foojay. Foojay.io was founded last year as a vendor-neutral platform for developers who create and run applications on top of Java and OpenJDK. It is designed to provide free information on all things Java, with updated analysis, highlights, OpenJDK update release details, and command line arguments hosted on its website.&lt;/p&gt;</description></item><item><title>Evolution of Java Memory Architecture (Post Java 7.0)</title><link>https://foojayio.github.io/website/today/evolution-of-java-memory-architecture-post-java-7-0/</link><pubDate>Wed, 03 Mar 2021 16:19:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/evolution-of-java-memory-architecture-post-java-7-0/</guid><description>&lt;p&gt;&lt;strong&gt;[About SKP&amp;rsquo;s Core Java/Java EE Roots]&lt;/strong&gt;&lt;br&gt;
Series of Articles on Rooted Concepts in Core Java and J2EE. They Revolve Around Memory Architecture, Connection &amp;amp; Memory Leaks, Core Java Syntax &amp;amp; Semantics, Java Object Layout/Anatomy, Multi-Threading, Asynchronous Task Execution, Design Patterns, Java Agents, Class Loading, API Design, OOPs &amp;amp; SOLID.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="h2-0-java-memory-architecture-pre-java-8-0"&gt;&lt;strong&gt;Java Memory Architecture (Pre Java 8.0)&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Before we get started, you might want to take a look at Part 1. It explains the core concepts of the Java Memory Architecture, the ones that should get you started to understand this evolution better.&lt;/p&gt;</description></item><item><title>Monitoring Across Frameworks: Spring Boot, Quarkus, Micronaut, Helidon</title><link>https://foojayio.github.io/website/today/monitoring-across-frameworks-spring-boot-micronaut-quarkus-and-helidon/</link><pubDate>Tue, 02 Mar 2021 18:44:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/monitoring-across-frameworks-spring-boot-micronaut-quarkus-and-helidon/</guid><description>&lt;p&gt;Gone are the times when developers&amp;rsquo; jobs ended with the release of the application. Nowadays, developers care more and more about the operational side of IT: perhaps they operate applications themselves, but more probably, their organizations foster increased collaboration between Dev and Ops.&lt;/p&gt;
&lt;p&gt;I started to become interested in the Ops side of software when I was still a consultant. When Spring Boot released the Actuator, I became excited. Via its convention-over-configuration nature, it was possible to add monitoring endpoints with just an additional dependency.&lt;/p&gt;</description></item><item><title>Introduction to JVM Unified Logging (JEP-158 / JEP-271)</title><link>https://foojayio.github.io/website/today/introduction-to-jvm-unified-logging-jep-158-jep-271/</link><pubDate>Mon, 01 Mar 2021 17:58:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-to-jvm-unified-logging-jep-158-jep-271/</guid><description>&lt;p&gt;Unified logging was introduced in JDK 9, and is available for us all, in the JDK 11 LTS. Like other great serviceability feature (&lt;code&gt;jcmd&lt;/code&gt; or JFR) this was inspired by JRockit.&lt;/p&gt;
&lt;p&gt;As a pre-jdk9 user I had my way using the explicit GC logging options. On several occasions it was also useful to toggle other options like tracing class un/loading.&lt;/p&gt;
&lt;p&gt;Starting from JDK 9, the JVM maintainers chose to overhaul the way JVM logs things. I believe that unified logging is great, but after using it I believe its purpose targets more JDK maintainers, eventually library maintainers, than end users. Meanwhile it&amp;rsquo;s likely that one may need to activate GC logs.&lt;/p&gt;</description></item><item><title>Deploying Spring Boot Application on Kubernetes</title><link>https://foojayio.github.io/website/today/deploying-spring-boot-applications-on-kubernetes/</link><pubDate>Fri, 26 Feb 2021 17:51:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/deploying-spring-boot-applications-on-kubernetes/</guid><description>&lt;p&gt;In this article, I will explain how you can create a pod, deploy a Spring Boot application, and manage the single node cluster with Lens IDE on Docker Desktop.&lt;/p&gt;
&lt;h3 id="h3-0-what-you-will-learn"&gt;What you will learn.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;How to Enable Kubernetes With Docker Desktop for Mac&lt;/li&gt;
&lt;li&gt;How to Create a Pod&lt;/li&gt;
&lt;li&gt;How to Deploy a Working Spring Boot Application on Kubernetes&lt;/li&gt;
&lt;li&gt;How to Monitor and Manage Kubernetes Cluster with Lens IDE&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Moving on, you may not know this, but you can have a functional single-node Kubernetes cluster running locally with your Docker Desktop by following the below steps. But wait, What is Docker Desktop?&lt;/p&gt;</description></item><item><title>Custom Controls in JavaFX (Part V): Region Class</title><link>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-v/</link><pubDate>Fri, 26 Feb 2021 08:31:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-v/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/custom-controls-in-javafx-part-iv/"&gt;the last article&lt;/a&gt;
, I showed you how to create a custom control based on the Control plus Skin approach, which is great for building controls libraries.&lt;/p&gt;
&lt;p&gt;This time, I will show you how to create a JavaFX Custom Control that is based on the JavaFX Region class. The Region class is the class that all JavaFX controls are based on. It is a resizable Parent node which can be styled from CSS. This is the class that you would want to use when building a JavaFX custom control that is not part of a controls library.&lt;/p&gt;</description></item><item><title>Evolution of Java Memory Architecture (Pre Java 8.0)</title><link>https://foojayio.github.io/website/today/java-roots-1-java-memory-architecture/</link><pubDate>Thu, 25 Feb 2021 14:59:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-roots-1-java-memory-architecture/</guid><description>&lt;p&gt;&lt;strong&gt;[About SKP&amp;rsquo;s Core Java/Java EE Roots]&lt;/strong&gt;&lt;br&gt;
Series of Articles on Rooted Concepts in Core Java and J2EE. They Revolve Around Memory Architecture, Connection &amp;amp; Memory Leaks, Core Java Syntax &amp;amp; Semantics, Java Object Layout/Anatomy, Multi-Threading, Asynchronous Task Execution, Design Patterns, Java Agents, Class Loading, API Design, OOPs &amp;amp; SOLID.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="h2-0-java-memory-architecture-java-memory-model"&gt;→ Java Memory Architecture (Java Memory Model)&lt;/h2&gt;
&lt;p&gt;The diagram below is the Java Memory Model for the Heap as well as the PermGen for any Java Application running in the Java Virtual Machine (JVM). The ratios are also provided to get a fair understanding of how the distribution of allowed memory is done across each of the generation types. All of the info is completely applicable up to Java 1.7 (inclusive). This diagram is also known as the &amp;lsquo;Managed Area&amp;rsquo; of the memory model.&lt;/p&gt;</description></item><item><title>Towards Continuous Performance Regression Testing</title><link>https://foojayio.github.io/website/today/towards-continuous-performance-regression-testing/</link><pubDate>Thu, 25 Feb 2021 09:44:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/towards-continuous-performance-regression-testing/</guid><description>&lt;p&gt;Functional unit and integration tests are a standard tool of any software development organization, helping not only to ensure correctness of newly implemented code, but also to identify regressions &amp;mdash; bugs in existing functionality introduced by a code change. The situation looks different though when it comes to regressions related to non-functional requirements, in particular performance-related ones: How to detect increased response times in a web application? How to identify decreased throughput?&lt;/p&gt;</description></item><item><title>Delegation vs. Inheritance in Graphical User Interfaces</title><link>https://foojayio.github.io/website/today/delegation-vs-inheritance-in-graphical-user-interfaces/</link><pubDate>Wed, 24 Feb 2021 16:07:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/delegation-vs-inheritance-in-graphical-user-interfaces/</guid><description>&lt;p&gt;In this article, we will look at the difference between inheritance and delegation concepts.&lt;/p&gt;
&lt;p&gt;Or, to put it in another way, why I prefer delegation and why I want to emphasize this rarely-used feature in Java.&lt;/p&gt;
&lt;h3 id="h3-0-the-challenge"&gt;The Challenge&lt;/h3&gt;
&lt;p&gt;The challenge we face today is quite common in the field of graphic user interfaces like desktop- or web-apps: Java is widely used as the development language for both worlds and it does not matter if we are in the classic fields of Swing or JavaFX or in the field of web frameworks like Vaadin. Explicitly, I&amp;rsquo;ve opted for a pseudo-class model in core Java, as I&amp;rsquo;d like to look at the design patterns here without any technical details.&lt;/p&gt;</description></item><item><title>Modules, Modules, Everywhere, on Maven Central!</title><link>https://foojayio.github.io/website/today/modules-modules-everywhere/</link><pubDate>Wed, 24 Feb 2021 08:34:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/modules-modules-everywhere/</guid><description>&lt;h3 id="h3-0-project-sormuras-modules"&gt;Project 🧩 sormuras/modules&lt;/h3&gt;
&lt;p&gt;Since August 2018, I have been compiling an overview of Java modules uploaded to Maven Central at &lt;a href="https://github.com/sormuras/modules" target="_blank" rel="noopener noreferrer"&gt;https://github.com/sormuras/modules&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This overview is generated by the &lt;a href="https://github.com/sormuras/modules/blob/main/src/Scanner.java" target="_blank" rel="noopener noreferrer"&gt;Scanner&lt;/a&gt;
 program and it is based on the results of the &lt;a href="https://github.com/sandermak/modulescanner" target="_blank" rel="noopener noreferrer"&gt;modulescanner&lt;/a&gt;
 that is run on &lt;a href="https://sonatype.com" target="_blank" rel="noopener noreferrer"&gt;Sonatype&lt;/a&gt;
s hardware on every uploaded JAR file and stored in an AWS S3 bucket, setup together with the &lt;a href="https://adoptopenjdk.net/" target="_blank" rel="noopener noreferrer"&gt;AdoptOpenJDK&lt;/a&gt;
 team at their &lt;a href="https://adoptopenjdk.slack.com/archives/CB7L6GDUK" target="_blank" rel="noopener noreferrer"&gt;#java9plusadoption&lt;/a&gt;
 Slack channel. Some of those uploaded JAR files are Java modules. They are the interesting subjects of this overview as they contain a &lt;code&gt;module-info.class&lt;/code&gt;, a compiled module descriptor with a stable name and an explicit API their author(s) comitted to.&lt;/p&gt;</description></item><item><title>Much Ado About Nothing (Also Known As "Null") In Java</title><link>https://foojayio.github.io/website/today/much-ado-about-nothing-in-java/</link><pubDate>Tue, 23 Feb 2021 15:19:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/much-ado-about-nothing-in-java/</guid><description>&lt;p&gt;Occasionally something in Java pops up that I thought I knew about, but it turns out I didn&amp;rsquo;t appreciate all the subtle details.&lt;/p&gt;
&lt;p&gt;This was recently the case for &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Before I started using Java, the main programming language I used was C. This was great for things like operating systems and device drivers because it uses &lt;em&gt;&lt;strong&gt;explicit&lt;/strong&gt;&lt;/em&gt; pointers. References to data are through a numerical address that can be manipulated if required. This was probably (for me at least) the hardest thing to master, especially when you try to figure out things like this:&lt;/p&gt;</description></item><item><title>Payara Platform 2021 Survey Ready For You!</title><link>https://foojayio.github.io/website/today/payara-platform-2021-survey/</link><pubDate>Tue, 23 Feb 2021 08:22:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/payara-platform-2021-survey/</guid><description>&lt;p&gt;The Payara Platform 2021 Survey is underway and we&amp;rsquo;re inviting everyone to &lt;a href="https://forms.office.com/Pages/ResponsePage.aspx?id=Ol4Z8U5Yuk6GfwMLbUz_qRvNA3jNrcFAk2okHLVZDLJUOUNCWllWM1ZBMzBQTkk1NU85MUtVU05WNi4u" target="_blank" rel="noopener noreferrer"&gt;answer a few questions&lt;/a&gt;
 about your use of the Payara Platform and ecosystem components.&lt;/p&gt;
&lt;p&gt;We want to know what you like, what you want to see improved, and we&amp;rsquo;re giving you the opportunity to vote on new features you&amp;rsquo;d like to see added to the Payara Platform.&lt;/p&gt;
&lt;p&gt;Your survey answers help drive future development efforts for the Payara Platform.&lt;/p&gt;</description></item><item><title>Learning About Optional.stream() in OpenJDK and Java</title><link>https://foojayio.github.io/website/today/optional-stream/</link><pubDate>Mon, 22 Feb 2021 17:11:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/optional-stream/</guid><description>&lt;p&gt;This week, I learned about a nifty &amp;ldquo;new&amp;rdquo; feature of &lt;code&gt;Optional&lt;/code&gt; that I want to share in this post. It&amp;rsquo;s available since Java 9, so its novelty is relative.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s start with the following sequence to compute the total price of an order:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java"&gt;public BigDecimal getOrderPrice(Long orderId) {
 List&amp;lt;OrderLine&amp;gt; lines = orderRepository.findByOrderId(orderId);
 BigDecimal price = BigDecimal.ZERO; // 1
 for (OrderLine line : lines) {
 price = price.add(line.getPrice()); // 2
 }
 return price;
}&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Provide an accumulator variable for the price&lt;/li&gt;
&lt;li&gt;Add each line&amp;rsquo;s price to the total price&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nowadays, it&amp;rsquo;s probably more adequate to use streams instead of iterations. The following snippet is the equivalent to the previous one:&lt;/p&gt;</description></item><item><title>Here's The Schedule for Foojay Virtual JUG Tour!</title><link>https://foojayio.github.io/website/today/schedule-for-foojay-virtual-jug-tour/</link><pubDate>Mon, 22 Feb 2021 11:08:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/schedule-for-foojay-virtual-jug-tour/</guid><description>&lt;p&gt;As announced &lt;a href="https://foojayio.github.io/website/today/virtual-foojay-jug-tour/"&gt;last month&lt;/a&gt;
, to celebrate the OpenJDK and Foojay.io as &lt;a href="https://adtmag.com/blogs/watersworks/2021/02/foojay-for-openjdk.aspx" target="_blank" rel="noopener noreferrer"&gt;a vendor-neutral community platform for its users&lt;/a&gt;
, we&amp;rsquo;re kicking off the Virtual Foojay JUG Tour to be held throughout March and April.&lt;/p&gt;
&lt;p&gt;And here&amp;rsquo;s the schedule, note that it will change as more meetups are confirmed, and if your JUG is missing, i.e., you&amp;rsquo;d like to still be included in the tour, no worries, let&amp;rsquo;s see what can be done, simply contact JFrog&amp;rsquo;s Ari Waller (ariw at jfrog dot com), Foojay&amp;rsquo;s Event Manager, and specify a date and time (&lt;a href="https://foojayio.github.io/website/today/virtual-foojay-jug-tour/"&gt;and preferred topics&lt;/a&gt;
) for March or April.&lt;/p&gt;</description></item><item><title>Custom Controls in JavaFX (Part IV): Control &amp; Skin Classes</title><link>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-iv/</link><pubDate>Fri, 19 Feb 2021 08:22:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-iv/</guid><description>&lt;p&gt;I hope you found some time to play around with the custom controls that I showed you in &lt;a href="https://foojayio.github.io/website/today/custom-controls-in-javafx-part-iii/"&gt;the previous part of this series&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This time, I will show you how to create a custom control in JavaFX by using Control and Skin classes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A custom control created by a Control and Skin class only makes sense if you will provide more than one Skin for your control or if you would like to give people the ability to create their own Skins for your Control.&lt;/em&gt;
&lt;em&gt;In any other case, you should choose another approach (e.g., use a Region or Canvas based control).&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Demystifying Google Container Tool, Jib: Java Image Builder</title><link>https://foojayio.github.io/website/today/demystifying-google-container-tool-jib-java-image-builder/</link><pubDate>Thu, 18 Feb 2021 18:42:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/demystifying-google-container-tool-jib-java-image-builder/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This article covers some internals of image layering created by container image builder Jib and explore what distroless images are and their benefits.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Are you wondering what Jib is, actually? You should probably read my previous &lt;a href="https://ashishtechmill.com/containerizing-spring-boot-application-with-jib" title="article" target="_blank" rel="noopener noreferrer"&gt;article&lt;/a&gt;
 before going ahead.&lt;/p&gt;
&lt;p&gt;In short, Jib is an excellent tool for Java developers who are interested in containerizing Java applications, but not so interested in creating and maintaining Dockerfile or installing Docker. A Java developer can add a plugin to Maven or Gradle, and that&amp;rsquo;s it. You don&amp;rsquo;t have to learn new technology just to containerize your Java application.&lt;/p&gt;</description></item><item><title>Introduction to MicroProfile OpenTracing with Jaeger</title><link>https://foojayio.github.io/website/today/microprofile-opentracing-with-jaeger/</link><pubDate>Thu, 18 Feb 2021 09:41:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/microprofile-opentracing-with-jaeger/</guid><description>&lt;p&gt;In this short video, Rudy de Busscher demonstrates how to use MicroProfile OpenTracing with Jaeger in combination with Payara Micro.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/eclipse/microprofile-opentracing" target="_blank" rel="noopener noreferrer"&gt;The MicroProfile OpenTracing&lt;/a&gt;
 specification defines behaviours and an API for accessing an OpenTracing compliant Tracer object within your JAX-RS application. The behaviours specify how incoming and outgoing requests will have OpenTracing Spans automatically created. The API defines how to explicitly disable or enable tracing for given endpoints.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.jaegertracing.io/" target="_blank" rel="noopener noreferrer"&gt;Jaeger&lt;/a&gt;
, inspired by Dapper and OpenZipkin, is a distributed tracing system released as open source by Uber Technologies. It is used for monitoring and troubleshooting microservices-based distributed systems, including:&lt;/p&gt;</description></item><item><title>Improved JFR Allocation Profiling in JDK 16</title><link>https://foojayio.github.io/website/today/improved-jfr-allocation-profiling-in-jdk-16/</link><pubDate>Wed, 17 Feb 2021 09:46:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/improved-jfr-allocation-profiling-in-jdk-16/</guid><description>&lt;p&gt;JFR (JDK Flight Recorder) has been providing the support for on-the fly allocation profiling for a while with the help of &lt;strong&gt;ObjectAllocationInNewTLAB&lt;/strong&gt; and &lt;strong&gt;ObjectAllocationOutsideTLAB&lt;/strong&gt; events.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Short excursion - what is TLAB?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;TLAB stands for Thread Local Allocation Buffer and it is a region inside Eden, which is exclusively assigned to a thread. Each thread has its own TLAB. Thanks to that, as long as objects are allocated in TLABs, there is no need for any type of synchronization. Allocation inside TLAB is a simple pointer bump (that&amp;rsquo;s why it&amp;rsquo;s sometimes called pointer bump allocation).&lt;/p&gt;</description></item><item><title>Java Development with VS Code on the Raspberry Pi</title><link>https://foojayio.github.io/website/today/java-development-with-vs-code-on-the-raspberry-pi/</link><pubDate>Tue, 16 Feb 2021 11:09:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-development-with-vs-code-on-the-raspberry-pi/</guid><description>&lt;p&gt;In the post &lt;a href="https://foojayio.github.io/website/today/welcome-to-vs-code-for-java/"&gt;&amp;ldquo;Welcome to VS Code for Java&amp;rdquo;&lt;/a&gt;
 you can find a full description and a list of tips and plugins for Java development with Visual Studio Code.&lt;/p&gt;
&lt;p&gt;But&amp;hellip; did you know you can also use it on the ARM-processor-powered Raspberry Pi? Until recently this was not available in an official version for the Raspberry Pi, but luckily Microsoft decided to release &lt;strong&gt;new versions with installers for both 32-bit and 64-bit Raspberry Pis&lt;/strong&gt; .&lt;/p&gt;</description></item><item><title>Custom Controls in JavaFX (Part III) -- Extend an Existing Control</title><link>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-iii/</link><pubDate>Fri, 12 Feb 2021 08:22:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-iii/</guid><description>&lt;p&gt;If you&amp;rsquo;ve been following this series of blog posts, you already read about how to create custom controls by &lt;a href="https://foojayio.github.io/website/today/custom-controls-in-javafx-part-i/"&gt;re-styling existing controls&lt;/a&gt;
 or &lt;a href="https://foojayio.github.io/website/today/custom-controls-in-javafx-part-ii/"&gt;combining existing controls&lt;/a&gt;
. This time let me show you how to create a custom JavaFX control by extending an existing control.&lt;/p&gt;
&lt;p&gt;The goal for today is to create a TextField that looks similar to the TextField that you can find in &lt;a href="https://material.io/components/text-fields" title="MaterialDesign" target="_blank" rel="noopener noreferrer"&gt;MaterialDesign&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;I use MaterialDesign because it is really popular but be aware that it is not really made for Desktop applications. The reason for this is simple, it needs a lot of space in the vertical direction which makes sense if you keep in mind that it was made for mobile devices where the screen orientation is vertical as where the screen orientation of desktops is horizontal.&lt;/p&gt;</description></item><item><title>Safe Writing to Files in IoT and Industrial Systems</title><link>https://foojayio.github.io/website/today/safe-writing-to-files-in-iot-and-industrial-systems/</link><pubDate>Thu, 11 Feb 2021 09:12:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/safe-writing-to-files-in-iot-and-industrial-systems/</guid><description>&lt;p&gt;Especially on IoT devices, file corruption on shutdown is a common concern. This article discusses how to write to disk safely in Java, combining disk sync, shutdown hooks, and atomic renaming of files.&lt;/p&gt;
&lt;h3 id="h3-0-files-on-disk-can-still-easily-become-corrupted"&gt;Files On Disk Can Still Easily Become Corrupted&lt;/h3&gt;
&lt;p&gt;For performance optimization, file systems write to disks asynchronously resulting in potential corruption when a hard system shutdowns occurs through power off or crashes.&lt;/p&gt;
&lt;p&gt;As this has become a rare experience for desktop and server users, it comes as a surprise to many developers working on IoT devices and industrial computers that hard power cuts are a common operational scenario and storage is far less robust than expected.&lt;/p&gt;</description></item><item><title>Eliminate the Nightmare of Debugging Java Concurrency Bugs</title><link>https://foojayio.github.io/website/today/jcstress/</link><pubDate>Wed, 10 Feb 2021 17:58:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/jcstress/</guid><description>&lt;p&gt;Writing concurrent programs is hard, testing concurrent programs is harder, and debugging concurrent programs is a nightmare. An incorrect concurrent program can run for years, tricking us to believe it is stable code, and it fails when we least expect.&lt;/p&gt;
&lt;p&gt;JCStress is a concurrency stress test tool used by JVM developers to test the correctness of the JVM itself.&lt;/p&gt;
&lt;p&gt;The OpenJDK provides this amazing tool to test the correctness of your concurrent programs.&lt;/p&gt;</description></item><item><title>Generating Boilerplate Code with IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/generating-code-with-intellij-idea/</link><pubDate>Wed, 10 Feb 2021 09:17:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/generating-code-with-intellij-idea/</guid><description>&lt;p&gt;One of the super cool things about IntelliJ IDEA is how much code you can generate with minimum effort. Yes, it&amp;rsquo;s not the 1990s anymore, we&amp;rsquo;re no longer measured on how many lines of code we generate (thankfully), but you also know that Java has its fair share of &lt;em&gt;boilerplate&lt;/em&gt; code.&lt;/p&gt;
&lt;p&gt;Well, there&amp;rsquo;s a &lt;a href="https://www.jetbrains.com/help/idea/generating-code.html" title="shortcut in IntelliJ IDEA" target="_blank" rel="noopener noreferrer"&gt;shortcut in IntelliJ IDEA&lt;/a&gt;
 that generates a lot of code for you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;⌘N&lt;/code&gt; on macOS&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Alt+Insert&lt;/code&gt; on Windows and Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These shortcuts load the &lt;strong&gt;Generate&lt;/strong&gt; menu. Here&amp;rsquo;s a quick tour of where you can use it in Java projects in IntelliJ IDEA. It&amp;rsquo;s not a complete list; let me know where else we can use it please!&lt;/p&gt;</description></item><item><title>The SolarWinds Hack for Java Developers</title><link>https://foojayio.github.io/website/today/the-solarwinds-hack-for-java-developers/</link><pubDate>Tue, 09 Feb 2021 07:39:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-solarwinds-hack-for-java-developers/</guid><description>&lt;p&gt;In December 2020, an advanced persistent threat attacked many companies by &lt;a href="https://www.fireeye.com/blog/threat-research/2020/12/evasive-attacker-leverages-solarwinds-supply-chain-compromises-with-sunburst-backdoor.html" target="_blank" rel="noopener noreferrer"&gt;injecting malicious code into a vendor application&lt;/a&gt;
 that belonged to SolarWinds. This technique is called a &amp;ldquo;supply chain attack,&amp;rdquo; because instead of targeting the victim directly, the attacker damaged something higher up the supply chain and simply waited. The US government uses SolarWinds, so by attacking SolarWinds in a way that would infiltrate the US government, the attacker effectively got their target.&lt;/p&gt;</description></item><item><title>Getting Started with VS Code for Java Developers</title><link>https://foojayio.github.io/website/today/welcome-to-vs-code-for-java/</link><pubDate>Mon, 08 Feb 2021 08:10:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/welcome-to-vs-code-for-java/</guid><description>&lt;p&gt;VS Code, a.k.a. Visual Studio Code, is a modern editor available for Windows, macOS and Linux. It supports many languages and runtimes including Java. Besides editing features like IntelliSense, Code Action, etc., developers and students also like its lightweight, modern UI, extensibility, and the comprehensive support of remote development. Also, it&amp;rsquo;s free. You can refer to &lt;a href="https://code.visualstudio.com/docs" title="VS Code Overview" target="_blank" rel="noopener noreferrer"&gt;VS Code Overview&lt;/a&gt;
 for more details.&lt;/p&gt;
&lt;p&gt;On Java, thanks to the investments communities and Microsoft have been constantly making, VS Code has been used by more and more Java developers to edit, build, run, debug, test and deploy their code and manage their projects, and by more and more students and educators to learn and teach Java language.&lt;/p&gt;</description></item><item><title>Custom Controls in JavaFX (Part II) -- Combining Existing Controls</title><link>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-ii/</link><pubDate>Fri, 05 Feb 2021 08:23:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-ii/</guid><description>&lt;p&gt;&lt;a href="https://foojayio.github.io/website/today/custom-controls-in-javafx-part-i/"&gt;Last time we saw&lt;/a&gt;
 how to create custom controls in JavaFX by simply playing around with CSS styles for the component.&lt;/p&gt;
&lt;p&gt;This time I will show you how to create a custom control by combining existing controls. The idea is to create a control that contains a text field where you can type in values and next to the text field should be a button that when pressed will convert the value from the text field to another value.&lt;/p&gt;</description></item><item><title>"Foojay: A Place for Friends of OpenJDK" - ADT Magazine</title><link>https://foojayio.github.io/website/today/foojay-a-place-for-friends-of-openjdk-adt-magazine/</link><pubDate>Thu, 04 Feb 2021 13:56:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-a-place-for-friends-of-openjdk-adt-magazine/</guid><description>&lt;p&gt;Today, published &lt;a href="https://adtmag.com/blogs/watersworks/2021/02/foojay-for-openjdk.aspx" target="_blank" rel="noopener noreferrer"&gt;by John K. Waters in ADT Magazine&lt;/a&gt;
:
&lt;img src="https://foojayio.github.io/website/today/foojay-a-place-for-friends-of-openjdk-adt-magazine/image-641x1024.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>OIDC Client with Mutual TLS Client Authentication</title><link>https://foojayio.github.io/website/today/oidc-client-with-mutual-tls-client-authentication/</link><pubDate>Thu, 04 Feb 2021 08:48:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/oidc-client-with-mutual-tls-client-authentication/</guid><description>&lt;p&gt;It is common to authenticate OAuth and OpenID Connect (OIDC) clients with secrets. When you register a client in the Authorization Server (i.e., the OpenID Connect Provider, OP), you typically get a client ID and a secret. These are then used as credentials whenever your client sends requests to the Authorization Server. Often, this type of credential will provide a sufficient level of security for a deployment; other times, however, this simply is not enough. Authenticating with client ID and secret means that if anyone manages to steal or guess your application&amp;rsquo;s credentials, they will be able to use them to impersonate it. The attacker does not even have to intercept the credentials themselves. They may be able to capture a request sent to the Authorization Server and replay it. The Authorization Server does not know who is sending the request; it can only check whether the credentials are valid. (This is why it&amp;rsquo;s also important to use TLS and unguessable client secrets when using this type of credential.)&lt;/p&gt;</description></item><item><title>Quick Security Wins and Getting Started with DevSecOps</title><link>https://foojayio.github.io/website/today/getting-started-with-devsecops/</link><pubDate>Wed, 03 Feb 2021 17:41:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-devsecops/</guid><description>&lt;p&gt;&lt;em&gt;Hello and welcome to my first DevSecOps article! Here in Germany, it&amp;rsquo;s winter right now, and the forests are quiet. The snow slows down everything and it&amp;rsquo;s a beautiful time to move undisturbed through the woods.&lt;/em&gt; &lt;em&gt;Here you can pursue your thoughts, and I started thinking about a subject that customers or participants at conferences ask me repeatedly.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The question I am asked is almost always: &amp;ldquo;What are the quick wins or low hanging fruits if you want to deal more with the topic of security in software development? And I want you to answer this question right &lt;strong&gt;now!&lt;/strong&gt;&amp;rdquo;&lt;/p&gt;</description></item><item><title>Migrating Browser-Based Java Applets to IcedTea-Web using JNLP</title><link>https://foojayio.github.io/website/today/migrating-browser-based-java-applets-to-icedtea-web-using-jnlp/</link><pubDate>Tue, 02 Feb 2021 07:55:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/migrating-browser-based-java-applets-to-icedtea-web-using-jnlp/</guid><description>&lt;p&gt;&amp;ldquo;Does it run on JDK 11?&amp;rdquo; &amp;ndash; That&amp;rsquo;s an always interesting question!&lt;/p&gt;
&lt;p&gt;As a practical, more challenging example around this question, I used a 20 year old JAR, once created for a Java Applet to be run in the Java 1.1 Browser Plugin. Yes, that&amp;rsquo;s 1.1 not 11!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To cut to the chase for those who fear this may be too long to read: yes it runs!&lt;/strong&gt; 🙂&lt;/p&gt;
&lt;p&gt;And to provide more detail&amp;mdash;it now runs outside of any Web Browser and without modifying its decades-old JAR. The Applet was once created and offered to browse through all raw color images uploaded by the Mars Pathfinder Lander which settled down on the planet on July 4th, 1997.&lt;/p&gt;</description></item><item><title>How to Create Self-Contained Executable JARs</title><link>https://foojayio.github.io/website/today/creating-self-contained-executable-jars/</link><pubDate>Mon, 01 Feb 2021 08:40:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-self-contained-executable-jars/</guid><description>&lt;p&gt;When your application goes beyond a dozen of lines of code, you should probably split the code into multiple classes. At this point, the question is how to distribute them. In Java, the classical format is the Java ARchive, better known as the JAR. But real-world applications probably depend on other JARs.&lt;/p&gt;
&lt;p&gt;This article aims to describe ways to create self-contained executable JARs, also known as uber-JARs or fat JARs.&lt;/p&gt;</description></item><item><title>How to Use Custom Controls in JavaFX (Part I)</title><link>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-i/</link><pubDate>Fri, 29 Jan 2021 08:22:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/custom-controls-in-javafx-part-i/</guid><description>&lt;p&gt;JavaFX is now already some years out in the wild and even if it is not as widely used as web applications, it has its place. It mainly is used in internal applications only, which leads to the impression that nobody is using it.&lt;/p&gt;
&lt;p&gt;As long as you only would like to create a simple form-based application, the available UI controls in JavaFX will work totally fine. You need to take a look at how to style the controls using CSS, but from the coding point of view it&amp;rsquo;s pretty straight forward.&lt;/p&gt;</description></item><item><title>Azul, Datadog, DataStax, JFrog, Payara, Snyk on Foojay Advisory Board</title><link>https://foojayio.github.io/website/today/azul-datadog-datastax-jfrog-payara-and-snyk-form-inaugural-foojay-advisory-board/</link><pubDate>Thu, 28 Jan 2021 13:56:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/azul-datadog-datastax-jfrog-payara-and-snyk-form-inaugural-foojay-advisory-board/</guid><description>&lt;p&gt;&lt;strong&gt;SUNNYVALE, Calif., January 28, 2021&lt;/strong&gt; &amp;ndash; Foojay.io, the community site for developers who use, target, and run their applications on top of Java and OpenJDK, today named the companies who will make up its advisory board&amp;mdash;Azul, Datadog, DataStax, JFrog, Payara, and Snyk. The board will guide the direction, content and oversight of Foojay.io with the goal to grow the community and meet its mission to provide free information for everyday Java developers.&lt;/p&gt;</description></item><item><title>Explaining Java Deserialization Vulnerabilities (Part 2)</title><link>https://foojayio.github.io/website/today/explaining-java-deserialization-vulnerabilities-part-2/</link><pubDate>Thu, 28 Jan 2021 08:23:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/explaining-java-deserialization-vulnerabilities-part-2/</guid><description>&lt;p&gt;Java serialization is a mechanism to transform an object into a byte stream. Java deserialization is exactly the other way around and allows us to recreate an object from a byte stream. Java serialization&amp;mdash;and more specifically deserialization in Java&amp;mdash;is also known as &amp;ldquo;the gift that keeps on giving&amp;rdquo;. This relates to the many security issues and other problems it has produced over the years.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/explaining-java-deserialization-vulnerabilities-part-1/"&gt;Explaining Java Deserialization Vulnerabilities (Part 1)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Earlier, in part 1, the basics of Java serialization and deserialization were explained and how to tamper with data in serialized objects. In this part, we continue with even more harmful attacks and show you how you can prevent this in your own code.&lt;/p&gt;</description></item><item><title>How to Create a Kubernetes Operator in Java</title><link>https://foojayio.github.io/website/today/creating-a-kubernetes-operator-in-java/</link><pubDate>Wed, 27 Jan 2021 08:46:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-a-kubernetes-operator-in-java/</guid><description>&lt;p&gt;Kubernetes is much more than a runtime platform for Docker containers.&lt;/p&gt;
&lt;p&gt;Through its API, you can not only create custom clients, but you can also extend Kubernetes. Those custom Controllers are called Operators and work with application-specific custom resource definitions. You can not only write those Kubernetes operators in Go, but you can do this also in Java.&lt;/p&gt;
&lt;p&gt;In this talk, delivered by Payara&amp;rsquo;s&lt;a href="https://twitter.com/rdebusscher" target="_blank" rel="noopener noreferrer"&gt;Rudy De Busscher&lt;/a&gt;
 at &lt;a href="https://jcon.one/en/" target="_blank" rel="noopener noreferrer"&gt;JCON 2020&lt;/a&gt;
, you will be guided through setting up your environment to your first explorations of the Kubernetes API within a plain Java program.&lt;/p&gt;</description></item><item><title>Announcing the Upcoming Virtual Foojay JUG Tour!</title><link>https://foojayio.github.io/website/today/virtual-foojay-jug-tour/</link><pubDate>Tue, 26 Jan 2021 08:03:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/virtual-foojay-jug-tour/</guid><description>&lt;p&gt;To celebrate the OpenJDK and Foojay.io as a community platform for its users, we&amp;rsquo;re kicking off the Virtual Foojay JUG Tour. Ari Waller, JFrog&amp;rsquo;s Event Manager, well known to many JUGs, now wears a second hat&amp;mdash;that of Foojay Event Manager. During March and April, contributors to Foojay will be making a whistle stop tour through as many JUGs as possible, via their virtual meetups! (And if you&amp;rsquo;re not holding virtual events or don&amp;rsquo;t have the facilities for this, we can support by making these available as needed.)&lt;/p&gt;</description></item><item><title>IntelliJ IDEA: Let's Go Beyond The Basics!</title><link>https://foojayio.github.io/website/today/intellij-idea-beyond-the-basics/</link><pubDate>Mon, 25 Jan 2021 08:32:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/intellij-idea-beyond-the-basics/</guid><description>&lt;p&gt;IntelliJ IDEA Ultimate is the most powerful IDE for JVM developers in the market by now. It has support for various JVM frameworks, complex refactorings, Integration with VCS, and many more.&lt;/p&gt;
&lt;p&gt;Java developers spend a tremendous amount of time in front of their IDEs. Unfortunately, I&amp;rsquo;ve noticed that developers don&amp;rsquo;t take advantage of IDEA&amp;rsquo;s powerful features.&lt;/p&gt;
&lt;p&gt;In this article, I&amp;rsquo;ll talk about some tricks I use in my day to day job. And show you some best practices that can boost your productivity.&lt;/p&gt;</description></item><item><title>A Compendium of 2021 Java &amp; OpenJDK Predictions</title><link>https://foojayio.github.io/website/today/2021-java-jvm-predictions-by-topic/</link><pubDate>Fri, 22 Jan 2021 08:03:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/2021-java-jvm-predictions-by-topic/</guid><description>&lt;p&gt;Now that 2021 is well underway, many prominent Java developers have taken the time to predict what 2021 may bring to the Java universe.&lt;/p&gt;
&lt;p&gt;In December, here on Foojay.io, several articles were published on this theme, such as &lt;a href="https://foojayio.github.io/website/today/java-predictions-for-2021/"&gt;Java Predictions for 2021&lt;/a&gt;
, &lt;a href="https://foojayio.github.io/website/today/java-predictions-for-2021-jakarta-ee/"&gt;Java Predictions for 2021: Jakarta EE&lt;/a&gt;
, and &lt;a href="https://foojayio.github.io/website/today/java-predictions-for-2021-raspberry-pi/"&gt;Java Predictions for 2021: Raspberry Pi&lt;/a&gt;
. In early January, Simon Ritter published &lt;a href="https://www.azul.com/staring-into-my-java-snow-globe-2021/" title="Starting Into My Java Snow Globe 2021" target="_blank" rel="noopener noreferrer"&gt;Staring Into My Java Snow Globe 2021&lt;/a&gt;
. Separately, I conversed with another six developers about their visions for the coming year.&lt;/p&gt;</description></item><item><title>Explaining Java Deserialization Vulnerabilities (Part 1)</title><link>https://foojayio.github.io/website/today/explaining-java-deserialization-vulnerabilities-part-1/</link><pubDate>Thu, 21 Jan 2021 10:12:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/explaining-java-deserialization-vulnerabilities-part-1/</guid><description>&lt;p&gt;Java serialization is a mechanism to transform an object into a byte stream. Java deserialization is exactly the other way around and allows us to recreate an object from a byte stream.&lt;/p&gt;
&lt;p&gt;Java serialization&amp;mdash;and more specifically deserialization in Java&amp;mdash;is also known as &amp;ldquo;the gift that keeps on giving&amp;rdquo;. This relates to the many security issues and other problems it has produced over the years.&lt;/p&gt;
&lt;h3 id="h3-0-serialization-and-deserialization-in-java"&gt;Serialization and Deserialization in Java?&lt;/h3&gt;
&lt;p&gt;In Java, we create objects. These objects live in memory and are removed by the garbage collector once they are not used anymore. If we want to transfer an object, for instance, store it on a disk or send it over a network, we need to transform it into a byte stream. To do this, the class of that object needs to implement the interface &lt;code&gt;Serializable&lt;/code&gt;. Serialization is converting the state of an object into a byte stream. This byte stream does not contain the actual code.&lt;/p&gt;</description></item><item><title>Vert.x Example on the Raspberry Pi with a Virtual Potentiometer</title><link>https://foojayio.github.io/website/today/vert-x-example-on-the-raspberry-pi-with-a-virtual-potentiometer/</link><pubDate>Wed, 20 Jan 2021 08:35:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/vert-x-example-on-the-raspberry-pi-with-a-virtual-potentiometer/</guid><description>&lt;p&gt;The Raspberry Pi allows us to do a lot of electronic projects without having to wait for ordered components&amp;hellip; or to even buy them at all&amp;hellip; by using virtual components: &lt;em&gt;&amp;ldquo;Invest your time before you invest your money and build something before you buy the component.&amp;rdquo;&lt;/em&gt; For example, If you don&amp;rsquo;t have a 7 segment display you can follow &lt;a href="https://foojayio.github.io/website/today/electronics-quarkus-qute-on-raspberry-pi/"&gt;this&lt;/a&gt;
 and if you don&amp;rsquo;t have an 8×8 Led Matrix you can follow &lt;a href="https://foojayio.github.io/website/today/electronics-micronaut-velocity-with-raspberry-pi/"&gt;this&lt;/a&gt;
 and so on.&lt;/p&gt;</description></item><item><title>CI/CD Workflow for Spring Boot Applications on Kubernetes via Skaffold</title><link>https://foojayio.github.io/website/today/ci-cd-workflow-for-spring-boot-applications-on-kubernetes-via-skaffold/</link><pubDate>Tue, 19 Jan 2021 07:37:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/ci-cd-workflow-for-spring-boot-applications-on-kubernetes-via-skaffold/</guid><description>&lt;p&gt;In this post, we will create a Local CI/CD workflow for a Spring Boot Application and deploy it to Kubernetes using Skaffold.&lt;br&gt;
&lt;img src="https://foojayio.github.io/website/today/ci-cd-workflow-for-spring-boot-applications-on-kubernetes-via-skaffold/Screenshot-2020-12-08-at-8.26.16-AM.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;It is a known fact that developing applications with Kubernetes is cumbersome. That is the reason there is an ecosystem being developed around it so that developers can focus on what matters most to them i.e. writing code. On that note, in this article, I will be covering another tool Skaffold developed by &lt;a href="https://skaffold.dev/" target="_blank" rel="noopener noreferrer"&gt;Google&lt;/a&gt;
.&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><item><title>Hacking Java XML Input via External Entity Injection</title><link>https://foojayio.github.io/website/today/hacking-java-xml-input-via-external-entity-injection/</link><pubDate>Thu, 14 Jan 2021 08:37:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/hacking-java-xml-input-via-external-entity-injection/</guid><description>&lt;p&gt;Java natively supplies many different options to parse XML. However, all available parsers in Java have XML eXternal Entity (XXE) enabled by default. This makes Java XML libraries particularly vulnerable to XXE injection.&lt;/p&gt;
&lt;p&gt;We already briefly went into XXE injection problem in an earlier &lt;a href="https://foojayio.github.io/website/today/how-to-configure-your-java-xml-parsers-to-prevent-xxe-attacks/"&gt;blog post&lt;/a&gt;
on foojay.io. However, let&amp;rsquo;s go a little deeper. In the video below, I explain and demonstrate how an XXE injection attack works by extracting system data that should not be exposed. I also show you how you can solve this in your Java code in multiple ways.&lt;/p&gt;</description></item><item><title>Preview of January 2021 OpenJDK Update Release</title><link>https://foojayio.github.io/website/today/preview-of-january-2021-openjdk-update-release/</link><pubDate>Wed, 13 Jan 2021 09:12:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/preview-of-january-2021-openjdk-update-release/</guid><description>&lt;p&gt;On the Tuesday closest to the 17th day of January, April, July, and October under the normal Oracle Critical Patch Update schedule, a new quarterly OpenJDK update is made available.&lt;/p&gt;
&lt;p&gt;For the January 2021 update, set to be released next week, a preview list of the fixes that will be in that update is available from today &lt;a href="https://foojayio.github.io/website/"&gt;on foojay.io, on the frontpage,&lt;/a&gt;
 you&amp;rsquo;ll see a new button providing you access to the preview list:&lt;/p&gt;</description></item><item><title>3 Ways to Refactor Your Code in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/3-ways-to-refactor-your-code-in-intellij-idea/</link><pubDate>Tue, 12 Jan 2021 08:24:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/3-ways-to-refactor-your-code-in-intellij-idea/</guid><description>&lt;p&gt;In this article, we&amp;rsquo;re going to look at 3 ways to refactor your code in IntelliJ IDEA.&lt;/p&gt;
&lt;p&gt;Simplifying your code has lots of advantages, including improving readability, tackling technical debt, and managing ever-changing requirements. The three types of refactoring we will look at in this blog are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extracting and Inlining&lt;/li&gt;
&lt;li&gt;Change Signature&lt;/li&gt;
&lt;li&gt;Renaming&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The code samples are available in the &lt;a href="https://github.com/JetBrains/intellij-samples" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA sample code repository&lt;/a&gt;
, specifically the &lt;a href="https://github.com/JetBrains/intellij-samples/blob/main/standard-java/src/main/java/com/jetbrains/refactoring/PlanetExtractions.java" target="_blank" rel="noopener noreferrer"&gt;PlanetExtractions&lt;/a&gt;
 and &lt;a href="https://github.com/JetBrains/intellij-samples/blob/main/standard-java/src/main/java/com/jetbrains/refactoring/Planet.java" target="_blank" rel="noopener noreferrer"&gt;Planet&lt;/a&gt;
 class.&lt;/p&gt;</description></item><item><title>How to Do Device Monitoring with JavaFX and FXGL</title><link>https://foojayio.github.io/website/today/device-monitoring-with-javafx-and-fxgl/</link><pubDate>Mon, 11 Jan 2021 10:09:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/device-monitoring-with-javafx-and-fxgl/</guid><description>&lt;p&gt;In a previous post &lt;a href="https://foojayio.github.io/website/today/category/java/javafx/"&gt;&amp;ldquo;Getting Started with FXGL Game Development&amp;rdquo;&lt;/a&gt;
 we already have taken a look at the &lt;a href="https://github.com/AlmasB/FXGL" target="_blank" rel="noopener noreferrer"&gt;FXGL game development framework&lt;/a&gt;
 developed by &lt;a href="https://twitter.com/AlmasBaim" target="_blank" rel="noopener noreferrer"&gt;Almas Baimagambetov&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;But, this game engine can also be used for other use cases. In this post, we will be building a system monitoring dashboard, which can run on a Raspberry Pi. The dashboard can be used to keep an eye on any device that can report its state to a queue. And, for me personally, it finally solves the problem of finding the IP addresses of all my Raspberry Pi&amp;rsquo;s when my router decided to shuffle them&amp;hellip; 😉&lt;/p&gt;</description></item><item><title>How To Bring Your Java Microservices To The Cloud</title><link>https://foojayio.github.io/website/today/how-to-bring-your-java-microservices-to-the-cloud/</link><pubDate>Fri, 08 Jan 2021 11:20:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-bring-your-java-microservices-to-the-cloud/</guid><description>&lt;p&gt;All companies are software companies, and businesses will always experience the challenge of keeping integrations between users and applications scalable, productive, fast, and of high quality. To combat this, cloud, microservices, and other modern solutions come up more and more in architectural decisions.&lt;/p&gt;
&lt;h4 id="here-is-the-questionis-java-prepared-to-deal-with-these-diverse-concepts-in-a-corporate-environment"&gt;Here is the question&amp;mdash;is Java prepared to deal with these diverse concepts in a corporate environment?&lt;/h4&gt;
&lt;p&gt;Yes, and to demonstrate how &lt;a href="https://jakarta.ee/" title="Jakarta EE" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 and &lt;a href="https://microprofile.io/" title="Eclipse MicroProfile" target="_blank" rel="noopener noreferrer"&gt;Eclipse MicroProfile&lt;/a&gt;
 work very well and in the cloud, Payara and Platform.sh collaborated together on this webinar. You can watch the video presentation by Otavio Santana and Rudy de Busscher below:&lt;/p&gt;</description></item><item><title>Friends of OpenJDK Schedule at FOSDEM 2021</title><link>https://foojayio.github.io/website/today/friends-of-openjdk-schedule-at-fosdem-2021/</link><pubDate>Thu, 07 Jan 2021 16:49:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/friends-of-openjdk-schedule-at-fosdem-2021/</guid><description>&lt;p&gt;Subject to change, here&amp;rsquo;s the schedule for FOSDEM 2021, which will be a virtual event this year on 6 and 7 February, for the Friends of OpenJDK devroom, featuring a range of great speakers on a variety of interesting topics related to the usage of Java in the real world.&lt;/p&gt;
&lt;figure class="wp-block-image size-large is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="image-3-1024x813.png" alt="" class="wp-image-36752" width="914" height="725"&gt;
&lt;/figure&gt;
&lt;p&gt;Link to the program is here:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://fosdem.org/2021/schedule/track/friends_of_openjdk/" target="_blank" rel="noopener noreferrer"&gt;https://fosdem.org/2021/schedule/track/friends_of_openjdk&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Let's Do Some Java Syntax Puzzlers Today</title><link>https://foojayio.github.io/website/today/java-syntax-puzzlers/</link><pubDate>Wed, 06 Jan 2021 09:26:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-syntax-puzzlers/</guid><description>&lt;p&gt;Roughly 12 years ago, I started to contribute to the Eclipse ecosystem in various functions. One of the most interesting experiences to this date was to work on developer tooling and handling the edge cases so others don&amp;rsquo;t have to struggle. Though I stepped down as an Eclipse committer in the meantime, I&amp;rsquo;m still attached to working on productivity tooling nowadays as a member of the &lt;a href="https://github.com/gradle/gradle" target="_blank" rel="noopener noreferrer"&gt;Gradle Build Tool&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;While working on Eclipse, I fondly remember working on various parts of the Java Tooling (JDT) and while working on refactorings and quick fixes. And not surprisingly, working on language-intensive pieces turned out to have the same hiccups as other non-trivial algorithms - the transition from &amp;ldquo;this is gonna be easy&amp;rdquo; to &amp;ldquo;why am I up at 3 am reading the Java Language Specification&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Local Variable Type Inference: Declare Var, Not War</title><link>https://foojayio.github.io/website/today/local-variable-type-inference-declare-var-not-war/</link><pubDate>Mon, 04 Jan 2021 08:29:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/local-variable-type-inference-declare-var-not-war/</guid><description>&lt;p&gt;In this article, I will try to explain the new feature, from Java 10, &amp;ldquo;local variable type inference&amp;rdquo;, which also provides the new reserved type name &amp;ldquo;var&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Java is changing rapidly and with the new release cycle of 6 months, we are continually getting new features to try out with every release. In Java 10, a new feature Local-Variable Type Inference was added. It is aimed at reducing boilerplate code and improving readability when declaring local variables with initializers.&lt;/p&gt;</description></item><item><title>What Are Your Java Predictions, Hopes, and Dreams For 2021?</title><link>https://foojayio.github.io/website/today/java-predictions-for-2021/</link><pubDate>Wed, 30 Dec 2020 09:03:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-predictions-for-2021/</guid><description>&lt;p&gt;&lt;strong&gt;To celebrate the world of Java and predict our highlights for 2021, several key Foojay participants have been sharing their thoughts and hopes over the past days on Foojay, &lt;a href="https://foojayio.github.io/website/today/java-predictions-for-2021-raspberry-pi/"&gt;starting with Frank Delporte, Foojay Community Manager for the Raspberry Pi&lt;/a&gt;
, &lt;a href="https://foojayio.github.io/website/today/java-predictions-for-2021-jakarta-ee/"&gt;continuing with Jadon Ortlepp, Foojay Community Manager for Microservices&lt;/a&gt;
, and now wrapping up with a list of brief predictions from a wide variety of other leading members of the Java community&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Containerizing Spring Boot Applications with Jib</title><link>https://foojayio.github.io/website/today/containerizing-spring-boot-applications-with-jib/</link><pubDate>Tue, 29 Dec 2020 19:29:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/containerizing-spring-boot-applications-with-jib/</guid><description>&lt;p&gt;In this post, we will learn about how to create docker or &lt;a href="https://opencontainers.org/" title="OCI" target="_blank" rel="noopener noreferrer"&gt;OCI&lt;/a&gt;
 compliant images, without installing any docker client and without using a Dockerfile, for a Spring Boot application.&lt;/p&gt;
&lt;p&gt;We will be doing all of this with the help of Jib.&lt;/p&gt;
&lt;h4 id="what-is-jib"&gt;What Is Jib?&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Jib is Java containerizer from Google that lets Java developers build containers using build tools like Maven and Gradle.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But that&amp;rsquo;s not all that is really interesting about Jib because you don&amp;rsquo;t need to know anything about installing docker, maintaining Dockerfiles, etc.&lt;/p&gt;</description></item><item><title>What Are Your Java Predictions for 2021: Jakarta EE</title><link>https://foojayio.github.io/website/today/java-predictions-for-2021-jakarta-ee/</link><pubDate>Mon, 28 Dec 2020 09:30:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-predictions-for-2021-jakarta-ee/</guid><description>&lt;p&gt;&lt;strong&gt;To celebrate the world of Java and predict our highlights for 2021, several key Foojay participants will share their thoughts and hopes during the coming days on Foojay, &lt;a href="https://foojayio.github.io/website/today/java-predictions-for-2021-raspberry-pi/"&gt;starting with Frank Delporte, Foojay Community Manager for the Raspberry Pi&lt;/a&gt;
, and now continuing with Jadon Ortlepp, Foojay Community Manager for Microservices, who here provides the predictions of his Payara colleagues on Jakarta EE in 2021&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;figure class="wp-block-image size-large is-resized is-style-rounded"&gt;
 &lt;img decoding="async" src="image.png" alt="" class="wp-image-36725" align="right" width="133" height="143"&gt;
&lt;/figure&gt;
&lt;h3 id="h3-0-jakarta-ee-will-start-driving-improvements-in-apis-and-project-loom-will-drive-new-releases-of-many-frameworks"&gt;&amp;ldquo;Jakarta EE will start driving improvements in APIs and Project Loom will drive new releases of many frameworks.&lt;/h3&gt;
&lt;h3 id="h3-1-java-developers-may-stop-having-to-worry-about-kubernetes-as-it-is-abstracted-away-as-just-infrastructure"&gt;Java developers may stop having to worry about Kubernetes as it is abstracted away as &amp;lsquo;just infrastructure&amp;rsquo;.&lt;/h3&gt;
&lt;h3 id="h3-2-as-ever-the-death-of-java-is-predicted-but-java-is-set-to-remain-a-top-3-programming-language-in-2021"&gt;As ever, the death of Java is predicted but Java is set to remain a top 3 programming language in 2021.&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Steve Millidge, Payara CEO and Founder&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Java Predictions for 2021: Raspberry Pi and Java</title><link>https://foojayio.github.io/website/today/java-predictions-for-2021-raspberry-pi/</link><pubDate>Sat, 26 Dec 2020 09:06:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-predictions-for-2021-raspberry-pi/</guid><description>&lt;p&gt;&lt;strong&gt;To celebrate the world of Java and predict some highlights for 2021, several key Foojay participants will share their thoughts and hopes during the coming days on Foojay, starting with Frank Delporte, Foojay Community Manager for the Raspberry Pi.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Looking back to my Java adventures in 2020, I can only conclude it has been a wonderful journey.&lt;/p&gt;
&lt;p&gt;By writing my book &amp;ldquo;Getting Started with Java on the Raspberry Pi&amp;rdquo; (&lt;a href="https://webtechie.be/books/" target="_blank" rel="noopener noreferrer"&gt;https://webtechie.be/books/&lt;/a&gt;
) and blogging for &lt;a href="https://foojayio.github.io/website/"&gt;foojay.io&lt;/a&gt;
, I discovered Java in the embedded world has a very bright future. With the 6-month release cycle of both Java and JavaFX, a lot of improvements and new features that impact the use of Java on Raspberry Pi, are introduced with every new version.&lt;/p&gt;</description></item><item><title>5 Tips to Create Secure Docker Images for Java Applications</title><link>https://foojayio.github.io/website/today/5-tips-to-create-secure-docker-images-for-java-applications/</link><pubDate>Fri, 25 Dec 2020 10:41:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/5-tips-to-create-secure-docker-images-for-java-applications/</guid><description>&lt;p&gt;Docker is the most widely used way to containerize your application. With Docker Hub, it is easy to create and pull pre-created images. This is very convenient as you can use these images from Docker Hub to quickly build an image for your Java application.&lt;/p&gt;
&lt;p&gt;However, the naive way of creating custom Docker images for your Java applications comes with many security concerns. So, how do we make security an essential part of Docker images for Java?&lt;/p&gt;</description></item><item><title>Creating a JavaFX World Clock from Scratch (Part 2)</title><link>https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-2/</link><pubDate>Thu, 24 Dec 2020 09:46:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-2/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;The only way to learn mathematics is to do mathematics.&amp;rdquo;&lt;/em&gt; &amp;ndash; Paul Halmos&lt;a href="https://en.wikipedia.org/wiki/Paul_Halmos" title="Mathematician Paul Halmos" target="_blank" rel="noopener noreferrer"&gt;[1]&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Welcome to &lt;em&gt;Creating a JavaFX World Clock from Scratch Part 2!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is the second installment of a series of blog entries on how I created a &amp;ldquo;sci-fi&amp;rdquo; looking world clock using JavaFX.&lt;/p&gt;
&lt;p&gt;If you have not read Part 1&lt;a href="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-1/" title="Creating a JavaFX World Clock from Scratch Part 1"&gt;[2]&lt;/a&gt;
 please see the introduction section of the &lt;em&gt;Creating a JavaFX World Clock from Scratch (Part 1)&lt;/em&gt; &lt;a href="https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-1/" title="Creating a JavaFX World Clock from Scratch Part 1"&gt;[2]&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Light Up your Christmas Tree with Java and Raspberry Pi</title><link>https://foojayio.github.io/website/today/light-up-your-christmas-tree-with-java-and-raspberry-pi/</link><pubDate>Wed, 23 Dec 2020 09:38:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/light-up-your-christmas-tree-with-java-and-raspberry-pi/</guid><description>&lt;p&gt;Are you a serious Java-developer looking for a fun project?&lt;/p&gt;
&lt;p&gt;Or want to learn something completely new and use your Java-knowledge to control electronic components?&lt;/p&gt;
&lt;p&gt;Here we go with this small project to get you introduced to the world of electronics programming!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This post was originally published on &amp;ldquo;&lt;a href="https://www.javaadvent.com/" target="_blank" rel="noopener noreferrer"&gt;JVM &lt;strong&gt;Advent&lt;/strong&gt; - The JVM Programming &lt;strong&gt;Advent&lt;/strong&gt; Calendar&lt;/a&gt;
&amp;rdquo;, a month-long reading list of diverse Java-related articles. A nice addition to your daily read of Foojay!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>How to Avoid NullPointerException in Java Code</title><link>https://foojayio.github.io/website/today/avoiding-nullpointerexception/</link><pubDate>Tue, 22 Dec 2020 10:14:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/avoiding-nullpointerexception/</guid><description>&lt;p&gt;The terrible &lt;code&gt;NullPointerException&lt;/code&gt; (NPE for short) is the most frequent Java exception occurring in production, according to &lt;a href="https://www.overops.com/blog/the-top-10-exceptions-types-in-production-java-applications-based-on-1b-events/" target="_blank" rel="noopener noreferrer"&gt;a 2016 study&lt;/a&gt;
. In this article we&amp;rsquo;ll explore the main techniques to fight it: the self-validating model and the &lt;code&gt;Optional&lt;/code&gt; wrapper.&lt;/p&gt;
&lt;h2 id="h2-0-self-validating-model"&gt;Self-Validating Model&lt;/h2&gt;
&lt;p&gt;Imagine a business rule: every Customer has to have a birth date set. There are a number of ways to implement this constraint: validating the user data on the create and update use-cases, enforcing it via &lt;code&gt;NOT NULL&lt;/code&gt; database constraint and/or implementing the null-check right in the constructor of the Customer entity. In this article we&amp;rsquo;ll explore the last one.&lt;/p&gt;</description></item><item><title>Cloud Myth: Ahead of Time Compilation Will Save You Money</title><link>https://foojayio.github.io/website/today/cloud-myth-ahead-of-time-compilation-will-save-you-money/</link><pubDate>Mon, 21 Dec 2020 14:54:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/cloud-myth-ahead-of-time-compilation-will-save-you-money/</guid><description>&lt;p&gt;There is a lot of interest in the server-side Java community around using ahead of time (AOT) native compilation provided by &lt;a href="https://www.graalvm.org/reference-manual/native-image/SubstrateVM/" title="Graal Substrate VM" target="_blank" rel="noopener noreferrer"&gt;Graal Substrate VM&lt;/a&gt;
 to drive down memory usage and cold start times of Java microservices.&lt;/p&gt;
&lt;p&gt;While these frameworks are technically interesting, the claim is if you spend time rewriting your Jakarta EE applications to utilise these new frameworks, then you will substantially reduce your cloud operational costs.&lt;/p&gt;</description></item><item><title>Summer with Covid-19 in Australia, New Zealand and Polynesia</title><link>https://foojayio.github.io/website/today/summer-with-covid-19-in-australia-new-zealand-and-polynesia/</link><pubDate>Fri, 18 Dec 2020 08:57:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/summer-with-covid-19-in-australia-new-zealand-and-polynesia/</guid><description>&lt;p&gt;In this series of blogposts (&lt;a href="https://foojayio.github.io/website/today/covid-19-time-series-analysis-with-software-ekg/"&gt;see part 1 here&lt;/a&gt;
), we&amp;rsquo;re taking a look at the current figures of the Covid-19 pandemic with Software-ECG. Software-ECG is a free time series analysis tool originally developed for for system analysis of computer problems in distributed systems.&lt;/p&gt;
&lt;p&gt;With the Covid-19 edition, QAware has adapted the tool so that the current data sets from the data hub of the University of Oxford are automatically loaded and immediately available for analysis. More information about the Software-ECG and download links &lt;a href="https://foojayio.github.io/website/today/covid-19-time-series-analysis-with-software-ekg/"&gt;can be found here&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Join Friends of OpenJDK at FOSDEM 2021</title><link>https://foojayio.github.io/website/today/friends-of-openjdk-at-fosdem-2021/</link><pubDate>Thu, 17 Dec 2020 15:31:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/friends-of-openjdk-at-fosdem-2021/</guid><description>&lt;p&gt;Over the last two years at &lt;a href="https://fosdem.org/2021/" target="_blank" rel="noopener noreferrer"&gt;FOSDEM&lt;/a&gt;
&amp;mdash;the free event for software developers, many of them in the open source ecosystem, for meeting, sharing ideas and collaborating&amp;mdash;one of the developer rooms has been focused on short presentations dealing with demos and overviews of free tools and editors.&lt;/p&gt;
&lt;p&gt;The programs for 2020 and 2019 are listed below:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://archive.fosdem.org/2020/schedule/track/free_tools_and_editors/" target="_blank" rel="noopener noreferrer"&gt;https://archive.fosdem.org/2020/schedule/track/free_tools_and_editors&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://archive.fosdem.org/2019/schedule/track/free_tools_and_editors/" target="_blank" rel="noopener noreferrer"&gt;https://archive.fosdem.org/2019/schedule/track/free_tools_and_editors&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;You can see in the above that the room was organized by developers connected to, in particular, Eclipse, IntelliJ IDEA, and NetBeans.&lt;/p&gt;</description></item><item><title>Run WebSphere Liberty and Open Liberty on OpenShift</title><link>https://foojayio.github.io/website/today/run-websphere-liberty-and-open-liberty-on-openshift/</link><pubDate>Wed, 16 Dec 2020 14:45:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/run-websphere-liberty-and-open-liberty-on-openshift/</guid><description>&lt;p&gt;We are very happy to announce the availability of initial guidance to run IBM WebSphere Liberty and Open Liberty on Azure Red Hat OpenShift (ARO). This is the first release delivered through an ongoing collaboration between IBM and Microsoft around the WebSphere family of products and Azure.&lt;/p&gt;
&lt;p&gt;Developed alongside IBM, the guidance utilizes the Open Liberty Operator and provides step-by-step instructions for running WebSphere Liberty or Open Liberty on an ARO cluster. The guidance is intended to make it as easy as possible to get started with production ready deployments utilizing best practices from both IBM and Microsoft. &lt;a href="https://docs.microsoft.com/en-us/azure/openshift/howto-deploy-java-liberty-app" target="_blank" rel="noopener noreferrer"&gt;Evaluate the guidance&lt;/a&gt;
 for full production usage and reach out to &lt;a href="https://aka.ms/migration-survey" target="_blank" rel="noopener noreferrer"&gt;collaborate on migration cases&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>How &amp; When to Use JDK Flight Recorder in Production</title><link>https://foojayio.github.io/website/today/how-when-to-use-jdk-flight-recorder-in-production/</link><pubDate>Tue, 15 Dec 2020 12:44:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-when-to-use-jdk-flight-recorder-in-production/</guid><description>&lt;p&gt;While it would certainly be useful to record the whole lifetime, this is unpractical, even airplane Flight Data Recorders (and Cockpit Voice Recorders) only keep recent history. Instead, it&amp;rsquo;s possible to aim at specific time frames where a recording could be useful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;At &lt;strong&gt;startup&lt;/strong&gt;, the JVM does a lot of things, so does the application, it generally initializes a lot of long lived objects, generally services, threads, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Continuously&lt;/strong&gt; at &lt;strong&gt;runtime&lt;/strong&gt; , this is likely a sliding time window in which one can access what&amp;rsquo;s happened in last &lt;em&gt;X &amp;lt;time unit&amp;gt;&lt;/em&gt;(this is either limited by age or by size). It this case the dump could be done when required.&lt;/li&gt;
&lt;li&gt;At &lt;strong&gt;shutdown&lt;/strong&gt; whether the JVM was &lt;strong&gt;killed&lt;/strong&gt; or &lt;strong&gt;crashed&lt;/strong&gt;. It this case the JFR files are an alternative to heap dumps for the autopsy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more details on this topic, see &lt;a href="https://foojayio.github.io/website/today/continuous-production-profiling-and-diagnostics/"&gt;Continuous Production Profiling and Diagnostics&lt;/a&gt;
, by Marcus Hirt.&lt;/p&gt;</description></item><item><title>Creating a JavaFX World Clock from Scratch (Part 1)</title><link>https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-1/</link><pubDate>Mon, 14 Dec 2020 09:27:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-a-javafx-world-clock-from-scratch-part-1/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Good design&amp;rsquo;s not about what medium you&amp;rsquo;re working in. It&amp;rsquo;s about thinking hard about what you want to do and what you have to work with before you start.&amp;quot; &amp;ndash; Susan Kare &lt;a href="https://en.wikipedia.org/wiki/Susan_Kare" title="Susan Kare" target="_blank" rel="noopener noreferrer"&gt;[6]&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Welcome to &lt;em&gt;Creating a JavaFX World Clock from Scratch (Part 1)&lt;/em&gt;! In this series of blog entries I would like to show you how I created a &amp;ldquo;sci-fi&amp;rdquo; looking world clock that happens to be a cross-platform Java desktop application.&lt;/p&gt;</description></item><item><title>Separate Covid-19 Waves in Europe and South America</title><link>https://foojayio.github.io/website/today/separate-covid-19-waves-in-europe-and-south-america/</link><pubDate>Fri, 11 Dec 2020 09:47:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/separate-covid-19-waves-in-europe-and-south-america/</guid><description>&lt;p&gt;In this series of blogposts (&lt;a href="https://foojayio.github.io/website/today/covid-19-time-series-analysis-with-software-ekg/"&gt;see part 1 here&lt;/a&gt;
) we take look at the current figures of the Covid-19 pandemic with Software-ECG.&lt;/p&gt;
&lt;p&gt;Software-ECG is a free time series analysis tool originally developed for time series analysis for system analysis of computer problems in distributed systems. With the Covid-19 edition, QAware has adapted the tool so that the current data from the data hub of the University of Oxford are automatically loaded and immediately available for analysis. More information about Software-ECG and download links &lt;a href="https://foojayio.github.io/website/today/covid-19-time-series-analysis-with-software-ekg/"&gt;can be found here&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Immutable Collections in Java with Sealed Types</title><link>https://foojayio.github.io/website/today/immutable-collections-in-java-with-sealed-types/</link><pubDate>Thu, 10 Dec 2020 03:02:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/immutable-collections-in-java-with-sealed-types/</guid><description>&lt;br /&gt;
&lt;img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-36538" class="size-medium wp-image-36538" src="foojay-don-1-1-469x510.png" alt="" width="469" height="510"&gt;
&lt;p&gt;&lt;em&gt;Designing Immutable Collection using Sealed Types in JDK 15&lt;/em&gt;{#caption-attachment-36538}&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;How to define contractual, structural, and verifiable immutable Java collections.&lt;/p&gt;
&lt;h2 id="9dc0"&gt;Introducing Sealed Types&lt;/h2&gt;
&lt;p&gt;JDK 15 was released on September 15, 2020. &lt;a href="https://openjdk.java.net/jeps/360" target="_blank" rel="noopener noreferrer"&gt;JEP 360&lt;/a&gt;
Sealed Types was included as a preview feature in this release, with its second preview in JDK 16. Sealed Types is part of &lt;a href="https://openjdk.java.net/projects/amber/" target="_blank" rel="noopener noreferrer"&gt;Project Amber&lt;/a&gt;
. Sealed classes or interfaces can be used to restrict the interfaces or classes that are allowed to extend them. This is accomplished by using the &lt;code&gt;sealed&lt;/code&gt;, &lt;code&gt;non-sealed&lt;/code&gt;, and &lt;code&gt;permits&lt;/code&gt; modifiers.{#297e}&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><item><title>Minimizing Security Risks in Application Development</title><link>https://foojayio.github.io/website/today/minimizing-security-risks-in-java-application-development/</link><pubDate>Tue, 08 Dec 2020 11:02:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/minimizing-security-risks-in-java-application-development/</guid><description>&lt;p&gt;United by their passion for open source, Payara and IBM recently teamed up for a panel discussion on security in Java application development.&lt;/p&gt;
&lt;p&gt;Security is something that is considered extremely important, however, it is not always something that is a priority for many development teams. The main question is&amp;mdash;how to minimize security risks while developing Java applications.&lt;/p&gt;
&lt;p&gt;In this panel discussion, our experts addressed a variety of topics related to secure application development. Most of the topics were introduced by questions from the audience.&lt;/p&gt;</description></item><item><title>Primitive Set Operations in Eclipse Collections</title><link>https://foojayio.github.io/website/today/primitive-set-operations-in-eclipse-collections/</link><pubDate>Mon, 07 Dec 2020 11:14:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/primitive-set-operations-in-eclipse-collections/</guid><description>&lt;img fetchpriority="high" decoding="async" class="size-medium wp-image-36467" src="foojay-prim-1-700x157.png" alt="Set Operations Venn Diagrams" width="700" height="157"&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href="https://www.eclipse.org/collections/" target="_blank" rel="noopener noreferrer"&gt;Eclipse Collections&lt;/a&gt;
 has a rich assortment of data structures, and one of them is a Set.&lt;/p&gt;
&lt;p&gt;Recently, I worked on an issue to implement union, intersect, and difference operations in sets for primitive types.&lt;/p&gt;
&lt;p&gt;The sections below cover each operation&amp;rsquo;s objective, design considerations, and code implementation.&lt;/p&gt;
&lt;p&gt;The last section covers the takeaways.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="h3-0-union-what-does-this-operation-do"&gt;Union: What Does This Operation Do?&lt;/h3&gt;
&lt;p&gt;Method signature: &lt;code&gt;setA.union(setB)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Union as the name indicates, it takes elements from two sets and combines them into one.&lt;/p&gt;</description></item><item><title>Where is the 2nd Wave in Russia and China?</title><link>https://foojayio.github.io/website/today/where-is-the-2nd-wave-in-russia-and-china/</link><pubDate>Fri, 04 Dec 2020 12:56:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/where-is-the-2nd-wave-in-russia-and-china/</guid><description>&lt;p&gt;In this series of blog posts (&lt;a href="https://foojayio.github.io/website/today/covid-19-time-series-analysis-with-software-ekg/"&gt;see part 1 here&lt;/a&gt;
), we&amp;rsquo;re taking look at the current figures of the Covid-19 pandemic with Software-ECG. Software-ECG is a free time series analysis tool originally developed for system analysis of computer problems in distributed systems.&lt;/p&gt;
&lt;p&gt;With the Covid-19 edition, QAware has adapted the tool so that the current data sets from the data hub of the University of Oxford are automatically loaded and immediately available for analysis. More information about Software-ECG and its download links &lt;a href="https://blog.qaware.de/posts/2020-11-11-software-ekg-covid-19-edition/" target="_blank" rel="noopener noreferrer"&gt;can be found here&lt;/a&gt;
. Note that the German translation for ECG is EKG (Elektrokardiogramm). We are German, therefore we use the names &amp;ldquo;Software ECG&amp;rdquo; and &amp;ldquo;Software EKG&amp;rdquo; as synonyms.&lt;/p&gt;</description></item><item><title>What are Hidden Classes in Java 15 And How Are They Used?</title><link>https://foojayio.github.io/website/today/what-are-hidden-classes-in-java-15/</link><pubDate>Thu, 03 Dec 2020 10:15:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-are-hidden-classes-in-java-15/</guid><description>&lt;p&gt;As we know, &lt;code&gt;sun.misc.Unsafe&lt;/code&gt; APIs are not recommended to use outside the JDK, with a slight mistake you may cause the JVM to crash. In some cases, code may not be portable across different platforms and many other related problems may occur.&lt;/p&gt;
&lt;p&gt;On the other hand, there are some useful features Unsafe APIs provide and we don&amp;rsquo;t have an alternative for those as a standard language feature. To remove Unsafe API usages, JDK developers provide standard language features, the JDK 15 &amp;ldquo;hidden class&amp;rdquo; is one such feature. After the introduction of hidden classes, &lt;code&gt;sun.misc.Unsafe::defineAnonymousClass&lt;/code&gt; is deprecated in Java 15, which will be removed in future releases.&lt;/p&gt;</description></item><item><title>MicroProfile Metrics with Prometheus and Grafana</title><link>https://foojayio.github.io/website/today/microprofile-metrics-with-prometheus-and-grafana/</link><pubDate>Wed, 02 Dec 2020 09:11:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/microprofile-metrics-with-prometheus-and-grafana/</guid><description>&lt;p&gt;In a distributed microservices architecture, it is important to have an overview of your systems in terms of CPU, memory management and other important metrics.&lt;/p&gt;
&lt;p&gt;This is called &lt;em&gt;Observability&lt;/em&gt;, measuring the internal state of a system, in this case, the micro-services instances.&lt;/p&gt;
&lt;p&gt;These metrics are gathered centrally, so that you can instantly have an overview of all the values and it allows the determination (mostly automated based on some rules) of the health of the instances.&lt;/p&gt;</description></item><item><title>Why I Love IntelliJ IDEA for Java Development</title><link>https://foojayio.github.io/website/today/why-i-love-intellij-idea-for-java-development/</link><pubDate>Mon, 30 Nov 2020 09:16:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-i-love-intellij-idea-for-java-development/</guid><description>&lt;p&gt;If you&amp;rsquo;re a Java developer like me, you like to crank out code and get shit done. I like many things about IntelliJ IDEA, but I thought it&amp;rsquo;d be fun to write about the ones that make me most productive. First, a bit of my development history.&lt;/p&gt;
&lt;p&gt;When I first started doing Java development in the late 90s, I used HomeSite as my editor. HomeSite was an HTML editor initially developed by Nick Bradbury. I liked it because it defaulted to a view of your code rather than being WYSIWYG like Dreamweaver and FrontPage. It&amp;rsquo;s funny to look back now and laugh about how inefficient I was: I used to google for import statements, then copy/pasted them into the editor.&lt;/p&gt;</description></item><item><title>Using Java to Analyze The Second Wave Breaking in Europe</title><link>https://foojayio.github.io/website/today/the-second-wave-breaks-in-europe/</link><pubDate>Fri, 27 Nov 2020 09:47:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-second-wave-breaks-in-europe/</guid><description>&lt;p&gt;In this series of blog posts (&lt;a href="https://foojayio.github.io/website/today/covid-19-time-series-analysis-with-software-ekg/"&gt;see part 1 here&lt;/a&gt;
), we&amp;rsquo;re looking at the current figures of the Covid-19 pandemic with Software-ECG.{#a808}&lt;/p&gt;
&lt;p&gt;Software-ECG is a free time series analysis tool originally developed for time series analysis for system analysis of computer problems in distributed systems. With the COVID-19 edition, QAware has adapted the tool so that the current data from the data hub of the University of Oxford are automatically loaded and immediately available for analysis. More information about the Software-ECG and download links &lt;a href="https://foojayio.github.io/website/today/covid-19-time-series-analysis-with-software-ekg/"&gt;can be found here on foojay&lt;/a&gt;
.{#a808}&lt;/p&gt;</description></item><item><title>Apple Silicon with Zulu OpenJDK and IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/apple-silicon-with-zulu-openjdk-and-intellij-idea/</link><pubDate>Thu, 26 Nov 2020 09:01:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/apple-silicon-with-zulu-openjdk-and-intellij-idea/</guid><description>&lt;p&gt;Azul has been leading the OpenJDK community effort (&lt;a href="http://openjdk.java.net/jeps/391" target="_blank" rel="noopener noreferrer"&gt;JEP 391&lt;/a&gt;
) initiated in August 2020 to add support for Apple Silicon, Arm-based Macs, in future versions of OpenJDK.&lt;/p&gt;
&lt;p&gt;In addition to targeting future Java versions, Azul has made OpenJDK builds of currently popular Java versions, including Zulu builds of OpenJDK 8, 11, and 13, as well as 16-ea, widely available for use on Apple Silicon, Arm-based Macs.
&lt;a href="https://www.azul.com/downloads/zulu-community/?os=macos&amp;amp;architecture=arm-64-bit&amp;amp;package=jdk" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/apple-silicon-with-zulu-openjdk-and-intellij-idea/image-1024x761.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;In June 2020, Apple announced a two-year plan to transition the CPUs in its Macintosh line of computers from Intel&amp;rsquo;s x86-64 processors to Apple-designed chips that use the ARM64 architecture. At its &amp;ldquo;One More Thing&amp;rdquo; event on November 10 2020, Apple followed through on its promise and debuted new MacBook Air, MacBook Pro and Mac Mini Arm-based models powered by Apple Silicon.&lt;/p&gt;</description></item><item><title>Native Applications from a JavaFX Project for Multiple Devices</title><link>https://foojayio.github.io/website/today/native-applications-for-multiple-devices-from-a-single-javafx-project-with-gluon-mobile-and-github-actions/</link><pubDate>Wed, 25 Nov 2020 08:58:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/native-applications-for-multiple-devices-from-a-single-javafx-project-with-gluon-mobile-and-github-actions/</guid><description>&lt;p&gt;The post &lt;a href="https://foojayio.github.io/website/today/starting-a-javafx-project-with-gluon-tools/"&gt;&amp;ldquo;Starting a JavaFX Project with Gluon Tools&amp;rdquo;&lt;/a&gt;
 shows you how to start a Gluon Mobile Multiview project with a few clicks in IntelliJ IDEA thanks to the &lt;a href="https://plugins.jetbrains.com/plugin/7864-gluon" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Gluon plugin&amp;rdquo;&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;In this post, we will use such a project and build it with GitHub Actions as a native application for Windows, MacOS, iOS, Linux, and Android from one single code base!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Yes, that&amp;rsquo;s right!&lt;/p&gt;
&lt;p&gt;True &amp;ldquo;Write Once, Run Everywhere&amp;rdquo;!!!
&lt;img src="https://foojayio.github.io/website/today/native-applications-for-multiple-devices-from-a-single-javafx-project-with-gluon-mobile-and-github-actions/github_actions_gluon_diagram.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h2-0-the-application"&gt;The Application&lt;/h2&gt;
&lt;p&gt;This application is built around a Java library I created last year for my book &lt;a href="https://webtechie.be/books/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Getting Started with Java on the Raspberry Pi&amp;rdquo;&lt;/a&gt;
 which helps you to calculate the value of a resistor from its color rings. This library is further described on &lt;a href="https://webtechie.be/post/2019-11-25-resistor-color-codes-and-calculations-a-java-maven-library/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Resistor color codes and calculations as a Java Maven library&amp;rdquo;&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>It's all IntelliJ IDEA's Fault: IntelliJ IDEA Made Me Lazy</title><link>https://foojayio.github.io/website/today/intellij-idea-made-me-lazy/</link><pubDate>Tue, 24 Nov 2020 08:58:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/intellij-idea-made-me-lazy/</guid><description>&lt;p&gt;I haven&amp;rsquo;t always been lazy; it&amp;rsquo;s a fairly recent addition to my repertoire of skills. And do you know who I blame? I blame IntelliJ IDEA. I used to check that I&amp;rsquo;d completed a statement correctly, I used to look at &lt;em&gt;javadoc&lt;/em&gt;, I used to check I&amp;rsquo;d closed my parentheses correctly, but now I don&amp;rsquo;t give things a second glance.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://helenjoscott-blogs.s3.eu-west-2.amazonaws.com/lazy-cat.jpg" alt="Lazy cat" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-it-s-all-intellij-idea-s-fault"&gt;It&amp;rsquo;s all IntelliJ IDEA&amp;rsquo;s Fault&lt;/h2&gt;
&lt;p&gt;No, really, it is. Back when I was a &lt;em&gt;cough&lt;/em&gt; younger adult, we had to type out &lt;em&gt;&lt;strong&gt;all the code&lt;/strong&gt;&lt;/em&gt;, we also thought it was cool to mix drinks that turned into something akin to gorilla snot. Maybe we weren&amp;rsquo;t that smart, but I am discovering one thing at a rapid rate, IntelliJ IDEA was smarter than me, even 20 years ago (I&amp;rsquo;d like to say it was a low bar).&lt;/p&gt;</description></item><item><title>Use Query Parameterization to Prevent Injection</title><link>https://foojayio.github.io/website/today/use-query-parameterization-to-prevent-injection/</link><pubDate>Mon, 23 Nov 2020 08:14:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/use-query-parameterization-to-prevent-injection/</guid><description>&lt;p&gt;In the 2017 version of the OWASP Top 10 vulnerabilities, injection appeared at the top of the list as the number one vulnerability that year.&lt;/p&gt;
&lt;p&gt;When looking at a typical SQL injection in Java, the parameters of a sequel query are naively concatenated to the static part of the query. The following is an unsafe execution of SQL in Java, which can be used by an attacker to gain more information than otherwise intended:&lt;/p&gt;</description></item><item><title>COVID-19 Time Series Analysis with Software EKG</title><link>https://foojayio.github.io/website/today/covid-19-time-series-analysis-with-software-ekg/</link><pubDate>Fri, 20 Nov 2020 10:55:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/covid-19-time-series-analysis-with-software-ekg/</guid><description>&lt;p&gt;Software-EKG is a powerful tool for time series analysis developed by &lt;a href="http://www.qaware.de/" target="_blank" rel="noopener noreferrer"&gt;QAware Software Engineering&lt;/a&gt;
&lt;em&gt;.&lt;/em&gt; Using a highly efficient search index and optimized algorithms, the tool enables you to both visualize and analyze time series containing billions of values.&lt;/p&gt;
&lt;p&gt;Our special COVID-19 Edition provides you with the latest data on COVID-19 from all countries worldwide. Not only can you get a detailed overview of the Coronavirus pandemic in a single country, it is also possible to compare different countries with each other using a plethora of metrics like positive test rate, population density or even hospital beds available.
&lt;img src="https://foojayio.github.io/website/today/covid-19-time-series-analysis-with-software-ekg/software-ekg-covid-01-1024x555.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Astra Service Broker: Tradeoff-Free Cassandra in Kubernetes</title><link>https://foojayio.github.io/website/today/announcing-the-astra-service-broker-tradeoff-free-cassandra-in-kubernetes/</link><pubDate>Thu, 19 Nov 2020 19:52:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-the-astra-service-broker-tradeoff-free-cassandra-in-kubernetes/</guid><description>&lt;p&gt;When you are designing and building a cloud-native application, you are probably thinking about deploying it with Kubernetes. What about the database? That can get a bit more complicated as you weigh out the tradeoffs of elasticity, scale, and self-healing requirements versus maintaining servers and the long term operations required. Apache Cassandra™ ticks the first three boxes easily, but what about the operational burden of managing Cassandra? That&amp;rsquo;s where the cloud-native Cassandra service, &lt;a href="https://www.datastax.com/products/datastax-astra" target="_blank" rel="noopener noreferrer"&gt;DataStax Astra&lt;/a&gt;
, helps both operators and developers. But what makes it easy for deployments on Kubernetes to access the Astra managed service?&lt;/p&gt;</description></item><item><title>Using Java Flight Recorder and Mission Control (Part 3)</title><link>https://foojayio.github.io/website/today/using-java-flight-recorder-and-mission-control-part-3/</link><pubDate>Thu, 19 Nov 2020 09:13:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-java-flight-recorder-and-mission-control-part-3/</guid><description>&lt;p&gt;Continuing from &lt;a href="https://foojayio.github.io/website/today/using-java-flight-recorder-and-mission-control-part-1/"&gt;part 1&lt;/a&gt;
 and &lt;a href="https://foojayio.github.io/website/today/using-java-flight-recorder-and-mission-control-part-2/"&gt;part 2&lt;/a&gt;
, while from JDK 14 events can be consumed on the fly, previous JDK versions (from JDK 11) offer a public API useful enough to control Flight Recorder programmatically or to read events from a JFR file.&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;Configuration c = Configuration.getConfiguration("profile"); [1]
Recording r = new Recording(c);
r.setName("monitor jvm");
r.enable("jdk.*"); [2]
r.setMaxAge(java.time.Duration.ofMinutes(4)); [3]
r.start(); [4]

// to be profiled

r.stop(); [5]
r.dump(Files.createFile("/var/log/jfr/app-initiated.jfr")); [6]&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;As shown above, choose the JFR configuration.&lt;/li&gt;
&lt;li&gt;Choose which events the recording should be interested in. Another signature accepts classes, it&amp;rsquo;s unlikely to be helpful for JDK events, but it may get interesting for custom events, your classes.&lt;/li&gt;
&lt;li&gt;Eventually set recording constraints, like the maximum age of the records.&lt;/li&gt;
&lt;li&gt;Hit record.&lt;/li&gt;
&lt;li&gt;When the recording session is over, stop JFR.&lt;/li&gt;
&lt;li&gt;Then store the results in the location of your choosing.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The above snippet creates a continuous profiling session with a 4 minute window.&lt;/p&gt;</description></item><item><title>Seven Ways to Contribute to the OpenJDK</title><link>https://foojayio.github.io/website/today/7-ways-to-contribute-to-openjdk/</link><pubDate>Wed, 18 Nov 2020 08:49:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/7-ways-to-contribute-to-openjdk/</guid><description>&lt;p&gt;A great many developers today are employed working with OpenJDK. If OpenJDK is the background source for your livelihood, you might want to contribute to future development of the OpenJDK.&lt;/p&gt;
&lt;p&gt;There are many ways you can do this. In this article I outline 7 possibilities, ranging from minimal work (because you&amp;rsquo;re too busy to do much, but you&amp;rsquo;d like to do something) to intensive work (participating on OpenJDK development is everything you want to do, it&amp;rsquo;s more than a hobby, you want to contribute to the maximum extent possible).&lt;/p&gt;</description></item><item><title>Starting a JavaFX Project with Gluon Tools</title><link>https://foojayio.github.io/website/today/starting-a-javafx-project-with-gluon-tools/</link><pubDate>Tue, 17 Nov 2020 08:38:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/starting-a-javafx-project-with-gluon-tools/</guid><description>&lt;p&gt;Here on foojay.io you can already find two posts by Carl Dea to get you started with JavaFX:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/blog/beginning-javafx-with-intellij/"&gt;Beginning JavaFX Applications with IntelliJ IDE&lt;/a&gt;
: step-by-step how to start a new JavaFX project without any tools, are by using the Maven and Gradle tools.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/blog/a-javafx-app-on-zulufx-in-60-seconds/"&gt;A JavaFX App on ZuluFX in 60 Seconds&lt;/a&gt;
: how to use a popular distribution from &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
 to build a JavaFX HelloWorld Application in 60 seconds.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In this post, I want to show you yet another approach that uses the tools provided by &lt;a href="https://gluonhq.com/" target="_blank" rel="noopener noreferrer"&gt;Gluon&lt;/a&gt;
, who are the maintainers, and the driving force behind &lt;a href="https://openjfx.io/" target="_blank" rel="noopener noreferrer"&gt;OpenJFX&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Run Oracle WebLogic Server on Azure Kubernetes Service</title><link>https://foojayio.github.io/website/today/run-oracle-weblogic-server-on-azure-kubernetes-service/</link><pubDate>Mon, 16 Nov 2020 13:40:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/run-oracle-weblogic-server-on-azure-kubernetes-service/</guid><description>&lt;p&gt;We are delighted to announce the initial release of solutions to run Oracle WebLogic Server (WLS) on the Azure Kubernetes Service (AKS) developed with the WebLogic team as part of a broad-ranging partnership between Microsoft and Oracle. The partnership includes joint support for a range of Oracle software running on Azure, including Oracle WebLogic, Oracle Linux, and Oracle DB, as well as interoperability between Oracle Cloud Infrastructure (OCI) and Azure.&lt;/p&gt;</description></item><item><title>For the Record: A Little Less Conversation, A Little More Action</title><link>https://foojayio.github.io/website/today/for-the-record/</link><pubDate>Fri, 13 Nov 2020 08:52:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/for-the-record/</guid><description>&lt;p&gt;Ever since Java announced their 6-month release cycle, there is excitement around exploring new features and even more so with preview features.&lt;/p&gt;
&lt;p&gt;See &lt;a href="https://openjdk.java.net/jeps/12" target="_blank" rel="noopener noreferrer"&gt;JEP-12&lt;/a&gt;
 for the definition of the preview feature.{#2d3e}&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A &lt;em&gt;preview feature&lt;/em&gt; is a new feature of the Java language, Java Virtual Machine, or Java SE API that is fully specified, fully implemented, and yet impermanent. It is available in a JDK feature release to provoke developer feedback based on real world use; this may lead to it becoming permanent in a future Java SE Platform.{#9a9b}&lt;/p&gt;</description></item><item><title>Getting Started with FXGL Game Development</title><link>https://foojayio.github.io/website/today/getting-started-with-fxgl-game-development/</link><pubDate>Thu, 12 Nov 2020 08:24:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-fxgl-game-development/</guid><description>&lt;p&gt;&lt;a href="https://github.com/AlmasB/FXGL" target="_blank" rel="noopener noreferrer"&gt;FXGL&lt;/a&gt;
 is a Java, JavaFX and Kotlin Game Library (Engine) made by &lt;a href="https://twitter.com/AlmasBaim" target="_blank" rel="noopener noreferrer"&gt;Almas Baimagambetov&lt;/a&gt;
. As my son (almost 10y) challenged me to make a game during my &amp;ldquo;Corona-stay-at-home-time&amp;rdquo;, I had the luck Almas provided me a getting-started with this detailed step-by-step.&lt;/p&gt;
&lt;p&gt;This will be the end result of this tutorial:&lt;/p&gt;
&lt;p&gt;{{}}&lt;/p&gt;
&lt;p&gt;We will make a &lt;em&gt;very&lt;/em&gt; simple clone of Geometry Wars using &lt;a href="https://github.com/AlmasB/FXGL" target="_blank" rel="noopener noreferrer"&gt;FXGL&lt;/a&gt;
, which is a JavaFX game development framework. You can find &lt;a href="https://github.com/FDelporte/FXGLFirstTest" target="_blank" rel="noopener noreferrer"&gt;the finished project of this post on my GitHub&lt;/a&gt;
 as a Maven project.&lt;/p&gt;</description></item><item><title>Avoid Java Serialization: The Gift That Keeps On Giving</title><link>https://foojayio.github.io/website/today/avoid-java-serialization/</link><pubDate>Wed, 11 Nov 2020 08:48:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/avoid-java-serialization/</guid><description>&lt;p&gt;Serialization in Java allows us to transform an object to a byte stream. This byte stream is either saved to disk or transported to another system. The other way around, a byte stream can be deserialized and allows us to recreate the original object.&lt;/p&gt;
&lt;p&gt;The biggest problem is with the deserializing part. Typically it looks something like this:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;ObjectInputStream in = new ObjectInputStream( inputStream );
return (Data)in.readObject();&lt;/pre&gt;
&lt;p&gt;There&amp;rsquo;s no way to know what you&amp;rsquo;re deserializing before you decoded it. Possibly, an attacker serialized a malicious object and sent it to your application. Once you call &lt;code&gt;readObject()&lt;/code&gt;, the malicious objects have already been instantiated. You might believe that these kinds of attacks are impossible because you need to have a vulnerable class on you classpath. However, if you consider the amount of classes on your classpath&amp;mdash;that includes your own code, Java libraries, third-party libraries and frameworks&amp;mdash;it is very likely that there is a vulnerable class available.&lt;/p&gt;</description></item><item><title>Getting Started Quickly and Easily with Payara Server</title><link>https://foojayio.github.io/website/today/getting-started-with-payara-server/</link><pubDate>Tue, 10 Nov 2020 09:39:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-payara-server/</guid><description>&lt;p&gt;The following four short videos will take you step-by-step through installing, writing, and deploying an application to &lt;a href="https://www.payara.fish/" title="Payara Server" target="_blank" rel="noopener noreferrer"&gt;Payara Server&lt;/a&gt;
, even if you&amp;rsquo;ve never used the application server before:&lt;/p&gt;
&lt;p&gt;{#more-36262}&lt;/p&gt;
&lt;h2 id="h2-0-introduction-to-payara-server"&gt;Introduction to Payara Server&lt;/h2&gt;
&lt;p&gt;Learn how to write a simple Hello World application and deploy it to Payara Server.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/KEsus1Ihjs4?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;&lt;strong&gt;Install Software&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Continuous Production Profiling and Diagnostics</title><link>https://foojayio.github.io/website/today/continuous-production-profiling-and-diagnostics/</link><pubDate>Mon, 09 Nov 2020 15:57:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/continuous-production-profiling-and-diagnostics/</guid><description>&lt;p&gt;I&amp;rsquo;ve gotten a lot of questions about continuous production profiling lately. Why would anyone want to profile in production, or, if production profiling seems reasonable, why the heck leave it on continuously? I thought I&amp;rsquo;d take a few moments and share my take on the problem and the success I&amp;rsquo;ve seen the past years applying continuous production profiling in systems in the real world.&lt;/p&gt;
&lt;p&gt;Trigger warning: this blog will not contain code samples.&lt;/p&gt;</description></item><item><title>How to Configure Your Java XML Parsers to Prevent XXE Attacks</title><link>https://foojayio.github.io/website/today/how-to-configure-your-java-xml-parsers-to-prevent-xxe-attacks/</link><pubDate>Fri, 06 Nov 2020 11:27:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-configure-your-java-xml-parsers-to-prevent-xxe-attacks/</guid><description>&lt;p&gt;With XML eXternal Entity (XXE) enabled, it is possible to create a malicious XML, as shown below, and read the content of an arbitrary file on the machine. It&amp;rsquo;s not a surprise that XXE attacks are part of the OWASP Top 10 vulnerabilities. Java XML libraries are particularly vulnerable to XXE injection because most XML parsers have external entities by default enabled.&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt;
&amp;lt;!DOCTYPE bar [
 &amp;lt;!ENTITY xxe SYSTEM "file:///etc/passwd"&amp;gt;]&amp;gt;
&amp;lt;song&amp;gt;
 &amp;lt;artist&amp;gt;&amp;amp;xxe;&amp;lt;/artist&amp;gt;
 &amp;lt;title&amp;gt;Bohemian Rhapsody&amp;lt;/title&amp;gt;
 &amp;lt;album&amp;gt;A Night at the Opera&amp;lt;/album&amp;gt;
&amp;lt;/song&amp;gt;&lt;/pre&gt;
&lt;p&gt;A naive implementation of the DefaultHandler and the Java SAX parser, like that shown below, parses this XML file and reveals the content of the passwd file. The Java SAX parser case is used as the main example here but other parsers, like DocumentBuilder and DOM4J, have similar default behaviour.&lt;/p&gt;</description></item><item><title>Using Java Flight Recorder and Mission Control (Part 2)</title><link>https://foojayio.github.io/website/today/using-java-flight-recorder-and-mission-control-part-2/</link><pubDate>Thu, 05 Nov 2020 16:50:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-java-flight-recorder-and-mission-control-part-2/</guid><description>&lt;p&gt;Now, &lt;a href="https://foojayio.github.io/website/blog/using-java-flight-recorder-and-mission-control-part-1/"&gt;continuing from part 1&lt;/a&gt;
, to exploit the recording by analyzing it, we have a tool named &lt;code&gt;jfr&lt;/code&gt; that ships with the JDK. On Linux the &lt;em&gt;alternative&lt;/em&gt; jdk management may not be aware of &lt;code&gt;jfr&lt;/code&gt;, which means you may need to use the full path to this executable.&lt;/p&gt;
&lt;p&gt;The first interesting thing to do is to get an overview of the recording, the &lt;code&gt;summary&lt;/code&gt; sub-command displays an histogram of the events, shown below.&lt;/p&gt;</description></item><item><title>OpenJDK, JDKs and Every Java Acronym in Between</title><link>https://foojayio.github.io/website/today/openjdk-jdks-and-every-java-acronym-in-between/</link><pubDate>Wed, 04 Nov 2020 09:57:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/openjdk-jdks-and-every-java-acronym-in-between/</guid><description>&lt;p&gt;The Java SE landscape is strewn with acronyms that it has picked up over the last 25 years. Sometimes those acronyms even mean multiple things. This post attempts to explain them all in terms of two main groupings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenJDK&lt;/li&gt;
&lt;li&gt;Java Development Kits (JDKs)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-what-is-openjdk"&gt;What is &amp;lsquo;OpenJDK&amp;rsquo;?&lt;/h2&gt;
&lt;p&gt;The phrase &lt;em&gt;OpenJDK&lt;/em&gt; is used to describe at least three fundamental things in the Java ecosystem.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;First use&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Firstly, there is a place called &lt;em&gt;OpenJDK&lt;/em&gt; which lives at &lt;a href="https://openjdk.java.net/" target="_blank" rel="noopener noreferrer"&gt;https://openjdk.java.net/&lt;/a&gt;
 also known to some as &lt;em&gt;The OpenJDK Project&lt;/em&gt; , which is a place to collaborate on an open-source implementation of the Java specifications from Oracle - &lt;a href="https://www.oracle.com/java/technologies/java-se-glance.html" target="_blank" rel="noopener noreferrer"&gt;https://www.oracle.com/java/technologies/java-se-glance.html&lt;/a&gt;
, which are released every 6 months. Sun Microsystems open-sourced the majority of Java in 2006 under the GNU General Public License (GNU GPL) version 2 with a linking exception. &lt;em&gt;OpenJDK&lt;/em&gt; serves as a continuation of that change. This is the use that I will refer to througout this blog. When I say &lt;em&gt;OpenJDK&lt;/em&gt; I mean the &lt;a href="https://openjdk.java.net/" target="_blank" rel="noopener noreferrer"&gt;https://openjdk.java.net/&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Securing Microservices with Auth0 and MicroProfile in Kubernetes</title><link>https://foojayio.github.io/website/today/securing-microservices-with-auth0-and-microprofile-in-kubernetes/</link><pubDate>Tue, 03 Nov 2020 15:38:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/securing-microservices-with-auth0-and-microprofile-in-kubernetes/</guid><description>&lt;p&gt;In this day and age, securing enterprise platforms is a challenge that developers and consultants tackle in an uninformed manner, producing subpar solutions in most cases.&lt;/p&gt;
&lt;p&gt;To combat this pattern, third-party security services such as Auth0 have been devised to externalize the security of services, and they focus on stable implementations of common enterprise use cases (identity management, OAuth compatibility, and so on), and platforms such as &lt;a href="https://microprofile.io/" title="Eclipse MicroProfile" target="_blank" rel="noopener noreferrer"&gt;Eclipse MicroProfile&lt;/a&gt;
 allow for their easy integration with enterprise Java microservices.&lt;/p&gt;</description></item><item><title>"Foojay - All About Java and the OpenJDK" -- I Programmer</title><link>https://foojayio.github.io/website/today/foojay-all-about-java-and-the-openjdk-i-programmer/</link><pubDate>Mon, 02 Nov 2020 14:07:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-all-about-java-and-the-openjdk-i-programmer/</guid><description>&lt;p&gt;Today, published &lt;a href="https://www.i-programmer.info/news/80-java/14116-foojay-all-about-java-and-the-openjdk.html" target="_blank" rel="noopener noreferrer"&gt;by Nikos Vaggalis on I Programmer&lt;/a&gt;
:
&lt;img src="https://foojayio.github.io/website/today/foojay-all-about-java-and-the-openjdk-i-programmer/image-2-628x1024.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Using Java Flight Recorder and Mission Control (Part 1)</title><link>https://foojayio.github.io/website/today/using-java-flight-recorder-and-mission-control-part-1/</link><pubDate>Mon, 02 Nov 2020 09:49:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-java-flight-recorder-and-mission-control-part-1/</guid><description>&lt;p&gt;Java Flight Recorder is the profiler you can use in production, continuously. Flight Recorder has been available before in the JDK, e.g., it shipped as part of the JDK 8, but to use it, it required that you set specific commercial VM flags to unlock Flight Recorder, this is not anymore necessary from Java 11 onwards.&lt;/p&gt;
&lt;p&gt;|&amp;mdash;|&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-|
| | This page assumes JDK 11, that means there is no need to set &lt;code&gt;-XX:+UnlockCommercialFeatures&lt;/code&gt;, &lt;code&gt;-XX:+FlightRecorder&lt;/code&gt; flags. Or, more particular to JFR, the use of &lt;code&gt;-XX:+UnlockDiagnosticVMOptions&lt;/code&gt; and &lt;code&gt;-XX:+DebugNonSafepoints&lt;/code&gt; &lt;a href="https://github.com/openjdk/jmc/blob/bacb448fd4ed1a9a5d887c50aebff4e854d3512a/core/org.openjdk.jmc.common/src/main/java/org/openjdk/jmc/common/version/JavaVersionSupport.java#L59-L60" target="_blank" rel="noopener noreferrer"&gt;source&lt;/a&gt;
 |&lt;/p&gt;</description></item><item><title>Spring Boot: Strategy Design Pattern - Convenience and Limitation</title><link>https://foojayio.github.io/website/today/spring-boot-strategy-design-pattern-convenience-and-limitation/</link><pubDate>Fri, 30 Oct 2020 09:22:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-strategy-design-pattern-convenience-and-limitation/</guid><description>&lt;p&gt;You might have already used the &lt;a href="https://en.wikipedia.org/wiki/Strategy_pattern" target="_blank" rel="noopener noreferrer"&gt;strategy pattern&lt;/a&gt;
 in relationship with Spring Boot where it is very convenient to use.&lt;/p&gt;
&lt;p&gt;You simply define an interface for example (I use the prefixing &lt;code&gt;I&lt;/code&gt; only in these examples for clarity):&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;public interface IOneStrategy {
 void executeTheThing();
}&lt;/pre&gt;
&lt;p&gt;Define some implementations like this:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;@Service("FIRST")
public class OneStrategyFirst implements IOneStrategy {

 @Override
 public void executeTheThing() {
 System.out.println("OneStrategyFirst.executeTheThing");
 }
}&lt;/pre&gt;
&lt;p&gt;Now you can simply implement a service which will execute the appropriate strategy based on the given name which looks similar like this:&lt;/p&gt;</description></item><item><title>Details on OpenJDK vs. OpenJFX Release Cycles</title><link>https://foojayio.github.io/website/today/openjdk-vs-openjfx-release-cycles/</link><pubDate>Thu, 29 Oct 2020 14:41:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/openjdk-vs-openjfx-release-cycles/</guid><description>&lt;p&gt;Confused about the release cycles of OpenJDK and OpenJFX and the relationship between them? Read on!&lt;/p&gt;
&lt;h2 id="h2-0-openjdk"&gt;OpenJDK&lt;/h2&gt;
&lt;p&gt;Since 2018, Java switched to a 6-months release cycle. Every new release brings new finished features, but also &amp;ldquo;preview&amp;rdquo; ones which are not finished yet. These can be enabled &lt;a href="https://mkyong.com/java/java-how-to-enable-the-preview-language-features/" target="_blank" rel="noopener noreferrer"&gt;with a flag&lt;/a&gt;
 (`&lt;code&gt;java --enable-preview&lt;/code&gt;`) to allow developers to start experimenting with them and provide feedback to the developers to further improve these so they can become available in one of the next releases.
&lt;img src="https://foojayio.github.io/website/today/openjdk-vs-openjfx-release-cycles/history_java_releases.png" alt="" loading="lazy"&gt;
 Java release history&lt;/p&gt;</description></item><item><title>Handling JDK &amp; GC Options Dynamically in Elasticsearch</title><link>https://foojayio.github.io/website/today/handling-jdk-and-gc-options-dynamically-in-elasticsearch/</link><pubDate>Wed, 28 Oct 2020 07:48:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/handling-jdk-and-gc-options-dynamically-in-elasticsearch/</guid><description>&lt;p&gt;&lt;strong&gt;Today we will dive into the start up of Elasticsearch, how it parses the configurable JVM options and how it can ergonomically switch between JVM options on startup.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.elastic.co/elasticsearch/" target="_blank" rel="noopener noreferrer"&gt;Elasticsearch&lt;/a&gt;
 is a distributed search &amp;amp; analytics engine. Elasticsearch&amp;rsquo;s full text search capabilities are based on &lt;a href="https://lucene.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Lucene&lt;/a&gt;
. It&amp;rsquo;s the heart of the Elastic Stack and powers its solutions Enterprise Search, Observability and Security as well as many well known internet websites like Wikipedia, GitHub or Stack Overflow.&lt;/p&gt;</description></item><item><title>JavaFX 3D: A Look Back Through History &amp; Some Experiments</title><link>https://foojayio.github.io/website/today/javafx-3d-a-look-back-in-history-and-some-experiments/</link><pubDate>Tue, 27 Oct 2020 09:11:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-3d-a-look-back-in-history-and-some-experiments/</guid><description>&lt;p&gt;After my virtual conference talk &lt;a href="https://webtechie.be/post/2020-10-21-apacouc-java-and-javafx-on-raspberry-pi/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Java and JavaFX on the Raspberry Pi&amp;rdquo; at the &amp;ldquo;Oracle Groundbreakers APAC Virtual Tour 2020&amp;rdquo;&lt;/a&gt;
, I got in touch with some people who were working on JavaFX 3D in the past, and were curious how that would behave on the Raspberry Pi.&lt;/p&gt;
&lt;p&gt;Only one way to find out! Let&amp;rsquo;s experiment!&lt;/p&gt;
&lt;h2 id="h2-0-history-of-javafx-3d"&gt;History of JavaFX 3D&lt;/h2&gt;
&lt;p&gt;JavaFX is an open-source, next-generation Java library for rich client applications. JavaFX started with a focus on 2D UI elements.&lt;/p&gt;</description></item><item><title>Live Templates for Java Developers in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/live-templates-in-intellij-idea/</link><pubDate>Mon, 26 Oct 2020 08:31:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/live-templates-in-intellij-idea/</guid><description>&lt;p&gt;Okay, I did the math. If you use all 38 of the Live Templates for Java that are available out of the box in IntelliJ IDEA 2020.2, you will save your finger pads approximately 2092 presses of wear and tear, and that&amp;rsquo;s just each one once, the reality is likely to be substantially higher.&lt;/p&gt;
&lt;p&gt;I will caveat this by saying that I counted the unresolved variables, yours may be longer or shorter. Still, it&amp;rsquo;s impressive!&lt;/p&gt;</description></item><item><title>Evolution of the Growth in Interest in Microservices</title><link>https://foojayio.github.io/website/today/evolution-of-microservices/</link><pubDate>Fri, 23 Oct 2020 07:35:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/evolution-of-microservices/</guid><description>&lt;p&gt;For some time now, there has been an undeniable growth in interest for Microservices. The core concept itself, however, is not that new.
&lt;img src="https://blog.payara.fish/hs-fs/hubfs/Microservices%20Guide%20Final-05.jpg?width=9058&amp;amp;name=Microservices%20Guide%20Final-05.jpg" alt="Microservices Guide Final-05" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-corba"&gt;CORBA&lt;/h2&gt;
&lt;p&gt;As early as 1996, we talked about distributed objects, mainly in the context of an early and now mostly forgotten technology called &lt;a href="https://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture" target="_blank" rel="noopener noreferrer"&gt;CORBA&lt;/a&gt;
. CORBA promised to deliver business objects, for which the network and their exact implementation was mostly abstracted away.&lt;/p&gt;
&lt;p&gt;In a CORBA world, these business objects representing a service that focused on a single thing could essentially live anywhere. If an application was the aggregation of a number of these distributed objects, each of them living on their own server, one could be updated or restarted without having to take down the entire application.&lt;/p&gt;</description></item><item><title>Peter Lawrey Talks about Low-Latency, High-Performance Java</title><link>https://foojayio.github.io/website/today/peter-lawrey-latency-performance/</link><pubDate>Thu, 22 Oct 2020 04:28:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/peter-lawrey-latency-performance/</guid><description>&lt;p&gt;About 7 years ago, I attended a session given by Java Champion Peter Lawrey, leader of &lt;a href="https://chronicle.software" title="Chronical Software" target="_blank" rel="noopener noreferrer"&gt;Chronical Software&lt;/a&gt;
, at a JavaOne conference. Since most of my prior development work in the realm of low-latency high-performance was C/C++ software, I was very interested in hearing what Peter might say about how Java addresses this problem.&lt;/p&gt;
&lt;p&gt;I have to admit, being a long-time C/C++ developer, but also with quite a lot of experience with Java, I was a bit skeptical as to how Java might match up to C/C++ in terms of multithread performance.&lt;/p&gt;</description></item><item><title>Building OpenJDK from GitHub Sources on 64-bit Raspberry Pi</title><link>https://foojayio.github.io/website/today/building-openjdk-from-github-sources-on-64-bit-raspberry-pi/</link><pubDate>Wed, 21 Oct 2020 06:35:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-openjdk-from-github-sources-on-64-bit-raspberry-pi/</guid><description>&lt;p&gt;The OpenJDK sources are now &lt;a href="https://github.com/openjdk/jdk" target="_blank" rel="noopener noreferrer"&gt;fully available and developed on GitHub&lt;/a&gt;
 as a result of &lt;a href="https://openjdk.java.net/projects/skara/" target="_blank" rel="noopener noreferrer"&gt;Project Skara&lt;/a&gt;
. Thanks to a lot of work done by the community, the full Java development flow has been migrated to GitHub while keeping the repository history. This process has been &lt;a href="https://github.blog/2020-09-30-github-welcomes-the-openjdk-project/?s=09" target="_blank" rel="noopener noreferrer"&gt;described on the GitHub blog&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This also means we are now able to build OpenJDK ourselves from the latest sources, very easily, on any device where we want to use the latest not-yet-released-version.&lt;/p&gt;</description></item><item><title>Fixing Vulnerabilities in Maven-Based Projects</title><link>https://foojayio.github.io/website/today/fixing-vulnerabilities-in-maven-projects/</link><pubDate>Tue, 20 Oct 2020 06:40:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/fixing-vulnerabilities-in-maven-projects/</guid><description>&lt;p&gt;Maven is still the most used build system in the Java ecosystem. According to the &lt;a href="https://snyk.io/blog/jvm-ecosystem-report-2020/" target="_blank" rel="noopener noreferrer"&gt;JVM report 2020&lt;/a&gt;
, Maven is the number one build tool in the ecosystem with two-thirds of the share.&lt;/p&gt;
&lt;p&gt;Therefore, it is important to know how Maven works. For instance, if you find vulnerabilities in your Maven project using Snyk, how can you fix them?&lt;/p&gt;
&lt;p&gt;In this article, I will explain how you can fix vulnerabilities in third-party libraries when using Maven, even when it is not obvious.&lt;/p&gt;</description></item><item><title>JDK 15 Hidden Classes (JEP 371) for the JVM</title><link>https://foojayio.github.io/website/today/jdk-15-hidden-classes/</link><pubDate>Fri, 16 Oct 2020 14:03:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdk-15-hidden-classes/</guid><description>&lt;p&gt;Unlike &lt;a href="https://foojayio.github.io/website/blog/jdk-15-sealed-classes/"&gt;sealed classes&lt;/a&gt;
, &lt;em&gt;hidden classes&lt;/em&gt; (&lt;a href="https://openjdk.java.net/jeps/371" target="_blank" rel="noopener noreferrer"&gt;JEP 371&lt;/a&gt;
) are a JVM rather than a language-level feature. One of the specific goals of this feature is not to make any changes to the Java language.&lt;/p&gt;
&lt;p&gt;Languages compiled into bytecodes, including Java, often use bytecodes that are generated at runtime, rather than fixing the implementation at compile time. An example of this is Lambda expressions, introduced in JDK 8. These represent the implementation of the single abstract method of a functional interface. Rather than restricting the compilation strategy to the simple use of an equivalent anonymous inner class, the compiler uses the invokedynamic bytecode, added to the JVM in JDK 7. At runtime, the JVM will generate a dynamic class that implements the functional interface and delivers the concrete implementation of the abstract method.&lt;/p&gt;</description></item><item><title>What's New in the Payara Platform October Release?</title><link>https://foojayio.github.io/website/today/whats-new-in-the-payara-platform-october-release/</link><pubDate>Thu, 15 Oct 2020 14:19:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/whats-new-in-the-payara-platform-october-release/</guid><description>&lt;p&gt;We&amp;rsquo;re happy to announce that Payara Platform Community 5.2020.5 (&lt;a href="https://www.payara.fish/downloads/payara-platform-community-edition/" target="_blank" rel="noopener noreferrer"&gt;direct download here&lt;/a&gt;
) and Payara Platform Enterprise 5.22.0 (&lt;a href="https://www.payara.fish/page/payara-enterprise-downloads/" target="_blank" rel="noopener noreferrer"&gt;request here&lt;/a&gt;
) Editions are out!&lt;/p&gt;
&lt;p&gt;With this major release of Payara Platform Enterprise, we&amp;rsquo;re introducing &lt;strong&gt;Payara InSight&lt;/strong&gt;: a new and improved version of the Community Edition&amp;rsquo;s Monitoring Console. Enterprise Edition also features some tooling enhancements including IntelliJ support and NetBeans Community Tooling.&lt;/p&gt;
&lt;p&gt;Meanwhile, the Payara Community Edition introduces support for the Jakarta EE 9 Platform as a &lt;em&gt;Tech Preview&lt;/em&gt; feature and a major Notifier API Update.&lt;/p&gt;</description></item><item><title>Gluon is focused on end-to-end Java solutions</title><link>https://foojayio.github.io/website/today/cross-platform-development-in-java-with-gluon-and-graalvm-part-2/</link><pubDate>Wed, 14 Oct 2020 17:59:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/cross-platform-development-in-java-with-gluon-and-graalvm-part-2/</guid><description>&lt;p&gt;&lt;a href="https://foojayio.github.io/website/blog/cross-platform-development-in-java-with-gluon-and-graalvm/"&gt;Continued from part 1.&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-introducing-gluon"&gt;Introducing Gluon&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://gluonhq.com/" target="_blank" rel="noopener noreferrer"&gt;Gluon&lt;/a&gt;
 is a company that enables Java on desktop, embedded, and mobile with a rich, full-featured, JavaFX user interface. Gluon embeds GraalVM and brings GraalVM to an audience hungry for performance and full-featured user experiences. Gluon enables seamless cloud integration of mobile and embedded experiences, driving increased cloud consumption.&lt;/p&gt;
&lt;p&gt;In short: Gluon is the company you&amp;rsquo;re looking for if you want an end-to-end Java solution. Gluon offers products that fit right into your company&amp;rsquo;s architecture.
&lt;img src="https://foojayio.github.io/website/today/cross-platform-development-in-java-with-gluon-and-graalvm-part-2/gluon-bruno-overview.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Cross-Platform Development in Java with Gluon and GraalVM</title><link>https://foojayio.github.io/website/today/cross-platform-development-in-java-with-gluon-and-graalvm/</link><pubDate>Tue, 13 Oct 2020 12:27:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/cross-platform-development-in-java-with-gluon-and-graalvm/</guid><description>&lt;p&gt;&lt;em&gt;&amp;ldquo;What do you do for a living?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s a common question when making conversation, but how many times have you felt that you were giving an accurate answer? My personal answer largely depends on who&amp;rsquo;s asking. When asked by another professional in my business, I can speak freely without much risk of being misunderstood. When asked by someone who isn&amp;rsquo;t tech-savvy, my answer can be as simple as &lt;em&gt;&amp;ldquo;I work in IT&amp;rdquo;&lt;/em&gt; , hoping that I won&amp;rsquo;t get the dreaded response: &lt;em&gt;&amp;ldquo;Oh, you&amp;rsquo;re doing something with computers! Maybe you can solve my printer problem.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>64-bit Raspbian OS on Raspberry Pi 4 with USB Boot</title><link>https://foojayio.github.io/website/today/64-bit-raspbian-os-on-raspberry-pi-4-with-usb-boot/</link><pubDate>Mon, 12 Oct 2020 11:14:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/64-bit-raspbian-os-on-raspberry-pi-4-with-usb-boot/</guid><description>&lt;blockquote&gt;
&lt;p&gt;In a future post, we will be building OpenJDK on a Raspberry Pi.&lt;/p&gt;
&lt;p&gt;This post is not really Java-related but a preparation for things to come&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A micro SD card is the default way to add an operating system to the Raspberry Pi. But there is an alternative approach that you need to consider if you want to make your system more reliable. SD cards are not super fast and can get quickly corrupted when you are writing a lot to disc.&lt;/p&gt;</description></item><item><title>JDK 15 Sealed Classes: Fine-Grained Mechanism for Inheritance</title><link>https://foojayio.github.io/website/today/jdk-15-sealed-classes/</link><pubDate>Fri, 09 Oct 2020 10:43:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdk-15-sealed-classes/</guid><description>&lt;p&gt;The most significant new preview feature in JDK 15 (with its second preview in JDK 16), and the only change to the language, is the introduction of sealed classes as a preview feature.&lt;/p&gt;
&lt;h4 id="preview-features"&gt;Preview Features&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://openjdk.java.net/jeps/12" target="_blank" rel="noopener noreferrer"&gt;Preview features&lt;/a&gt;
 first appeared in JDK 12 and allowed for new functionality to be included in the JDK without adding it to the Java SE specification (this applies to the Java language, Java Virtual Machine, and Java SE APIs).&lt;/p&gt;</description></item><item><title>Why You Should Join EclipseCon Community Day</title><link>https://foojayio.github.io/website/today/why-you-should-join-eclipsecon-community-day/</link><pubDate>Thu, 08 Oct 2020 06:46:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-you-should-join-eclipsecon-community-day/</guid><description>&lt;p&gt;EclipseCon Community Day is on Monday, October 19 14:00 to 18:00 CET (the day before the start of the main EclipseCon conference). Community Day at EclipseCon has always been a great event for Eclipse working groups and project teams. This year both EclipseCon and Community Day is virtual and free. Space for Community Day is limited, so please &lt;a href="https://www.eclipsecon.org/2020/registration" target="_blank" rel="noopener noreferrer"&gt;register&lt;/a&gt;
 and save your spot soon.&lt;/p&gt;
&lt;p&gt;We have a packed agenda centered on the Jakarta EE, MicroProfile and Cloud Native Java communities. If there is a set of very focused sessions you should attend on these topics, the agenda offers the one place this year to do so. The sessions are intended not only for learning, but also for the community to actively engage with some key leaders. Note, after you register for EclipseCon, you will need to reserve your spot for Community Day through the Swapcard platform (let me know if you run into any issues).
&lt;img src="https://foojayio.github.io/website/today/why-you-should-join-eclipsecon-community-day/jakartaee_logo-1024x308.jpg" alt="" loading="lazy"&gt;
 &lt;img src="https://foojayio.github.io/website/today/why-you-should-join-eclipsecon-community-day/microprofile.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Quick Start with Machine Learning for Java</title><link>https://foojayio.github.io/website/today/quick-start-with-machine-learning-in-java/</link><pubDate>Wed, 07 Oct 2020 01:21:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/quick-start-with-machine-learning-in-java/</guid><description>&lt;p&gt;So you&amp;rsquo;re a Java developer and you want to do some machine learning. Some of the questions that you might be wondering about are&amp;mdash;what can machine learning do for me anyway, which library to use, which algorithms, and is there a common standard API?&lt;/p&gt;
&lt;p&gt;Since recently there is a standard API that was created to address exactly these questions. Meet &lt;a href="https://www.jcp.org/en/jsr/detail?id=381" target="_blank" rel="noopener noreferrer"&gt;JSR 381&lt;/a&gt;
, a standard Java API for Visual Recognition using machine learning.&lt;/p&gt;</description></item><item><title>Electronics &amp; Micronaut Velocity with Raspberry Pi</title><link>https://foojayio.github.io/website/today/electronics-micronaut-velocity-with-raspberry-pi/</link><pubDate>Tue, 06 Oct 2020 08:35:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/electronics-micronaut-velocity-with-raspberry-pi/</guid><description>&lt;p&gt;In a previous post, we looked at the project &amp;ldquo;&lt;a href="https://foojayio.github.io/website/blog/electronics-quarkus-qute-on-raspberry-pi/"&gt;Electronics &amp;amp; Quarkus Qute on Raspberry Pi&lt;/a&gt;
&amp;rdquo; by &lt;a href="https://twitter.com/Igfasouza" target="_blank" rel="noopener noreferrer"&gt;Igor De Souza&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;In this article, we present you another great example of Java on Raspberry Pi created by Igor. It shows how to create a Micronaut Velocity demo using an 8x8 LED matrix display.
&lt;img src="https://foojayio.github.io/website/today/electronics-micronaut-velocity-with-raspberry-pi/raspberry_micronaut.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-micronaut"&gt;Micronaut&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://micronaut.io/" target="_blank" rel="noopener noreferrer"&gt;Micronaut&lt;/a&gt;
 is a JVM-based framework for building lightweight, modular applications. Developed by &lt;a href="https://objectcomputing.com/" target="_blank" rel="noopener noreferrer"&gt;OCI&lt;/a&gt;
, the same company that created &lt;a href="https://objectcomputing.com/products/grails" target="_blank" rel="noopener noreferrer"&gt;Grails&lt;/a&gt;
, Micronaut is the latest framework designed to make creating microservices quick and easy.&lt;/p&gt;</description></item><item><title>What do you think was the reason that Java was invented?</title><link>https://foojayio.github.io/website/today/the-reason-java-was-invented/</link><pubDate>Mon, 05 Oct 2020 06:14:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-reason-java-was-invented/</guid><description>&lt;p&gt;In my &lt;a href="https://foojayio.github.io/website/blog/compiling-java-code-executing-bytecode/"&gt;last post&lt;/a&gt;
 I described the timing differences between executing &lt;code&gt;javac&lt;/code&gt; to create Java bytecode and running the actual bytecode. Some readers noticed that, obviously, the &lt;code&gt;javac&lt;/code&gt; operation will automatically take more time than the execution of the byte code will take, and wondered why I took the time to write the post. Why would we even have &lt;code&gt;javac&lt;/code&gt; if it didn&amp;rsquo;t improve runtime performance? In fact, why would Java have even been invented if we couldn&amp;rsquo;t use &lt;code&gt;javac&lt;/code&gt; to create fast-running bytecode?&lt;/p&gt;</description></item><item><title>New to IntelliJ IDEA by JetBrains? Me Too!</title><link>https://foojayio.github.io/website/today/new-to-intellij-idea-me-too/</link><pubDate>Fri, 02 Oct 2020 10:07:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-to-intellij-idea-me-too/</guid><description>&lt;p&gt;Until recently, I last wrote Java in anger in 2002. IntelliJ IDEA had just been released; it wasn&amp;rsquo;t remotely on my radar. I honestly can&amp;rsquo;t remember what IDE we were using back then, but it certainly was a very long way to the fully featured IDE that JetBrains produce today.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s my experience of using IntelliJ IDEA for the first time!&lt;/p&gt;
&lt;h3 id="h3-0-1-downloading-intellij-idea"&gt;1. Downloading IntelliJ IDEA&lt;/h3&gt;
&lt;p&gt;There&amp;rsquo;s a lot going on when you first load IntelliJ IDEA, but I learned pretty quickly that there are also some good first steps you can take to make your experience a little more comfortable.&lt;/p&gt;</description></item><item><title>5 Minute Azure Survey: Java EE, Jakarta EE, and MicroProfile</title><link>https://foojayio.github.io/website/today/5-minute-azure-survey-java-ee-jakarta-ee-and-microprofile/</link><pubDate>Thu, 01 Oct 2020 12:55:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/5-minute-azure-survey-java-ee-jakarta-ee-and-microprofile/</guid><description>&lt;p&gt;The Azure team at Microsoft has been strengthening its commitment and outreach to the &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
, &lt;a href="https://www.oracle.com/java/technologies/java-ee-glance.html" target="_blank" rel="noopener noreferrer"&gt;Java EE&lt;/a&gt;
, and &lt;a href="https://microprofile.io/" target="_blank" rel="noopener noreferrer"&gt;MicroProfile&lt;/a&gt;
 communities.&lt;/p&gt;
&lt;h3 id="h3-0-tools-workshops-and-more"&gt;Tools, Workshops, and More&lt;/h3&gt;
&lt;p&gt;This effort includes guidance, tools, scripts, workshops, and talks to help migrate workloads to virtual machines, Kubernetes, OpenShift, and managed service (PaaS) offerings.&lt;/p&gt;
&lt;p&gt;We are working with key industry partners such as Oracle, IBM, Payara, and the Eclipse Foundation to better support runtimes such as WebLogic, WebSphere Traditional, Open/WebSphere Liberty, JBoss EAP, WildFly, Payara, and GlassFish on Azure.&lt;/p&gt;</description></item><item><title>Electronics &amp; Quarkus Qute on Raspberry Pi</title><link>https://foojayio.github.io/website/today/electronics-quarkus-qute-on-raspberry-pi/</link><pubDate>Wed, 30 Sep 2020 08:07:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/electronics-quarkus-qute-on-raspberry-pi/</guid><description>&lt;p&gt;The &amp;ldquo;Hello World&amp;rdquo; version of electronics programming is a blinking LED. But, in this post, we will go a few steps further and control 8 LEDs inside a number display.&lt;/p&gt;
&lt;p&gt;We will do this by taking a closer look at one of the projects in the list &amp;ldquo;&lt;a href="https://foojayio.github.io/website/blog/spectacular-java-projects-on-the-raspberry-pi/"&gt;Spectacular Java Projects on the Raspberry Pi&lt;/a&gt;
&amp;rdquo;.&lt;/p&gt;
&lt;figure class="alignleft size-thumbnail is-resized"&gt;
 &lt;img decoding="async" src="led-number-display-300x260.jpg" alt="" class="wp-image-35408" width="99" height="86"&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a href="https://twitter.com/Igfasouza" target="_blank" rel="noopener noreferrer"&gt;Igor De Souza&lt;/a&gt;
, Dublin based Principal Big Data Consultant at Oracle, set up an interesting experiment in which he combines a LED number display with the Raspberry Pi and Quarkus.&lt;/p&gt;</description></item><item><title>Getting Started with Babel for Java and OpenJDK</title><link>https://foojayio.github.io/website/today/getting-started-with-babel-for-java/</link><pubDate>Tue, 29 Sep 2020 07:57:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-babel-for-java/</guid><description>&lt;p&gt;In the JavaScript world, developers have to deal with a multitude of JavaScript engines in different browsers and browser versions, while the language itself is evolving quickly. This is only possible because of clever tools like the retrofitting compiler Babel (&lt;a href="https://babeljs.io/" target="_blank" rel="noopener noreferrer"&gt;https://babeljs.io&lt;/a&gt;
). Babel backports new features to work on older JavaScript engines, allowing developers to use modern JavaScript language features and still be compatible with the majority of browsers out there.&lt;/p&gt;</description></item><item><title>Timing Compiling .java Code Files and Executing .class Bytecode</title><link>https://foojayio.github.io/website/today/compiling-java-code-executing-bytecode/</link><pubDate>Mon, 28 Sep 2020 04:37:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/compiling-java-code-executing-bytecode/</guid><description>&lt;p&gt;Java developers are familiar with the notion that the foundation of Java is &amp;ldquo;write once, run anywhere.&amp;rdquo; That is, the same Java code will run on all the primary operating systems and hardware platforms. As I noted in my earlier post &lt;a href="https://foojayio.github.io/website/blog/why-java-c-and-python-are-todays-most-utilized-programming-languages/"&gt;Why Java, C, and Python Are Today&amp;rsquo;s Most Utilized Programming Languages&lt;/a&gt;
, Python comes somewhat close to this (though in my experience what works on Linux may not work out-of-the-box on Windows or Mac), and of course C/C++ require immense adaptation of the software in order for it to work on different operating systems and hardware platforms.&lt;/p&gt;</description></item><item><title>WebLogic on Azure Virtual Machines Major Release Available</title><link>https://foojayio.github.io/website/today/weblogic-on-azure-virtual-machines-major-release-available/</link><pubDate>Fri, 25 Sep 2020 19:06:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/weblogic-on-azure-virtual-machines-major-release-available/</guid><description>&lt;p&gt;We are delighted to announce the availability of a major release for solutions to run Oracle WebLogic Server (WLS) on Azure Linux Virtual Machines.&lt;/p&gt;
&lt;p&gt;The release is jointly developed with the WebLogic team as part of the broad-ranging partnership between Microsoft and Oracle. The partnership also covers joint support from Oracle/Microsoft and a range of Oracle software running on Azure. Software available under the partnership includes Oracle WebLogic, Oracle Linux and Oracle Database as well as interoperability between Oracle Cloud Infrastructure (OCI) and Azure.&lt;/p&gt;</description></item><item><title>Getting Started Learning Java as a First Language</title><link>https://foojayio.github.io/website/today/learning-java-as-a-first-language/</link><pubDate>Thu, 24 Sep 2020 13:44:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/learning-java-as-a-first-language/</guid><description>&lt;p&gt;I started programming in Java way back in 1999. I had just started a job as the director of web development at a small startup called eDeploy.com. I wrote a lot of HTML, CSS, and JavaScript for a SaaS product that helped companies install network equipment. The backend for our app was written in Java and we deployed to iPlanet Application Server. At our height, we trusted Loudcloud to run our software.&lt;/p&gt;</description></item><item><title>Spectacular Java Projects on the Raspberry Pi</title><link>https://foojayio.github.io/website/today/spectacular-java-projects-on-the-raspberry-pi/</link><pubDate>Wed, 23 Sep 2020 10:38:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/spectacular-java-projects-on-the-raspberry-pi/</guid><description>&lt;p&gt;Thanks to Twitter and LinkedIn, I&amp;rsquo;ve been in touch with several developers who are doing cool Java stuff on the Raspberry Pi.&lt;/p&gt;
&lt;p&gt;Here I want to share a number of projects with you, as they can be an inspiration for all of us to get started with Java development on the Raspberry Pi!&lt;/p&gt;
&lt;h4 id="igor-souza---kafka-on-the-raspberry-pi"&gt;&lt;a href="https://twitter.com/Igfasouza" target="_blank" rel="noopener noreferrer"&gt;Igor Souza&lt;/a&gt;
 - Kafka on the Raspberry Pi&lt;/h4&gt;
&lt;p&gt;Igor shared this &lt;a href="https://twitter.com/Igfasouza/status/1293514673896202240" target="_blank" rel="noopener noreferrer"&gt;nice video where he set up a Kafka cluster on Raspberry Pi&lt;/a&gt;
. He also has a nice example where this is &lt;a href="https://twitter.com/Igfasouza/status/1297556313518616576" target="_blank" rel="noopener noreferrer"&gt;combined with an e-ink display to show real-time bus information&lt;/a&gt;
. Some of his work is available on GitHub where you can find &lt;a href="https://github.com/igfasouza?tab=repositories" target="_blank" rel="noopener noreferrer"&gt;Kafka and other example code&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Getting Started with a Simple Service with Spring Boot</title><link>https://foojayio.github.io/website/today/a-simple-service-with-spring-boot/</link><pubDate>Tue, 22 Sep 2020 12:59:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-simple-service-with-spring-boot/</guid><description>&lt;p&gt;In this post, I will demonstrate how to create a simple Web Service using Spring Boot. This framework makes it almost effortless to develop web services, so long as the appropriate dependencies are in place.&lt;/p&gt;
&lt;p&gt;In this example, I will create a Web Service that will read the current temperature from a file and make it available to clients via a RESTful endpoint.&lt;/p&gt;
&lt;h4 id="1-use-the-spring-intializr"&gt;1. Use the Spring Intializr&lt;/h4&gt;
&lt;p&gt;The Spring Initializr helps one to choose the dependencies that are required for production a particular solution.&lt;/p&gt;</description></item><item><title>Azul Zulu OpenJDK 15 on the Raspberry Pi</title><link>https://foojayio.github.io/website/today/azul-zulu-openjdk-15-on-raspberry-pi/</link><pubDate>Mon, 21 Sep 2020 07:54:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/azul-zulu-openjdk-15-on-raspberry-pi/</guid><description>&lt;p&gt;For this post I did some experiments with Java 15, reusing the Ubuntu 64bit SD card which was also used for my earlier post &lt;a href="http://localhost:1313/post/2020-07-28-spring-versus-quarkus-rest-h2-db-on-raspberry-pi/" target="_blank" rel="noopener noreferrer"&gt;&amp;quot;&lt;/a&gt;
&lt;a href="https://foojayio.github.io/website/?p=35345"&gt;Startup Speed of Spring and Quarkus JARs on the Raspberry Pi&lt;/a&gt;
&amp;quot;.&lt;/p&gt;
&lt;p&gt;That version of Ubuntu comes with OpenJDK 11 pre-installed.&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;$ java -version
openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu120.04, mixed mode)
&lt;/pre&gt;
&lt;h3 id="installing-azul-zulu-15"&gt;Installing Azul Zulu OpenJDK 15&lt;/h3&gt;
&lt;p&gt;OpenJDK Java 15 was released on 2020-09-15, check out the &lt;a href="https://foojayio.github.io/website/almanac/jdk-15/"&gt;Java Version Almanac&lt;/a&gt;
 for more details.&lt;/p&gt;</description></item><item><title>Startup Speed of Spring and Quarkus JARs on the Raspberry Pi</title><link>https://foojayio.github.io/website/today/startup-spring-quarkus-raspberry-pi/</link><pubDate>Fri, 18 Sep 2020 09:16:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/startup-spring-quarkus-raspberry-pi/</guid><description>&lt;p&gt;For my book &amp;ldquo;&lt;a href="https://webtechie.be/books/" target="_blank" rel="noopener noreferrer"&gt;Getting Started with Java on Raspberry Pi&lt;/a&gt;
&amp;rdquo;, an example was described to store sensors and measurements in an H2-database through REST APIs with a Spring application on the Raspberry Pi.&lt;/p&gt;
&lt;p&gt;The application takes some time to start on a Raspberry Pi, and &lt;a href="https://twitter.com/AdamBien" target="_blank" rel="noopener noreferrer"&gt;Adam Bien&lt;/a&gt;
 who does the &lt;a href="https://airhacks.fm/#episode_104" target="_blank" rel="noopener noreferrer"&gt;airhacks.fm podcast&lt;/a&gt;
 asked me if I could compare this to a similar Quarkus application, which resulted in some nice results.&lt;/p&gt;</description></item><item><title>What's New, Noteworthy, and Enhanced in Java 15?</title><link>https://foojayio.github.io/website/today/whats-new-in-java-15/</link><pubDate>Thu, 17 Sep 2020 19:35:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/whats-new-in-java-15/</guid><description>&lt;p&gt;Now that Java 15 has been released, let&amp;rsquo;s take a look at what&amp;rsquo;s new!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://foojayio.github.io/website/java-15/?quarter=072020"&gt;Here on foojay&lt;/a&gt;
, the fixes that went into the release are listed, giving you a unique and readable changelog in helpful categories, with the invitation for you to vote on those that are most relevant to you:
&lt;a href="https://foojayio.github.io/website/java-15/?quarter=072020"&gt;&lt;img src="https://foojayio.github.io/website/today/whats-new-in-java-15/new-java-15-foojay-1024x617.png" alt="" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;h3 id="h3-0-new-features"&gt;New Features&lt;/h3&gt;
&lt;h4 id="jvm"&gt;JVM&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Disable and Deprecate Biased Locking ( &lt;a href="https://openjdk.java.net/jeps/374" target="_blank" rel="noopener noreferrer"&gt;JEP 374&lt;/a&gt;
 )&lt;/li&gt;
&lt;li&gt;ZGC ( &lt;a href="https://openjdk.java.net/jeps/377" target="_blank" rel="noopener noreferrer"&gt;JEP 377&lt;/a&gt;
 )&lt;/li&gt;
&lt;li&gt;Shenandoah GC ( &lt;a href="https://openjdk.java.net/jeps/379" target="_blank" rel="noopener noreferrer"&gt;JEP 379&lt;/a&gt;
 )&lt;/li&gt;
&lt;li&gt;Remove the Solaris and SPARC Ports ( &lt;a href="https://openjdk.java.net/jeps/381" target="_blank" rel="noopener noreferrer"&gt;JEP 381&lt;/a&gt;
 )&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="language"&gt;Language&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Pattern Matching for instanceof Preview ( &lt;a href="https://openjdk.java.net/jeps/375" target="_blank" rel="noopener noreferrer"&gt;JEP 375&lt;/a&gt;
 )&lt;/li&gt;
&lt;li&gt;Text Blocks ( &lt;a href="https://openjdk.java.net/jeps/378" target="_blank" rel="noopener noreferrer"&gt;JEP 378&lt;/a&gt;
 )&lt;/li&gt;
&lt;li&gt;Records Preview ( &lt;a href="https://openjdk.java.net/jeps/384" target="_blank" rel="noopener noreferrer"&gt;JEP 384&lt;/a&gt;
 )&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="api"&gt;API&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Edwards-Curve Digital Signature Algorithm (EdDSA) ( &lt;a href="https://openjdk.java.net/jeps/339" target="_blank" rel="noopener noreferrer"&gt;JEP 339&lt;/a&gt;
 )&lt;/li&gt;
&lt;li&gt;Sealed Classes Preview ( &lt;a href="https://openjdk.java.net/jeps/360" target="_blank" rel="noopener noreferrer"&gt;JEP 360&lt;/a&gt;
 )&lt;/li&gt;
&lt;li&gt;Hidden Classes ( &lt;a href="https://openjdk.java.net/jeps/371" target="_blank" rel="noopener noreferrer"&gt;JEP 371&lt;/a&gt;
 )&lt;/li&gt;
&lt;li&gt;Remove the Nashorn JavaScript Engine ( &lt;a href="https://openjdk.java.net/jeps/372" target="_blank" rel="noopener noreferrer"&gt;JEP 372&lt;/a&gt;
 )&lt;/li&gt;
&lt;li&gt;Reimplement the Legacy DatagramSocket API ( &lt;a href="https://openjdk.java.net/jeps/373" target="_blank" rel="noopener noreferrer"&gt;JEP 373&lt;/a&gt;
 )&lt;/li&gt;
&lt;li&gt;Foreign-Memory Access API (Second Incubator) ( &lt;a href="https://openjdk.java.net/jeps/383" target="_blank" rel="noopener noreferrer"&gt;JEP 383&lt;/a&gt;
 )&lt;/li&gt;
&lt;li&gt;Deprecate RMI Activation for Removal ( &lt;a href="https://openjdk.java.net/jeps/385" target="_blank" rel="noopener noreferrer"&gt;JEP 385&lt;/a&gt;
 )&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Go here for foojay&amp;rsquo;s almanac of all the info about where to go to download Java 15, including a comparison of Java 15 APIs versus those from previous releases: &lt;a href="https://foojayio.github.io/website/almanac/jdk-15"&gt;foojay.io/almanac/jdk-15&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>What is JVM Bytecode?</title><link>https://foojayio.github.io/website/today/what-is-jvm-bytecode/</link><pubDate>Wed, 16 Sep 2020 03:55:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-is-jvm-bytecode/</guid><description>&lt;p&gt;Everyone who programs in Java, or any of the other languages built on top of the Java Virtual Machine (Scala, Closure, Kotlin, Groovy, Nashorn, Jython, JRuby, et al.) is familiar with the term &amp;ldquo;bytecode.&amp;rdquo; But how many of us understand what JDK bytecode actually is?&lt;/p&gt;
&lt;p&gt;I became more curious about this after I wrote my last foojay.io post, &lt;a href="https://foojayio.github.io/website/blog/why-the-jvm-is-a-brilliant-platform-for-new-programming-languages/"&gt;Why the JVM Is a Brilliant Platform for New Programming Languages&lt;/a&gt;
. What exactly &lt;em&gt;is&lt;/em&gt; bytecode?&lt;/p&gt;</description></item><item><title>What's New, Noteworthy, and Enhanced in JavaFX 15?</title><link>https://foojayio.github.io/website/today/whats-new-in-javafx-15/</link><pubDate>Tue, 15 Sep 2020 13:26:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/whats-new-in-javafx-15/</guid><description>&lt;p&gt;A couple of weeks ago, JavaFX version 15 was released.&lt;/p&gt;
&lt;h3 id="h3-0-highlights"&gt;Highlights&lt;/h3&gt;
&lt;p&gt;These are some of the highlights we&amp;rsquo;ve selected for you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JavaFX now has 3D support for the newer Intel graphics drivers on Linux,&lt;/li&gt;
&lt;li&gt;Support for e-paper displays on i.MX6 devices was added,&lt;/li&gt;
&lt;li&gt;FX scripting support was enhanced.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-1-enhancements"&gt;Enhancements&lt;/h3&gt;
&lt;p&gt;These are some of the improvements that were implemented in JavaFX 15:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Better native keyboard handling and integration on iOS and Android,&lt;/li&gt;
&lt;li&gt;Adjusted font size in JavaFX apps with enabled Monocle on Raspberry Pi,&lt;/li&gt;
&lt;li&gt;Capped the refresh rate on iOS (to a maximum of 30 Hz).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-2-code-cleanup"&gt;Code Cleanup&lt;/h3&gt;
&lt;p&gt;With every new release, a code cleanup is done, for instance:&lt;/p&gt;</description></item><item><title>Useful Hotspot JVM Options for Today: Heap Sizing</title><link>https://foojayio.github.io/website/today/useful-jvm-options-heap-sizing/</link><pubDate>Mon, 14 Sep 2020 16:37:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/useful-jvm-options-heap-sizing/</guid><description>&lt;p&gt;The HotSpot JVM has a lot of options available. Maybe too many. Sometimes we are looking for a specific option or the &amp;ldquo;magic&amp;rdquo; one that can give a serious boost in an application. Unfortunately, I think that magic option may not exist! However, some can help you for optimizing your application or for tuning some of its parts.&lt;/p&gt;
&lt;p&gt;To find the complete list of options you will find in the &lt;a href="https://github.com/openjdk/jdk/blob/master/src/hotspot/share/runtime/globals.hpp" target="_blank" rel="noopener noreferrer"&gt;globals.hpp&lt;/a&gt;
 file from OpenJDK sources. However, the &lt;a href="https://chriswhocodes.com/vm-options-explorer.html" target="_blank" rel="noopener noreferrer"&gt;VM Options Explorer&lt;/a&gt;
, also &lt;a href="https://foojayio.github.io/website/command-line-arguments/openjdk-11/?tab=alloptions"&gt;integrated neatly here into foojay&lt;/a&gt;
, can help you to navigate through the list.&lt;/p&gt;</description></item><item><title>Facelift and Redesign for Foojay Homepage | foojat</title><link>https://foojayio.github.io/website/today/redesigned-foojay-home/</link><pubDate>Fri, 11 Sep 2020 18:20:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/redesigned-foojay-home/</guid><description>&lt;p&gt;The site you&amp;rsquo;re on, foojay.io, has had a bit of a facelift over the past week.&lt;/p&gt;
&lt;p&gt;Now you can see directly on the homepage all the key pieces that make up foojay, a place for friends of OpenJDK&amp;hellip; especially its focus on the integrated services provided by &lt;a href="https://foojayio.github.io/website/almanac/jdk-8/"&gt;Marc Hoffmann&amp;rsquo;s Java Version Almanac&lt;/a&gt;
 and&lt;a href="https://foojayio.github.io/website/command-line-arguments/openjdk-11/"&gt;Chris Newland&amp;rsquo;s JVM Options Explorer&lt;/a&gt;
, supported by the &lt;a href="https://foojayio.github.io/website/java-8/?tab=highlights"&gt;OpenJDK Update Release Details&lt;/a&gt;
, together with &lt;a href="https://foojayio.github.io/website/blog/"&gt;Foojay Today&lt;/a&gt;
 and the start of &lt;a href="https://foojayio.github.io/website/pedia/"&gt;Foojay Pedia&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Running Single-File Java Source Code Without Compiling (Part 2)</title><link>https://foojayio.github.io/website/today/running-single-file-java-source-code-without-compiling-part-2/</link><pubDate>Thu, 10 Sep 2020 15:54:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/running-single-file-java-source-code-without-compiling-part-2/</guid><description>&lt;p&gt;&lt;a href="https://foojayio.github.io/website/blog/running-single-file-java-source-code-without-compiling-part-1/"&gt;Let&amp;rsquo;s continue from part 1 of this series&lt;/a&gt;
, by looking at JEP 330, Launch Single-File Source-Code Programs, which is one of the new features introduced in the OpenJDK 11 release. This feature allows you to execute a Java source code file directly using the &lt;code&gt;java&lt;/code&gt; interpreter. The source code is compiled in memory and then executed by the interpreter, without producing a .class file on disk.&lt;/p&gt;
&lt;p&gt;However, this feature is limited to code that resides in a single source file. You cannot add additional source files to be compiled in the same run.&lt;/p&gt;</description></item><item><title>Why the JVM Is a Brilliant Platform for New Programming Languages</title><link>https://foojayio.github.io/website/today/why-the-jvm-is-a-brilliant-platform-for-new-programming-languages/</link><pubDate>Wed, 09 Sep 2020 05:07:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-the-jvm-is-a-brilliant-platform-for-new-programming-languages/</guid><description>&lt;p&gt;In my &lt;a href="https://foojayio.github.io/website/blog/why-java-c-and-python-are-todays-most-utilized-programming-languages/"&gt;previous post&lt;/a&gt;
, I speculated that Java, Python, and C are likely to be the most prominent programming languages going pretty far into the future.&lt;/p&gt;
&lt;p&gt;Another point in my speculation was that utilizing the Java Virtual Machine facilitates the invention of new programming languages created for special purposes that could not be easily created by other means. The JVM takes care of all of the low-level infrastructure problems that are involved in the creation of any software that you&amp;rsquo;d like to be runnable on any device or operating system.&lt;/p&gt;</description></item><item><title>Running Single-File Java Source Code Without Compiling (Part 1)</title><link>https://foojayio.github.io/website/today/running-single-file-java-source-code-without-compiling-part-1/</link><pubDate>Tue, 08 Sep 2020 08:15:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/running-single-file-java-source-code-without-compiling-part-1/</guid><description>&lt;p&gt;If you recall the old days, before OpenJDK 11, say you have a &lt;code&gt;HelloUniverse.java&lt;/code&gt; source file that contains a class definition and a static main method, which prints out as a single line of text to the terminal, like the following:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;public class HelloUniverse{
 public static void main(String[] args) { 
 System.out.println("Hello foojay!");
 }
}&lt;/pre&gt;
&lt;p&gt;Normally to run this class, first, you would need to compile it, using a Java compiler (&lt;code&gt;javac&lt;/code&gt;), which would result in a &lt;code&gt;HelloUniverse.class&lt;/code&gt; file:&lt;/p&gt;</description></item><item><title>Interview: Frank Delporte, Foojay Raspberry Pi Community Manager</title><link>https://foojayio.github.io/website/today/interview-frank-delporte-foojay-raspberry-pi-community-manager/</link><pubDate>Mon, 07 Sep 2020 13:20:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/interview-frank-delporte-foojay-raspberry-pi-community-manager/</guid><description>&lt;p&gt;&lt;em&gt;Today we&amp;rsquo;d like to introduce a new community manager for all things Raspberry Pi on foojay: Frank Delporte!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Welcome, Frank!&lt;/strong&gt; &lt;strong&gt;Tell us about yourself. 🙂&lt;/strong&gt;&lt;/p&gt;
&lt;figure class="alignleft size-large is-resized"&gt;
 &lt;img decoding="async" src="pasfoto-2.jpg" alt="" class="wp-image-32891" width="173" height="208"&gt;
&lt;/figure&gt;
&lt;p&gt;Hi, I&amp;rsquo;m Frank Delporte, living in Belgium. I started programming when I was 10 on my Commodore 64.&lt;/p&gt;
&lt;p&gt;I started my professional career as a video editor for television, 25 years ago. I went through all stages from video, multimedia, websites to back-end development using different technologies.&lt;/p&gt;</description></item><item><title>Java 11 &amp; JavaFX 11 on Raspberry Pi with ARMv6 Processor</title><link>https://foojayio.github.io/website/today/java-11-javafx-11-on-raspberry-pi-with-armv6-processor/</link><pubDate>Fri, 04 Sep 2020 08:00:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-11-javafx-11-on-raspberry-pi-with-armv6-processor/</guid><description>&lt;p&gt;In a previous post &amp;ldquo;&lt;a href="https://foojayio.github.io/website/blog/installing-java-and-javafx-on-the-raspberry-pi/"&gt;Installing Java and JavaFX on the Raspberry Pi&lt;/a&gt;
&amp;rdquo;, you can read how to install BellSoft LibericaJDK to be able to run JavaFX applications with a graphical user interface on a Raspberry Pi with ARMv7 or ARMv8 processor.&lt;/p&gt;
&lt;p&gt;But this won&amp;rsquo;t work for some (older) versions of the Raspberry Pi, as these use an ARMv6 processor, which is not compatible with the default OpenJDK 11 that is part of Raspbian OS.&lt;/p&gt;</description></item><item><title>JmFrX: A Bridge From JMX to Java Flight Recorder</title><link>https://foojayio.github.io/website/today/introducing-jmfrx-a-bridge-from-jmx-to-java-flight-recorder/</link><pubDate>Thu, 03 Sep 2020 09:24:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-jmfrx-a-bridge-from-jmx-to-java-flight-recorder/</guid><description>&lt;p&gt;I&amp;rsquo;m excited to share news about an open-source utility I&amp;rsquo;ve been working on lately: &lt;a href="https://github.com/gunnarmorling/jmfrx" target="_blank" rel="noopener noreferrer"&gt;JmFrX&lt;/a&gt;
, a tool for capturing JMX data with Java Flight Recorder.&lt;/p&gt;
&lt;p&gt;When using JMX (&lt;a href="https://en.wikipedia.org/wiki/Java_Management_Extensions" target="_blank" rel="noopener noreferrer"&gt;Java Management Extensions&lt;/a&gt;
), the Java platform&amp;rsquo;s standard for monitoring and managing applications, JmFrX allows you to periodically record the attributes from any JMX MBean into &lt;a href="https://openjdk.java.net/jeps/328" target="_blank" rel="noopener noreferrer"&gt;Java Flight Recorder&lt;/a&gt;
 (JFR) files, which you then can analyse using &lt;a href="https://openjdk.java.net/projects/jmc/" target="_blank" rel="noopener noreferrer"&gt;JDK Mission Control&lt;/a&gt;
 (JMC).&lt;/p&gt;</description></item><item><title>Installing Java and JavaFX on the Raspberry Pi</title><link>https://foojayio.github.io/website/today/installing-java-and-javafx-on-the-raspberry-pi/</link><pubDate>Tue, 01 Sep 2020 08:32:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/installing-java-and-javafx-on-the-raspberry-pi/</guid><description>&lt;p&gt;One of the most read articles on my blog is about &lt;a href="https://webtechie.be/post/2019-03-13-pijava-part-2-java-11-on-raspberry-pi-3/" target="_blank" rel="noopener noreferrer"&gt;the installation of a recent Java on Raspberry Pi (March 13, 2019)&lt;/a&gt;
, so it was time for an update, which is here republished on foojay.&lt;/p&gt;
&lt;p&gt;Disclaimer: &lt;strong&gt;this article is only valid for Raspberry Pi&amp;rsquo;s with an ARMv7 or ARMv8 processor&lt;/strong&gt; . In the &lt;a href="https://en.wikipedia.org/wiki/Raspberry_Pi#Specifications" target="_blank" rel="noopener noreferrer"&gt;Raspberry Pi specifications table on Wikipedia&lt;/a&gt;
, you get a clear overview of the Pi-types with this processor:&lt;/p&gt;</description></item><item><title>Interview: Chris Newland &amp; Java Command Line Switches</title><link>https://foojayio.github.io/website/today/interview-java-command-line-switches/</link><pubDate>Mon, 31 Aug 2020 07:12:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/interview-java-command-line-switches/</guid><description>&lt;p&gt;We&amp;rsquo;re happy to announce that we&amp;rsquo;re hosting Chris Newland&amp;rsquo;s &lt;a href="http://javaalmanac.io" target="_blank" rel="noopener noreferrer"&gt;VMOptionsExplorer&lt;/a&gt;
 &lt;a href="https://foojayio.github.io/website/almanac/jdk-8/"&gt;right here on foojay&lt;/a&gt;
, providing all details per release on Java command line switches.
&lt;img src="https://foojayio.github.io/website/today/interview-java-command-line-switches/Screenshot-2020-08-29-at-23.09.05-1024x514.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;It also shows a diff between the currently selected release and the previous release, showing a tab for the switches that have been added and those that have been removed.
&lt;img src="https://foojayio.github.io/website/today/interview-java-command-line-switches/Screenshot-2020-08-29-at-23.09.57-1024x485.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Go here to take a look, yourself: &lt;a href="https://foojayio.github.io/website/command-line-arguments/openjdk-11"&gt;https://foojay.io/command-line-arguments/openjdk-11&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s meet Chris, here&amp;rsquo;s a quick interview with him about his Java command line switches integrated into foojay!&lt;/p&gt;</description></item><item><title>10 Basic Questions About PDF Files for Java Developers</title><link>https://foojayio.github.io/website/today/10-basic-questions-about-pdf-files-for-java-developers/</link><pubDate>Fri, 28 Aug 2020 05:45:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/10-basic-questions-about-pdf-files-for-java-developers/</guid><description>&lt;p&gt;PDF files are the world&amp;rsquo;s most common file format, defining 70% of the world&amp;rsquo;s documents. But they are also complex and poorly supported by Java.&lt;/p&gt;
&lt;p&gt;As I have spent over 20 years working with Java and PDF files, I thought a useful contribution to the excellent new foojay.io (a place for friends of OpenJDK), where you are reading this now, would be a quick guide for Java Developers!&lt;/p&gt;
&lt;h4 id="1-what-are-pdf-files"&gt;1. What are PDF files?&lt;/h4&gt;
&lt;p&gt;PDF files are designed to display documents, fast and accurately, on multiple platforms. They do this by storing all the information they need (text, images, fonts) inside a complex binary data structure.&lt;/p&gt;</description></item><item><title>Stream.concat vs. New ArrayList Performance</title><link>https://foojayio.github.io/website/today/performance-stream-concat-vs-new-arraylist/</link><pubDate>Thu, 27 Aug 2020 05:34:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/performance-stream-concat-vs-new-arraylist/</guid><description>&lt;p&gt;During a code review, I suggested some code improvements related to JDK8+ streams. The original code looked very similar to the following:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;List&amp;lt;Element&amp;gt; result = content.getFancyStuffs().stream()
 .flatMap(item -&amp;gt; {
 List&amp;lt;Element&amp;gt; objects = new ArrayList&amp;lt;&amp;gt;();
 objects.add(item.getElement());
 objects.addAll(item.getElements());
 return objects.stream();
 })
 .collect(toList());&lt;/pre&gt;
&lt;p&gt;Some more details here &amp;mdash; the &lt;code&gt;getFancyStuffs()&lt;/code&gt; returns a list of &lt;code&gt;FancyStuff&lt;/code&gt; elements. The &lt;code&gt;FancyStuff&lt;/code&gt; class contains two getters where &lt;code&gt;getElement()&lt;/code&gt; returns a single &lt;code&gt;Element&lt;/code&gt; whereas the &lt;code&gt;getElements()&lt;/code&gt; returns (guess what?) a list of &lt;code&gt;Element&lt;/code&gt;s.&lt;/p&gt;</description></item><item><title>Monitoring REST APIs with Custom Java Flight Recorder Events</title><link>https://foojayio.github.io/website/today/monitoring-rest-apis-with-custom-flight-recorder-events/</link><pubDate>Wed, 26 Aug 2020 08:36:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/monitoring-rest-apis-with-custom-flight-recorder-events/</guid><description>&lt;p&gt;The &lt;a href="https://openjdk.java.net/jeps/328" target="_blank" rel="noopener noreferrer"&gt;Java Flight Recorder&lt;/a&gt;
 (JFR) is an invaluable tool for gaining deep insights into the performance characteristics of Java applications. Open-sourced in JDK 11, JFR provides a low-overhead framework for collecting events from Java applications, the JVM and the operating system.&lt;/p&gt;
&lt;p&gt;In this blog post, we&amp;rsquo;re going to explore how custom, application-specific JFR events can be used to monitor a REST API, allowing to track request counts, identify long-running requests and more. We&amp;rsquo;ll also discuss how the JFR &lt;a href="https://openjdk.java.net/jeps/349" target="_blank" rel="noopener noreferrer"&gt;Event Streaming API&lt;/a&gt;
, new in Java 14, can be used to export live events, making them available for monitoring and alerting via tools such as Prometheus and Grafana.&lt;/p&gt;</description></item><item><title>Interview: Marc Hoffmann and Java Version Almanac</title><link>https://foojayio.github.io/website/today/interview-java-version-almanac/</link><pubDate>Tue, 25 Aug 2020 06:39:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/interview-java-version-almanac/</guid><description>&lt;p&gt;From this week, we&amp;rsquo;re happy to announce that we&amp;rsquo;re hosting Marc Hoffmann&amp;rsquo;s &lt;a href="http://javaalmanac.io" target="_blank" rel="noopener noreferrer"&gt;Java Version Almanac&lt;/a&gt;
 &lt;a href="https://foojayio.github.io/website/almanac/jdk-8/"&gt;right here on foojay&lt;/a&gt;
, providing details per release on OpenJDK distributions, new features, and differences between APIs across releases.
&lt;img src="https://foojayio.github.io/website/today/interview-java-version-almanac/Screenshot-2020-08-25-at-08.35.09-1024x559.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;It also shows differences between the APIs of the currently selected Java release and all previous releases, handy when you&amp;rsquo;re upgrading!
&lt;img src="https://foojayio.github.io/website/today/interview-java-version-almanac/Screenshot-2020-08-25-at-08.55.35-1024x435.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Go here to take a look, yourself: &lt;a href="https://foojayio.github.io/website/almanac/jdk-8"&gt;http://foojay.io/almanac/jdk-8&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;And, let&amp;rsquo;s meet Marc, here&amp;rsquo;s a quick interview with him about the Java Version Almanac**!**&lt;/p&gt;</description></item><item><title>Container Awareness for Java Developers Today</title><link>https://foojayio.github.io/website/today/container-awareness-for-java/</link><pubDate>Mon, 24 Aug 2020 08:55:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/container-awareness-for-java/</guid><description>&lt;p&gt;When you containerize a Java application, make sure you use a base JDK image that is container-aware (CGroup aware) so that the JDK can allocate memory and CPU counts properly.&lt;/p&gt;
&lt;p&gt;Older versions of JDK (prior to 8u192) may not have container awareness (or may have experimental support that requires explict flags to enable). Older versions of JDK may look at the traditional &lt;code&gt;/proc/meminfo&lt;/code&gt; and &lt;code&gt;/proc/cpuinfo&lt;/code&gt;files for available memory and CPUs. The content of these files reflects the amount of resources of the host/node machine that is running the container, but do not reflect the actual limits assigned to the container (which may be much less).&lt;/p&gt;</description></item><item><title>How to get a JavaFX App on ZuluFX in 60 Seconds</title><link>https://foojayio.github.io/website/today/a-javafx-app-on-zulufx-in-60-seconds/</link><pubDate>Sun, 23 Aug 2020 06:57:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-javafx-app-on-zulufx-in-60-seconds/</guid><description>&lt;figure class="alignleft is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="https://carlfx.files.wordpress.com/2020/08/duke_azul_jfx_shirt.png?w=174" alt="Duke's shirt with Azul and JavaFX." class="wp-image-3276" width="174" height="313"&gt;
&lt;/figure&gt;
&lt;p&gt;Most Java developers probably know by now that &lt;a href="https://www.oracle.com/" target="_blank" rel="noopener noreferrer"&gt;Oracle&lt;/a&gt;
 has open sourced the Java JDK and hosted its source code on &lt;a href="https://github.com/openjdk" target="_blank" rel="noopener noreferrer"&gt;Github&lt;/a&gt;
 (aka &lt;a href="https://openjdk.java.net/projects/skara/" target="_blank" rel="noopener noreferrer"&gt;Project Skara&lt;/a&gt;
).&lt;/p&gt;
&lt;p&gt;Oracle encourages companies to get paid &lt;a href="https://www.oracle.com/java/java-se-subscription.html" target="_blank" rel="noopener noreferrer"&gt;support&lt;/a&gt;
for their LTS (Long-term support) versions of the JDK, however for the mass majority of developers (like myself), who still want to enjoy free versions of the latest JDK and JavaFX, we can now get distributions from third-party vendors or build it ourselves (&lt;a href="https://github.com/openjdk" target="_blank" rel="noopener noreferrer"&gt;OpenJDK&lt;/a&gt;
 / &lt;a href="https://github.com/openjdk/jfx" target="_blank" rel="noopener noreferrer"&gt;OpenJFX&lt;/a&gt;
).&lt;/p&gt;</description></item><item><title>Java, C, and Python: Today's Most Used Program Languages?</title><link>https://foojayio.github.io/website/today/why-java-c-and-python-are-todays-most-utilized-programming-languages/</link><pubDate>Fri, 21 Aug 2020 04:41:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-java-c-and-python-are-todays-most-utilized-programming-languages/</guid><description>&lt;p&gt;Looking at the latest &lt;a href="https://www.tiobe.com/tiobe-index/" target="_blank" rel="noopener noreferrer"&gt;TIOBE Programming Community Index&lt;/a&gt;
, we see that Java has recently surpassed C in the TIOBE ratings index, while Python is holding steady in the third position:
&lt;img src="https://foojayio.github.io/website/today/why-java-c-and-python-are-todays-most-utilized-programming-languages/tiobe_20200820.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Back in 2014, I wrote an analysis of the TIOBE data at that time period, claiming that: &lt;a href="https://community.oracle.com/blogs/editor/2014/04/23/tiobes-unintentionally-misleading-truth-interest-java-surging" target="_blank" rel="noopener noreferrer"&gt;TIOBE Is (Unintentionally) Misleading; in Truth, Interest in Java Is Surging&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;My point back then was that, since the TIOBE index is compiled at least in part based on internet searches that include that language&amp;rsquo;s name, it might be misleading to assume that simply because searches involving the word &amp;ldquo;Java&amp;rdquo; were somewhat declining, that would indicate that the usage of Java was actually in decline. My logic then was that newer languages would likely receive more search engine searches than older languages simply because they were newer languages; therefore less documentation was readily available, hence more searches, hence a higher TIOBE rating.&lt;/p&gt;</description></item><item><title>A Closer Look at Java Flight Recorder Streaming</title><link>https://foojayio.github.io/website/today/a-closer-look-at-jfr-streaming/</link><pubDate>Mon, 17 Aug 2020 11:04:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-closer-look-at-jfr-streaming/</guid><description>&lt;p&gt;&lt;em&gt;By&lt;/em&gt; &lt;a href="https://twitter.com/hirt" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;Marcus Hirt&lt;/em&gt;&lt;/a&gt;
&lt;em&gt;and&lt;/em&gt; &lt;a href="https://twitter.com/jpbempel" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;JP Bempel&lt;/em&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Since JDK 14, there is a new Java Flight Recorder (JFR) kid on the block &amp;ndash; JFR streaming. 🙂 This blog post, written together with JP Bempel, will discuss some of the things that you can do with JFR streaming, as well as some of the things you may want to avoid.&lt;/p&gt;
&lt;h2 id="h2-0-an-introduction-to-jfr-streaming"&gt;An Introduction to JFR Streaming&lt;/h2&gt;
&lt;p&gt;In the most recent version of the JDK, a new JFR-related feature was introduced &amp;ndash; JFR streaming. It is a feature allowing a developer to subscribe to select JFR data and to decide what to do with that data in the host process. JFR events can also be consumed from a separate process by pointing to the file repo of a separate JVM process &amp;ndash; the mechanism is the same.&lt;/p&gt;</description></item><item><title>Is Java Still an 'Emerging Technology' Today?</title><link>https://foojayio.github.io/website/today/is-java-still-an-emerging-technology/</link><pubDate>Mon, 10 Aug 2020 11:33:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/is-java-still-an-emerging-technology/</guid><description>&lt;p&gt;Eleven years ago, I wrote an article asking &lt;a href="https://community.oracle.com/blogs/editor/2011/07/09/java-becoming-emerging-technology-ask-oreilly" target="_blank" rel="noopener noreferrer"&gt;Is Java Becoming an &amp;lsquo;Emerging Technology&amp;rsquo;? Ask O&amp;rsquo;Reilly&amp;quot;&lt;/a&gt;
. Think about that: in 2011, how could one have sensibly argued that Java was an &amp;rsquo;emerging technology&amp;rsquo;? The language already had a long history, deep integration across all spectra of business and scientific software development. How, at that point, could Java possibly represent &amp;rsquo;emerging technology&amp;rsquo;?&lt;/p&gt;
&lt;p&gt;O&amp;rsquo;Reilly Media at that time was featuring several articles describing why Java was suddenly newly relevant (for this, we can thank the core Java developers who never stopped developing new features). O&amp;rsquo;Reilly had recently published:&lt;/p&gt;</description></item><item><title>Sub-10 ms Latency in Java: Concurrent GC with Green Threads</title><link>https://foojayio.github.io/website/today/sub-10-ms-latency-in-java-concurrent-gc-with-green-threads/</link><pubDate>Wed, 05 Aug 2020 17:44:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/sub-10-ms-latency-in-java-concurrent-gc-with-green-threads/</guid><description>&lt;p&gt;This post is a part of a series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-real-time-streaming/"&gt;Part 1 (Intro and high-throughput streaming benchmark)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-batch-processing/"&gt;Part 2 (batch workload benchmark)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-the-low-latency-rematch/"&gt;Part 3 (low-latency benchmark)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Part 4 (you are here)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/billion-events-per-second-with-millisecond-latency/"&gt;Part 5 (billion events per second)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In Part 3 we showed that a modern JVM running live stream aggregation can achieve a 99.99% latency lower than 10 milliseconds. The focus of that post was comparing the different GC options available for the JVM. In order to maintain a level playing field, we kept to the default settings as much possible.&lt;/p&gt;</description></item><item><title>Azure Active Directory, OpenID Connect, Open Liberty, and Java</title><link>https://foojayio.github.io/website/today/from-azure-active-directory-via-openid-connect-to-open-liberty-and-java/</link><pubDate>Fri, 31 Jul 2020 20:31:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/from-azure-active-directory-via-openid-connect-to-open-liberty-and-java/</guid><description>&lt;p&gt;Long gone are the days when you had to create your own user account management, authentication, and authorization for your web delivered software. Instead, contemporary applications leverage these functions (Identity and Access Management, IAM for short) from an external provider. As a full featured Java application runtime, Open Liberty has great options for externally provided IAM. Open Liberty supports IAM mainstays such as social media login, SAML and OpenID Connect. In Bruce Tiffany&amp;rsquo;s blog post &lt;a href="https://openliberty.io/blog/2019/08/29/securing-microservices-social-login-jwt.html" target="_blank" rel="noopener noreferrer"&gt;Securing Open Liberty apps and micro-services with MicroProfile JWT and Social Media login&lt;/a&gt;
, you have a solid example on how to use the Open Liberty social media login feature to authenticate users using their existing social media credentials. In this blog post, let&amp;rsquo;s take a look at another example on how to configure the Liberty social login feature as an OpenID Connect client to secure Java applications with Azure Active Directory.&lt;/p&gt;</description></item><item><title>Overview of JVM Vendors and Choosing the Right One</title><link>https://foojayio.github.io/website/today/fantastic-jvms-and-where-to-find-them/</link><pubDate>Wed, 22 Jul 2020 13:07:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/fantastic-jvms-and-where-to-find-them/</guid><description>&lt;p&gt;Since you&amp;rsquo;re reading this blog, chances are that you&amp;rsquo;re writing software which will eventually run on a JVM. Most of you are using the Java language. Many of you are using a variety of other languages that target the JVM, such as Scala, Kotlin, Clojure, Groovy, (J)Ruby etc. Eventually you&amp;rsquo;ll need to decide on which JDK/JRE to deploy your software on in production. This is much easier said than done. There are quite a few different vendors out there, providing support and taking responsibility for the binaries they produce. They can have different support lengths for specific versions, and whereas you can sometimes find a vendor providing extended support for a version that has been officially end-of-lifed at Oracle, you may not find builds with the latest fixes in them publicly available. You&amp;rsquo;ll need to get those directly from the vendor.&lt;/p&gt;</description></item><item><title>Highlights of Changes to the Core Java Platform</title><link>https://foojayio.github.io/website/today/highlights-of-changes-to-the-core-java-platform/</link><pubDate>Thu, 02 Jul 2020 14:12:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/highlights-of-changes-to-the-core-java-platform/</guid><description>&lt;p&gt;February 12th, 1996. This is a significant date for me personally since it was the day I started work at Sun Microsystems as a Solaris Systems Engineer. It was also two weeks and six days after the release of the Java Development Kit (JDK 1.0).&lt;/p&gt;
&lt;p&gt;Of course, the origins of Java go further back than this; James Gosling and others started work on a new programming language in 1991, and it was the May 23rd 1995 when Java was officially announced to the world.&lt;/p&gt;</description></item><item><title>Performance of Modern Java on Heavy Workloads: Low-Latency Rematch</title><link>https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-the-low-latency-rematch/</link><pubDate>Tue, 23 Jun 2020 17:48:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-the-low-latency-rematch/</guid><description>&lt;p&gt;This post is a part of a series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-real-time-streaming/"&gt;Part 1 (Intro and high-throughput streaming benchmark)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-batch-processing/"&gt;Part 2 (batch workload benchmark)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Part 3 (you are here)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/sub-10-ms-latency-in-java-concurrent-gc-with-green-threads/"&gt;Part 4 (concurrent GC with green threads)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/billion-events-per-second-with-millisecond-latency/"&gt;Part 5 (billion events per second)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is a followup on Part 1 of the blog post series we started earlier this month, analyzing the performance of modern JVMs on workloads that are relevant to the use case of real-time stream processing.&lt;/p&gt;</description></item><item><title>How does Java handle different Images and ColorSpaces – Part 4</title><link>https://foojayio.github.io/website/today/how-does-java-handle-different-images-and-colorspaces-part-4/</link><pubDate>Tue, 23 Jun 2020 17:20:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-does-java-handle-different-images-and-colorspaces-part-4/</guid><description>&lt;p&gt;Unless you are creating all your images, by drawing then inside the code with the Graphics2D commands, you will need an image library to load images as BufferedImages. You will also need an Image library if you wish to save the results.&lt;/p&gt;
&lt;p&gt;ImageIO is part of Java, it is free and it supports a range of Image formats including GIF, JPEG, PNG, and TIF. Because it is expandable, there are additional libraries to extend it. We recommend you check out the excellent &lt;a href="https://github.com/haraldk/TwelveMonkeys" target="_blank" rel="noopener noreferrer"&gt;TwelveMonkeys image library&lt;/a&gt;
 which is free and Open Source.&lt;/p&gt;</description></item><item><title>How does Java handle different Images and ColorSpaces – Part 3</title><link>https://foojayio.github.io/website/today/how-does-java-handle-different-images-and-colorspaces-part-3-introducing-the-bufferedimage/</link><pubDate>Mon, 22 Jun 2020 17:16:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-does-java-handle-different-images-and-colorspaces-part-3-introducing-the-bufferedimage/</guid><description>&lt;p&gt;BufferedImage is one of the most useful Java abstractions. It hides all the complexity of different types of images whilst allowing access to the underlying data. Under the hood, a BufferedImage can be many types of image. This is the list of types visible in an IDE.&lt;br&gt;
&lt;img src="https://blog.idrsolutions.com/wp-content/uploads/2020/01/Screenshot-2020-01-20-at-15.22.53-284x300.png" alt="BufferedImage types" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The differences between the types of BufferedImage are:-&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Range of Colours (Binary will give back and white only, RGB will provide 24-bit color)&lt;/li&gt;
&lt;li&gt;Opacity (only available in ARGB &amp;ndash; the A is an 8 bit Alpha channel).&lt;/li&gt;
&lt;li&gt;Amount of memory used (ARGB uses the most as 4 bytes per pixel).&lt;/li&gt;
&lt;li&gt;Size of the saved file.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A BufferedImage generally uses the RGB, Gray or Binary Color Spaces. Data can be in other formats, and the raw raster data can be loaded and accessed for CMYK and YCCK, but the Colors will not display correctly. BufferedImage provides lots of methods to access the raw image data, including the Raster, pixel and ColorModel used.&lt;/p&gt;</description></item><item><title>How does Java handle different Images and ColorSpaces – Part 2</title><link>https://foojayio.github.io/website/today/how-does-java-handle-different-images-and-colorspaces-part-2/</link><pubDate>Sun, 21 Jun 2020 17:11:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-does-java-handle-different-images-and-colorspaces-part-2/</guid><description>&lt;p&gt;There are lots of different ways of describing Color. As developers, we are most familiar with the RGB model, where every color is defined by mixing Red, Green and Blue together. In the print world, CMYK is very common, where colors or printed by literally mixing different amounts of Cyan, Magenta, Yellow and Key (black). You may also come across other ways of describing color such as DeviceN. There are also lots of different versions of RGB.&lt;/p&gt;</description></item><item><title>How does Java handle different Images and ColorSpaces – Part 1</title><link>https://foojayio.github.io/website/today/how-does-java-handle-different-images-and-colorspaces-part-1/</link><pubDate>Sat, 20 Jun 2020 17:03:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-does-java-handle-different-images-and-colorspaces-part-1/</guid><description>&lt;p&gt;One of the attractions of Java is the way it abstracts and simplifies many programming constructs. In place of Tiffs, PNGs, JPEGs and other Image formats, you get a simple BufferedImage object. ImageIO and other third-party libraries such as our own &lt;a href="https://www.idrsolutions.com/jdeli/" target="_blank" rel="noopener noreferrer"&gt;JDeli image library&lt;/a&gt;
 provide methods to read and write a BufferedImage.&lt;/p&gt;
&lt;p&gt;We have spent a lot of time working with different images formats in the process of writing the &lt;a href="https://www.idrsolutions.com/jdeli/" target="_blank" rel="noopener noreferrer"&gt;JDeli&lt;/a&gt;
 Image library as a &lt;a href="https://www.idrsolutions.com/jdeli/imageio-replacement/" target="_blank" rel="noopener noreferrer"&gt;replacement for ImageIO&lt;/a&gt;
 and the aim of this series is to share that knowledge to a wider audience.&lt;/p&gt;</description></item><item><title>Performance of Modern Java on Data-Heavy Workloads: Batch Processing</title><link>https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-batch-processing/</link><pubDate>Tue, 09 Jun 2020 14:45:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-batch-processing/</guid><description>&lt;p&gt;This post is a part of a series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-real-time-streaming/"&gt;Part 1 (Intro and high-throughput streaming benchmark)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Part 2 (you are here)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-the-low-latency-rematch/"&gt;Part 3 (low-latency benchmark)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/sub-10-ms-latency-in-java-concurrent-gc-with-green-threads/"&gt;Part 4 (concurrent GC with green threads)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/billion-events-per-second-with-millisecond-latency/"&gt;Part 5 (billion events per second)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-0-batch-pipeline-benchmark"&gt;Batch Pipeline Benchmark&lt;/h3&gt;
&lt;p&gt;A batch pipeline processes a finite amount of stored data. There are no running results, we need the output of the aggregate function applied to the entire dataset. This changes our performance requirements: the key factor in streaming, latency, doesn&amp;rsquo;t exist here since we are not processing data in real time. The only metric that matters is the total run time of the pipeline.&lt;/p&gt;</description></item><item><title>Performance of Modern Java on Workloads: Real-Time Streaming</title><link>https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-real-time-streaming/</link><pubDate>Tue, 09 Jun 2020 01:45:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-real-time-streaming/</guid><description>&lt;p&gt;This post is a part of a series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Part 1 (you are here)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-batch-processing/"&gt;Part 2 (batch workload benchmark)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/performance-of-modern-java-on-data-heavy-workloads-the-low-latency-rematch/"&gt;Part 3 (low-latency benchmark)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/sub-10-ms-latency-in-java-concurrent-gc-with-green-threads/"&gt;Part 4 (concurrent GC with green threads)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/billion-events-per-second-with-millisecond-latency/"&gt;Part 5 (billion events per second)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Java runtime has been evolving more rapidly in recent years and, after 15 years, we finally got a new default garbage collector: the G1. Two more GCs are on their way to production and are available as experimental features: Oracle&amp;rsquo;s ZGC and OpenJDK&amp;rsquo;s Shenandoah.&lt;/p&gt;</description></item><item><title>Fun with Flags: My Top 10 Resources for JVM Flags</title><link>https://foojayio.github.io/website/today/top-10-fun-with-jvm-flags/</link><pubDate>Mon, 08 Jun 2020 08:21:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/top-10-fun-with-jvm-flags/</guid><description>&lt;p&gt;When I first started programming in Java and configuring my local environment, I came across mentions of JVM flags. I wanted to find out more about what options are available, what they do, and how to make use of them. Delving into the internet to discover what other more seasoned developers had to say on the topic, I was surprised at how hard it was to get definitive answers, and ultimately this research left me with more questions than answers. Since resources on this topic are scattered and hard to find, I put together this consolidated list in the hopes that others don&amp;rsquo;t have to scour the internet as I did to find these useful morsels.&lt;/p&gt;</description></item><item><title>JDK14 - New Features and Enhancements</title><link>https://foojayio.github.io/website/today/jdk14-new-features-and-enhancements/</link><pubDate>Tue, 19 May 2020 23:29:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdk14-new-features-and-enhancements/</guid><description>&lt;p&gt;Well, another six months have passed, and we have another release of Java, this one pretty packed with exciting new features. It is, therefore, time for another blog post trying to list everything new in &lt;a href="https://openjdk.java.net/projects/jdk/14/" target="_blank" rel="noopener noreferrer"&gt;JDK 14&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;In total, there are a very impressive 16 JDK Enhancement Proposals (JEPs) and 69 new API elements.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s start with the more significant items that introduce changes to the Java language syntax.&lt;/p&gt;
&lt;h2 id="h2-0-records"&gt;Records&lt;/h2&gt;
&lt;p&gt;Java is an object-oriented language; you create classes to hold data and use encapsulation to control how that data is accessed and modified. The use of objects makes manipulating complex data types simple and straightforward. It&amp;rsquo;s one of the reasons Java is so popular as a platform.&lt;/p&gt;</description></item><item><title>OpenJDK Update Release Details Dashboard</title><link>https://foojayio.github.io/website/today/dashboard-for-openjdk-update-release-details/</link><pubDate>Fri, 01 May 2020 14:59:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/dashboard-for-openjdk-update-release-details/</guid><description>&lt;p&gt;Java is a well-maintained development and deployment platform. Through the &lt;a href="https://openjdk.java.net/" target="_blank" rel="noopener noreferrer"&gt;OpenJDK project&lt;/a&gt;
, regular updates to production releases follow a traditionally established schedule. On a specific Tuesday in January, April, July and October, a set of updates are published covering security-related issues as well as bug fixes and even minor enhancements. Regular updates have been a long-standing tradition for Java. The update cadence has been a long-standing tradition for Java and is relied on by those responsible for ensuring Java-based systems are kept up to date and secure.&lt;/p&gt;</description></item><item><title>foojay: A Place for Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/foojay-a-place-for-friends-of-openjdk/</link><pubDate>Sat, 25 Apr 2020 15:09:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-a-place-for-friends-of-openjdk/</guid><description>&lt;p&gt;Welcome to foojay, a place for &lt;strong&gt;f&lt;/strong&gt; riends &lt;strong&gt;o&lt;/strong&gt; f &lt;strong&gt;O&lt;/strong&gt; pen&lt;strong&gt;J&lt;/strong&gt; DK, sponsored by &lt;a href="http://azul.com" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
. Foojay&amp;rsquo;s user-focused Java and OpenJDK technical dashboards provide free data for everyday Java developers. Right away you have access to updated analysis, selected highlights, and categorized lists arranged for easy consumption.&lt;/p&gt;
&lt;h4 id="java-technologist-dashboards"&gt;Java Technologist Dashboards&lt;/h4&gt;
&lt;p&gt;Together with Java enthusiasts around the world, the foojay team works to identify critical aspects of each new OpenJDK release and update &amp;ndash; with related information such as OpenJDK distributions, download locations, and JVM command line arguments &amp;ndash; and brings to the fore precisely the content and services that have value and relevance to those that use Java on a daily basis throughout the industry.
&lt;img src="https://foojayio.github.io/website/today/foojay-a-place-for-friends-of-openjdk/Screenshot-2020-08-20-at-17.19.43-1024x647.png" alt="" loading="lazy"&gt;
 OpenJDK Update Release Details&lt;/p&gt;</description></item></channel></rss>