<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Developer Tools on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/category/developer-tools/</link><description>Recent content in Developer Tools on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 22 Jul 2026 21:31:56 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/category/developer-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>Toward a Durable Spring PetClinic</title><link>https://foojayio.github.io/website/today/toward-a-durable-spring-petclinic/</link><pubDate>Sun, 19 Jul 2026 18:06:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/toward-a-durable-spring-petclinic/</guid><description>&lt;h2 id="h2-0-overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Durable Execution&lt;/strong&gt; is a way of running code so that its progress survives failure. A normal program keeps its state in memory: if the process crashes, the machine reboots, or a network call times out halfway through a multi-step operation, that state is gone and the work is left half-done.&lt;/p&gt;
&lt;p&gt;Temporal, the Durable Execution platform, persists every step of a process to its &lt;strong&gt;Event History&lt;/strong&gt; &amp;mdash; a durable, append-only log of Events &amp;mdash; so that after any failure the work resumes exactly where it left off, as if the crash never happened.&lt;/p&gt;</description></item><item><title>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>"This Can't Possibly Work": What I Learned at a Temporal.io Workshop</title><link>https://foojayio.github.io/website/today/this-cant-possibly-work-what-i-learned-at-a-temporal-io-workshop-on-durable-execution/</link><pubDate>Fri, 10 Jul 2026 08:41:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/this-cant-possibly-work-what-i-learned-at-a-temporal-io-workshop-on-durable-execution/</guid><description>&lt;p&gt;&lt;strong&gt;When developers first hear about &lt;a href="https://temporal.io/" target="_blank" rel="noopener noreferrer"&gt;Temporal&lt;/a&gt;
, they tend to move through a predictable sequence of emotions. First comes disbelief &amp;mdash; the claim that your application can crash mid-execution and simply pick up where it left off, variables intact, sounds like nonsense. Then comes irritation that anyone would even say such a thing is possible. Then they try it, discover it actually works, and get very excited. And finally they ask the only question that matters: &lt;em&gt;how?&lt;/em&gt;&lt;/strong&gt;
&lt;img src="https://foojayio.github.io/website/today/this-cant-possibly-work-what-i-learned-at-a-temporal-io-workshop-on-durable-execution/IMG_2977-1024x768.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0 : Sets, Ranges, Inner Classes, and a Runtime That Talks Back</title><link>https://foojayio.github.io/website/today/boxlang-1-14-0-sets-ranges-inner-classes-and-a-runtime-that-talks-back/</link><pubDate>Thu, 09 Jul 2026 18:02:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-14-0-sets-ranges-inner-classes-and-a-runtime-that-talks-back/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-1-14-0-sets-ranges-inner-classes-and-a-runtime-that-talks-back/BoxLang-release-1.14.0-4-700x394.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;BoxLang has never stood still, but 1.14.0 is something different. This is the release where the language stops filling gaps and starts defining what a modern dynamic JVM language looks like on its own terms. Sixty-five issues closed. Four innovative language features. A formatter that has grown up. And a companion module - &lt;code&gt;bx-mcp&lt;/code&gt; - that fundamentally changes how you operate a running BoxLang application with AI.&lt;/p&gt;
&lt;p&gt;This could have easily been a major release for the team. This has been a really amazing effort by everybody at Ortus and all of the amazing feedback from our clients migrating to BoxLang and coming up with such amazing and innovative ideas for this platform. We have only just begun!&lt;/p&gt;</description></item><item><title>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>AI-Assisted Unused &amp; Dead Code Removal</title><link>https://foojayio.github.io/website/today/ai-assisted-unused-dead-code-removal/</link><pubDate>Sun, 28 Jun 2026 07:19:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/ai-assisted-unused-dead-code-removal/</guid><description>&lt;h2 id="h-why-your-codebase-is-forcing-ai-to-underperform-and-what-to-do-about-it"&gt;Why Your Codebase Is Forcing AI to Underperform, and What to Do About It&lt;/h2&gt;
&lt;figure class="alignleft size-large is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="1024" height="576" src="ai-assisted-dead-code-removal-1024x576.avif" alt="" class="wp-image-124402" style="width:250px"&gt;
&lt;/figure&gt;
&lt;p&gt;Your AI coding assistant is only as good as the codebase it works on. If your Java application carries years of dead &amp;amp; unused code, and most do, the AI spends its reasoning budget on code that nobody runs. The result is more hallucinations, worse suggestions, and higher token costs. Here&amp;rsquo;s what to do about it.&lt;/p&gt;</description></item><item><title>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>Quarkus Unpacked: Insights from the Foojay Podcast</title><link>https://foojayio.github.io/website/today/quarkus-unpacked-insights-from-the-foojay-podcast/</link><pubDate>Tue, 23 Jun 2026 12:36:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/quarkus-unpacked-insights-from-the-foojay-podcast/</guid><description>&lt;figure class="alignleft is-resized"&gt;
 &lt;img decoding="async" src="3-Quarkus-Unpacked-2-2.jpeg" alt="Quarkus: A Runtime and Framework for Cloud-Native Java" style="width:300px"&gt;
