<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bruno Borges on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/author/bruno-borges/</link><description>Articles written by Bruno Borges on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 14 Jul 2026 14:42:11 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/author/bruno-borges/index.xml" rel="self" type="application/rss+xml"/><item><title>I Asked GitHub Copilot to Profile a Java App. It Found a Bug in My Heap Sizing, and Offered to Fix It</title><link>https://foojayio.github.io/website/today/i-asked-github-copilot-to-profile-a-java-app-it-found-a-bug-in-my-heap-sizing-and-offered-to-fix-it/</link><pubDate>Tue, 14 Jul 2026 14:42:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/i-asked-github-copilot-to-profile-a-java-app-it-found-a-bug-in-my-heap-sizing-and-offered-to-fix-it/</guid><description>&lt;p&gt;I built an extension to collapse the entire loop of running and measuring the performance of Java workloads, so it can be used within a place some developers are starting to consider their new &amp;ldquo;development environment&amp;rdquo; in the agentic AI era: the &lt;a href="https://github.com/features/ai/github-app" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub Copilot app&lt;/strong&gt;&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="h2-0-the-idea-copilot-driven-profiling"&gt;The idea: Copilot-driven profiling&lt;/h2&gt;
&lt;p&gt;This extension is called JVM Pulse, and this is a walkthrough of one real run. JVM Pulse is a canvas extension for the GitHub Copilot app. It doesn&amp;rsquo;t hard-code how to build or run Java projects and it doesn&amp;rsquo;t need the user to be specific either. You click Run analysis, and Copilot does the project-specific work: it detects your build tool and JDK, writes or compiles a representative workload, and launches it with the right flags: unified GC logging and a JFR recording with settings=profile.&lt;/p&gt;</description></item><item><title>What's New in actions/setup-java 5.4 and 5.5: Signature Verification, Kona JDK, and a Better Maven Experience</title><link>https://foojayio.github.io/website/today/whats-new-in-actions-setup-java-5-4-and-5-5-signature-verification-kona-jdk-and-a-better-maven-experience/</link><pubDate>Wed, 08 Jul 2026 18:56:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/whats-new-in-actions-setup-java-5-4-and-5-5-signature-verification-kona-jdk-and-a-better-maven-experience/</guid><description>&lt;p&gt;If you build Java on GitHub Actions, &lt;code&gt;actions/setup-java&lt;/code&gt; is almost certainly the first step in your workflow. It installs a JDK, wires up &lt;code&gt;JAVA_HOME&lt;/code&gt; and the &lt;code&gt;PATH&lt;/code&gt;, configures Maven &lt;code&gt;settings.xml&lt;/code&gt;, sets up dependency caching, and registers Maven toolchains &amp;mdash; all before your build even starts.&lt;/p&gt;
&lt;p&gt;The last two releases, &lt;strong&gt;v5.4.0&lt;/strong&gt; and &lt;strong&gt;v5.5.0&lt;/strong&gt; , are quietly some of the most interesting in a while. v5.5.0 in particular brings something Java developers have been asking about for years on CI: &lt;strong&gt;cryptographic verification of the JDK you just downloaded&lt;/strong&gt;. There&amp;rsquo;s also a brand-new distribution, smarter version-file handling, and a batch of Maven quality-of-life fixes that make your logs cleaner and your toolchains file saner.&lt;/p&gt;</description></item><item><title>How I Automated Weekly Twitter/X Posts With Java, JBang and GitHub Actions</title><link>https://foojayio.github.io/website/today/how-i-automated-weekly-twitter-x-posts-with-java-jbang-and-github-actions/</link><pubDate>Tue, 14 Apr 2026 16:05:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-i-automated-weekly-twitter-x-posts-with-java-jbang-and-github-actions/</guid><description>&lt;p&gt;Every Monday at 10 AM Eastern, &lt;a href="https://x.com/javaevolved" target="_blank" rel="noopener noreferrer"&gt;@javaevolved&lt;/a&gt;
 now tweets a modern Java pattern &amp;mdash; automatically. No manual steps, no third-party services, no cron servers. Just a GitHub Actions workflow, a couple of JBang scripts, and the Twitter API.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s how it works, and how you can do the same for your own project.&lt;/p&gt;
