<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tools on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/category/tools/</link><description>Recent content in Tools on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 21 Jul 2026 11:52:14 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/category/tools/index.xml" rel="self" type="application/rss+xml"/><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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>Announcing bx-ldap: Enterprise LDAP for BoxLang</title><link>https://foojayio.github.io/website/today/announcing-bx-ldap-enterprise-ldap-for-boxlang/</link><pubDate>Tue, 16 Dec 2025 17:01:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-bx-ldap-enterprise-ldap-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/announcing-bx-ldap-enterprise-ldap-for-boxlang/bx-ldap-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re excited to announce the release of &lt;strong&gt;bx-ldap&lt;/strong&gt;, a comprehensive LDAP module that brings enterprise-grade directory access to BoxLang! This module goes above and beyond traditional CFML LDAP implementations, offering modern features like connection pooling, event-driven programming, multiple return formats, and a clean, intuitive API.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; bx-ldap is a premium module available exclusively to BoxLang +/++ &lt;strong&gt;subscribers&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h2-0-why"&gt;🎯 Why?&lt;/h2&gt;
&lt;p&gt;Whether you&amp;rsquo;re integrating with Active Directory, OpenLDAP, or any LDAP-compliant directory service, &lt;strong&gt;bx-ldap&lt;/strong&gt; makes it simple and powerful. From basic queries to complex directory operations, this module handles it all with grace and performance.&lt;/p&gt;</description></item><item><title>BoxLang RSS : Full-Featured RSS/Atom Feed Module for BoxLang</title><link>https://foojayio.github.io/website/today/boxlang-rss-full-featured-rss-atom-feed-module-for-boxlang/</link><pubDate>Tue, 02 Dec 2025 11:19:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-rss-full-featured-rss-atom-feed-module-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-rss-full-featured-rss-atom-feed-module-for-boxlang/bx-rss-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re thrilled to announce the release of &lt;code&gt;bx-rss&lt;/code&gt;, a comprehensive RSS and Atom feed module that brings powerful syndication capabilities to &lt;a href="https://www.boxlang.io/#" title="BoxLang" target="_blank" rel="noopener noreferrer"&gt;BoxLang&lt;/a&gt;
! Whether you&amp;rsquo;re building a content aggregator, publishing a podcast, or exposing your application&amp;rsquo;s data as feeds, &lt;code&gt;bx-rss&lt;/code&gt; makes it incredibly simple.&lt;/p&gt;
&lt;h2 id="h2-0-thanks-to-ray-camden"&gt;Thanks To Ray Camden&lt;/h2&gt;
&lt;p&gt;I just want to thank you to &lt;a href="https://www.raymondcamden.com/" title="Ray Camden" target="_blank" rel="noopener noreferrer"&gt;Ray Camden&lt;/a&gt;
 for his contributions to this module. Thanks Ray! You rock!&lt;/p&gt;
&lt;h2 id="h2-1-why-bx-rss"&gt;Why bx-rss?&lt;/h2&gt;
&lt;p&gt;In today&amp;rsquo;s interconnected web, RSS and Atom feeds remain crucial for content distribution and syndication. From blog posts and news articles to podcasts and video channels, feeds power how content flows across the internet. The bx-rss module brings enterprise-grade feed capabilities to BoxLang with an elegant, easy-to-use API.&lt;/p&gt;</description></item><item><title>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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: 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>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>Hazelcast, from Embedded to Client-Server</title><link>https://foojayio.github.io/website/today/hazelcast-from-embedded-to-client-server/</link><pubDate>Fri, 23 Apr 2021 06:58:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/hazelcast-from-embedded-to-client-server/</guid><description>&lt;p&gt;Java developers are particularly spoiled when using Hazelcast. Because Hazelcast is developed in Java, it&amp;rsquo;s available as a JAR, and we can integrate it as a library in our application. Just add it to the application&amp;rsquo;s classpath, start a node, and we&amp;rsquo;re good to go. However, I believe that once you start relying on Hazelcast as a critical infrastructure component, embedding limits your options. In this post, I&amp;rsquo;d like to dive a bit deeper into the subject.&lt;/p&gt;</description></item><item><title>How to create your own custom Spring Data repository</title><link>https://foojayio.github.io/website/today/custom-spring-data-repository/</link><pubDate>Wed, 14 Apr 2021 07:33:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/custom-spring-data-repository/</guid><description>&lt;p&gt;Frameworks promise to speed up one&amp;rsquo;s development pace provided one follows the mainstream path.&lt;/p&gt;
&lt;p&gt;The path may be more or less narrow. I&amp;rsquo;m a big fan of the Spring ecosystem because its design is extensible and customizable at different abstraction levels: thus, the path is as large as you need it to be.&lt;/p&gt;
&lt;p&gt;Functional Programming is becoming more and more popular. Spring provides a couple of s for the Kotlin language. For example, the &lt;a href="https://docs.spring.io/spring-framework/docs/current/reference/html/languages.html#kotlin-bean-definition-dsl" target="_blank" rel="noopener noreferrer"&gt;Beans DSL&lt;/a&gt;
 and the &lt;a href="https://docs.spring.io/spring-framework/docs/current/reference/html/languages.html#router-dsl" target="_blank" rel="noopener noreferrer"&gt;Routes DSL&lt;/a&gt;
 allow for a more functional approach toward Spring configuration. On the &lt;em&gt;type&lt;/em&gt; side, &lt;a href="https://www.vavr.io/" target="_blank" rel="noopener noreferrer"&gt;Vavr&lt;/a&gt;
 (previously Javaslang) is pretty popular in Java, while Kotlin has &lt;a href="https://arrow-kt.io/docs/core/" target="_blank" rel="noopener noreferrer"&gt;Arrow&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>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>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>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>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>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>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>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>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>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>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>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></channel></rss>