&lt;/figure&gt;
&lt;p&gt;I recently had the pleasure of joining the &lt;a href="https://www.youtube.com/watch?v=_nJCTTrnZkE" target="_blank" rel="noopener noreferrer"&gt;Foojay podcast&lt;/a&gt;
 to talk about Quarkus in depth. The conversation covered a lot of ground, from what makes Quarkus different to the practical trade-offs between JVM and native mode. This post captures the key questions and answers from that discussion, lightly edited for readability.{#_quarkus_unpacked_insights_from_the_foojay_podcast}&lt;/p&gt;
&lt;p&gt;If you have been following this blog series, note that the third installment on building your own stack with Quarkus is coming next. Consider this a bonus entry that distills the podcast conversation into a format you can read, reference, and share.&lt;/p&gt;</description></item><item><title>Where production policy belongs: building Eliya in public</title><link>https://foojayio.github.io/website/today/where-production-policy-belongs-building-eliya-in-public/</link><pubDate>Fri, 19 Jun 2026 08:15:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/where-production-policy-belongs-building-eliya-in-public/</guid><description>&lt;p&gt;This is an argument about where production intent belongs in a managed runtime, and the OpenJDK distribution we built to act on it - Eliya, an opinionated, compliance-conscious OpenJDK distribution. This is the first article in a series. The later parts are engineering: reproducible builds, the glibc floor, release signing, the one source patch we shipped. This part is the thesis they all serve.
&lt;img src="https://root.asymm.systems/images/jvm-behaviour-space.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Every configurable system has two spaces. The configuration space: every behaviour you can reach by setting the knobs the system already exposes. And there&amp;rsquo;s the implementation space: behaviour that only exists if someone goes in and changes the internals.&lt;/p&gt;</description></item><item><title>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>Observing Apache NetBeans with OpenTelemetry and Dash0</title><link>https://foojayio.github.io/website/today/observing-apache-netbeans-with-opentelemetry-and-dash0/</link><pubDate>Sun, 14 Jun 2026 22:03:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/observing-apache-netbeans-with-opentelemetry-and-dash0/</guid><description>&lt;p&gt;&lt;em&gt;What happens when you point an observability agent at your IDE rather than your application?&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="h2-0-the-question-nobody-thinks-to-ask"&gt;The question nobody thinks to ask&lt;/h2&gt;
&lt;p&gt;Observability is something we do to our applications. We instrument services, add trace context to HTTP requests, collect JVM heap metrics, ship logs to a backend. The IDE we use to write that instrumentation is &amp;mdash; by convention &amp;mdash; invisible. It just runs. When it is slow, we assume it is busy. When it crashes, we restart it. We have no data.&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0 : Introducing Inner Classes</title><link>https://foojayio.github.io/website/today/boxlang-1-14-0-introducing-inner-classes/</link><pubDate>Thu, 11 Jun 2026 10:29:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-14-0-introducing-inner-classes/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-1-14-0-introducing-inner-classes/BoxLang-release-1.14.0-700x394.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;BoxLang has always embraced a simple truth: the way you organize code shapes the way you think about problems. For a long time, if you needed a helper class, you needed a file. One class, one &lt;code&gt;.bx&lt;/code&gt; file, no exceptions. This also stemmed from the CFML days. That&amp;rsquo;s clean and predictable, but it creates real friction when a class is tightly coupled to exactly one caller and has no business existing anywhere else.&lt;/p&gt;</description></item><item><title>Context Is Code: A Tour of APM and AgentRC</title><link>https://foojayio.github.io/website/today/context-is-code-a-tour-of-apm-and-agentrc/</link><pubDate>Fri, 05 Jun 2026 08:35:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/context-is-code-a-tour-of-apm-and-agentrc/</guid><description>&lt;p&gt;If you&amp;rsquo;ve shipped an AI agent into a real codebase in the last twelve months, you&amp;rsquo;ve felt this: every agent, every developer, every machine &amp;mdash; different setup. A README that says &amp;ldquo;install these extensions.&amp;rdquo; A &lt;code&gt;copilot-instructions.md&lt;/code&gt; somebody copy-pasted from another repo. MCP server configs in three different files. The same skills duplicated for Copilot, Claude, Cursor, and Codex.&lt;/p&gt;
&lt;p&gt;No version pinning.&lt;/p&gt;
&lt;p&gt;No integrity.&lt;/p&gt;
&lt;p&gt;No reproducibility.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the problem &lt;a href="https://github.com/microsoft/apm" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;APM&lt;/strong&gt;&lt;/a&gt;
, the Agent Package Manager fixes. And it pairs with &lt;a href="https://github.com/microsoft/agentrc" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;AgentRC&lt;/strong&gt;&lt;/a&gt;
 to close the loop on &lt;em&gt;generating&lt;/em&gt; and &lt;em&gt;evaluating&lt;/em&gt; that context in the first place.&lt;/p&gt;</description></item><item><title>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>Enterprise Java quality gates in the age of AI</title><link>https://foojayio.github.io/website/today/enterprise-java-quality-gates-ai/</link><pubDate>Fri, 29 May 2026 07:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/enterprise-java-quality-gates-ai/</guid><description>&lt;img decoding="async" class="size-medium wp-image-123963" src="ChatGPT-Image-May-26-2026-04_44_09-PM-700x394.png" alt="Illustration of human developers and an AI assistant writing code together, with the code passing through an enterprise quality gate before reaching a trusted repository." width="100%"&gt;
&lt;p&gt;People and AI can write code together, but enterprise repositories still need deterministic quality gates to protect code quality.&lt;/p&gt;
&lt;br /&gt;
&lt;h2 id="h2-0-enterprise-quality-is-a-scaling-problem"&gt;Enterprise quality is a scaling problem&lt;/h2&gt;
&lt;p&gt;Enterprise Java development is not only about writing correct code. It is about keeping a large, long-lived codebase understandable, reviewable and safe to change while many people and many tools touch it over time.&lt;/p&gt;</description></item><item><title>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>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>Context Is a Budget — Reducing Token Usage in AI-Assisted Development</title><link>https://foojayio.github.io/website/today/context-is-a-budget-eight-levers-and-three-workflow-patterns/</link><pubDate>Fri, 22 May 2026 12:52:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/context-is-a-budget-eight-levers-and-three-workflow-patterns/</guid><description>&lt;p&gt;&lt;em&gt;Eight levers and three workflow patterns that pay for themselves in a week.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A team of fifty developers can quietly burn $30,000 a month on AI coding assistants without anyone noticing. Premium-request quotas vanish by the third week. The bill arrives. Nobody has a story for where it went.&lt;/p&gt;
&lt;p&gt;The cost is the obvious pain. The other two are sneakier:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Latency.&lt;/strong&gt; Bigger contexts take longer. The model thinks more, but you also wait more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context rot.&lt;/strong&gt; This is the surprising one. Anthropic and Chroma have both shown that as the context window fills up, model recall and reasoning &lt;em&gt;degrade&lt;/em&gt; &amp;mdash; even well inside the advertised window. The 200K-token model is genuinely worse at the 150K mark than at the 20K mark. &lt;strong&gt;More context is not free; past a point, it&amp;rsquo;s actively harmful.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The mental model that fixes all three: stop treating context as a free buffet. Treat it as a budget you spend on every turn.&lt;/p&gt;</description></item><item><title>Introducing skills.boxlang.io — The Open Agent Skills Ecosystem for BoxLang &amp; the Ortus World</title><link>https://foojayio.github.io/website/today/introducing-skills-boxlang-io-the-open-agent-skills-ecosystem-for-boxlang-the-ortus-world/</link><pubDate>Thu, 21 May 2026 11:42:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-skills-boxlang-io-the-open-agent-skills-ecosystem-for-boxlang-the-ortus-world/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/introducing-skills-boxlang-io-the-open-agent-skills-ecosystem-for-boxlang-the-ortus-world/skills-boxlang-io-700x394.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Today we&amp;rsquo;re launching something we&amp;rsquo;ve been quietly building for months: &lt;a href="https://skills.boxlang.io/" title="**skills.boxlang.io**" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;skills.boxlang.io&lt;/strong&gt;&lt;/a&gt;
 &amp;mdash; a public, agent-agnostic directory for AI skills covering BoxLang, ColdBox, TestBox, CommandBox, and the entire Ortus ecosystem.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve ever pasted a 400-line system prompt into yet another AI agent, watched two of your bots drift onto subtly different versions of the same coding standard, or spent half a Friday afternoon trying to convince an LLM that BoxLang is &lt;strong&gt;not&lt;/strong&gt; Java and is &lt;strong&gt;not&lt;/strong&gt; CFML, or how to code for Modern CFML; this launch is for you. 🎯&lt;/p&gt;</description></item><item><title>From Zero (Really Zero) to OpenTelemetry</title><link>https://foojayio.github.io/website/today/from-zero-really-zero-to-opentelemetry/</link><pubDate>Tue, 19 May 2026 13:36:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/from-zero-really-zero-to-opentelemetry/</guid><description>&lt;p&gt;Here&amp;rsquo;s a super awesome prompt (e.g., for Claude Code) that you can use with &lt;a href="https://github.com/dash0hq/agent-skills" target="_blank" rel="noopener noreferrer"&gt;https://github.com/dash0hq/agent-skills&lt;/a&gt;
, the free collection of skills for AI coding agents to make applications observable with OpenTelemetry, such as with &lt;a href="https://www.dash0.com/" target="_blank" rel="noopener noreferrer"&gt;Dash0&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;And the end result is this, a view into the traces of your application (without anything at all at the start of the process).
&lt;img src="https://foojayio.github.io/website/today/from-zero-really-zero-to-opentelemetry/dash0-foojay-2-1024x545.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-the-super-awesome-prompt"&gt;&lt;strong&gt;The Super Awesome Prompt&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Take a careful look below: before doing this prompt, not only do we not have an application that is instrumented with OpenTelemetry yet. Not only do we not have the agent we need to do the instrumentation yet.&lt;/p&gt;</description></item><item><title>BoxLang v1.13.0: Compatibility, Concurrency, and Formatter Maturity</title><link>https://foojayio.github.io/website/today/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/</link><pubDate>Tue, 19 May 2026 12:11:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/boxlang-v1.13.0-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BoxLang 1.13.0&lt;/strong&gt; is a stability-first release with deep compatibility work and runtime hardening. This build closes 48 issues, with the majority focused on CFML compatibility edge cases, concurrency correctness, formatting parity, and miniserver/runtime reliability under real production loads.&lt;/p&gt;
&lt;p&gt;While this release is bug-fix heavy, it still introduces several meaningful features and quality-of-life improvements: character-aware trimming, class metadata lookup by absolute path, process environment control in SystemExecute(), SOAP headers, new query column rename capabilities, and safer miniserver routing/security defaults.&lt;/p&gt;</description></item><item><title>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>How to Develop AI Agents Using BoxLang AI: A Practical Guide</title><link>https://foojayio.github.io/website/today/how-to-develop-ai-agents-using-boxlang-ai-a-practical-guide/</link><pubDate>Tue, 12 May 2026 12:52:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-develop-ai-agents-using-boxlang-ai-a-practical-guide/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/how-to-develop-ai-agents-using-boxlang-ai-a-practical-guide/boxlang-ai-v3-1-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;AI agents are transforming how we build software. Unlike traditional chatbots that just answer questions, agents can reason about what tools they need, decide when to use them, chain multiple actions together, and remember what happened earlier in a conversation.&lt;/p&gt;
&lt;p&gt;In this tutorial, I&amp;rsquo;ll show you how to build a real-world AI agent using &lt;a href="https://ai.boxlang.io/" title="BoxLang AI" target="_blank" rel="noopener noreferrer"&gt;BoxLang AI&lt;/a&gt;
 &amp;mdash; the official AI framework for the BoxLang JVM language. We&amp;rsquo;ll build &lt;strong&gt;SupportBot&lt;/strong&gt;, an e-commerce customer support agent that can look up orders, check inventory, issue refunds, and answer questions grounded in your knowledge base.&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 7 of 7: MCP — The Protocol That Connects Everything</title><link>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-7-of-7-mcp-the-protocol-that-connects-everything/</link><pubDate>Thu, 07 May 2026 21:51:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-7-of-7-mcp-the-protocol-that-connects-everything/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-7-of-7-mcp-the-protocol-that-connects-everything/bxai-series-cover-07-700x368.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 7 of 7&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The AI ecosystem has a tool problem. Every framework has its own way of defining tools, every agent has its own way of calling them, and every integration requires custom code on both sides. An agent built in Python can&amp;rsquo;t easily use tools built in Java. An MCP server written for Claude Desktop can&amp;rsquo;t easily be consumed by a BoxLang agent without a custom adapter.&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 5 of 7: One API, 17 Providers — The Provider Architecture Deep Dive</title><link>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-5-of-7-one-api-17-providers-the-provider-architecture-deep-dive/</link><pubDate>Wed, 29 Apr 2026 16:38:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-5-of-7-one-api-17-providers-the-provider-architecture-deep-dive/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-deep-dive-part-5-of-7-one-api-17-providers-the-provider-architecture-deep-dive/bxai-series-cover-05-700x368.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 5 of 7&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Vendor lock-in is the silent killer of AI projects. You pick OpenAI, build everything against the OpenAI API, and then GPT-5 launches at three times the price. Or a competitor launches a model that&amp;rsquo;s faster for your use case. Or you need to self-host for compliance. Or your client is on AWS and wants Bedrock.&lt;/p&gt;
&lt;p&gt;Every time the answer to &amp;ldquo;can we switch providers?&amp;rdquo; is &amp;ldquo;it would take months,&amp;rdquo; something went wrong architecturally.&lt;/p&gt;</description></item><item><title>The Road to Docker Official Images for Java: The Azul Zulu Story</title><link>https://foojayio.github.io/website/today/the-road-to-docker-official-images-for-java-the-azul-zulu-story/</link><pubDate>Fri, 24 Apr 2026 08:57:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-road-to-docker-official-images-for-java-the-azul-zulu-story/</guid><description>&lt;p&gt;&lt;em&gt;Previously in this series:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.azul.com/blog/trusted-java-containers-azul-zulu-openjdk-joins-dockers-official-images/" target="_blank" rel="noopener noreferrer"&gt;Trusted Java Containers: Azul Zulu OpenJDK Joins Docker&amp;rsquo;s Official Images&lt;/a&gt;
&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After more than two years of collaboration, reviews, and back-and-forth with the Docker team, Azul Zulu Builds of OpenJDK have officially joined &lt;a href="https://hub.docker.com/_/azul-zulu" target="_blank" rel="noopener noreferrer"&gt;Docker&amp;rsquo;s Official Images&lt;/a&gt;
 program. This is not just a badge of honor. It changes how Java developers can pull and trust their container base images.&lt;/p&gt;
&lt;p&gt;The formal announcement is on the &lt;a href="https://www.azul.com/blog/trusted-java-containers-azul-zulu-openjdk-joins-dockers-official-images/" target="_blank" rel="noopener noreferrer"&gt;Azul blog&lt;/a&gt;
. In this post, I&amp;rsquo;ll walk you through what happened, why it matters, and how to start using these images today.&lt;/p&gt;</description></item><item><title>Introducing Floci: A High-Performance, GraalVM-Powered AWS Emulator</title><link>https://foojayio.github.io/website/today/introducing-floci-a-high-performance-graalvm-powered-aws-emulator/</link><pubDate>Fri, 03 Apr 2026 19:00:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-floci-a-high-performance-graalvm-powered-aws-emulator/</guid><description>&lt;h2 id="h2-0-the-motivation-why-another-aws-emulator"&gt;The Motivation: Why Another AWS Emulator?&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/introducing-floci-a-high-performance-graalvm-powered-aws-emulator/perf-chart-light-700x394.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;As Java developers, we are used to local-first development. Tools that emulate the cloud environment have become essential for keeping feedback loops tight and costs at zero. However, the ecosystem has shifted. Many of us have felt the friction of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mandatory Authentication: Needing to log in or use tokens just to run local tests.&lt;/li&gt;
&lt;li&gt;Heavy Resource Footprint: Docker containers that consume a lot of resources.&lt;/li&gt;
&lt;li&gt;Slow Startup: Waiting several seconds for the environment to be &lt;strong&gt;ready.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I created Floci (from the floccus cloud formation) to solve these specific pain points. It is a 100% open-source, MIT-licensed alternative designed for speed, privacy, and simplicity.&lt;/p&gt;</description></item><item><title>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>JC-AI Newsletter #15</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-15/</link><pubDate>Fri, 20 Mar 2026 07:56:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-15/</guid><description>&lt;p&gt;Over the past two weeks, the field of artificial intelligence has continued its remarkable pace of advancement. As AI becomes increasingly woven into the fabric of daily life, shaping how we work, communicate, and make decisions, it is both timely and valuable to step back and understand the broader trajectory of this technology. Whether the developments around us feel promising or challenging, one truth remains clear: AI is not simply leaving. It is here to stay, and understanding its evolution is essential from many perspectives.&lt;/p&gt;</description></item><item><title>Introducing the BoxLang Spring Boot Starter: Dynamic JVM Templating for Spring</title><link>https://foojayio.github.io/website/today/introducing-the-boxlang-spring-boot-starter-dynamic-jvm-templating-for-spring/</link><pubDate>Thu, 19 Mar 2026 14:20:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-the-boxlang-spring-boot-starter-dynamic-jvm-templating-for-spring/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/introducing-the-boxlang-spring-boot-starter-dynamic-jvm-templating-for-spring/boxlang-spring-boot-release-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Spring Boot developers know the pain of evaluating view technologies. Thymeleaf is great &amp;mdash; until you need more expressiveness. FreeMarker is powerful &amp;mdash; until the syntax fights you. What if you could write templates in a dynamic JVM language that gives you the full power of the platform, feels natural, and requires zero setup to integrate?&lt;/p&gt;
&lt;p&gt;Meet the &lt;strong&gt;BoxLang Spring Boot Starter.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Drop one dependency into your Spring Boot 3 app and start writing dynamic &lt;code&gt;.bxm&lt;/code&gt; templates powered by BoxLang &amp;mdash; a modern, expressive JVM language. Zero configuration. Full web scopes. 100% Java interoperable. Not only that, you get full access to BoxLang&amp;rsquo;s framework capabilities so you can integrate tons of features into your Spring Boot applications:&lt;/p&gt;</description></item><item><title>BoxLang 1.11.0 Release</title><link>https://foojayio.github.io/website/today/boxlang-1-11-0-release/</link><pubDate>Tue, 17 Mar 2026 09:40:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-11-0-release/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-1-11-0-release/boxlang-v1.11.0-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re proud to announce &lt;strong&gt;BoxLang 1.11.0&lt;/strong&gt;, a highly focused performance and stability release that delivers measurable speed improvements across every BoxLang application, with zero code changes required. The team invested deeply in bytecode generation, class loading, lock management, and type casting to produce one of the most impactful runtime optimization releases to date. Alongside the performance wave, this release resolves critical concurrency bugs, hardens DateTime handling, and ships powerful new developer tooling.&lt;/p&gt;</description></item><item><title>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>25 Years of IntelliJ IDEA: The IDE That Grew Up With Java</title><link>https://foojayio.github.io/website/today/foojay-podcast-91/</link><pubDate>Mon, 02 Mar 2026 07:21:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-91/</guid><description>&lt;p&gt;In this Foojay Podcast, we&amp;rsquo;re celebrating a major milestone in Java development history: 25 years of IntelliJ IDEA.&lt;/p&gt;
&lt;p&gt;Think about it: IntelliJ IDEA launched in 2000, and since then, it has become the go-to IDE for millions of Java developers worldwide. From its revolutionary code completion and refactoring tools to AI-powered features and the recent unified Community and Ultimate release, IntelliJ has shaped how we write Java, and keeps reinventing itself to stay ahead.&lt;/p&gt;</description></item><item><title>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>How to Customize JaCoCo Report Styling in Your Java Project</title><link>https://foojayio.github.io/website/today/how-to-customize-jacoco-report-styling-in-your-java-project/</link><pubDate>Fri, 13 Feb 2026 13:10:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-customize-jacoco-report-styling-in-your-java-project/</guid><description>&lt;p&gt;JaCoCo is the go-to code coverage tool for Java projects. It integrates seamlessly with Maven, generates detailed HTML reports, and works out of the box. But let&amp;rsquo;s be honest &amp;mdash; the default reports look like they were designed in 2008, because they were.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re publishing coverage reports as part of your project documentation (on GitHub Pages, for example), you probably want them to match your site&amp;rsquo;s look and feel. The good news: it&amp;rsquo;s entirely possible. The bad news: JaCoCo offers zero built-in support for CSS customization.&lt;/p&gt;</description></item><item><title>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>DocBox v5 - Reborn: Modern API Docs for BoxLang &amp; CFML</title><link>https://foojayio.github.io/website/today/docbox-v5-reborn-modern-api-docs-for-boxlang-cfml/</link><pubDate>Tue, 27 Jan 2026 12:15:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/docbox-v5-reborn-modern-api-docs-for-boxlang-cfml/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/docbox-v5-reborn-modern-api-docs-for-boxlang-cfml/bx-docbox-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Welcome to DocBox v5! We didn&amp;rsquo;t just update DocBox. We rebuilt it from the ground up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DocBox v5.0.0&lt;/strong&gt; represents a complete architectural rewrite&amp;mdash;modern syntax, blazing performance, and a stunning new look that finally brings API documentation into 2025. Gone are the clunky HTML pages of yesteryear. Say hello to a gorgeous, theme-driven single-page application that makes browsing your API docs feel like using a premium developer tool. We have also released a dedicated module for BoxLang: &lt;strong&gt;BX-DOCBOX&lt;/strong&gt;. A fully interactive CLI tool for generating your docs from the command line using pure BoxLang.&lt;/p&gt;</description></item><item><title>BoxLang AI v2: Enterprise AI Development Without the Complexity</title><link>https://foojayio.github.io/website/today/boxlang-ai-v2-enterprise-ai-development-without-the-complexity/</link><pubDate>Thu, 22 Jan 2026 15:09:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-v2-enterprise-ai-development-without-the-complexity/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-v2-enterprise-ai-development-without-the-complexity/boxlang-ai-v2-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One Year. 100+ Features. Unlimited Possibilities.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Just one year ago, in March 2024, we launched BoxLang AI 1.0. Today, we&amp;rsquo;re thrilled to announce &lt;strong&gt;BoxLang AI v2&lt;/strong&gt;&amp;mdash;a massive leap forward that positions BoxLang as one of the most powerful and versatile AI framework on the JVM. This release is 9-months in the making, with over 100 new features! This would have not been possible without all the new features that the BoxLang JVM language exposes to developers like: Server Side Events, HTTP Streaming, HTTP pooling, Caching, and so much more.&lt;/p&gt;</description></item><item><title>SonarQube AI Code Assurance &amp; MCP: Auto-Fix Java (Part 4)</title><link>https://foojayio.github.io/website/today/sonarqube-part-4-ai-code-assurance/</link><pubDate>Mon, 19 Jan 2026 15:27:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/sonarqube-part-4-ai-code-assurance/</guid><description>&lt;p&gt;Hola Java developers! 👋&lt;/p&gt;
&lt;p&gt;Welcome to the &lt;strong&gt;Grand Finale&lt;/strong&gt; of our series.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-1/"&gt;Part 1&lt;/a&gt;
&lt;/strong&gt;: We turned your IDE into a fortress.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-2/"&gt;Part 2&lt;/a&gt;
&lt;/strong&gt;: We synced the team with Connected Mode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://foojayio.github.io/website/today/avoid-the-trojan-horse-in-your-pom-xml-sonarqube-advanced-security-part-3/"&gt;Part 3&lt;/a&gt;
&lt;/strong&gt;: We secured the Supply Chain (dependencies).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We have become excellent at &lt;em&gt;finding&lt;/em&gt; bugs. But let&amp;rsquo;s be honest: Finding them is only half the battle. &lt;strong&gt;Who is going to fix them?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We are drowning in a backlog of &amp;ldquo;Technical Debt,&amp;rdquo; &amp;ldquo;Code Smells,&amp;rdquo; and &amp;ldquo;Security Hotspots.&amp;rdquo; You don&amp;rsquo;t have enough hours in the day to refactor every complex method or research the perfect fix for a regex denial-of-service vulnerability.&lt;/p&gt;</description></item><item><title>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>Stop the trojan horse in your pom : SonarQube Advace Security</title><link>https://foojayio.github.io/website/today/avoid-the-trojan-horse-in-your-pom-xml-sonarqube-advanced-security-part-3/</link><pubDate>Mon, 22 Dec 2025 10:42:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/avoid-the-trojan-horse-in-your-pom-xml-sonarqube-advanced-security-part-3/</guid><description>&lt;p&gt;Hola Java developers! 👋&lt;/p&gt;
&lt;p&gt;Welcome to &lt;strong&gt;Part 3&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In &lt;a href="https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-1/"&gt;&lt;strong&gt;Part 1&lt;/strong&gt;&lt;/a&gt;
, we turned your IntelliJ into a security guard.&lt;/li&gt;
&lt;li&gt;In &lt;a href="https://foojayio.github.io/website/today/developers-guide-to-sonarqube-part-2/"&gt;&lt;strong&gt;Part 2&lt;/strong&gt;&lt;/a&gt;
, we connected it to the server to enforce the Quality Gate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are feeling good. Our code is high quality. Our logic is sound. But here is the scary reality: In a modern Spring Boot application, &lt;strong&gt;you only wrote about 10% of the code.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The other 90%? It comes from Maven Central. It&amp;rsquo;s Hibernate, Jackson, Apache Commons, Spring Security&amp;hellip; You are building a house, and you made sure &lt;em&gt;your&lt;/em&gt; bricks are solid. But did you check if the foundation you bought from a stranger is made of explosive material? 🧨&lt;/p&gt;</description></item><item><title>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>The End of One-Sized-Fits-All Prompts: Why LLM Models Are No Longer Interchangeable</title><link>https://foojayio.github.io/website/today/the-end-of-one-sized-fits-all-prompts-why-llm-models-are-no-longer-interchangeable/</link><pubDate>Sun, 14 Dec 2025 18:48:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-end-of-one-sized-fits-all-prompts-why-llm-models-are-no-longer-interchangeable/</guid><description>&lt;p&gt;For developers and product builders, one assumption has guided the last few years of LLM application development. To improve your product, just swap in the latest frontier large language model. Flip a single switch and your tool&amp;rsquo;s capabilities level up.&lt;/p&gt;
&lt;p&gt;But that era is over. We&amp;rsquo;re now seeing that new models like Anthropic&amp;rsquo;s Claude Sonnet 4.5 and OpenAI&amp;rsquo;s GPT-5-Codex have diverged in fundamental ways. The choice of which model to use is no longer a simple engineering decision but a critical product decision. Flip that switch today&amp;hellip; and the very texture of your product changes.&lt;/p&gt;</description></item><item><title>How to Release a Java Module to Maven Central with JReleaser and GitHub Actions (2025 Guide)</title><link>https://foojayio.github.io/website/today/how-to-publish-a-java-maven-project-to-maven-central-using-jreleaser-and-github-actions-2025-guide/</link><pubDate>Fri, 12 Dec 2025 07:42:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-publish-a-java-maven-project-to-maven-central-using-jreleaser-and-github-actions-2025-guide/</guid><description>&lt;p&gt;This article is a tutorial that guides you through the process of releasing a Java module with &lt;a href="https://jreleaser.org/" target="_blank" rel="noopener noreferrer"&gt;JReleaser&lt;/a&gt;
 to Maven Central with Github Actions. It is a 2025 update of the &lt;a href="https://foojayio.github.io/website/today/how-to-release-a-java-module-with-jreleaser-to-maven-central-with-github-actions/"&gt;foojay.io/today/how-to-release-a-java-module-with-jreleaser-to-maven-central-with-github-actions&lt;/a&gt;
 article.&lt;/p&gt;
&lt;p&gt;JReleaser is a tool that streamlines the release process for Java projects, allowing developers to quickly and efficiently publish their modules to Maven Central.&lt;/p&gt;
&lt;p&gt;This article will use the &lt;a href="https://github.com/jagodevreede/semver-check/" title="SemVer Check project" target="_blank" rel="noopener noreferrer"&gt;SemVer Check project&lt;/a&gt;
 as an example project that uses Maven as a build tool.&lt;/p&gt;</description></item><item><title>How CodeRabbit's Agentic Code Validation helps with code reviews</title><link>https://foojayio.github.io/website/today/how-coderabbits-agentic-code-validation-helps-with-code-reviews/</link><pubDate>Sun, 07 Dec 2025 11:10:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-coderabbits-agentic-code-validation-helps-with-code-reviews/</guid><description>&lt;p&gt;The &lt;a href="https://survey.stackoverflow.co/2025/" target="_blank" rel="noopener noreferrer"&gt;2025 Stack Overflow survey&lt;/a&gt;
 reveals a paradox: while 84% of developers express confidence in adopting AI tools, nearly half (48%) still distrust the accuracy of their outputs. This tension between optimism and skepticism has reshaped how teams think about quality assurance.
&lt;img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1764049813672/6ad5aea0-625a-4f7f-bf4c-a0b3c8a4903f.png?auto=compress,format&amp;amp;format=webp" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="heading-from-prd-to-pr-in-days-not-weeks"&gt;&lt;strong&gt;From PRD to PR in days (not weeks)&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The bottleneck in software development has fundamentally shifted from writing code to validating it.&lt;/p&gt;
&lt;p&gt;In the early days of AI-assisted development, the workflow was straightforward: AI suggested code, humans read the suggested snippet and then decided whether or not to accept that suggestion. Tab completion wrote boilerplate. Copilot suggested functions. But a senior engineer still manually validated and chose each line of code to ensure its quality, structure, and safety before making a pull request.&lt;/p&gt;</description></item><item><title>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>7 habits of Highly Effective Java Coding</title><link>https://foojayio.github.io/website/today/7-habits-of-highly-effective-java-coding/</link><pubDate>Wed, 15 Oct 2025 11:25:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/7-habits-of-highly-effective-java-coding/</guid><description>&lt;h3 id="h3-0-from-ai-user-to-ai-pro"&gt;&lt;strong&gt;From AI User to AI Pro&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s be real, AI coding tools are everywhere now. 🤖 They&amp;rsquo;re no longer some shiny new toy&amp;mdash;they&amp;rsquo;re a part of our daily grind as developers, just like our morning coffee. ☕&lt;/p&gt;
&lt;p&gt;For us Java devs, whether we&amp;rsquo;re wrestling with a giant legacy app or juggling a bunch of microservices, these tools look like a huge win for getting stuff done faster. 🚀&lt;/p&gt;
&lt;p&gt;But here&amp;rsquo;s the catch: just coding faster isn&amp;rsquo;t the whole story. If you&amp;rsquo;re not careful, it can actually lead to bigger problems down the road. 🤔&lt;/p&gt;</description></item><item><title>JetBrains and Azul Collaborate on Kotlin Performance in Various JVMs</title><link>https://foojayio.github.io/website/today/jetbrains-and-azul-collaborate-on-kotlin-performance-in-various-jvms/</link><pubDate>Wed, 10 Sep 2025 07:11:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/jetbrains-and-azul-collaborate-on-kotlin-performance-in-various-jvms/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;JetBrains and Azul are collaborating on a shared vision of running Kotlin-generated bytecode on a high-performance &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Java platform&lt;/a&gt;
 to find new ways to enhance runtime performance. Benchmarks of Kotlin performance on Azul Platform Prime have yielded some eye-opening results.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;In this article you will learn:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Kotlin is a high-level programming language designed to interoperate fully with the JVM&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Runtime performance and scalability are derived predominantly from the JVM&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;JetBrains and Azul benchmarked Kotlin on both standard OpenJDK and on Azul Platform Prime, a high-performance &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Java platform&lt;/a&gt;
&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Platform Prime reduced latencies by 23.9% and improved throughput by as much as 30.5%&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As modern JVMs combine language features and runtime optimizations, they unlock new levels of performance.&lt;/p&gt;</description></item><item><title>GitHub workflows tips and tricks</title><link>https://foojayio.github.io/website/today/github-workflows-tips-and-tricks/</link><pubDate>Tue, 26 Aug 2025 12:06:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/github-workflows-tips-and-tricks/</guid><description>&lt;p&gt;I&amp;rsquo;ve quite a lengthy experience with GitHub workflows, but not up to the point where I can claim I&amp;rsquo;m an expert. However, I recently developed a new workflow, and it prompted me to write this post. Feel free to add your own.&lt;/p&gt;
&lt;h2 id="h2-0-what-are-github-workflows"&gt;What are GitHub workflows?&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;A &lt;strong&gt;workflow&lt;/strong&gt; is a configurable automated process that will run one or more jobs. Workflows are defined by a YAML file checked in to your repository and will run when triggered by an event in your repository, or they can be triggered manually or at a defined schedule.&lt;/p&gt;</description></item><item><title>Git default options</title><link>https://foojayio.github.io/website/today/git-default-options/</link><pubDate>Tue, 26 Aug 2025 11:59:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/git-default-options/</guid><description>&lt;p&gt;Git has become a fundamental part of our developers&amp;rsquo; daily routine that it&amp;rsquo;s hard to remember our lives without it. And yet, most of us use a limited set of commands &lt;strong&gt;and&lt;/strong&gt; options. Today, I want to focus on two commands most developers probably use &lt;strong&gt;every&lt;/strong&gt; day and look at the defaults behind them.&lt;/p&gt;
&lt;h2 id="h2-0-git-push"&gt;git push&lt;/h2&gt;
&lt;p&gt;After &lt;code&gt;git commit&lt;/code&gt;, &lt;code&gt;git push&lt;/code&gt; is probably the second most used command. I don&amp;rsquo;t think I&amp;rsquo;ll teach you anything with this excerpt from the documentation:&lt;/p&gt;</description></item><item><title>AI Gives Time, Not Confidence: Developer Productivity Toolkit</title><link>https://foojayio.github.io/website/today/ai-gives-time-not-confidence-developer-productivity-toolkit/</link><pubDate>Mon, 25 Aug 2025 07:07:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/ai-gives-time-not-confidence-developer-productivity-toolkit/</guid><description>&lt;p&gt;Let&amp;rsquo;s be real &amp;ndash; keeping up with the pace of software development today is intense. New frameworks pop up and the push for faster, better, &lt;em&gt;and&lt;/em&gt; more secure code never stops.&lt;/p&gt;
&lt;p&gt;This article is all about cutting through the buzz and looking at how AI-powered tools can actually help you, the Java developer, day-to-day. We&amp;rsquo;ll dive into specific ways AI can help you through the whole SDLC:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Understanding Complex Tasks&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accelerating Code Creation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Streamlining Cloud Deployment&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Creating Effective Tests&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Increasing Code Quality and Security&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improving Code Review&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Okay, first up: wrapping your head around the job at hand. You know those moments where you need to implement a feature based on requirements that feel a bit&amp;hellip; fuzzy. Traditionally, this means lots of reading, maybe drawing diagrams, and asking clarifying questions.&lt;/p&gt;</description></item><item><title>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>Java 22 to 24: Level up your Java Code by embracing new features in a safe way</title><link>https://foojayio.github.io/website/today/java-22-to-24-level-up-your-java-code-by-embracing-new-features-in-a-safe-way/</link><pubDate>Wed, 23 Jul 2025 15:29:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-22-to-24-level-up-your-java-code-by-embracing-new-features-in-a-safe-way/</guid><description>&lt;h3 id="h3-0-java-introduces-several-new-language-features-in-the-22-to-24-versions-which-collectively-simplify-code-enhance-documentation-and-provide-powerful-tools-for-bytecode-manipulation-and-advanced-stream-processing-this-article-shows-you-how-to-leverage-these-new-features-with-simple-examples"&gt;Java introduces several new language features in the 22 to 24 versions which collectively simplify code, enhance documentation, and provide powerful tools for bytecode manipulation and advanced stream processing. This article shows you how to leverage these new features with simple examples.&lt;/h3&gt;
&lt;p&gt;Understanding these new features in Java is crucial for writing updated, efficient, and high quality code. To assist developers in adopting these changes correctly, SonarQube has introduced &lt;a href="https://rules.sonarsource.com/java/tag/java22" target="_blank" rel="noopener noreferrer"&gt;several new rules&lt;/a&gt;
 designed to check for the proper usage of unnamed variables and patterns, javadoc and markdown, Class-file new API and Stream gatherers, ensuring your code adheres to best practices and avoids common pitfalls.&lt;/p&gt;</description></item><item><title>Multi-cloud Strategies With MongoDB Atlas</title><link>https://foojayio.github.io/website/today/multi-cloud-strategies-with-mongodb-atlas/</link><pubDate>Thu, 19 Jun 2025 11:49:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/multi-cloud-strategies-with-mongodb-atlas/</guid><description>&lt;p&gt;&lt;strong&gt;In the technological world, the cloud has become more prevalent. It brings many benefits, including flexibility, scalability, faster innovation, and collaboration. Plus, when it comes to data storage and access with databases, it allows data to be located closer to the user for lower latency and thus, faster performance.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most people have heard of the big cloud providers, such as Azure from Microsoft, Google Cloud, and Amazon Web Services (AWS). But when it comes to a business selecting a cloud provider, how do you choose?&lt;/p&gt;</description></item><item><title>Sonar Connect Amsterdam 2025</title><link>https://foojayio.github.io/website/today/sonar-connect-amsterdam-2025/</link><pubDate>Mon, 16 Jun 2025 15:51:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/sonar-connect-amsterdam-2025/</guid><description>&lt;h3 id="h3-0-code-quality-code-security-for-open-source-ai-code"&gt;Code quality + Code security for Open Source &amp;amp; AI code&lt;/h3&gt;
&lt;p&gt;In the age of AI, ensuring code quality and code security is more critical than ever. Are you using the best methodologies to introduce GenAI in your company? do you know the risks? have you heard about AI MCP and the benefits ? what about using AI in the full SDLC? do you know the latest features of SonarQube regarding AI and SCA(dependencies vulnerabilities)?&lt;/p&gt;</description></item><item><title>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>Understanding BSON: A Beginner’s Guide to MongoDB’s Data Format</title><link>https://foojayio.github.io/website/today/understanding-bson-a-beginners-guide-to-mongodbs-data-format/</link><pubDate>Thu, 22 May 2025 08:05:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/understanding-bson-a-beginners-guide-to-mongodbs-data-format/</guid><description>&lt;p&gt;&lt;strong&gt;When working with MongoDB, it&amp;rsquo;s easy to think you&amp;rsquo;re dealing with JSON. After all, the queries, documents, and API responses all look like JSON. But MongoDB is not storing JSON. It&amp;rsquo;s storing BSON&amp;mdash;a binary format designed for efficient storage and fast traversal.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;BSON (Binary JSON) is more than just a binary version of JSON. It introduces additional data types like ObjectId, Decimal128, and Timestamp, allowing MongoDB to handle more complex data structures and ensure data integrity. While we might rarely interact with raw BSON directly, understanding how MongoDB stores and processes BSON documents can help us write more efficient queries, handle data conversions properly, and debug unexpected behavior.&lt;/p&gt;</description></item><item><title>You’re Invited to IntelliJ IDEA Conf 2025!</title><link>https://foojayio.github.io/website/today/youre-invited-to-intellij-idea-conf-2025/</link><pubDate>Mon, 05 May 2025 10:20:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/youre-invited-to-intellij-idea-conf-2025/</guid><description>&lt;h2 id="h2-0-we-are-excited-to-invite-you-to-intellij-idea-conf-2025-a-free-virtual-event"&gt;We are excited to invite you to IntelliJ IDEA Conf 2025, a free virtual event.&lt;/h2&gt;
&lt;p&gt;IntelliJ IDEA Conf is a celebration of the developer community, bringing together professionals who strive for excellence in software development. Join us for this free, live online conference and learn from industry leaders and experts on June 3&amp;ndash;4, 2025.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll be able to learn about a variety of topics, including Core Java, Kotlin, Java and AI, Spring Boot, GraalVM, Gradle, Junit and Kafka. For more details, see the agenda below.
&lt;img src="https://foojayio.github.io/website/today/youre-invited-to-intellij-idea-conf-2025/IntelliJ-IDEA-Conf-2025.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Pull request testing on Kubernetes: vCluster for isolation and costs control</title><link>https://foojayio.github.io/website/today/pull-request-testing-on-kubernetes-vcluster-for-isolation-and-costs-control/</link><pubDate>Sun, 16 Mar 2025 11:47:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/pull-request-testing-on-kubernetes-vcluster-for-isolation-and-costs-control/</guid><description>&lt;p&gt;This week&amp;rsquo;s article is the third and final in my series about running tests on Kubernetes for each pull request. In the &lt;a href="https://blog.frankel.ch/pr-testing-kubernetes/1/" target="_blank" rel="noopener noreferrer"&gt;first post&lt;/a&gt;
, I described the app and how to test locally using Testcontainers and in a GitHub workflow. The &lt;a href="https://blog.frankel.ch/pr-testing-kubernetes/2/" target="_blank" rel="noopener noreferrer"&gt;second post&lt;/a&gt;
 focused on setting up the target environment and running end-to-end tests on Kubernetes.&lt;/p&gt;
&lt;p&gt;I concluded the latter by mentioning a significant quandary. Creating a dedicated cluster for each workflow significantly impacts the time it takes to run. On , it took between 5 and 7 minutes to spin off a new cluster. If you create a GKE instance upstream, you face two issues:&lt;/p&gt;</description></item><item><title>Code Reviews with AI a developer guide</title><link>https://foojayio.github.io/website/today/code-reviews-with-ai-a-developer-guide/</link><pubDate>Fri, 07 Mar 2025 12:10:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/code-reviews-with-ai-a-developer-guide/</guid><description>&lt;p&gt;Code reviews are a cornerstone of software development. They&amp;rsquo;re where we share knowledge, catch bugs early, and ensure our code meets the highest standards.&lt;/p&gt;
&lt;p&gt;But let&amp;rsquo;s be honest&amp;hellip;&lt;/p&gt;
&lt;p&gt;Traditional code reviews can be time-consuming and tedious and sometimes even miss subtle yet critical issues. Enter the age of AI-powered code review, a game-changer that addresses these challenges and elevates code quality to new heights.&lt;/p&gt;
&lt;p&gt;This article dives into the common pitfalls of code reviews and explores how AI tools can revolutionize each phase of the development lifecycle.&lt;/p&gt;</description></item><item><title>Find Undead Code in Your Java Environments</title><link>https://foojayio.github.io/website/today/webinar-find-undead-code-in-your-java-environments/</link><pubDate>Mon, 17 Feb 2025 09:36:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/webinar-find-undead-code-in-your-java-environments/</guid><description>&lt;p&gt;&lt;strong&gt;10-30% of the custom code in applications is undead code and can just be deleted. Eliminating undead code can enhance the overall performance and maintainability of your applications. Time vampire (n) &amp;ndash; a service or application that is said to suck time from engineers by warming up and updating at preternaturally slow speeds.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;re on deadline to finish a project, and you open the application to do your work. The application informs you that it needs to update before it will open. Based on past experience, you have half an hour to burn before this time vampire is ready.&lt;/p&gt;</description></item><item><title>A Glance into JFR Class and Method Tagging</title><link>https://foojayio.github.io/website/today/a-glance-into-jfr-class-and-method-tagging/</link><pubDate>Mon, 17 Feb 2025 09:26:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-glance-into-jfr-class-and-method-tagging/</guid><description>&lt;p&gt;Ever wonder how the JDK Flight Recorder (JFR) keeps track of the classes and methods it has collected for stack traces and more?&lt;/p&gt;
&lt;p&gt;In this short article, I&amp;rsquo;ll explore JFR tagging and how it works in the OpenJDK.&lt;/p&gt;
&lt;h2 id="h2-0-tags"&gt;Tags&lt;/h2&gt;
&lt;p&gt;JFR files consist of self-contained chunks. Every chunk contains:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;metadata&lt;/li&gt;
&lt;li&gt;events&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mail.openjdk.org/pipermail/hotspot-jfr-dev/2020-February/001154.html" target="_blank" rel="noopener noreferrer"&gt;mappings of IDs to actual values&lt;/a&gt;
, the IDs are used in the events in place of stack traces, classes, methods, strings, &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The maximum chunk size is usually 12MB, but you can configure it:&lt;/p&gt;</description></item><item><title>Remote Development Made Simple with DevPod</title><link>https://foojayio.github.io/website/today/remote-development-made-simple-with-devpod/</link><pubDate>Thu, 13 Feb 2025 16:06:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/remote-development-made-simple-with-devpod/</guid><description>&lt;p&gt;&lt;strong&gt;I come relatively late to the subject of Remote Development Environments (also known as Cloud Development Environments).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The main reason is that I haven&amp;rsquo;t worked in a development team for over six years. However, I&amp;rsquo;m now working for Loft Labs, and we have a product: &lt;a href="https://devpod.sh/" target="_blank" rel="noopener noreferrer"&gt;DevPod&lt;/a&gt;
. I wanted to understand our value proposition as was on my way to &lt;a href="https://fosdem.org/" target="_blank" rel="noopener noreferrer"&gt;FOSDEM&lt;/a&gt;
 operating the &lt;a href="https://fosdem.org/2025/news/2024-11-16-stands-announced/" target="_blank" rel="noopener noreferrer"&gt;DevPod booth&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-the-problem"&gt;The problem&lt;/h2&gt;
&lt;p&gt;As a former developer, I vividly remember the pain of setting up each developer&amp;rsquo;s development environment. At the beginning of my career, the architect had to configure my development machine painfully, so it was similar to his setup. Later on, I did the same for my team members repeatedly. The scope of possible discrepancies impacting development is virtually endless: Operating System, of course, version &lt;strong&gt;and&lt;/strong&gt; flavour of the SDKs, &lt;em&gt;e.g.&lt;/em&gt;, Java&amp;rsquo;s Eclipse Temurin vs SapMachine, git hooks, etc. It was sweat, toil, and blood on every project.&lt;/p&gt;</description></item><item><title>Encryption and Data Security Market Analysis: Market Analysis 2025</title><link>https://foojayio.github.io/website/today/encryption-and-data-security-market-analysis-market-analysis-2025/</link><pubDate>Tue, 07 Jan 2025 09:01:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/encryption-and-data-security-market-analysis-market-analysis-2025/</guid><description>&lt;p&gt;The data encryption and security market continues to evolve as organizations face increasing demands for data protection while maintaining operational efficiency.&lt;/p&gt;
&lt;p&gt;The market includes established solutions and innovative approaches to encrypted data processing and security.&lt;/p&gt;
&lt;h2 id="h2-0-market-overview"&gt;Market Overview&lt;/h2&gt;
&lt;p&gt;The global encryption software market is driven by data protection regulations, Cloud adoption, and the need for secure data processing. Organizations seek solutions that balance robust security with practical operational capabilities.&lt;/p&gt;
&lt;h2 id="h2-1-competitive-landscape"&gt;Competitive Landscape&lt;/h2&gt;
&lt;h3 id="h3-2-anjuna"&gt;Anjuna&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://anjuna.io" target="_blank" rel="noopener noreferrer"&gt;Anjuna&lt;/a&gt;
 delivers baseline confidential computing capabilities focused on hardware-based security measures. Their platform implements routine encryption management through standard TEE integrations and common key management approaches. The solution provides fundamental confidential computing features while following accepted enterprise security patterns.&lt;/p&gt;</description></item><item><title>Incident Response Platform Comparison: Market Analysis 2025</title><link>https://foojayio.github.io/website/today/incident-response-platform-comparison-market-analysis-2025/</link><pubDate>Thu, 02 Jan 2025 08:38:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/incident-response-platform-comparison-market-analysis-2025/</guid><description>&lt;p&gt;The incident response platform market continues to expand as organizations prioritize effective incident management in their Cloud-native environments and beyond.&lt;/p&gt;
&lt;p&gt;The market features a range of solutions offering incident management capabilities, with varying approaches to enterprise and team needs.&lt;/p&gt;
&lt;h2 id="h2-0-market-overview"&gt;Market Overview&lt;/h2&gt;
&lt;p&gt;The incident management market is driven by increasing Cloud complexity, rising downtime costs, and growing DevOps adoption.&lt;/p&gt;
&lt;p&gt;Organizations are seeking solutions that can effectively integrate with their existing tools while providing streamlined incident response workflows.&lt;/p&gt;</description></item><item><title>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>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>Unleashing the Power of Git Bisect</title><link>https://foojayio.github.io/website/today/unleashing-the-power-of-git-bisect/</link><pubDate>Tue, 08 Oct 2024 08:15:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/unleashing-the-power-of-git-bisect/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-essence-of-debugging-with-git"&gt;The Essence of Debugging with Git&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#setting-the-stage-for-debugging"&gt;Setting the Stage for Debugging&lt;/a&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="#script-automation-for-precision-and-efficiency"&gt;Script Automation for Precision and Efficiency&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#handling-flaky-tests-with-strategy"&gt;Handling Flaky Tests with Strategy&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#skipping-commits-with-care"&gt;Skipping Commits with Care&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#unraveling-a-regression-mystery"&gt;Unraveling a Regression Mystery&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#final-word"&gt;Final Word&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We don&amp;rsquo;t usually think of Git as a debugging tool. Surprisingly, Git shines not just as a version control system but also as a potent debugging ally when dealing with the tricky matter of regressions.&lt;/p&gt;</description></item><item><title>Easily containerize Java applications with cloud native buildpacks</title><link>https://foojayio.github.io/website/today/easily-containerize-java-applications-with-cloud-native-buildpacks/</link><pubDate>Mon, 07 Oct 2024 09:15:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/easily-containerize-java-applications-with-cloud-native-buildpacks/</guid><description>&lt;p&gt;&lt;strong&gt;The concept of containers has helped to bring Java developers closer than ever to the cloud-native idiom of &amp;lsquo;write once, run anywhere.&amp;rsquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Effectively and efficiently containerizing your Java application can be much more of a challenge than you might originally expect, especially when you might not be a container expert. Having to write and maintain a dockerfile, run a Docker daemon as root, wait for all the builds to complete, and then finally push the image to a remote registry can be complex, time-consuming, and frustrating!&lt;/p&gt;</description></item><item><title>Java Server and Rust Client Built with Generated Networking Code</title><link>https://foojayio.github.io/website/today/fuchs2024-fepcos-j-java-server-and-rust-client/</link><pubDate>Fri, 04 Oct 2024 11:58:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/fuchs2024-fepcos-j-java-server-and-rust-client/</guid><description>&lt;p&gt;&lt;strong&gt;FEPCOS-J allows declaratively implementing a Java server and generating its profile, which, for example, can be used to generate the networking code of a Rust client.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;As I have shown in a &lt;a href="https://foojayio.github.io/website/today/fuchs-2024-fepcos-j-multithreaded-server/"&gt;previous post&lt;/a&gt;
 [1] and a &lt;a href="https://youtu.be/qtPP7kZbriQ" target="_blank" rel="noopener noreferrer"&gt;video&lt;/a&gt;
 [2], the &lt;a href="http://fepcos.info/en/fepcos-j.html" target="_blank" rel="noopener noreferrer"&gt;FEPCOS-J development tool&lt;/a&gt;
 [3] prototypically implements a Java language extension that allows implementing a client-server application in Java without the need for manual network programming.&lt;/p&gt;
&lt;p&gt;In a nutshell, FEPCOS-J allows a Java developer to program a server&amp;rsquo;s system specification declaratively using annotations. The FEPCOS-J Processor &lt;em&gt;&lt;strong&gt;fjp&lt;/strong&gt;&lt;/em&gt; uses this specification to generate the server&amp;rsquo;s system export module and system import module.&lt;/p&gt;</description></item><item><title>Foojay Podcast #58: How Java Developers Can Secure Their Code</title><link>https://foojayio.github.io/website/today/foojay-podcast-58/</link><pubDate>Mon, 30 Sep 2024 07:43:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-58/</guid><description>&lt;p&gt;Three years after Log4Shell caused a significant security issue, we still struggle with insecure dependencies and injection problems.&lt;/p&gt;
&lt;p&gt;In this podcast, we&amp;rsquo;ll discuss how developers can secure their code.&lt;/p&gt;
&lt;p&gt;I talked with three authors who posted a security and code quality post on Foojay.io.&lt;/p&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/sRVcqILDuSo?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>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>Client-server application in Java: Easy with FEPCOS-J – Video.</title><link>https://foojayio.github.io/website/today/fuchs-2024-video-fepcos_j-client-server-application-in-java/</link><pubDate>Tue, 30 Jul 2024 11:51:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/fuchs-2024-video-fepcos_j-client-server-application-in-java/</guid><description>&lt;p&gt;&lt;strong&gt;This is a result of the &lt;a href="http://fepcos.info" target="_blank" rel="noopener noreferrer"&gt;FEPCOS-Project&lt;/a&gt;
, aka @FepcosInfo; #FepcosJ_blog5.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;See how FEPCOS-J relieves developers of the network programming required to implement a client-server application in Java.&lt;br&gt;
&lt;a href="https://youtu.be/qtPP7kZbriQ" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/fuchs-2024-video-fepcos_j-client-server-application-in-java/fuchs2024FepcosJ_video1-512x512-1.png" alt="Link to video: Easy Implementation of a Client-Server Application in Java with FEPCOS-J.
#FepcosJ_video1, #FepcosJ." loading="lazy"&gt;
&lt;/a&gt;
 &lt;strong&gt;External link to&lt;/strong&gt; : G. Fuchs: &lt;em&gt;Video: Easy Implementation of a Client-Server Application in Java with FEPCOS-J&lt;/em&gt;; On: YouTube, FEPCOS-Project (@FepcosInfo); 29-July-2024; &lt;a href="https://youtu.be/qtPP7kZbriQ" target="_blank" rel="noopener noreferrer"&gt;https://youtu.be/qtPP7kZbriQ&lt;/a&gt;
.&lt;br&gt;
&lt;img src="https://foojayio.github.io/website/today/fuchs-2024-video-fepcos_j-client-server-application-in-java/fuchs-2024-implementing-a-service-with-fepcos-j-1024x576.png" alt="FEPCOS-J provides annotations for programming a client-server application in Java." loading="lazy"&gt;
 &lt;strong&gt;Impression of the above-linked video&lt;/strong&gt;: FEPCOS-J provides annotations like @AYSpec, @In, @Out, and @Behavior for programming a client-server application in Java. Watch the video for a complete example application of FEPCOS-J.&lt;/p&gt;</description></item><item><title>beetRoot: Yet Another Web Framework?</title><link>https://foojayio.github.io/website/today/beetroot-yet-another-web-framework/</link><pubDate>Tue, 02 Jul 2024 07:26:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/beetroot-yet-another-web-framework/</guid><description>&lt;p&gt;&lt;em&gt;News: beetRoot 3.2.0 was released on December 8, 2025&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Over the years, I have struggled with various Java web development frameworks and they all have their weaknesses and strengths.&lt;/p&gt;
&lt;p&gt;A few years ago, I evaluated around 10 of these frameworks for a project for a Swedish company. Nothing really impressed me at the time.&lt;/p&gt;
&lt;p&gt;It was only later that &lt;a href="https://spring.io/projects/spring-boot" target="_blank" rel="noopener noreferrer"&gt;SpringBoot&lt;/a&gt;
 came along, which seemed to fulfill all the requirements and there was actually very little to criticize about it. Then came microservices such as &lt;a href="https://quarkus.io/" target="_blank" rel="noopener noreferrer"&gt;Quarkus&lt;/a&gt;
 or &lt;a href="https://micronaut.io/" target="_blank" rel="noopener noreferrer"&gt;Micronaut&lt;/a&gt;
, which are often compiled into native code for small web service applications, but which can then rarely be embedded in a more mature architecture.
&lt;img src="https://raw.githubusercontent.com/autumoswitzerland/autumo-beetroot/master/web/img/autumo-beetroot-login.webp" alt="beetRoot starting on console" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Example Java Application with Embedded Jetty and a htmx Website</title><link>https://foojayio.github.io/website/today/example-java-application-with-embedded-jetty-and-a-htmx-website/</link><pubDate>Fri, 21 Jun 2024 08:59:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/example-java-application-with-embedded-jetty-and-a-htmx-website/</guid><description>&lt;p&gt;&lt;strong&gt;I was experimenting with a Java application that can act as a web server and includes the user interface HTML-files that get modified with htmx, to replace certain parts of the HTML with other ones created in Java.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I found it pretty hard to understand how to configure the embedded &lt;strong&gt;Jetty&lt;/strong&gt; webserver, but as always with Java libraries, it&amp;rsquo;s pretty easy once you understand how to do it 😉 I decided to share my example, so you don&amp;rsquo;t need to go through the same search if you want to use the same approach&amp;hellip;&lt;/p&gt;</description></item><item><title>Who instruments the instrumenters?</title><link>https://foojayio.github.io/website/today/who-instruments-the-instrumenters/</link><pubDate>Thu, 30 May 2024 16:25:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/who-instruments-the-instrumenters/</guid><description>&lt;p&gt;Have you ever wondered how libraries like &lt;a href="https://spring.io/" target="_blank" rel="noopener noreferrer"&gt;Spring&lt;/a&gt;
 and &lt;a href="https://site.mockito.org/" target="_blank" rel="noopener noreferrer"&gt;Mockito&lt;/a&gt;
 modify your code at run-time to implement all their advanced features?&lt;/p&gt;
&lt;p&gt;Wouldn&amp;rsquo;t it be cool to get a peek behind the curtains?&lt;/p&gt;
&lt;p&gt;This is the premise of my &lt;a href="https://github.com/parttimenerd/meta-agent" target="_blank" rel="noopener noreferrer"&gt;meta-agent&lt;/a&gt;
, a Java agent to instrument instrumenters, to get these insights and what this blog post is about.&lt;/p&gt;
&lt;p&gt;This article is a collaboration with &lt;a href="https://www.linkedin.com/in/mika%C3%ABl-francoeur/" target="_blank" rel="noopener noreferrer"&gt;Mikaël Francoeur&lt;/a&gt;
, who had the idea for the meta-agent and wrote most of this post. So it&amp;rsquo;s my first ever post-collaboration. But I start with a short introduction to the agent itself before Mikaël takes over with real-world examples.&lt;/p&gt;</description></item><item><title>Diagnosing user-reported issues using WireQuery</title><link>https://foojayio.github.io/website/today/diagnosing-user-reported-issues-using-wirequery/</link><pubDate>Mon, 13 May 2024 07:11:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/diagnosing-user-reported-issues-using-wirequery/</guid><description>&lt;p&gt;&lt;strong&gt;As a developer, I&amp;rsquo;ve often struggled with diagnosing user-reported issues, which is often caused by a lack of information to reproduce the problem. While a ticket may contain a screenshot of the problem and a description, it often does not portray the complete picture. For example: what did the user do that led up to the issue? What endpoints were called from the frontend, and how did they respond? What did the underlying systems communicate? Etc.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>SQL Query Optimization: How to Identify and Optimize Slow SQL Queries</title><link>https://foojayio.github.io/website/today/sql-query-optimization-how-to-identify-and-optimize-slow-sql-queries/</link><pubDate>Thu, 09 May 2024 21:44:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/sql-query-optimization-how-to-identify-and-optimize-slow-sql-queries/</guid><description>&lt;p&gt;&lt;strong&gt;In this article, we want to share our experience with fellow developers and offer insights using real-life examples on how to identify and optimize slow SQL queries, especially when working with relational database management systems like PostgreSQL, MySQL, MSSQL, Oracle, etc.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you are a developer who doesn&amp;rsquo;t use database ORMs like Hibernate that much, you are no stranger to the concept of SQL query optimization. As developers, we know that a slow SQL query can reduce our application&amp;rsquo;s efficiency and performance, leaving our users with a bad experience.&lt;/p&gt;</description></item><item><title>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>Ensuring the right usage of the Java 21 new features</title><link>https://foojayio.github.io/website/today/ensuring-the-right-usage-of-java-21-new-features/</link><pubDate>Sun, 14 Apr 2024 16:16:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/ensuring-the-right-usage-of-java-21-new-features/</guid><description>&lt;p&gt;&lt;strong&gt;Last September 2023 a new version of Java was released as the latest LTS (Long Time Support). This 21st version &lt;a href="https://www.sonarsource.com/blog/the-new-jdk-lts-is-out-long-live-jdk-21/" title="brought lots of new features" target="_blank" rel="noopener noreferrer"&gt;brought lots of new features&lt;/a&gt;
 that will improve performance and clarity in our code base.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;But taking advantage of these changes and new features, which we are not used to including in our code, can be a tough task. Also, it can lead to improper use or poor uptake, bugs, or basically not taking full advantage of new improvements.&lt;/p&gt;</description></item><item><title>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>12 Text Tools For Developers</title><link>https://foojayio.github.io/website/today/12-text-tools-for-developers/</link><pubDate>Tue, 09 Apr 2024 07:31:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/12-text-tools-for-developers/</guid><description>&lt;p&gt;&lt;strong&gt;As developer, you would think we would spend all our time in an IDE doing development. The reality is a bit different. We may need to analyze logs, test our web services, generate test data, do security tests, analyze data in the database, and so on. Text processing os also part of a developer job. Let&amp;rsquo;s see a few free text tools to simplify your job.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Using online tools makes me wonder if I&amp;rsquo;m leaking company data to the website, so I wrote a desktop freeware &lt;a href="https://www.japplis.com/toolbox/" target="_blank" rel="noopener noreferrer"&gt;Japplis Toolbox&lt;/a&gt;
 containing a collection of text tools.&lt;/p&gt;</description></item><item><title>How to Detect Cache Misses Using Observability</title><link>https://foojayio.github.io/website/today/how-to-detect-cache-misses-using-observability/</link><pubDate>Thu, 04 Apr 2024 07:44:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-detect-cache-misses-using-observability/</guid><description>&lt;p&gt;&lt;strong&gt;All of us know about caching in system design and software architecture, It is applicable everywhere in the computer industry, even in hardware. Caching is a quick and shortcut solution to improve performance, of course, we need to be careful of using the cache, misusing the cache can directly affect the system&amp;rsquo;s consistency.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this article, we will learn about cache miss and, in general, about the caching concept and how to implement it in Spring Boot. Eventually, we will see how Digma can help us detect cache misses locally during development.&lt;/p&gt;</description></item><item><title>Tips for reading code</title><link>https://foojayio.github.io/website/today/tips-for-reading-code/</link><pubDate>Tue, 26 Mar 2024 11:46:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/tips-for-reading-code/</guid><description>&lt;p&gt;&lt;strong&gt;As developers, we read code more than we write it. When adding new features or fixing bugs, we first need to understand existing code, so we can make the right changes in the right place.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When reading code inside the IDE, &lt;a href="https://www.jetbrains.com/idea/" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA&lt;/a&gt;
 helps us to read and understand code by providing helpful features like syntax highlighting and inlay hints. But there are more features to help us understand a piece of code.&lt;/p&gt;</description></item><item><title>Multithreaded server in Java: That's easy with FEPCOS-J.</title><link>https://foojayio.github.io/website/today/fuchs-2024-fepcos-j-multithreaded-server/</link><pubDate>Thu, 21 Mar 2024 08:38:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/fuchs-2024-fepcos-j-multithreaded-server/</guid><description>&lt;p&gt;&lt;strong&gt;FEPCOS-J prototypically implements a Java language extension that allows the realization of a multithreaded TCP/IP server in Java without thread or network programming.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Please help me to make FEPCOS-J a Free/Libre and Open-Source Software (FLOSS).&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;FEPCOS-J &lt;a href="#references"&gt;[1]&lt;/a&gt;
 is a Java development tool that prototypes a Java language extension for declarative programming of networked systems. See my previous posts for details &lt;a href="#references"&gt;[2, 3, 4]&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Firstly, this post briefly defines &lt;a href="#what"&gt;the term &amp;ldquo;multithreaded TCP/IP server&amp;rdquo;&lt;/a&gt;
. It then describes &lt;a href="#how"&gt;how FEPCOS-J supports programming a multithreaded TCP/IP server in Java&lt;/a&gt;
. Further, the post explains &lt;a href="#look"&gt;what implementing the server with FEPCOS-J looks like&lt;/a&gt;
 and provides an &lt;a href="#example"&gt;example&lt;/a&gt;
. Finally, the post draws a &lt;a href="#conclusion"&gt;conclusion&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>You’re Invited to IntelliJ IDEA Conf 2024!</title><link>https://foojayio.github.io/website/today/youre-invited-to-intellij-idea-conf-2024/</link><pubDate>Tue, 27 Feb 2024 08:13:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/youre-invited-to-intellij-idea-conf-2024/</guid><description>&lt;p&gt;We are back and excited to invite you to &lt;a href="http:https://lp.jetbrains.com/intellij-idea-conf-2024/?utm_source=partners&amp;amp;amp;utm_medium=foojay&amp;amp;amp;utm_campaign=intellijideaconf//" title="IntelliJ IDEA Conf 2024"&gt;IntelliJ IDEA Conf 2024&lt;/a&gt;
, a developer-focused, live, online event that is free for all to attend!&lt;/p&gt;
&lt;p&gt;IntelliJ IDEA Conf celebrates the developer community and its desire to learn and improve every day.&lt;/p&gt;
&lt;p&gt;Join us for this free, live online conference and learn from industry leaders and experts on March 6&amp;ndash;7, 2024.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll be able to learn about a variety of topics, like Core Java, Kotlin, Java and AI, Apache Maven 4, Spring Boot, Micronaut, Testcontainers, Secure Coding, and testing frameworks like JUnit, Mockito, and AssertJ.&lt;/p&gt;</description></item><item><title>Java top most detected issues</title><link>https://foojayio.github.io/website/today/top-most-detected-issues-in-java-projects/</link><pubDate>Wed, 14 Feb 2024 09:49:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/top-most-detected-issues-in-java-projects/</guid><description>&lt;p&gt;&lt;strong&gt;Using the telemetry from SonarLint after analyzing thousands of projects, these are the top most raised issues in Java projects.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We know that having clean code in our projects is important, and every developer would agree on that. But, according to what SonarLint telemetry shows, there are still lots of issues that appear in the huge list of analyzed projects.&lt;/p&gt;
&lt;p&gt;From the SonarLint telemetry for the last 2 years, with more than 2.5 million issues, I have taken the top most common issues happening in Java projects, from the +600 rules covering the language, considering quality and security to see how we can avoid them and align our code a bit more towards having a consistent, intentional, adaptable, and responsible code.&lt;/p&gt;</description></item><item><title>Java Flight Recording and Analysis with Azul Mission Control</title><link>https://foojayio.github.io/website/today/java-flight-recording-and-analysis-with-azul-mission-control/</link><pubDate>Thu, 25 Jan 2024 07:59:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-flight-recording-and-analysis-with-azul-mission-control/</guid><description>&lt;p&gt;&lt;strong&gt;Java Flight Recording (JFR) is a Java Virtual Machine (JVM) profiling and diagnostics tool. It enables you to collect and analyze data regarding the performance and behavior of a Java application. As JFR is included in the JVM, there is no need for additional tools or installations to make recordings of your applications.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;By utilizing JFR, you gain valuable insights into the runtime behavior of your Java applications. It helps you to optimize performance, identify and troubleshoot issues, and ensure better overall reliability. JFR is designed with very low overhead, allowing its use in production environments with minimal impact on the performance of your application.&lt;/p&gt;</description></item><item><title>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>Using AI to Create JFR Event Descriptions</title><link>https://foojayio.github.io/website/today/using-ai-to-create-jfr-event-descriptions/</link><pubDate>Fri, 29 Dec 2023 05:42:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-ai-to-create-jfr-event-descriptions/</guid><description>&lt;p&gt;JFR (JDK Flight Recorder) is the default profiler for OpenJDK (see &lt;a href="https://mostlynerdless.de/blog/category/java-servicability/profiling/" target="_blank" rel="noopener noreferrer"&gt;my other blog posts&lt;/a&gt;
 for more information).&lt;/p&gt;