&lt;h2 id="h2-0-the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://javaevolved.github.io" target="_blank" rel="noopener noreferrer"&gt;Java Evolved&lt;/a&gt;
 is a static site with 113 code patterns showing the old way vs. the modern way to write Java. Each pattern has a title, summary, old/modern approach labels, JDK version, and a link to its detail page.&lt;/p&gt;</description></item><item><title>Translating a Website into 8 Languages with AI Agents in One Night</title><link>https://foojayio.github.io/website/today/translating-a-website-into-8-languages-with-ai-agents-in-one-night/</link><pubDate>Thu, 26 Feb 2026 14:15:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/translating-a-website-into-8-languages-with-ai-agents-in-one-night/</guid><description>&lt;h2 id="h2-0-how-i-used-claude-sonnet-4-6-and-fleets-of-github-copilot-coding-agents-to-internationalize-java-evolved-from-spec-to-deployment"&gt;How I used Claude Sonnet 4.6 and fleets of GitHub Copilot Coding Agents to internationalize java.evolved &amp;mdash; from spec to deployment&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://javaevolved.github.io" target="_blank" rel="noopener noreferrer"&gt;java.evolved&lt;/a&gt;
 is a static site I built to showcase modern Java patterns side-by-side with their legacy equivalents. 112 patterns across 11 categories &amp;mdash; language, collections, streams, concurrency, and more &amp;mdash; each with code comparisons, explanations, and curated documentation links. All generated from YAML content files by a JBang-powered Java build script.&lt;/p&gt;</description></item><item><title>Stop Writing YAML: Automating Your Repo with Plain Natural Language</title><link>https://foojayio.github.io/website/today/stop-writing-yaml-automating-your-repo-with-plain-natural-language/</link><pubDate>Fri, 20 Feb 2026 19:01:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/stop-writing-yaml-automating-your-repo-with-plain-natural-language/</guid><description>&lt;p&gt;If you maintain a busy codebase, you already know the daily grind: triaging issues, writing status reports, updating documentation, and chasing down failed CI builds. What if your repository could handle that routine maintenance for you, using natural language instead of complex, fragile scripts?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You can even write in languages other than English!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In this week&amp;rsquo;s &lt;a href="https://www.youtube.com/live/Dw2S-VQDvhs?t=426s" target="_blank" rel="noopener noreferrer"&gt;Rubber Duck Thursdays live stream, Cassidy Williams and I&lt;/a&gt;
 took a deep dive into &lt;strong&gt;&lt;a href="https://github.github.com/gh-aw/" target="_blank" rel="noopener noreferrer"&gt;GitHub Agentic Workflows&lt;/a&gt;
&lt;/strong&gt;. We explored how to move past deterministic if-then scripts and embrace &amp;ldquo;Continuous AI&amp;rdquo;, a world where your repository actually has the agency to understand context and safely execute tasks for you.&lt;/p&gt;</description></item><item><title>Enabling AI Agents to Use a Real Debugger Instead of Logging</title><link>https://foojayio.github.io/website/today/enabling-ai-agents-to-use-a-real-debugger-instead-of-logging/</link><pubDate>Mon, 16 Feb 2026 21:12:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/enabling-ai-agents-to-use-a-real-debugger-instead-of-logging/</guid><description>&lt;p&gt;Every Java developer has been there. Something breaks, and the first instinct is to litter the code with &lt;code&gt;System.out.println(&amp;quot;&amp;gt;&amp;gt;&amp;gt; HERE 1&amp;quot;)&lt;/code&gt;. Then &lt;code&gt;HERE 2&lt;/code&gt;. Then &lt;code&gt;HERE 3 --- value is: &amp;quot; + x&lt;/code&gt;. Rebuild. Rerun. Stare at the console. Repeat.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve been doing this for decades. And now, so have our AI agents.&lt;/p&gt;
&lt;p&gt;When you ask an AI coding assistant to debug a Java application, it almost always reaches for the same playbook: add logging statements, recompile, rerun, read the output, and reason about what happened. It&amp;rsquo;s the &lt;code&gt;println&lt;/code&gt; debugging loop, automated &amp;mdash; but it&amp;rsquo;s still &lt;code&gt;println&lt;/code&gt; debugging.&lt;/p&gt;</description></item><item><title>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></channel></rss>