&lt;p&gt;What makes JFR stand out from the other profilers is the ability to log many, many different events that contain lots of information, like information on class loading, JIT compilation, and garbage collection.&lt;/p&gt;
&lt;p&gt;You can see a list of all available events on my &lt;a href="https://sap.github.io/SapMachine/jfrevents/" target="_blank" rel="noopener noreferrer"&gt;JFR Event Collection&lt;/a&gt;
 website:
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/12/image-10-2000x1604.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;This website gives an overview of the events, with descriptions from the OpenJDK, their properties, examples, configurations, and the JDK versions in which every event is present. However, few descriptions are available, and the available texts are mostly single sentences.&lt;/p&gt;</description></item><item><title>Profiling Maven Projects with my IntelliJ Profiler Plugin</title><link>https://foojayio.github.io/website/today/profiling-maven-projects-with-my-intellij-profiler-plugin/</link><pubDate>Thu, 14 Dec 2023 10:41:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/profiling-maven-projects-with-my-intellij-profiler-plugin/</guid><description>&lt;h3 id="h3-0-or-i-just-released-version-0-0-11-with-a-cool-new-feature-that-i-can-t-wait-to-tell-you-about"&gt;Or: I just released version 0.0.11 with a cool new feature that I can&amp;rsquo;t wait to tell you about&amp;hellip;&lt;/h3&gt;
&lt;p&gt;According to the recent &lt;a href="https://www.jetbrains.com/lp/devecosystem-2023/java/" target="_blank" rel="noopener noreferrer"&gt;JetBrains survey&lt;/a&gt;
, most people use Maven as their build system and build Spring Boot applications with Java. Yet my profiling plugin for IntelliJ only supports profiling pure Java run configurations. Configurations where the JVM gets passed the main class to run. This is great for tiny examples where you directly right-click on the &lt;code&gt;main&lt;/code&gt; method and profile the whole application using the context menu:
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/12/image-2.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>FEPCOS-J: Native executables of Java-coded networked systems</title><link>https://foojayio.github.io/website/today/fuchs-2023-fepcos-j-03-native-executables/</link><pubDate>Wed, 13 Dec 2023 12:13:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/fuchs-2023-fepcos-j-03-native-executables/</guid><description>&lt;p&gt;&lt;strong&gt;FEPCOS-J prototypically enables Java developers to realize networked systems without low-level network programming and to automatically build native executables by means of GraalVM. &lt;strong&gt;This post introduces the concept and gives you an example by rebuilding the source code explained in my previous posts.&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Please help me to make FEPCOS-J a Free/Libre and Open-Source Software (FLOSS).&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;FEPCOS-J&lt;/strong&gt; &lt;a href="#references"&gt;[1]&lt;/a&gt;
 enables a Java developer to declaratively program networked systems and compose them like building blocks &lt;a href="#references"&gt;[2]&lt;/a&gt;
. For this purpose, FEPCOS-J provides Java modules and generates code to free a Java developer from network programming &lt;a href="#references"&gt;[3]&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Couch to fully-observed code with Spring Boot 3.2, Micrometer Tracing, and Digma</title><link>https://foojayio.github.io/website/today/couch-to-fully-observed-code-with-spring-boot-3-2-micrometer-tracing-and-digma/</link><pubDate>Wed, 06 Dec 2023 10:42:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/couch-to-fully-observed-code-with-spring-boot-3-2-micrometer-tracing-and-digma/</guid><description>&lt;p&gt;&lt;strong&gt;Collecting important data about your code in dev and test has become trivial, it&amp;rsquo;s now also getting easier to put that data to use.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;{#more-103351}&lt;/p&gt;
&lt;h2 id="h2-0-tracing-debugging"&gt;Tracing &amp;gt; Debugging&lt;/h2&gt;
&lt;p&gt;There are many benefits to being able to follow what your Spring Boot code is doing using tracing. When used effectively, traces can reveal a lot about the inner workings of complex systems, or provide early feedback when you make mistakes in introducing new code changes.&lt;/p&gt;</description></item><item><title>Effective cloud native development with Open Liberty in VS Code</title><link>https://foojayio.github.io/website/today/effective-cloud-native-development-open-liberty-vs-code/</link><pubDate>Tue, 05 Dec 2023 10:25:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/effective-cloud-native-development-open-liberty-vs-code/</guid><description>&lt;p&gt;&lt;strong&gt;Open Liberty is a lightweight, open cloud-native runtime, great for building fast and efficient cloud-native Java applications. If you&amp;rsquo;re unfamiliar with Open Liberty, and want to learn more, check out the &amp;ldquo;&lt;a href="https://developer.ibm.com/articles/why-cloud-native-java-developers-love-liberty/" target="_blank" rel="noopener noreferrer"&gt;Why cloud-native Java developers love Liberty&lt;/a&gt;
&amp;rdquo; article.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;However, choosing an effective cloud-native Java runtime for your application doesn&amp;rsquo;t always directly equate to efficient creation of cloud-native applications. As developers, it&amp;rsquo;s important we use these runtimes and supporting tools effectively to enable an efficient development cycle and ensure productivity within our development teams.&lt;/p&gt;</description></item><item><title>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>Webinar: Harnessing the Power of AI Assistant in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/webinar-harnessing-the-power-of-ai-assistant-in-intellij-idea/</link><pubDate>Tue, 28 Nov 2023 16:38:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/webinar-harnessing-the-power-of-ai-assistant-in-intellij-idea/</guid><description>&lt;p&gt;AI Assistant provides AI-powered features for software development based on the JetBrains AI service. The service transparently connects you, the IDE user, to different large language models.&lt;/p&gt;
&lt;p&gt;In this session, Anton Arhipov will demonstrate the capabilities of AI Assistant in IntelliJ IDEA. You will learn how the tool helps you explore and improve existing code as well as write new code in different scenarios.
&lt;a href="https://info.jetbrains.com/idea-webinar-december07-2023.html" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/webinar-harnessing-the-power-of-ai-assistant-in-intellij-idea/IntelliJ_IDEA_AI_Assistant_Webinar-1024x576.jpeg" alt="Banner for IntelliJ IDEA Livestream with title &amp;ldquo;Harnassing the Power of AI Assistant in IntelliJ IDEA&amp;rdquo; featuring Anton Arhipov." loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>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>Beyond Pass/Fail- a Modern Approach to Java Integration Testing</title><link>https://foojayio.github.io/website/today/beyond-pass-fail-a-modern-approach-to-java-integration-testing/</link><pubDate>Wed, 18 Oct 2023 15:15:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/beyond-pass-fail-a-modern-approach-to-java-integration-testing/</guid><description>&lt;h2 id="h2-0-tests-can-run-limited-sets-of-assertions-on-your-code-or-reveal-important-insights-about-how-your-application-really-works"&gt;Tests can run limited sets of assertions on your code, or reveal important insights about how your application really works!&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/beyond-pass-fail-a-modern-approach-to-java-integration-testing/1_JAiQsj-ez608WsovCheXVQ-1024x512.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Automated testing will assuredly go down in the annals of software development history as one of these industry-changing trends. Although few actually adhere to full-metal, OCD mode, TDD discipline (I am in awe of those that do, just to be clear), most developers make sure to prioritize and include testing in their dev cycle.&lt;/p&gt;</description></item><item><title>FEPCOS-J (2) – Declaratively compose networked systems in Java</title><link>https://foojayio.github.io/website/today/fuchs-2023-fepcos-j-02/</link><pubDate>Fri, 13 Oct 2023 06:07:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/fuchs-2023-fepcos-j-02/</guid><description>&lt;p&gt;&lt;strong&gt;FEPCOS-J implements a model-based Java language extension that provides the annotation &lt;em&gt;@Part&lt;/em&gt;, which enables a developer to declaratively compose networked systems. This post introduces the concept and gives you an example of how to use it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Please help me to make FEPCOS-J a Free/Libre and Open-Source Software (FLOSS).&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;FEPCOS-J arises in the frame of the FEPCOS-Project &lt;a href="#references"&gt;[1]&lt;/a&gt;
, which aims to simplify the programming of composed networked systems.&lt;/p&gt;
&lt;p&gt;FEPCOS-J implements a domain-specific Java language extension whose semantic domain is based on the FEPCOS-Model &lt;a href="#references"&gt;[2]&lt;/a&gt;
, which extends the composite design pattern &lt;a href="#references"&gt;[3]&lt;/a&gt;
 to include networking aspects.&lt;/p&gt;</description></item><item><title>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>5 Ways to Identify and Manage Flaky Tests</title><link>https://foojayio.github.io/website/today/five-ways-to-use-gradle-enterprise-to-identify-and-manage-flaky-tests/</link><pubDate>Tue, 12 Sep 2023 03:57:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/five-ways-to-use-gradle-enterprise-to-identify-and-manage-flaky-tests/</guid><description>&lt;p&gt;&lt;strong&gt;Dealing with flaky tests is a significant challenge in software development. These unpredictable and inconsistent tests can pass or fail without any changes in code, casting doubt on the reliability of your toolchain and ultimately on the application itself. The presence of flaky tests can significantly impact developer confidence and productivity. To better understand why you need to address these flaky tests, read &lt;a href="https://foojayio.github.io/website/today/seven-reasons-you-should-not-ignore-flaky-tests/"&gt;Seven Reasons You Should Not Ignore Flaky Tests&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>The DiscoAPI Helps You To Find Any OpenJDK Distribution</title><link>https://foojayio.github.io/website/today/disco-api-helping-you-to-find-any-openjdk-distribution/</link><pubDate>Tue, 12 Sep 2023 03:42:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/disco-api-helping-you-to-find-any-openjdk-distribution/</guid><description>&lt;p&gt;&lt;strong&gt;Did you know Foojay is not only a human-readable OpenJDK knowledge base but also provides the Disco API that lets you search all OpenJDK distributions? And even if you didn&amp;rsquo;t know, you probably already are using it, as it&amp;rsquo;s integrated into &lt;a href="https://sdkman.io/" target="_blank" rel="noopener noreferrer"&gt;SDKMAN!&lt;/a&gt;
, &lt;a href="https://jreleaser.org/" target="_blank" rel="noopener noreferrer"&gt;JReleaser&lt;/a&gt;
, &lt;a href="https://www.jbang.dev/" target="_blank" rel="noopener noreferrer"&gt;JBang!&lt;/a&gt;
, &lt;a href="https://docs.gradle.org/current/userguide/toolchains.html" target="_blank" rel="noopener noreferrer"&gt;Gradle toolchain&lt;/a&gt;
, &lt;a href="https://paketo.io/docs/howto/java/" target="_blank" rel="noopener noreferrer"&gt;Paketo buildpacks&lt;/a&gt;
,and more.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Disco API (i.e., the short name for the Universal OpenJDK Discovery API) is a database and API with all the available OpenJDK versions from all distributors, like Corretto, Liberica, Oracle, Temurin, Zulu, and many others. In total, there are now 89352 different packages at the end of August 2023.&lt;/p&gt;</description></item><item><title>Ops friendly Apache APISIX</title><link>https://foojayio.github.io/website/today/ops-friendly-apache-apisix/</link><pubDate>Wed, 06 Sep 2023 06:27:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/ops-friendly-apache-apisix/</guid><description>&lt;p&gt;&lt;strong&gt;Though I always worked on the Dev side of IT, I was also interested in the Ops side. I even had a short experience being a WebSphere admin: I used it several times, helping Ops deal with the Admin console while being a developer.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Providing a single package that Ops can configure and deploy in different environments is very important. As a JVM developer, I&amp;rsquo;ve been happy using Spring Boot and its wealth of configuration options: command-line parameters, JVM parameters, files, profiles, environment variables, etc.&lt;/p&gt;</description></item><item><title>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>Building High-Performance Java Microservices with EDA</title><link>https://foojayio.github.io/website/today/6-considerations-when-building-high-performance-java-microservices-with-eda/</link><pubDate>Wed, 16 Aug 2023 21:34:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/6-considerations-when-building-high-performance-java-microservices-with-eda/</guid><description>&lt;p&gt;&lt;strong&gt;Event-Driven Architecture (EDA) is a design principle focused on the creation, detection, and reaction to events.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Renowned for its resilience and low latency, EDA is a reliable choice for developing robust, high-performing microservices.&lt;/p&gt;
&lt;p&gt;Moreover, this method can be helpful in improving productivity and making the process of cloud migration smoother.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/6-considerations-when-building-high-performance-java-microservices-with-eda/Screenshot-2023-08-10-at-5.13.36-PM-1024x607.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In this article we will outline 6 key considerations and tactics for developing such services.&lt;/p&gt;
&lt;h3 id="h3-0-1-crafting-event-based-microservices"&gt;1) Crafting Event-Based Microservices&lt;/h3&gt;
&lt;p&gt;Within EDA, microservices interact with each other through events. An event is simply an immutable indication that something has happened. Microservices register their interest in a subset of events and perform their processing by reacting to these events when they occur. On completion of handling of an event, microservices will usually post one or more events reflecting the result of this processing, which will trigger further downstream microservices.&lt;/p&gt;</description></item><item><title>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>Java on Visual Studio Code – July 2023</title><link>https://foojayio.github.io/website/today/java-on-visual-studio-code-july-2023/</link><pubDate>Mon, 31 Jul 2023 07:11:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-visual-studio-code-july-2023/</guid><description>&lt;p&gt;Hi everyone, welcome to our July update for Visual Studio Code for Java!&lt;/p&gt;
&lt;p&gt;In this article, we are going to provide you an exciting update about our improved decompiler functionality.&lt;/p&gt;
&lt;p&gt;Additionally, we are going to do a deep-dive into our code completion.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s get started!&lt;/p&gt;
&lt;h3 id="h3-0-decompiler-support-upgrade"&gt;Decompiler Support Upgrade&lt;/h3&gt;
&lt;p&gt;Java decompiler is essential for understanding third-party libraries, debugging, and learning from well-written code. It helps the developer to reverse engineer compiled Java bytecode back into human-readable Java source code, enhancing the productivity and code comprehension.&lt;/p&gt;</description></item><item><title>Getting Started With Apache Camel On Jakarta EE 10</title><link>https://foojayio.github.io/website/today/getting-started-with-apache-camel-on-jakarta-ee-10/</link><pubDate>Mon, 24 Jul 2023 10:20:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-apache-camel-on-jakarta-ee-10/</guid><description>&lt;p&gt;&lt;strong&gt;Apache Camel is an open source enterprise integration framework that helps you connect different systems and applications together with as little effort as possible. It provides a simple and powerful way to define and implement message-based routing and mediation rules. It is an implementation of the patterns described in the book Enterprise Integration Patterns by Gregor Hohpe and Bobby Woolf.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In simple terms, Apache Camel acts as a &amp;ldquo;translator&amp;rdquo; or &amp;ldquo;bridge&amp;rdquo; between different systems. It allows you to easily route, transform, and process messages as they move from one system to another. It supports a wide range of communication protocols and data formats (JSON, XML, YAML, etc.), making it easier to integrate different technologies and applications.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Building for Failure: Best Practices for Easy Production Debugging</title><link>https://foojayio.github.io/website/today/building-for-failure-best-practices-for-easy-production-debugging/</link><pubDate>Fri, 21 Jul 2023 15:29:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-for-failure-best-practices-for-easy-production-debugging/</guid><description>&lt;p&gt;&lt;strong&gt;Before going into the content of this post, check out&lt;/strong&gt; &lt;a href="https://www.amazon.com/Java-21-Explore-cutting-edge-features-ebook/dp/B0C9WW8PFL/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;my new book&lt;/strong&gt;&lt;/a&gt;
 &lt;strong&gt;which launched last week!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Quite a few years ago I was maintaining a database-driven system and ran into a weird production bug.&lt;/p&gt;
&lt;p&gt;The column I was reading from had a null value, but this wasn&amp;rsquo;t allowed in the code and there was no place where that value could have been null.&lt;/p&gt;
&lt;p&gt;The database was corrupt in a bad way and we didn&amp;rsquo;t have anything to go on.&lt;/p&gt;</description></item><item><title>Build Rot: The Hidden Technical Debt in Maven and Gradle Builds</title><link>https://foojayio.github.io/website/today/build-rot-tech-debt/</link><pubDate>Fri, 21 Jul 2023 08:14:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/build-rot-tech-debt/</guid><description>&lt;p&gt;&lt;strong&gt;Discover &amp;lsquo;Build Rot&amp;rsquo;, the hidden technical debt in Maven and Gradle builds. This article explores the impact of Build Rot on build speed and test times, offering strategies for enhanced observability and Developer Productivity Engineering to optimize build processes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Technical debt is a constant companion in the complex world of software development. It&amp;rsquo;s the price we pay for quick fixes and postponed refactoring&amp;mdash;the &amp;ldquo;we&amp;rsquo;ll do it right next time&amp;rdquo; mentality.&lt;/p&gt;</description></item><item><title>How to Create an Open Source Pull Request (PR)</title><link>https://foojayio.github.io/website/today/creating-an-open-source-pull-request/</link><pubDate>Wed, 19 Jul 2023 11:26:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-an-open-source-pull-request/</guid><description>&lt;p&gt;&lt;strong&gt;In this tutorial, we are going to take a look at contributing to Open Source Software, specifically how to do a pull request (PR).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We will look at forking and cloning the project, making the changes, committing and pushing these changes, creating the pull request, the review and hopefully merge of your PR.&lt;/p&gt;
&lt;p&gt;The same process may apply when making contributions to a project at work that you don&amp;rsquo;t own. In this example, the project is on GitHub. Other Git code repositories may use a similar process.&lt;/p&gt;</description></item><item><title>Effective Coding with Java Observability</title><link>https://foojayio.github.io/website/today/effective-coding-with-java-observability/</link><pubDate>Tue, 18 Jul 2023 07:02:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/effective-coding-with-java-observability/</guid><description>&lt;h2 id="h2-0-things-you-can-do-right-now-to-learn-new-and-valuable-things-that-can-improve-your-code"&gt;Things you can do right now to learn new and valuable things that can improve your code.&lt;/h2&gt;
&lt;p&gt;There are many common mistakes I&amp;rsquo;ve seen repeated over the years while trying to make observability initiatives successful. However, the most critical and fundamental of these organizational stumbles is the irresistible infatuation with technology and toolings themselves.&lt;/p&gt;
&lt;p&gt;It should not come as a surprise. Many &amp;rsquo;let&amp;rsquo;s add observability platform X&amp;rsquo; projects start off with plenty of fanfare but also a very hazy sense of direction and extremely muddled criteria for success. The vision of what effective observability can do to&lt;strong&gt;actually help&lt;/strong&gt; developers work better is suspiciously missing from the preaching of many of its commercial vendors and oracles. Ask yourself, how often do you find yourself taking your eyes off the code in the IDE to find out what you can learn from its execution data?&lt;/p&gt;</description></item><item><title>How to Share Your Work With a Video or Podcast</title><link>https://foojayio.github.io/website/today/how-to-share-your-work-with-a-video-or-podcast/</link><pubDate>Fri, 14 Jul 2023 09:22:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-share-your-work-with-a-video-or-podcast/</guid><description>&lt;p&gt;Season 2 of the &lt;a href="https://foojayio.github.io/website/today/category/podcast/"&gt;Foojay Podcast&lt;/a&gt;
 has come to an end. Since September of &amp;lsquo;22, 22 episodes where published here on Foojay.&lt;/p&gt;
&lt;p&gt;In this article, we want to share some of the experiences of creating such podcasts, but also more generally, how you can share your work in a video with a small (or bigger) budget&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-audio"&gt;Audio&lt;/h2&gt;
&lt;p&gt;There is one fundamental rule for the audio: &amp;ldquo;Garbage in = Garbage out.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Yes, you can apply many filters and effects in a later phase, but you can&amp;rsquo;t make a bad recording sound good. &lt;strong&gt;You need a clear and good recording as a starting point&lt;/strong&gt;!&lt;/p&gt;</description></item><item><title>Dissection of Joeffice: Open Source Office Suite in Java</title><link>https://foojayio.github.io/website/today/dissection-of-joeffice-open-source-office-suite-in-java/</link><pubDate>Tue, 11 Jul 2023 09:33:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/dissection-of-joeffice-open-source-office-suite-in-java/</guid><description>&lt;p&gt;10 years ago, I challenged myself to write an office suite in Java in &lt;a href="https://www.youtube.com/watch?v=6oJyaUzkQVM&amp;amp;list=PLsezR6w8oWsJAKvFuv3JI34PLFFMIxLVA" target="_blank" rel="noopener noreferrer"&gt;30 days&lt;/a&gt;
. This is how the first version of &lt;a href="https://www.joeffice.com/" target="_blank" rel="noopener noreferrer"&gt;Joeffice&lt;/a&gt;
 was born. This created quite some buzz, including articles on &lt;a href="https://tech.slashdot.org/story/13/05/26/0418229/java-developer-says-he-built-launched-basic-open-source-office-suite-in-30-days" target="_blank" rel="noopener noreferrer"&gt;Slashdot&lt;/a&gt;
, &lt;a href="https://arstechnica.com/information-technology/2013/06/joeffice-an-open-source-office-suite-one-developer-built-in-30-days/" target="_blank" rel="noopener noreferrer"&gt;Ars Technica&lt;/a&gt;
 and &lt;a href="https://www.pcworld.com/article/452028/java-developer-says-he-built-launched-basic-open-source-office-suite-in-30-days.html" target="_blank" rel="noopener noreferrer"&gt;PC World&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Last month I released a second update. Let&amp;rsquo;s explore how I did this. By levering Java libraries, I was able to create such a complex piece of software very quickly.&lt;/p&gt;</description></item><item><title>Java on Visual Studio Code – June 2023</title><link>https://foojayio.github.io/website/today/java-on-visual-studio-code-june-2023/</link><pubDate>Mon, 10 Jul 2023 12:44:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-visual-studio-code-june-2023/</guid><description>&lt;p&gt;Hi everyone, welcome to the our June update for Visual Studio Code for Java!&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;re going to provide you an update about our code completion performance improvement, user experience enhancements in both unit testing and project creation, so let&amp;rsquo;s get started!&lt;/p&gt;
&lt;h4 id="code-completion-performance-improvement"&gt;Code Completion Performance Improvement&lt;/h4&gt;
&lt;p&gt;Faster code completion is a crucial aspect of any developer tool that can greatly enhance coding productivity. In the past, we have heard from our users they felt Java code completion was slow sometimes which has impacted their work. As a result, we have been researching into how to make it faster and as a result, we have actually made significant progress.&lt;/p&gt;</description></item><item><title>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>Upgrade to Jakarta EE 10 and GlassFish 7: Easier Than You Think!</title><link>https://foojayio.github.io/website/today/how-to-upgrade-to-jakarta-ee-10-and-glassfish-7-its-much-easier-than-you-think/</link><pubDate>Tue, 27 Jun 2023 07:29:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-upgrade-to-jakarta-ee-10-and-glassfish-7-its-much-easier-than-you-think/</guid><description>&lt;p&gt;Upgrading to Jakarta EE 10 from an older version of Jakarta EE or Java EE can be a bit tricky and may require some extra attention to detail. But don&amp;rsquo;t worry, we&amp;rsquo;ve got you covered!&lt;/p&gt;
&lt;p&gt;In this series of articles, we&amp;rsquo;ll explain everything you need to know before upgrading to Jakarta EE 10 and guide you to complete the upgrade successfully and in almost no time.&lt;/p&gt;
&lt;h2 id="h2-0-types-of-challenges"&gt;Types of challenges&lt;/h2&gt;
&lt;p&gt;The challenges with upgrading to Jakarta EE 10 or to Eclipse GlassFish 7 fall into these 3 main categories:&lt;/p&gt;</description></item><item><title>Foojay Podcast #26: The Future of Source Control and CI/CD</title><link>https://foojayio.github.io/website/today/foojay-podcast-26/</link><pubDate>Mon, 26 Jun 2023 08:35:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-26/</guid><description>&lt;p&gt;As developers, we like to automate the boring parts of our job. This automation includes the source control system, build pipelines, and code analysis tools.&lt;/p&gt;
&lt;p&gt;In recent decades, we have seen evolutions from CVS to Subversion to Git. Is this the endpoint? Did we find the holy grail in version control? Or what evolutions are waiting for us?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s find out together with these fantastic guests&amp;hellip;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This is the final episode of season 2 of the Foojay Podcast. See you in September for the start of our new season with more JUGs, the launch of Java 21, and much more!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Building Custom Solutions vs. Buy-and-Build Software</title><link>https://foojayio.github.io/website/today/building-custom-solutions-vs-buy-and-build-software/</link><pubDate>Wed, 21 Jun 2023 14:41:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-custom-solutions-vs-buy-and-build-software/</guid><description>&lt;h3 id="h3-0-the-challenges-of-building-a-fix-engine"&gt;The Challenges of Building a FIX Engine&lt;/h3&gt;
&lt;p&gt;The first day I was introduced to &lt;a href="https://en.wikipedia.org/wiki/Financial_Information_eXchange" target="_blank" rel="noopener noreferrer"&gt;Financial Information eXchange (FIX)&lt;/a&gt;
 was when I worked at an investment bank in London as a developer.&lt;/p&gt;
&lt;p&gt;I was told to write a feed handler to retrieve market data.&lt;/p&gt;
&lt;p&gt;Bear in mind that at this time, I knew nothing about FIX, apart from Googling it for about 10 mins on the internet.&lt;/p&gt;
&lt;p&gt;With a touch of overconfidence and slight arrogance, I set to work coding a direct socket connection to the remote FIX endpoint, &amp;ldquo;how hard could it be?&amp;rdquo;&lt;/p&gt;</description></item><item><title>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>Java String Templates Today</title><link>https://foojayio.github.io/website/today/java-string-templates-today/</link><pubDate>Fri, 02 Jun 2023 16:28:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-string-templates-today/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/revolutionize-json-parsing-in-java-with-manifold/"&gt;our last article&lt;/a&gt;
, we introduced you to the &lt;a href="http://manifold.systems/" target="_blank" rel="noopener noreferrer"&gt;Manifold&lt;/a&gt;
 project and how it offers a revolutionary set of language extensions for Java, including the ability to parse and process JSON files seamlessly in Java.&lt;/p&gt;
&lt;p&gt;Today, we will take a look at another exciting feature of the Manifold project: &lt;strong&gt;string templates&lt;/strong&gt;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ite6a5y50yQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;br /&gt;
&lt;p&gt;But before we get to that, some of the feedback I got from the previous post was that I was unclear about Manifold. Manifold is a combination of an IDE plugin and plugins to Maven or Gradle.&lt;/p&gt;</description></item><item><title>Revolutionize JSON Parsing in Java with Manifold</title><link>https://foojayio.github.io/website/today/revolutionize-json-parsing-in-java-with-manifold/</link><pubDate>Fri, 26 May 2023 17:39:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/revolutionize-json-parsing-in-java-with-manifold/</guid><description>&lt;p&gt;Java developers have often envied JavaScript for its ease of parsing JSON.&lt;/p&gt;
&lt;p&gt;Although Java offers more robustness, it tends to involve more work and boilerplate code.&lt;/p&gt;
&lt;p&gt;Thanks to the Manifold project, Java now has the potential to outshine JavaScript in parsing and processing JSON files.&lt;/p&gt;
&lt;p&gt;Manifold is a revolutionary set of language extensions for Java that completely changes the way we handle JSON (and much more&amp;hellip;).&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/AoBnGZ7q6rk?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;br /&gt;
&lt;h2 id="h2-0-getting-started-with-manifold"&gt;Getting Started with Manifold&lt;/h2&gt;
&lt;p&gt;The code for this tutorial can be found on my &lt;a href="https://github.com/shai-almog/java-book/" target="_blank" rel="noopener noreferrer"&gt;GitHub page&lt;/a&gt;
. Manifold is relatively young but already vast in its capabilities. You can learn more about the project on their website and Slack channel.&lt;/p&gt;</description></item><item><title>Announcing the Digma Beta: First Runtime Linter for Java Code</title><link>https://foojayio.github.io/website/today/announcing-the-digma-beta-first-runtime-linter-for-java-code/</link><pubDate>Mon, 22 May 2023 13:52:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-the-digma-beta-first-runtime-linter-for-java-code/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/announcing-the-digma-beta-first-runtime-linter-for-java-code/doppleware_a_hipster_developer_following_a_yarn_thread_connecte_0aadda36-bf51-4283-90c5-54ff5f976af7-1-1024x512.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-call-for-developers"&gt;Call for Developers&lt;/h2&gt;
&lt;p&gt;We are looking for senior Java developers who are interested in exploring how to use observability to improve their code to join the beta program for Digma: a free runtime linter plugin for Jetbrains/Java.&lt;br&gt;
&lt;a href="https://digma.ai" target="_blank" rel="noopener noreferrer"&gt;Digma&lt;/a&gt;
 analyzes your code in runtime, improving coding practices and confidence when working on complex Java code.&lt;/p&gt;
&lt;p&gt;The plugin runs locally and doesn&amp;rsquo;t require sharing data.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/QP8RqYLbIbs?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;We have 20 slots currently open for the beta.&lt;/p&gt;</description></item><item><title>Write Once, Run Embedded in any IDE</title><link>https://foojayio.github.io/website/today/write-once-run-embedded-in-any-ide/</link><pubDate>Tue, 16 May 2023 13:34:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/write-once-run-embedded-in-any-ide/</guid><description>&lt;p&gt;&lt;a href="https://foojayio.github.io/website/time-zones.png"&gt;&lt;img src="https://foojayio.github.io/website/today/write-once-run-embedded-in-any-ide/time-zones-1024x192.png" alt="Same Time Zones application running in IntelliJ IDEA, Eclipse and NetBeans" title="Same application running in IntelliJ IDEA, Eclipse and NetBeans" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Having written many Java GUI applications, I thought it would be cool to run them embedded in IntelliJ IDEA, Eclipse and NetBeans. I didn&amp;rsquo;t want to write three plugins per application so I came up with this solution.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-the-embedded-panel-criteria"&gt;The embedded panel criteria&lt;/h2&gt;
&lt;p&gt;To convert my Java Swing applications to run embedded in an IDE, I had to put the user interface in a panel with minimal implementation changes. I came up with these &lt;em&gt;should ideally&lt;/em&gt; criteria:&lt;/p&gt;</description></item><item><title>FEPCOS-J (1) – Description, Impression of Usage, Current State</title><link>https://foojayio.github.io/website/today/fuchs-2023-fepcos-j-01/</link><pubDate>Wed, 26 Apr 2023 06:09:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/fuchs-2023-fepcos-j-01/</guid><description>&lt;p&gt;&lt;strong&gt;Abstract: FEPCOS-J has arisen in the context of my work in the field of robot sensor networks. It implements a Java-language extension that frees a Java developer from network programming and supports cross-system concurrency. This article gives you an impression of using FEPCOS-J based on a simple example.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So far, FEPCOS-J is a prototype with 1629 lines of Java-code. I develop and test it on my own within a toy robot-based &lt;em&gt;amd64 / x64&lt;/em&gt; &lt;em&gt;Linux&lt;/em&gt; &lt;em&gt;OpenJDK 17&lt;/em&gt; environment, which communicates via a private and secured IPv4-network.&lt;/p&gt;</description></item><item><title>Fearless Distroless</title><link>https://foojayio.github.io/website/today/fearless-distroless/</link><pubDate>Fri, 21 Apr 2023 08:59:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/fearless-distroless/</guid><description>&lt;p&gt;With the rise of Docker came a new focus for engineers: optimizing the build to reach the smallest image size possible.&lt;/p&gt;
&lt;p&gt;A couple of options are available.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-stage builds.&lt;/strong&gt; A &lt;code&gt;Dockerfile&lt;/code&gt; can consist of multiple steps, each having a different Docker base image. Each step can copy files from any of the previous build steps. Only the last one will receive a tag; the others will be left untagged.This approach separates one or more build steps and a run step. On the JVM, it means that the first step includes compiling and packaging, based on a JDK, and the second step comprises running, based on a JRE.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choosing the smallest base image size.&lt;/strong&gt; The smaller the base image, the smaller the resulting image.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this post, I&amp;rsquo;m going to focus on the second point.&lt;/p&gt;</description></item><item><title>A Java Library’s New Approach To Observability</title><link>https://foojayio.github.io/website/today/not-your-grandfathers-logs-a-java-librarys-new-approach-to-observability/</link><pubDate>Tue, 18 Apr 2023 08:10:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/not-your-grandfathers-logs-a-java-librarys-new-approach-to-observability/</guid><description>&lt;h3 id="h3-0-how-a-java-library-is-taking-a-completely-new-approach-to-understanding-what-the-code-does-and-why-it-makes-perfect-developer-sense"&gt;How a Java library is taking a completely new approach to understanding what the code does, and why it makes perfect developer sense.&lt;/h3&gt;
&lt;p&gt;A while back, I &lt;a href="https://medium.com/gitconnected/breaking-the-fourth-wall-in-coding-189055955c85" title="wrote" target="_blank" rel="noopener noreferrer"&gt;wrote&lt;/a&gt;
 about the fact that logs need an overhaul, and that practices that were relevant when logs were still text messages in files may no longer be relevant in an age when logs traces and metrics are as artifacts and observations stored in cloud platforms.&lt;/p&gt;</description></item><item><title>Foojay Podcast #19: Working Free For Fun Brings Fame &amp; Fortune</title><link>https://foojayio.github.io/website/today/foojay-podcast-19/</link><pubDate>Mon, 17 Apr 2023 12:35:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-19/</guid><description>&lt;p&gt;Many developers spend a lot of their time on side projects. It&amp;rsquo;s an opportunity to learn new techniques and get involved in communities.&lt;/p&gt;
&lt;p&gt;But sometimes it can also lead to a new job.&lt;/p&gt;
&lt;p&gt;Or even starting a business based on such a project.&lt;/p&gt;
&lt;p&gt;Today we are talking to people who achieved such a transition and became famous and rich, or at least some of each&amp;hellip;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/FDOFRTj1UVI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>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>Using Bots to Keep Dependencies Updated</title><link>https://foojayio.github.io/website/today/using-bots-to-keep-dependencies-updated/</link><pubDate>Mon, 27 Mar 2023 15:18:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-bots-to-keep-dependencies-updated/</guid><description>&lt;p&gt;Any real world Java project will likely use external dependencies.&lt;/p&gt;
&lt;p&gt;As we&amp;rsquo;ve seen over the last few years, it&amp;rsquo;s important to keep these dependencies up to date. We used to have to manually check for updates, but fortunately these days there are tools available that can help us with this. Because, let&amp;rsquo;s be honest, most developers don&amp;rsquo;t enjoy maintaining applications.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;d much rather be using cool new tools and/or language features, and solving interesting problems. Sorry, I mean: delivering business value! But we are responsible for keeping our dependencies up to date, so let&amp;rsquo;s make that as easy as possible.&lt;/p&gt;</description></item><item><title>Predicting Secure Java Projects on Maven Central</title><link>https://foojayio.github.io/website/today/predicting-secure-java-projects-on-maven-central/</link><pubDate>Thu, 23 Mar 2023 14:10:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/predicting-secure-java-projects-on-maven-central/</guid><description>&lt;p&gt;If you&amp;rsquo;ve searched for &lt;a href="http://central.sonatype.com" title="Maven Central components" target="_blank" rel="noopener noreferrer"&gt;Maven Central components&lt;/a&gt;
 in the last six months, you may have noticed some pretty big changes to the website, including a UI facelift and some new component analysis tools like &lt;a href="https://bomdoctor.sonatype.com/#/home" title="BOM Doctor" target="_blank" rel="noopener noreferrer"&gt;BOM Doctor&lt;/a&gt;
 and the Sonatype Safety Rating.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s no coincidence that many of these changes are security related. Maven Central, along with public code repositories, are the first line of defense when it comes to supply chain security.&lt;/p&gt;</description></item><item><title>Getting Started with IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/getting-started-with-intellij-idea/</link><pubDate>Mon, 13 Mar 2023 08:26:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-intellij-idea/</guid><description>&lt;p&gt;First up, I have&lt;a href="https://www.jetbrains.com/idea/guide/tutorials/getting-started-intellij-idea/" target="_blank" rel="noopener noreferrer"&gt;created a tutorial on the IntelliJ IDEA Guide&lt;/a&gt;
 if you want to view the content with videos. I&amp;rsquo;ll concentrate on text-based for this article.&lt;/p&gt;
&lt;p&gt;When someone new joins your team, it can be quite an overwhelming experience.&lt;/p&gt;
&lt;p&gt;There are lots of people to meet, new technologies to learn, different processes to learn and of course, an IDE to learn!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s helpful to remember what every new starter wants, they want to make a difference, they want to add value, they want to &lt;em&gt;move the needle&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>DevOps for Developers - Introduction and Version Control</title><link>https://foojayio.github.io/website/today/devops-for-developers-introduction-version-control/</link><pubDate>Sun, 12 Mar 2023 09:13:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/devops-for-developers-introduction-version-control/</guid><description>&lt;p&gt;I start some of my talks with a joke: back in my day we didn&amp;rsquo;t have monitoring or observability. We&amp;rsquo;d go to the server and give it a kick. Hear the HD spin? It&amp;rsquo;s working!&lt;/p&gt;
&lt;p&gt;We didn&amp;rsquo;t have DevOps. If we were lucky we had some admins and a technician to solve hardware issues. That&amp;rsquo;s it.&lt;/p&gt;
&lt;p&gt;In a small company, we would do all of that ourselves. Today this is no longer practical. The complexity of deployment and scale is so big, it&amp;rsquo;s hard to imagine a growing company without an engineer dedicated to the operations.&lt;/p&gt;</description></item><item><title>Using Bookmarks in IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/using-bookmarks-in-intellij-idea/</link><pubDate>Tue, 07 Mar 2023 15:07:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-bookmarks-in-intellij-idea/</guid><description>&lt;p&gt;In this tutorial, we&amp;rsquo;re going to take a look at using bookmarks in &lt;a href="https://www.jetbrains.com/idea/" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Bookmarks can come in handy while navigating a codebase, when you see something interesting that you want to come back to later.&lt;/p&gt;
&lt;p&gt;You could use Recent Files (&lt;strong&gt;⌘E&lt;/strong&gt; on macOS, or &lt;strong&gt;Control+E&lt;/strong&gt; on Windows/Linux) to find it, but then you have to remember which file it was. This is where bookmarks come in handy.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take a look!&lt;/p&gt;</description></item><item><title>Making SBOMs, Threats, and Modelling Them a Piece of Cake!</title><link>https://foojayio.github.io/website/today/making-sboms-threats-and-modelling-them-a-piece-of-cake/</link><pubDate>Tue, 07 Mar 2023 09:15:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/making-sboms-threats-and-modelling-them-a-piece-of-cake/</guid><description>&lt;p&gt;The third in a series of SBOMs, software supply chains, the government and you (you too, no exceptions).&lt;/p&gt;
&lt;p&gt;Yes, just like the previous articles, we have cake this time too - this one is a three tiered extravaganza!&lt;/p&gt;
&lt;figure class="aligncenter size-thumbnail"&gt;
 &lt;img fetchpriority="high" decoding="async" width="300" height="260" src="Unknown-300x260.jpg" alt="" class="wp-image-62771"&gt;
&lt;/figure&gt;
&lt;p&gt;So&amp;hellip; still with us? Good!&lt;/p&gt;
&lt;p&gt;Earlier, Steve Poole showed us his digital mixing bowl, &lt;a href="https://foojayio.github.io/website/today/sboms-first-steps-in-a-new-journey-for-developers/"&gt;telling us how applications and their dependencies were like ingredients to a fancy cake&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Jamie Coleman then made sure there were no soggy bottoms (one for the Mary Berry fans), by explaining how &lt;a href="https://foojayio.github.io/website/today/sboms-and-software-composition-analysis/"&gt;SCA tools and SBOMs can work together to prevent vulnerabilities&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>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>Is There a Best OS to Develop a Java Application on?</title><link>https://foojayio.github.io/website/today/is-there-a-best-os-to-develop-a-java-application-on/</link><pubDate>Wed, 22 Feb 2023 11:43:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/is-there-a-best-os-to-develop-a-java-application-on/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;One subject that often evokes a lot of debate is which is the best OS to develop a Java application on. This article gives my view on the issue.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Java runs very well on Windows, macOS and Linux Distributions.&lt;/p&gt;
&lt;p&gt;I work for &lt;a href="https://ga-dev-tools.web.app/campaign-url-builder/" title="Chronicle Software" target="_blank" rel="noopener noreferrer"&gt;Chronicle Software&lt;/a&gt;
, and much of our software is open-source Java libraries, so we don&amp;rsquo;t, or rather we can&amp;rsquo;t, require our customers to run on a particular operating system. You may be surprised to hear that we don&amp;rsquo;t mandate which operating system our staff should use either. We let them use the one that causes the least friction, the one that they are most productive with.&lt;/p&gt;</description></item><item><title>Foojay Podcast #14: Debugging Tools and Skills for Fun and Profit</title><link>https://foojayio.github.io/website/today/foojay-podcast-14/</link><pubDate>Mon, 20 Feb 2023 08:29:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-14/</guid><description>&lt;p&gt;Let&amp;rsquo;s talk about debugging and observability.&lt;/p&gt;
&lt;p&gt;We work with debugging all the time, but how well do we know this common practice?&lt;/p&gt;
&lt;p&gt;Observability, monitoring, and debugging at scale for your production&amp;hellip;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ozcC3scY0Ig?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://open.spotify.com/show/6CpTfgn9LirzJGAtc4ICdQ" target="_blank" rel="noopener noreferrer"&gt;Spotify&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://podcasts.apple.com/be/podcast/foojay-io-the-friends-of-openjdk/id1652281304" target="_blank" rel="noopener noreferrer"&gt;Apple Podcasts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;And most others&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-guests"&gt;Guests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A lot of rubber ducks&lt;/li&gt;
&lt;li&gt;Johannes Bechberger
&lt;ul&gt;
&lt;li&gt;JVM and profiler developer&lt;/li&gt;
&lt;li&gt;Worked on the JDWP protocol and profiling&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/parttimenerd" target="_blank" rel="noopener noreferrer"&gt;https://github.com/parttimenerd&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/parttimen3rd" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/parttimen3rd&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@parttimenerd" target="_blank" rel="noopener noreferrer"&gt;https://mastodon.social/@parttimenerd&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mostlynerdless.de/blog/2023/01/19/asyncgetstacktrace-a-better-stack-trace-api-for-the-jvm/" target="_blank" rel="noopener noreferrer"&gt;AsyncGetStackTrace: A better Stack Trace API for the JVM&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mostlynerdless.de/blog/2022/12/27/a-short-primer-on-java-debugging-internals/" target="_blank" rel="noopener noreferrer"&gt;A short primer on Java debugging internals&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Marit van Dijk
&lt;ul&gt;
&lt;li&gt;Developer Advocate at JetBrains&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maritvandijk.com/" target="_blank" rel="noopener noreferrer"&gt;https://maritvandijk.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/MaritvanDijk77" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/MaritvanDijk77&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@maritvandijk" target="_blank" rel="noopener noreferrer"&gt;https://mastodon.social/@maritvandijk&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ties van de Ven
&lt;ul&gt;
&lt;li&gt;Software Engineer @ JDriven, Coach @ Jcore&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tiesvandeven.nl/" target="_blank" rel="noopener noreferrer"&gt;https://www.tiesvandeven.nl/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/ties_ven" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/ties_ven&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.jdriven.com/2017/10/6-steps-to-help-you-debug-your-application/" target="_blank" rel="noopener noreferrer"&gt;6 Steps to help you debug your application&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-host"&gt;Host&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Shai Almog
&lt;ul&gt;
&lt;li&gt;Author of &amp;ldquo;&lt;a href="https://www.amazon.com/dp/1484290410/" target="_blank" rel="noopener noreferrer"&gt;Practical Debugging at Scale&lt;/a&gt;
&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://debugagent.com/" target="_blank" rel="noopener noreferrer"&gt;https://debugagent.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@debugagent" target="_blank" rel="noopener noreferrer"&gt;https://mastodon.social/@debugagent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/debugagent" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/debugagent&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-3-producer"&gt;Producer&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Frank Delporte
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojay.social/@frankdelporte" target="_blank" rel="noopener noreferrer"&gt;https://foojay.social/@frankdelporte&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/frankdelporte" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/frankdelporte&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-4-content"&gt;Content&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;00'00 Intro and music&lt;/li&gt;
&lt;li&gt;00'24 About the topic of this podcast&lt;/li&gt;
&lt;li&gt;00'58 Introduction of the guests and host&lt;/li&gt;
&lt;li&gt;05'14 Debugging with IntelliJ IDEA and discoverability of tools
&lt;ul&gt;
&lt;li&gt;YouTube: &lt;a href="https://www.youtube.com/watch?v=59RC8gVPlvk&amp;amp;list=PLPZy-hmwOdEUWF85MuwrKV8YVWLmZW4ZA" target="_blank" rel="noopener noreferrer"&gt;Debugger playlist&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;YouTube: &lt;a href="https://www.youtube.com/watch?v=OQcyAtukps4" target="_blank" rel="noopener noreferrer"&gt;Profiling tools&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;YouTube: &lt;a href="https://www.youtube.com/watch?v=TDpbt4thECc" target="_blank" rel="noopener noreferrer"&gt;Profiling live stream&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;13'27 JDWP protocol
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dzone.com/articles/remote-debugging-java-applications-with-jdwp" target="_blank" rel="noopener noreferrer"&gt;DZone: Remote Debugging Java Applications With JDWP&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/psa-the-risks-of-remote-jdwp-debugging/"&gt;Foojay: PSA: The Risks of Remote JDWP Debugging&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/a-short-primer-on-java-debugging-internals/"&gt;Foojay: A Short Primer on Java Debugging Internals&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;19'43 Exception breakpoints
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/exception-breakpoint-that-doesnt-suck-and-a-real-use-case-for-method-breakpoints/"&gt;Foojay: Exception Breakpoint that Doesn&amp;rsquo;t Suck and a Real Use Case for Method Breakpoints&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;20'34 External debugging tools
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://rubberduckdebugging.com/" target="_blank" rel="noopener noreferrer"&gt;https://rubberduckdebugging.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;26'55 Observability
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://istio.io/latest/about/service-mesh/" target="_blank" rel="noopener noreferrer"&gt;https://istio.io/latest/about/service-mesh/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.redhat.com/en/topics/microservices/what-is-a-service-mesh" target="_blank" rel="noopener noreferrer"&gt;https://www.redhat.com/en/topics/microservices/what-is-a-service-mesh&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openjdk.org/jeps/435" target="_blank" rel="noopener noreferrer"&gt;https://openjdk.org/jeps/435&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;37'58 What information should you look for while debugging&lt;/li&gt;
&lt;li&gt;45'46 Be aware of tunnel vision while debugging&lt;/li&gt;
&lt;li&gt;49'33 What to do if you don&amp;rsquo;t know where to search for the bug
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-bisect" target="_blank" rel="noopener noreferrer"&gt;https://git-scm.com/docs/git-bisect&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/understand-the-root-cause-of-regressions-with-git-bisect/"&gt;Foojay: External Debugging Tools 2: git bisect&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;57'05 Outro&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>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>How to Find &amp; Fix Vulnerabilities with IntelliJ IDEA Ultimate</title><link>https://foojayio.github.io/website/today/package-checker-find-fix-vulnerabilities-with-intellij-idea-ultimate/</link><pubDate>Mon, 13 Feb 2023 09:09:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/package-checker-find-fix-vulnerabilities-with-intellij-idea-ultimate/</guid><description>&lt;p&gt;In this article, we&amp;rsquo;re going to take a look at the &lt;a href="https://plugins.jetbrains.com/plugin/18337-package-checker" target="_blank" rel="noopener noreferrer"&gt;Package Checker plugin&lt;/a&gt;
, that&amp;rsquo;s bundled with &lt;a href="https://www.jetbrains.com/idea/" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA Ultimate&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll have a look at how to view known vulnerabilities in your Maven or Gradle projects, how to get more information about the known vulnerabilities in a specific dependency and how to remediate these vulnerabilities inside IntelliJ IDEA Ultimate if a new version with a fix is available.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://foojayio.github.io/website/plugin.png" title="Package Checker plugin"&gt;&lt;img src="https://foojayio.github.io/website/today/package-checker-find-fix-vulnerabilities-with-intellij-idea-ultimate/plugin.png" alt="Package Checker plugin" title="Package Checker plugin" loading="lazy"&gt;
&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Firefox Profiler Beyond the Web: IntelliJ plugin for JFR</title><link>https://foojayio.github.io/website/today/firefox-profiler-beyond-the-web/</link><pubDate>Thu, 02 Feb 2023 13:13:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/firefox-profiler-beyond-the-web/</guid><description>&lt;p&gt;&lt;em&gt;This blog post is the base of the first half of my upcoming talk at FOSDEM 2023 on the topic &amp;ldquo;&lt;a href="https://fosdem.org/2023/schedule/event/mozilla_firefox_profiler_beyond_the_web/" target="_blank" rel="noopener noreferrer"&gt;Firefox Profiler beyond the web: Using Firefox Profiler to view Java profiling data&lt;/a&gt;
.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;For the impatient:&lt;/strong&gt; Take a look at my &lt;a href="https://plugins.jetbrains.com/plugin/20937-java-jfr-profiler" target="_blank" rel="noopener noreferrer"&gt;Java JFR Profiler&lt;/a&gt;
 IntelliJ plugin to easily profile your application and view JFR files directly in your IDE.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I got involved in the &lt;a href="https://profiler.firefox.com/" target="_blank" rel="noopener noreferrer"&gt;Firefox Profiler&lt;/a&gt;
 development, spending significant portions of my time at SAP in the last half year on it. It has been an exciting ride. I learned a lot and contributed a few features. So I was essentially developing React code when I wasn&amp;rsquo;t working on ASGST or other OpenJDK-related tools.&lt;/p&gt;</description></item><item><title>Writing a Profiler from Scratch: The Profiling Loop</title><link>https://foojayio.github.io/website/today/writing-a-profiler-from-scratch-the-profiling-loop/</link><pubDate>Thu, 12 Jan 2023 15:26:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/writing-a-profiler-from-scratch-the-profiling-loop/</guid><description>&lt;br /&gt;
&lt;blockquote&gt;
&lt;p&gt;This is the second post in the series, building a profiler from scratch using AsyncGetCallTrace. Today, we&amp;rsquo;re covering wall-clock profiling and how to collect the obtain stack traces. If you&amp;rsquo;re unfamiliar with AsyncGetCallTrace, please check out my previous article in the series &lt;a href="https://foojayio.github.io/website/today/writing-a-profiler-from-scratch-introduction/"&gt;here&lt;/a&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Our goal today is to essentially write the primary loop of a profiler and do the following every n milliseconds (where n is our chosen profiling interval):
&lt;img src="https://foojayio.github.io/website/today/writing-a-profiler-from-scratch-the-profiling-loop/diagrams3-2048x1029-1-1024x515.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>A Short Primer on Java Debugging Internals</title><link>https://foojayio.github.io/website/today/a-short-primer-on-java-debugging-internals/</link><pubDate>Mon, 02 Jan 2023 08:14:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-short-primer-on-java-debugging-internals/</guid><description>&lt;p&gt;I wanted to write about a small side project&amp;mdash;a few months back, I got carried away with understanding how Java debugging works.&lt;/p&gt;
&lt;p&gt;The following is an hors d&amp;rsquo;oeuvre, a small post in between my series on profiling, on the &lt;a href="https://docs.oracle.com/en/java/javase/17/docs/specs/jpda/jpda.html" target="_blank" rel="noopener noreferrer"&gt;Java Platform Debugging Architecture&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;All Java debuggers use the &lt;a href="https://docs.oracle.com/en/java/javase/17/docs/specs/jdwp/jdwp-spec.html" title="Java Debug Wire Protocol (JDWP)" target="_blank" rel="noopener noreferrer"&gt;Java Debug Wire Protocol (JDWP)&lt;/a&gt;
 to communicate with the JVM, usually using the Java Debug Interface (JDI) abstraction Layer. The protocol can be used to remote debug, but the JVM and the debugger are commonly on the same machine.&lt;/p&gt;</description></item><item><title>Why Picnic picked Java</title><link>https://foojayio.github.io/website/today/why-picnic-picked-java/</link><pubDate>Fri, 30 Dec 2022 08:22:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-picnic-picked-java/</guid><description>&lt;p&gt;&lt;strong&gt;Picking a tech stack for your startup isn&amp;rsquo;t something to do lightly. It&amp;rsquo;s a choice that will shape the future in many ways: how will the tech enable your emerging product and business, what talent can you attract, and how future-proof is the tech stack?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When &lt;a href="https://picnic.app/careers/blogs" target="_blank" rel="noopener noreferrer"&gt;Picnic&lt;/a&gt;
 launched as the first app-only supermarket back in 2015 in The Netherlands, the tech landscape looked markedly different from today.&lt;/p&gt;
&lt;p&gt;Java and .Net ruled the Dutch developer landscape for backend systems.&lt;/p&gt;</description></item><item><title>Writing a Profiler from Scratch: Introduction</title><link>https://foojayio.github.io/website/today/writing-a-profiler-from-scratch-introduction/</link><pubDate>Wed, 21 Dec 2022 15:26:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/writing-a-profiler-from-scratch-introduction/</guid><description>&lt;p&gt;&lt;a href="https://github.com/jvm-profiling-tools/async-profiler" target="_blank" rel="noopener noreferrer"&gt;Async-profiler&lt;/a&gt;
 is undoubtedly one of the most used open-source Java profilers out there.&lt;/p&gt;
&lt;p&gt;Its most commonly used feature is sampling a given Java program&amp;rsquo;s stack traces and visualizing them as a flame graph. I would recommend reading the excellent &lt;a href="https://krzysztofslusarski.github.io/2022/12/12/async-manual.html" target="_blank" rel="noopener noreferrer"&gt;async-profiler manual&lt;/a&gt;
 by Krzysztof Ślusarski or taking a look at my profiling playlist on YouTube if you&amp;rsquo;re new to this tool.&lt;/p&gt;
&lt;p&gt;After using the async-profiler for a while, you might wonder: How does this tool work? And, of course, if you&amp;rsquo;re someone like me: Could I write a stripped-down versionto learn how it really works?&lt;/p&gt;</description></item><item><title>Challenges when Developing a GUI for FIX</title><link>https://foojayio.github.io/website/today/challenges-when-developing-a-gui-for-fix/</link><pubDate>Wed, 21 Dec 2022 08:06:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/challenges-when-developing-a-gui-for-fix/</guid><description>&lt;p&gt;In this article, we explore the challenges in developing a Graphical User Interface (GUI) for Financial Information Exchange (FIX) data.&lt;/p&gt;
&lt;p&gt;FIX is both a protocol and a message format, but to create a FIX GUI we will focus just on the message format.&lt;/p&gt;
&lt;p&gt;A FIX message is a standard message format for transmitting financial and investment banking data.&lt;/p&gt;
&lt;p&gt;Below is an example of a FIX message, where the &amp;ldquo;|&amp;rdquo; character is sent as &amp;lsquo;\1&amp;rsquo;:&lt;/p&gt;</description></item><item><title>Foojay on Mastodon: An Update</title><link>https://foojayio.github.io/website/today/foojay-on-mastodon-an-update/</link><pubDate>Fri, 16 Dec 2022 06:45:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-on-mastodon-an-update/</guid><description>&lt;p&gt;Some weeks ago we checked here with the Java community if there was an interest to have a Java-oriented Mastodon service.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/lets-start-a-java-mastodon-community-for-friends-of-openjdk/"&gt;Let&amp;rsquo;s Start a Java Mastodon Community for Friends of OpenJDK!&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/java-mastodon-service-the-feedback/"&gt;Java Mastodon Service: The Feedback&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foojayio.github.io/website/today/foojay-mastodon-service-here-it-is"&gt;Foojay Mastodon Service: Here It Is!&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Today, Nicolas Frankel, also explained how he &lt;a href="https://foojayio.github.io/website/today/preparing-to-move-away-from-twitter/"&gt;moved from Twitter to Mastodon and has set up a cross-posting solution&lt;/a&gt;
 (automated of course, as a true good and lazy developer).&lt;/p&gt;</description></item><item><title>Unusual Java: StackTrace Extends Throwable</title><link>https://foojayio.github.io/website/today/unusual-java-stacktrace-extends-throwable/</link><pubDate>Wed, 23 Nov 2022 12:37:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/unusual-java-stacktrace-extends-throwable/</guid><description>&lt;p&gt;There are things you can do in Java you rarely see, generally because there is no use for it.&lt;/p&gt;
&lt;p&gt;However, there are some unusual things in Java that could be surprisingly useful.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://chronicle.software/" title="Chronicle Software" target="_blank" rel="noopener noreferrer"&gt;Chronicle Software&lt;/a&gt;
 uses a number of different useful patterns in its low-level libraries most developers wouldn&amp;rsquo;t generally come across.&lt;/p&gt;
&lt;p&gt;One of them is a class that extends Throwable but isn&amp;rsquo;t an Error or an Exception.&lt;/p&gt;
&lt;h3 id="h3-0-stacktrace-extends-throwable"&gt;StackTrace Extends Throwable&lt;/h3&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java"&gt;package net.openhft.chronicle.core;
/**
* Throwable created purely for the purposes of reporting a stack trace.
* This is not an Error or an Exception and is not expected to be thrown or caught.
*/
public class StackTrace extends Throwable {
 public StackTrace() { this("stack trace"); }
 public StackTrace(String message) { this(message, null); }
 public StackTrace(String message, Throwable cause) {
 super(message + " on " + Thread.currentThread().getName(), cause);
 }

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

 st.setStackTrace(stackTrace);
 return st;
 }
}&lt;/pre&gt;
&lt;p&gt;Some important side notes to get out of the way first&lt;/p&gt;</description></item><item><title>AP-Loader: A New Way to Use and Embed async-profiler</title><link>https://foojayio.github.io/website/today/ap-loader-a-new-way-to-use-and-embed-async-profiler/</link><pubDate>Tue, 22 Nov 2022 14:54:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/ap-loader-a-new-way-to-use-and-embed-async-profiler/</guid><description>&lt;p&gt;Using &lt;a href="https://github.com/jvm-profiling-tools/async-profiler" target="_blank" rel="noopener noreferrer"&gt;async-profiler&lt;/a&gt;
 can be quite a hassle.&lt;/p&gt;
&lt;p&gt;First, you have to download the right archive from &lt;a href="https://github.com/jvm-profiling-tools/async-profiler/releases/tag/v2.8.3" title="GitHub" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
 for your OS and architecture, then you have to unpack it and place it somewhere.&lt;/p&gt;
&lt;p&gt;Or you get it from your OS distribution, hoping that it is the current version.&lt;/p&gt;
&lt;p&gt;It gets worse if you want to embed it into your library, agent, or application. Library developers cannot just use a Maven dependency but have to create wrapper code and build scripts that deal with packaging the binaries themselves. Or, worse, they depend on a preinstalled version which they do not control.&lt;/p&gt;</description></item><item><title>Foojay Podcast #7: Security in Java -- what do we need to know?</title><link>https://foojayio.github.io/website/today/foojay-podcast-7/</link><pubDate>Mon, 21 Nov 2022 10:22:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-7/</guid><description>&lt;p&gt;For this Foojay Podcast**,** we invited security experts to dive into the fascinating world of secure coding and detecting vulnerabilities in your Java applications.&lt;/p&gt;
&lt;p&gt;How can you make and keep your systems safe?&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s what we want to find out&amp;hellip;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ATXMizsu1Rc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Foojay Mastodon Service: Here It Is!</title><link>https://foojayio.github.io/website/today/foojay-mastodon-service-here-it-is/</link><pubDate>Wed, 16 Nov 2022 08:44:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-mastodon-service-here-it-is/</guid><description>&lt;p&gt;After &lt;a href="https://foojayio.github.io/website/today/lets-start-a-java-mastodon-community-for-friends-of-openjdk/"&gt;thinking about it&lt;/a&gt;
, and &lt;a href="https://foojayio.github.io/website/today/java-mastodon-service-the-feedback/"&gt;collecting the feedback&lt;/a&gt;
, there was only one direction forward: get a Foojay Mastodon service up-and-running!&lt;/p&gt;
&lt;p&gt;And thanks to &lt;a href="https://toot.io/mastodon_hosting.html" target="_blank" rel="noopener noreferrer"&gt;toot.io&lt;/a&gt;
 we don&amp;rsquo;t need to worry about the maintenance and the bill has been covered.&lt;/p&gt;
&lt;p&gt;If you were already following me on Mastodon, you may have noticed that I moved my own account to this new instance, so you can find me now on &lt;a href="https://foojay.social/@frankdelporte/" target="_blank" rel="noopener noreferrer"&gt;foojay.social/@frankdelporte&lt;/a&gt;
.
&lt;img src="https://foojayio.github.io/website/today/foojay-mastodon-service-here-it-is/foojay-on-mastodon-1024x604.png" alt="" loading="lazy"&gt;
 Homepage of the Mastodon server on foojay.social&lt;/p&gt;</description></item><item><title>Java Mastodon Service: The Feedback</title><link>https://foojayio.github.io/website/today/java-mastodon-service-the-feedback/</link><pubDate>Tue, 15 Nov 2022 08:40:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-mastodon-service-the-feedback/</guid><description>&lt;p&gt;Yesterday we launched this idea: &lt;a href="https://foojayio.github.io/website/today/lets-start-a-java-mastodon-community-for-friends-of-openjdk/"&gt;Let&amp;rsquo;s Start a Java Mastodon Community for Friends of OpenJDK!&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;At the same time, we shared this post on &lt;a href="https://twitter.com/foojayio/status/1592151003264155656" target="_blank" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;
 (yes, the irony), &lt;a href="https://mastodon.social/@FrankDelporte/109342467245148388" target="_blank" rel="noopener noreferrer"&gt;Mastodon&lt;/a&gt;
, and &lt;a href="https://www.linkedin.com/posts/frankdelporte_lets-start-a-java-mastodon-community-for-activity-6997919205920489472-Ei66" target="_blank" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see what the community thinks&amp;hellip;&lt;/p&gt;
&lt;h2 id="h2-0-tl-dr"&gt;TL;DR;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, a lot of likes and +1, most of the reactions think this would be a good idea.&lt;/li&gt;
&lt;li&gt;No, not everyone is convinced Twitter will disappear and an alternative is needed.&lt;/li&gt;
&lt;li&gt;Nobody volunteered (yet) to assist (pay?) for the server and moderate 😉&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-feedback"&gt;Feedback&lt;/h2&gt;
&lt;p&gt;Some of the confirmations&lt;/p&gt;</description></item><item><title>Let's Start a Java Mastodon Community for Friends of OpenJDK!</title><link>https://foojayio.github.io/website/today/lets-start-a-java-mastodon-community-for-friends-of-openjdk/</link><pubDate>Mon, 14 Nov 2022 13:41:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/lets-start-a-java-mastodon-community-for-friends-of-openjdk/</guid><description>&lt;p&gt;Twitter has been my absolute &amp;ldquo;source of truth&amp;rdquo; for many years.&lt;/p&gt;
&lt;p&gt;For me, it&amp;rsquo;s the ideal medium to pick up new technologies, learn from experts, meet new people, etc.&lt;/p&gt;
&lt;p&gt;It even seemed I was able to &amp;ldquo;train the model&amp;rdquo; by carefully selecting the people I follow, as it has never been an abusive or hostile environment as it is perceived by many others.&lt;/p&gt;
&lt;p&gt;Many years ago I already created an account on Mastodon, but was not very active on it, as most of the people I follow, weren&amp;rsquo;t active there either.&lt;/p&gt;</description></item><item><title>Java Profiling Overview</title><link>https://foojayio.github.io/website/today/java-profiling-overview/</link><pubDate>Mon, 14 Nov 2022 09:14:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-profiling-overview/</guid><description>&lt;p&gt;When I ask Java developers whether they do profile, the answer is usually &amp;ldquo;no&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;The few that profiled before usually used VisualVM as a student and maybe JProfiler or YourKit years ago at work.&lt;/p&gt;
&lt;p&gt;One of the reasons for this is a lack of available information and thus knowledge for everyday Java developers.&lt;/p&gt;
&lt;p&gt;This is a pity as profiling should be a part of the tool belt for every experienced developer (not just for Java). The problem is that most of the open-source profilers are targeted to the OpenJDK developers (or their colleagues), even if they won&amp;rsquo;t admit it. This can be seen in the lack of entry-level material on this topic and even the little that is out there is distributed across multiple conference websites, blogs, YouTube channels, and Twitter accounts.&lt;/p&gt;</description></item><item><title>Reducing Tail Latencies with Chronicle Queue Enterprise</title><link>https://foojayio.github.io/website/today/reducing-tail-latencies-with-chronicle-queue-enterprise/</link><pubDate>Wed, 09 Nov 2022 15:07:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/reducing-tail-latencies-with-chronicle-queue-enterprise/</guid><description>&lt;p&gt;Persistent queue solutions are frequently used when designing low-latency applications.&lt;/p&gt;
&lt;p&gt;The problem is that high sustained message rates, or bursty workloads, can lead to delays caused by the OS or hardware which are challenging to mitigate.&lt;/p&gt;
&lt;p&gt;In this article, we will describe how &lt;a href="https://chronicle.software/queue-enterprise/" title="Chronicle Queue Enterprise" target="_blank" rel="noopener noreferrer"&gt;Chronicle Queue Enterprise&lt;/a&gt;
 solves this.&lt;/p&gt;
&lt;h3 id="h3-0-background"&gt;Background&lt;/h3&gt;
&lt;p&gt;When benchmarking Java low-latency persistent queue solutions, latencies tend to be excellent up to high percentiles until sustained throughput limits are reached; these sustained throughput limits are determined by disk performance, OS version, and configuration.&lt;/p&gt;</description></item><item><title>Java on Azure Tooling Update – October 2022</title><link>https://foojayio.github.io/website/today/java-on-azure-tooling-update-october-2022/</link><pubDate>Mon, 07 Nov 2022 22:04:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-azure-tooling-update-october-2022/</guid><description>&lt;p&gt;Hi everyone, welcome back to the October update of Java on Azure Tooling.&lt;/p&gt;
&lt;p&gt;In this update, we will introduce our new roadmap in the next few months.&lt;/p&gt;
&lt;p&gt;In addition, we have made improvements for developers to use deployment slots for Azure Functions in IDEs directly with our latest release.&lt;/p&gt;
&lt;p&gt;Please download and install &lt;a href="https://aka.ms/azuretoolkit/intellijidea" title="the Azure Toolkit for IntelliJ" target="_blank" rel="noopener noreferrer"&gt;the Azure Toolkit for IntelliJ&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;We hope you like these features and enjoy a smooth experience with our Azure toolkit. So let us get started.&lt;/p&gt;</description></item><item><title>Observability is Cultural</title><link>https://foojayio.github.io/website/today/observability-is-cultural/</link><pubDate>Fri, 04 Nov 2022 15:23:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/observability-is-cultural/</guid><description>&lt;p&gt;I&amp;rsquo;m guilty of applying the word debugging for practically anything.&lt;/p&gt;
&lt;p&gt;My kids&amp;rsquo; legos won&amp;rsquo;t fit, let&amp;rsquo;s debug that.&lt;/p&gt;
&lt;p&gt;Observability is one of the few disciplines that actually warrant that moniker, it is debugging. But traditional debugging doesn&amp;rsquo;t really fit with observability practices. I usually call it &amp;ldquo;precognitive debugging&amp;rdquo;. We need to have a rough idea in advance of what our debugging process will look like for effective observability troubleshooting.&lt;/p&gt;
&lt;p&gt;Note that this doesn&amp;rsquo;t apply to developer observervability which is a special case. That&amp;rsquo;s a more dynamic process that more closely resembles a typical debugging session. This is about more traditional monitoring and observability. Where we need to first instrument the system and add logs, metrics, etc. to cover the information we would need as we will later investigate the issue.&lt;/p&gt;</description></item><item><title>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>Handling Exceptions in Java Lambdas</title><link>https://foojayio.github.io/website/today/exceptions-lambdas/</link><pubDate>Sat, 22 Oct 2022 11:36:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/exceptions-lambdas/</guid><description>&lt;p&gt;Java introduced the concept of &lt;em&gt;checked exceptions&lt;/em&gt; . The idea of forcing developers to manage exceptions was revolutionary compared to the &lt;a href="https://blog.frankel.ch/error-handling/" target="_blank" rel="noopener noreferrer"&gt;earlier approaches&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Nowadays, Java remains the only widespread language to offer checked exceptions. For example, every exception in Kotlin is unchecked.&lt;/p&gt;
&lt;p&gt;Even in Java, new features are at odds with checked exceptions:the signature of Java&amp;rsquo;s built-in functional interfaces doesn&amp;rsquo;t use exceptions.It leads to cumbersome code when one integrates legacy code in lambdas.It&amp;rsquo;s evident in Streams.&lt;/p&gt;</description></item><item><title>Low Latency Crypto Trading Systems with Java and Chronicle</title><link>https://foojayio.github.io/website/today/low-latency-crypto-trading-systems-using-java-and-chronicle-services/</link><pubDate>Tue, 18 Oct 2022 14:59:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/low-latency-crypto-trading-systems-using-java-and-chronicle-services/</guid><description>&lt;p&gt;Cryptocurrency trading is an emerging market with its own rules.&lt;/p&gt;
&lt;p&gt;However, when it comes to the need for low-latency &lt;a href="https://en.wikipedia.org/wiki/Arbitrage" title="arbitrage" target="_blank" rel="noopener noreferrer"&gt;arbitrage&lt;/a&gt;
, that is, being able to react rapidly to changing market prices and placing orders ahead of the competition, there are lessons we can learn from optimizing classic trading systems.&lt;/p&gt;
&lt;p&gt;Chronicle Software has a successful track record of designing low-latency trading products. This background enables it to provide optimum performance solutions for Crypto trading systems.&lt;/p&gt;</description></item><item><title>Java on Azure Tooling Update – September 2022</title><link>https://foojayio.github.io/website/today/java-on-azure-tooling-update-september-2022/</link><pubDate>Mon, 17 Oct 2022 09:25:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-azure-tooling-update-september-2022/</guid><description>&lt;p&gt;Hi everyone, welcome back to September update of Java on Azure Tooling.&lt;/p&gt;
&lt;p&gt;In this update, we will introduce the Azure Cosmos DB Support, Azure Virtual Machine Enhancement.&lt;/p&gt;
&lt;p&gt;In addition, we have made some improvements for users to create/update the dependencies with Azure SDK Reference Book.&lt;/p&gt;
&lt;p&gt;Please download and install &lt;a href="https://aka.ms/azuretoolkit/intellijidea" title="the Azure Toolkit for IntelliJ" target="_blank" rel="noopener noreferrer"&gt;the Azure Toolkit for IntelliJ&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;We hope you like these features and enjoy the smooth experience with our Azure toolkit. So let us get started.&lt;/p&gt;</description></item><item><title>Java on Azure Tooling Update – August 2022</title><link>https://foojayio.github.io/website/today/java-on-azure-tooling-update-august-2022/</link><pubDate>Mon, 17 Oct 2022 09:15:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-on-azure-tooling-update-august-2022/</guid><description>&lt;p&gt;Hi everyone, welcome back to August update of Java on Azure Tooling.&lt;/p&gt;
&lt;p&gt;In this update, we will introduce the AKS support and Virtual Machine support.&lt;/p&gt;
&lt;p&gt;In addition, we make some improvements for users to search for subscriptions and find our tutorials easily.&lt;/p&gt;
&lt;p&gt;We hope these features could improve your user experience. So let us get started.&lt;/p&gt;
&lt;h2 id="h2-0-azure-toolkit-for-intellij-improvements"&gt;Azure Toolkit for IntelliJ Improvements&lt;/h2&gt;
&lt;h3 id="h3-1-aks-management-support"&gt;AKS Management Support&lt;/h3&gt;
&lt;p&gt;Azure Kubernetes Service (AKS) simplifies deploying a managed Kubernetes cluster in Azure by offloading the operational overhead to Azure. You can find more details about &lt;a href="https://docs.microsoft.com/en-us/azure/aks/" title="Azure Kubernetes Service (AKS)" target="_blank" rel="noopener noreferrer"&gt;Azure Kubernetes Service (AKS)&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Presenting with IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/presenting-with-intellij-idea/</link><pubDate>Tue, 11 Oct 2022 07:14:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/presenting-with-intellij-idea/</guid><description>&lt;p&gt;In this article, we will take a look at ways to level up your presentation skills with IntelliJ IDEA.&lt;/p&gt;
&lt;h2 id="h2-0-presentation-assistant-plugin"&gt;Presentation Assistant plugin&lt;/h2&gt;
&lt;p&gt;Our first tip is to use the Presentation Assistant plugin. The Presentation Assistant plugin will show which shortcuts are being used.&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="size-medium wp-image-60174" src="presentation-assistant-example-700x137.png" alt="Presentation Assistant plugin example" width="700" height="137"&gt;
&lt;br /&gt;
&lt;p&gt;To install the plugin, open Preferences using &lt;strong&gt;⌘,&lt;/strong&gt; (on Mac) or &lt;strong&gt;Ctrl+Alt+S&lt;/strong&gt; (on Windows/Linux). Go to Plugins and search for &amp;ldquo;Presentation assistant&amp;rdquo; on the Marketplace tab. Click &lt;strong&gt;Install&lt;/strong&gt; and when it&amp;rsquo;s done, click &lt;strong&gt;OK&lt;/strong&gt; to apply the changes and close the dialog or click &lt;strong&gt;Apply&lt;/strong&gt; to keep the dialog open.&lt;/p&gt;</description></item><item><title>Low Latency Microservices, A Retrospective</title><link>https://foojayio.github.io/website/today/low-latency-microservices-a-retrospective/</link><pubDate>Thu, 06 Oct 2022 06:25:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/low-latency-microservices-a-retrospective/</guid><description>&lt;p&gt;I wrote an article on &lt;a href="https://vanilla-java.github.io/2016/03/22/Micro-services-for-performance.html" title="low latency microservices" target="_blank" rel="noopener noreferrer"&gt;low latency microservices&lt;/a&gt;
 almost five years ago now. Chronicle Software has worked with a number of tier one investment banks to implement and support those systems. What has changed in that time and what lessons have we learnt?&lt;/p&gt;
&lt;p&gt;Read this article and learn what we learned after five years of developing and supporting low latency microservices.&lt;/p&gt;
&lt;h3 id="h3-0-separation-of-concerns-gives-better-testability"&gt;Separation of Concerns Gives Better Testability&lt;/h3&gt;
&lt;p&gt;Microservices repeatedly demonstrated that testing and debugging business components were much easier with simple, stand-alone components with clear contracts between microservices.&lt;/p&gt;</description></item><item><title>Using Git Interactive Rebase</title><link>https://foojayio.github.io/website/today/using-git-interactive-rebase/</link><pubDate>Thu, 25 Aug 2022 09:32:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/using-git-interactive-rebase/</guid><description>&lt;p&gt;This tutorial will cover how to clean up your Git commit history with Git interactive rebase, both via the IntelliJ IDEA UI and from the command line.&lt;/p&gt;
&lt;p&gt;Git interactive rebase allows you to change individual commits, squash commits together, drop commits or change the order of the commits. This allows you to clean up your Git commit history to make it linear and meaningful, which can make it easier to understand the history of the project in the future.&lt;/p&gt;</description></item><item><title>Bridge the DevOps/Dev Gap without Sacrificing Reliability</title><link>https://foojayio.github.io/website/today/effectively-bridging-the-devops-rd-gap-without-sacrificing-reliability/</link><pubDate>Fri, 19 Aug 2022 09:16:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/effectively-bridging-the-devops-rd-gap-without-sacrificing-reliability/</guid><description>&lt;p&gt;DevOps culture revolutionized our industry. Continuous Delivery and Continuous Integration made six sigma reliability commonplace. 20 years ago we would kick the production servers and listen to the hard drive spin, that was observability. Today&amp;rsquo;s DevOps teams deploy monitoring tools that provide development teams with deep insight into the production environment.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;O brave new world That has such people in&amp;rsquo;t!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;mdash; William Shakespeare&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Before DevOps practices were commonplace, production used to fail. A lot. We don&amp;rsquo;t want to go back to the time before DevOps tools were commonplace&amp;hellip;&lt;/p&gt;</description></item><item><title>Secure CI/CD Pipelines with GitHub Actions for Your Java Apps</title><link>https://foojayio.github.io/website/today/building-secure-ci-cd-pipelines-with-github-actions-for-your-java-application/</link><pubDate>Thu, 11 Aug 2022 06:28:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-secure-ci-cd-pipelines-with-github-actions-for-your-java-application/</guid><description>&lt;p&gt;This article was originally post at&lt;a href="https://snyk.io/blog/building-a-secure-pipeline-with-github-actions/" target="_blank" rel="noopener noreferrer"&gt;Snyk.io&lt;/a&gt;
 and is used with permission&lt;/p&gt;
&lt;p&gt;GitHub Actions has made it easier than ever to build a secure continuous integration and continuous delivery (CI/CD) pipeline for your GitHub projects.&lt;/p&gt;
&lt;p&gt;By integrating your CI/CD pipeline and GitHub repository, GitHub Actions allows you to automate your build, test, and deployment pipeline.&lt;/p&gt;
&lt;p&gt;You can create workflows that build and test every pull request to your repository or deploy merged pull requests to production.&lt;/p&gt;</description></item><item><title>Stateless, Secretless Multi-cluster Monitoring in Azure Kubernetes</title><link>https://foojayio.github.io/website/today/stateless-secretless-multi-cluster-monitoring-in-azure-kubernetes-service-with-thanos-prometheus-and-azure-managed-grafana/</link><pubDate>Wed, 27 Jul 2022 08:36:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/stateless-secretless-multi-cluster-monitoring-in-azure-kubernetes-service-with-thanos-prometheus-and-azure-managed-grafana/</guid><description>&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Observability is paramount to every distributed system and it&amp;rsquo;s becoming increasingly complicated in a cloud native world where we might deploy multiple ephemeral clusters and we want to keep their metrics beyond their lifecycle span.&lt;/p&gt;
&lt;p&gt;This article aims at cloud native engineers that face the challenge of observing multiple Azure Kubernetes Clusters (AKS) and need a flexible, stateless solution, leveraging available and cost-effective blob storage for long term retention of metrics, one which does not require injecting static secrets to access the storage (as it leverage the native Azure Managed Identities associated with the cluster).&lt;/p&gt;</description></item><item><title>Debugging Java Collections Framework Issues in Production</title><link>https://foojayio.github.io/website/today/debugging-java-collections-framework-issues-in-production/</link><pubDate>Fri, 15 Jul 2022 08:49:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-java-collections-framework-issues-in-production/</guid><description>&lt;p&gt;The Java Collections Framework was a huge leap forward when it was introduced as part of Java 2 (JDK 1.2).&lt;/p&gt;
&lt;p&gt;Thanks to the included collection classes we finally moved beyond the limits of &lt;code&gt;Vector&lt;/code&gt; and &lt;code&gt;Hashtable&lt;/code&gt; to more mature and generic solutions. With the introduction of streams and functional concepts in Java 8 the framework took everything to the next level.&lt;/p&gt;
&lt;p&gt;One of the core principles underlying the framework is coding to the interface. As such you would use the List interface or a Collection interface instead of the concrete implementation. This is great engineering but it makes debugging the Java Collections far more challenging.&lt;/p&gt;</description></item><item><title>JDK 7: An Extended Hello and Farewell</title><link>https://foojayio.github.io/website/today/jdk-7-an-extended-hello-and-farewell/</link><pubDate>Tue, 12 Jul 2022 11:03:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdk-7-an-extended-hello-and-farewell/</guid><description>&lt;p&gt;On July 7^th^, 2011, eleven years ago, &lt;a href="https://openjdk.org/projects/jdk7/" target="_blank" rel="noopener noreferrer"&gt;JDK 7 was released&lt;/a&gt;
. In some ways, it was one of the more significant releases of Java. Indeed, there were some excellent technical features: &lt;a href="https://openjdk.org/projects/coin/" target="_blank" rel="noopener noreferrer"&gt;Project Coin&lt;/a&gt;
 gave us things like try-with-resources, strings in switch and multi-catch.&lt;/p&gt;
&lt;p&gt;However, it was two non-technical aspects of JDK 7 that made it important.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The first was that it was the first release since &lt;a href="https://www.oracle.com/corporate/pressrelease/oracle-buys-sun-042009.html" target="_blank" rel="noopener noreferrer"&gt;Oracle acquired Sun Microsystems&lt;/a&gt;
. The Java community had been unsure how Java would fare under Oracle, so this release showed a solid commitment to the platform (which has been maintained since then).&lt;/li&gt;
&lt;li&gt;The second was even more important: the fact that a &lt;a href="https://www.jcp.org/en/jsr/detail?id=336" target="_blank" rel="noopener noreferrer"&gt;Java SE specification&lt;/a&gt;
 was published through the &lt;a href="https://www.jcp.org/en/home/index" target="_blank" rel="noopener noreferrer"&gt;Java Community Process&lt;/a&gt;
. Due to &lt;a href="https://en.wikipedia.org/wiki/Apache_Harmony#Difficulties_to_obtain_a_TCK_license_from_Sun" target="_blank" rel="noopener noreferrer"&gt;issues around the availability of the TCK&lt;/a&gt;
 and the &lt;a href="https://harmony.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Harmony project&lt;/a&gt;
, new versions of OpenJDK had been stalled since December 2006. To put this into context, the time between JDK 6 and JDK 7 (one release) was one month longer at four years and seven months than between JDK 9 and JDK 18 (nine releases). Getting things moving again was vital to keeping Java relevant to developers as applications and architectures evolved.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Another significant date for JDK 7 is July 19^th^ this year. That is when the &lt;a href="https://www.oracle.com/java/technologies/java-se-support-roadmap.html" target="_blank" rel="noopener noreferrer"&gt;last update will be made available from Oracle&lt;/a&gt;
, even for commercially supported users. It is the end of what Oracle terms Extended Support.&lt;/p&gt;</description></item><item><title>Debugging Gson, Moshi and Jackson JSON Frameworks in Production</title><link>https://foojayio.github.io/website/today/debugging-gson-moshi-and-jackson-json-frameworks-in-production/</link><pubDate>Fri, 08 Jul 2022 07:14:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-gson-moshi-and-jackson-json-frameworks-in-production/</guid><description>&lt;p&gt;Parsing bugs are the gift that keeps on giving in the age of APIs.&lt;/p&gt;
&lt;p&gt;We use a service, it works perfectly in debugging, QA, etc.&lt;/p&gt;
&lt;p&gt;Then some user input that made its way to the web request returns a result we just can&amp;rsquo;t parse.&lt;/p&gt;
&lt;p&gt;Unfortunately, there isn&amp;rsquo;t much we can do at this stage. We need to understand why the failure occurred and how we can workaround it and fix it.&lt;/p&gt;</description></item><item><title>Building Project Panama's jextract tool by yourself</title><link>https://foojayio.github.io/website/today/building-project-panamas-jextract-tool-by-yourself/</link><pubDate>Thu, 09 Jun 2022 14:22:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-project-panamas-jextract-tool-by-yourself/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Absorb what is useful, discard what is useless and add what is specifically your own. &amp;ndash; Bruce Lee&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Do you want to build Project Panama&amp;rsquo;s &lt;a href="https://github.com/openjdk/jextract" target="_blank" rel="noopener noreferrer"&gt;Jextract&lt;/a&gt;
 tool by yourself? I can show you how!&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve seen any of my past &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-3/"&gt;articles&lt;/a&gt;
 on Project Panama I&amp;rsquo;ve mentioned a really convenient tool called &lt;code&gt;jextract&lt;/code&gt; that can generate Java binding code that represents native functions or variables (symbols) from C libraries.&lt;/p&gt;
&lt;p&gt;This alleviates the developer&amp;rsquo;s need of creating binding code by hand. By passing in a C header file (.h extension) &lt;code&gt;jextract&lt;/code&gt; can generate source code or compiled Java classes.&lt;/p&gt;</description></item><item><title>Publish a Java Project to the Maven Central Repository</title><link>https://foojayio.github.io/website/today/how-to-publish-a-java-maven-project-to-the-maven-central-repository/</link><pubDate>Fri, 13 May 2022 06:22:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-publish-a-java-maven-project-to-the-maven-central-repository/</guid><description>&lt;p&gt;This guide will describe how to publish the &lt;a href="https://github.com/tobiasbriones/jdesk" target="_blank" rel="noopener noreferrer"&gt;JDesk framework&lt;/a&gt;
 to Maven Central.&lt;/p&gt;
&lt;p&gt;The project is written in Java using Maven as the build tool. So, the process will be detailed for Java projects with a &lt;code&gt;pom.xml&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;You can follow this article if you need to publish a Java Maven-based library or artifact to Maven.&lt;/p&gt;
&lt;h2 id="h2-0-get-ready-for-publishing-packages"&gt;Get Ready for Publishing Packages&lt;/h2&gt;
&lt;p&gt;Publishing a Java artifact is not as trivial as Python or JavaScript packages can be deployed.&lt;/p&gt;</description></item><item><title>Easy Jakarta EE Integration Testing</title><link>https://foojayio.github.io/website/today/easy-jakarta-ee-integration-testing/</link><pubDate>Wed, 04 May 2022 14:41:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/easy-jakarta-ee-integration-testing/</guid><description>&lt;p&gt;One major issue when developing modern enterprise applications is the &amp;ldquo;works on my machine&amp;rdquo; problem: when an application works well on your machine but is not functional in production or even on a colleague&amp;rsquo;s machine.&lt;/p&gt;
&lt;p&gt;An even more prevalent problem is to maintain the quality of ever-changing applications during development and maintenance.&lt;/p&gt;
&lt;p&gt;This is especially prevalent when Jakarta EE applications are developed and not properly tested in an isolated and cohesive manner.&lt;/p&gt;</description></item><item><title>How To Beautify Your GitHub Repo</title><link>https://foojayio.github.io/website/today/how-to-beautify-your-github-repo/</link><pubDate>Tue, 19 Apr 2022 08:16:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-beautify-your-github-repo/</guid><description>&lt;p&gt;Whether you like it or not, GitHub has become the primary provider to host one&amp;rsquo;s code.&lt;/p&gt;
&lt;p&gt;You or your company are probably using GitHub.&lt;/p&gt;
&lt;p&gt;In this article, I want to highlight some files that you can use to beautify your GitHub repository and make it welcoming and inspiring to those who stop by.&lt;/p&gt;
&lt;h2 id="h2-0-readme"&gt;README&lt;/h2&gt;
&lt;p&gt;I hope that by now, everybody is familiar with READMEs. If you place a README file at the root of your repo, GitHub will display its content on the repo&amp;rsquo;s homepage.&lt;/p&gt;</description></item><item><title>Logging Best Practices: MDC, Ingestion, and Scale</title><link>https://foojayio.github.io/website/today/logging-best-practices-mdc-ingestion-and-scale/</link><pubDate>Mon, 11 Apr 2022 12:16:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/logging-best-practices-mdc-ingestion-and-scale/</guid><description>&lt;p&gt;I don&amp;rsquo;t care about religious wars over &amp;ldquo;which logger is the best&amp;rdquo;. They all have their issues. Having said that, the worst logger is probably the one built &amp;ldquo;in-house&amp;rdquo;. So yes, they suck, but re-inventing the wheel is probably far worse.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s discuss making these loggers suck less with proper usage guidelines that range from the obvious to subtle. Hopefully, you can use this post as the basis of your company&amp;rsquo;s standard for logging best practices.&lt;/p&gt;</description></item><item><title>Use git bisect to Pinpoint a Bug</title><link>https://foojayio.github.io/website/today/use-git-bisect-to-pinpoint-a-bug/</link><pubDate>Wed, 23 Feb 2022 14:44:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/use-git-bisect-to-pinpoint-a-bug/</guid><description>&lt;p&gt;During some recent work on Maven, I found a very specific bug. The error message wasn&amp;rsquo;t that clear, and I couldn&amp;rsquo;t make a guess what might&amp;rsquo;ve caused it.&lt;/p&gt;
&lt;p&gt;I had read about &lt;code&gt;git bisect&lt;/code&gt; a few times and figured that this time, I would use that tool to find the bug.&lt;/p&gt;
&lt;p&gt;So what does &lt;code&gt;git bisect&lt;/code&gt; do? It helps you find the exact commit that introduced a bug, using binary search.&lt;/p&gt;</description></item><item><title>Hand Ground Coffee: Command Line Tools for Java</title><link>https://foojayio.github.io/website/today/hand-ground-coffee-command-line-tools-for-java/</link><pubDate>Mon, 21 Feb 2022 16:04:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/hand-ground-coffee-command-line-tools-for-java/</guid><description>&lt;p&gt;&lt;img src="https://www.dieckmann-aroma-kaffee.de/images/blog/kaffeemuehle.jpg" alt="kaffeemuehle" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In the book &amp;ldquo;&lt;a href="https://medium.com/97-things" target="_blank" rel="noopener noreferrer"&gt;97 Things every Java Programmer should know&lt;/a&gt;
&amp;rdquo; (I contributed 2 of the 97 tips) there is a chapter about some command line tools in the JDK.&lt;/p&gt;
&lt;p&gt;Since I make heavy use of such helpers myself, I wanted to briefly introduce them in today&amp;rsquo;s article.&lt;/p&gt;
&lt;p&gt;Personally I prefer the command line for my daily work, using the combination of &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;sed&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;bash&lt;/code&gt; commands etc. makes recurring tasks easier.&lt;/p&gt;</description></item><item><title>What is Debugging in 140 Seconds</title><link>https://foojayio.github.io/website/today/what-is-debugging-in-140-seconds/</link><pubDate>Mon, 14 Feb 2022 12:50:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-is-debugging-in-140-seconds/</guid><description>&lt;p&gt;&lt;strong&gt;I&amp;rsquo;m launching a new twitter video series that will focus on teaching the concepts of debugging (and other concepts) in small video bites.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is the first video in the series. I hope to publish a new video every week. It starts with the very basics of debugging and builds up. I think debugging is a powerful tool that even experienced developers don&amp;rsquo;t leverage enough.&lt;/p&gt;
&lt;p&gt;See the video here:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;🦆 Duckling the 1st:&lt;/p&gt;</description></item><item><title>Detect and Fix Memory Leaks in Managed Languages</title><link>https://foojayio.github.io/website/today/debugging-ram-detect-fix-memory-leaks-in-managed-languages-heap-deep-dive-part-2/</link><pubDate>Thu, 10 Feb 2022 08:45:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugging-ram-detect-fix-memory-leaks-in-managed-languages-heap-deep-dive-part-2/</guid><description>&lt;p&gt;In the &lt;a href="https://foojayio.github.io/website/today/debugging-ram-java-garbage-collection-java-heap-deep-dive-part-1/"&gt;previous installment&lt;/a&gt;
, I talked about the Java garbage collector. In this part, I&amp;rsquo;ll discuss the most common memory issue: the memory leak. I focus on managed languages, specifically Java, but I will mention some native code tools which are interesting. A memory leak contributes to heap size, which isn&amp;rsquo;t the most pressing bug in most cases. But when left alone, memory usage can become a problem and, by that point, finding the issue is hard. Unlike a crash dump, where we get a reference to a specific line, a memory leak can remain hidden.&lt;/p&gt;</description></item><item><title>Polyglot Cloud Native Debugging: Beyond Logs/APM</title><link>https://foojayio.github.io/website/today/polyglot-cloud-native-debugging-beyond-apm-and-logging/</link><pubDate>Tue, 18 Jan 2022 07:55:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/polyglot-cloud-native-debugging-beyond-apm-and-logging/</guid><description>&lt;p&gt;&lt;strong&gt;I&amp;rsquo;ve done quite a few conference talks since I became a developer advocate for &lt;a href="https://lightrun.com/" target="_blank" rel="noopener noreferrer"&gt;Lightrun&lt;/a&gt;
. One of my most popular talks has a title similar to the title of this article. In this article I&amp;rsquo;ll try to cover the gist of the talk.&lt;/strong&gt;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/cj--cJrYqhQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;br /&gt;
&lt;h2 id="_cloud_native_applications"&gt;Cloud-Native Applications&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s practically an alphabet soup of terms covering public cloud, hybrid cloud, etc. There&amp;rsquo;s also a lot of overlap between the various terms. The nice thing about this topic is that it applies, regardless. You will run into problems with microservices, architecture and monolithic applications or serverless.&lt;/p&gt;</description></item><item><title>A Tentative Comparison of Fault Tolerance Libraries on the JVM</title><link>https://foojayio.github.io/website/today/comparison-fault-tolerance-libraries/</link><pubDate>Tue, 11 Jan 2022 09:31:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/comparison-fault-tolerance-libraries/</guid><description>&lt;p&gt;If you&amp;rsquo;re implementing microservices or not, chances are that you&amp;rsquo;re calling HTTP endpoints. With HTTP calls, a lot of things can go wrong.&lt;/p&gt;
&lt;p&gt;Experienced developers plan for this and design beyond just the happy path. In general, fault tolerance encompasses the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Retry&lt;/li&gt;
&lt;li&gt;Timeout&lt;/li&gt;
&lt;li&gt;Circuit Breaker&lt;/li&gt;
&lt;li&gt;Fallback&lt;/li&gt;
&lt;li&gt;Rate Limiter to avoid server-side 429 responses&lt;/li&gt;
&lt;li&gt;Bulkhead: Rate Limiter limits the number of calls in a determined timeframe, while Bulkhead limits the number of concurrent calls&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A couple of libraries implement these features on the JVM. In this post, we will look at Microprofile Fault Tolerance, &lt;a href="https://failsafe.dev/" target="_blank" rel="noopener noreferrer"&gt;Failsafe&lt;/a&gt;
 and Resilience4J.&lt;/p&gt;</description></item><item><title>JDKMon 17.0.17 Released</title><link>https://foojayio.github.io/website/today/jdkmon-17-0-17-released/</link><pubDate>Wed, 08 Dec 2021 09:11:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdkmon-17-0-17-released/</guid><description>&lt;p&gt;JDKMon is a little tool written in JavaFX that tries to detect all OpenJDK distributions installed on your machine and keep track of updates for those distributions.&lt;/p&gt;
&lt;p&gt;It will scan for new updates every three hours and will inform you about available updates. JDKMon won&amp;rsquo;t install the distributions on your machine but will only enable you to download them to a place of your choice.&lt;/p&gt;
&lt;p&gt;At the moment the following distributions are supported:&lt;/p&gt;</description></item></channel></rss>