<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.2">Jekyll</generator><link href="/blog/feed.xml" rel="self" type="application/atom+xml" /><link href="/blog/" rel="alternate" type="text/html" /><updated>2026-02-16T19:21:58-05:00</updated><id>/blog/feed.xml</id><title type="html">Ed Burns Blog</title><subtitle>Ed Burns blogs here, mostly about Java and software, but sometimes about other random things.
</subtitle><entry><title type="html">Ed’s JavaLand 2026 Session Picks</title><link href="/blog/2026/02/13/javaland-2026-picks.html" rel="alternate" type="text/html" title="Ed’s JavaLand 2026 Session Picks" /><published>2026-02-13T14:30:00-05:00</published><updated>2026-02-13T14:30:00-05:00</updated><id>/blog/2026/02/13/javaland-2026-picks</id><content type="html" xml:base="/blog/2026/02/13/javaland-2026-picks.html"><![CDATA[<p>Cross posted at <a href="https://dev.to/edburns00/eds-javaland-2026-session-picks-7ni">dev.to</a>.</p>

<p>I can hardly believe I’m writing my session picks for the 12th JavaLand conference!</p>

<blockquote>
  <p>In fact, I didn’t write it. I used Claude Cowork to write it and I am just reviewing the work and updating the style to be more Ed-like. This is the future of work! See <a href="#appendix---how-i-used-claude-cowork-to-write-this-post">below</a> for my prompts and stuff. I’ll low-key indicate the parts I manually edited with an “eb:” prefix.</p>
</blockquote>

<p>Having attended every single one since 2014, this conference holds a special place in my heart. From the early days at Phantasialand to last year’s successful second showing at Nürburgring, JavaLand continues to evolve while maintaining its unique charm and technical depth.</p>

<p>eb: As a <a href="https://www.youtube.com/watch?v=nGebsG1hIcU">practicing schlager fan</a>, I am delighted to be visiting Europapark, shooting location for <a href="https://www.ardmediathek.de/sendung/immer-wieder-sonntags/Y3JpZDovL3N3ci5kZS8yOTExODQ">Immer wieder Sonntags</a>. Perhaps the organizers will do something Schlager themed?</p>

<p>Here are my previous session picks posts for those keeping track:</p>

<ul>
  <li><a href="/blog/2025/02/25/javaland-2025-picks.html">2025</a></li>
  <li><a href="/blog/2024/03/02/javaland-2024-picks.html">2024</a></li>
  <li><a href="/blog/2022/02/15/javaland-2022-picks.html">2022</a></li>
  <li><a href="/blog/2019/03/11/javaland-2019-picks.html">2019</a></li>
  <li><a href="/blog/2018/03/12/javaland-holly-cummins.html">2018</a></li>
  <li><a href="/blog/2017/02/27/javaland-2017-picks.html">2017</a></li>
  <li><a href="/blog/2015/01/15/javaland-2015-conference-picks.html">2015</a></li>
  <li><a href="/blog/2014/03/03/eds-javaland-2014-picks.html">2014</a></li>
</ul>

<p>All times in local time zone. See <a href="https://meine.doag.org/events/javaland/2026/agenda/#eventDay.all">the program</a> for more details on each session.</p>

<h3 id="tuesday-10-march-2026">Tuesday, 10 March 2026</h3>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#eventDay.1773097200">View Tuesday’s full program</a></p>

<h4 id="0830---0910-sanssouci---generics--you-never-know-what-youre-gonna-get">08:30 - 09:10 Sanssouci - Generics – You Never Know What You’re Gonna Get</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6818">Program link</a></p>

<p><a href="https://mastodon.social/@hannotify">Bram Janssens</a> tackles one of Java’s most misunderstood features with this Forrest Gump-inspired title. Generics have been with us since Java 5, but I still regularly see code that doesn’t leverage them properly. This session promises to clear up common misconceptions. eb: I hope he covers the mechanics of type erasure.</p>

<h4 id="1000---1050-dome---keynote-ai-it-ai-nt-what-you-think">10:00 - 10:50 Dome - (KEYNOTE) AI: It AI-n’t What You Think!</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6812">Program link</a></p>

<p>This keynote from the legendary <a href="https://mastodon.social/@venkats">Dr. Venkat Subramaniam</a> is going to be packed. I’ve had the pleasure of seeing Venkat speak many times over the years, and he never disappoints. His ability to cut through hype and deliver practical, deeply technical content is unmatched. Given the current AI frenzy, I expect Venkat will provide much-needed clarity and pragmatism. eb: I’m honored to even be on the same program as this legendary gem of our field.</p>

<h4 id="1100---1140-das-studio---adr-madr-eadr--architekturentscheidungen-sichtbar-und-nachvollziehbar-gestalten">11:00 - 11:40 Das Studio - ADR, MADR, eADR – Architekturentscheidungen sichtbar und nachvollziehbar gestalten</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6870">Program link</a></p>

<p>Architecture Decision Records are one of those fundamental practices that every serious architect should master. <a href="https://mastodon.acm.org/@koppor">Dr. Oliver Kopp</a> covers not just ADRs but also their variants MADR and eADR. Having worked on large-scale enterprise systems for decades, I can attest that documenting architectural decisions pays dividends years later when you’re trying to understand why a particular choice was made.</p>

<h4 id="1200---1240-magic-cinema---the-trust-trap---security-von-coding-assistants">12:00 - 12:40 Magic Cinema - The Trust Trap - Security von Coding Assistants</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6899">Program link</a></p>

<p>eb: <a href="https://www.linkedin.com/in/clemens-huebner/">Clemends Hübner</a> covers an absolutely vital topic. As economic forces make it less and less viable to avoid total dependence on AI for turning the crank on the SDLC, code security may be the last bastion of human indespensibility. Let’s see what Clemens has to say.</p>

<h4 id="tie-1300---1340-dome---the-past-the-present-and-the-future-of-enterprise-java">Tie: 13:00 - 13:40 Dome - The Past, the Present, and the Future of Enterprise Java</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6879">Program link</a></p>

<p>My colleague <a href="https://mastodon.social/@ivar_grimstad">Ivar Grimstad</a> delivers what promises to be an authoritative look at where Enterprise Java has been and where it’s going. As someone who has been working with Enterprise Java since the J2EE 1.2 days, I’m very interested in Ivar’s perspective on our collective journey and future direction. eb: fun fact, the first time I gave a talk with the “Past, Present, and the Future of [something]” was <a href="https://javaee.github.io/javaserverfaces/presentations/w-jax-keynote-de-en.pdf">W-JAX 2005</a>. Of course, I wasn’t the first to originate that title pattern.</p>

<h4 id="tie-1300---1340-sanssouci---modern-java---ask-me-anything">Tie: 13:00 - 13:40 Sanssouci - Modern Java - Ask Me Anything</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6837">Program link</a></p>

<p>eb: This is a tough time slot. If you want server side, go to Ivar’s talk. If you want core Java, come here. <a href="https://nipafx.dev">Nicolai Parlog</a> is an excellent presenter, and for many people is the face of Java on <a href="https://www.youtube.com/results?search_query=nicolai+parlog+java">YouTube</a>. Combine the Java savvy of the JavaLand audience with Nicolai on stage in AMA format, and you’ll surely learn a lot.</p>

<h4 id="1400---1440-dome---von-spaghetti-code-zu-halluzinations-lasagne-baupläne-für-software-architektur-30">14:00 - 14:40 Dome - Von Spaghetti Code zu Halluzinations-Lasagne: Baupläne für Software-Architektur 3.0</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6880">Program link</a></p>

<p>Ingo Eichhorst’s provocatively titled talk about modern software architecture in the age of AI looks fascinating. The metaphor alone is worth attending for, but I expect the content will deliver substantive insights into how AI is changing our approach to architecture. eb: I’m very curious to see how well what the author says about the extent of hallucinations holds up. As was documented in this <a href="https://x.com/mattshumer_/status/2021256989876109403">famous</a> (and <a href="https://minutes.substack.com/p/tool-shaped-objects">famous for being famous</a>) essay, and as confirmed in my own lived experience, hallucinations are much less of a problem in models since Claude Sonnet 4.5.</p>

<h4 id="1500---1540-sanssouci---reset-fürs-lernen--warum-ki-uns-zwingt-weiterbildung-neu-zu-erfinden">15:00 - 15:40 Sanssouci - Reset fürs Lernen – Warum KI uns zwingt, Weiterbildung neu zu erfinden</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6839">Program link</a></p>

<p>eb: To survive the AI transition, developers need to once again reshape how they learn. I’m old enough to remember the technical book section in a physical book store as the way we learn. Then it became tutorials. And now it’s different again. This session from <a href="https://www.linkedin.com/in/michaela-schroetel/">Michaela Schrötel</a> seems essential to me.</p>

<h4 id="1600---1640-magic-cinema---82-bugs-i-collected-in-a-year-you-wont-believe-made-it-to-production">16:00 - 16:40 Magic Cinema - 82 Bugs I Collected in a Year You Won’t Believe Made It to Production</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6902">Program link</a></p>

<p>François Martin’s session looks like it will be both educational and entertaining. Learning from production bugs is one of the most effective ways to improve your craft. eb: I’m a big fan of these “here’s a bunch of bugs” sessions.</p>

<h4 id="1700---1740-bellevue---methodology-panelthe-mindset-of-software-development-practical-strategies-for-developers">17:00 - 17:40 Bellevue - Methodology Panel:The Mindset of Software Development: Practical Strategies for Developers</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6834">Program link</a></p>

<p>eb: Panel sessions always depend on the quality of the panelists, and the panelists for this session are not listed. However, I know <a href="https://ixchelruiz.com">Ixchel</a> and she has a great network and attracts talent. With her at the helm, this is sure to be compelling.</p>

<h3 id="wednesday-11-march-2026">Wednesday, 11 March 2026</h3>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#eventDay.1773183600">View Wednesday’s full program</a></p>

<h4 id="tie-0900---0940-bellevue---jakarta-data---das-ende-des-boilerplate-code">Tie: 09:00 - 09:40 Bellevue - Jakarta Data - Das Ende des Boilerplate Code?</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6905">Program link</a></p>

<p><a href="https://www.linkedin.com/in/thorbenjanssen/">Thorben Janssen</a> is an expert on Jakarta EE and persistence technologies. Jakarta Data promises to reduce boilerplate code in data access layers, and I’m eager to see how this specification will help developers. eb: As the co-release coordinator for Jakarta EE 11, which includes Jakarta Data, I can’t wait to find out how popular it is becomming.</p>

<h4 id="tie-0900---0940-dome---observing-project-valhalla">Tie: 09:00 - 09:40 Dome - Observing Project Valhalla</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6919">Program link</a></p>

<p>My old friend <a href="https://foojay.social/@cayhorstmann">Cay Horstmann</a> takes on Project Valhalla, one of the most ambitious projects in Java’s history. Cay has been a fixture in the Java community for decades, and his educational expertise makes him the perfect person to explain these complex concepts. Valhalla’s value types and primitive classes will fundamentally change how we write high-performance Java code. eb: Cay is an experienced teacher and lecturer, you’ll learn a lot.</p>

<h4 id="1000---1040-circuscelebration---legacy-architecture-refactoring-mit-archunit">10:00 - 10:40 CircusCelebration - Legacy Architecture Refactoring mit ArchUnit</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6916">Program link</a></p>

<p>Daniel Rosowski demonstrates using ArchUnit for legacy architecture refactoring. ArchUnit is a powerful tool for enforcing architectural constraints through tests, and applying it to legacy systems is particularly valuable.</p>

<h4 id="1200---1240-versailles---secrets-of-performance-tuning-java-on-kubernetes-leyden-heap-sizing-and-beyond">12:00 - 12:40 Versailles - Secrets of Performance Tuning Java on Kubernetes: Leyden, Heap Sizing and Beyond</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6951">Program link</a></p>

<p>My colleague <a href="https://mastodon.social/@brunoborges">Bruno Borges</a> covers performance tuning for Java on Kubernetes, including Project Leyden. Bruno and I worked together back when he was with Oracle, and I’ve always appreciated his deep technical knowledge combined with practical applicability.</p>

<h4 id="1400---1440-dome---the-evolution-of-design-patterns-in-the-age-of-ai">14:00 - 14:40 Dome - The Evolution of Design Patterns in the Age of AI</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6971">Program link</a></p>

<p>eb: I fondly remember the days when the pace of change of the practice of development was such that there was time for experts to come together and write books about the practice of development. Books such as “Design Patterns”. Those days appear to be gone, and are likely not to return. But that doesn’t stop Miro! Miro is undaunted and brings the pattern of doing a talk about design patterns to the domain of contemporary software development. I’m very curious.</p>

<h4 id="1500---1540-das-studio---aws-vs-azure-the-key-differences-that-matter">15:00 - 15:40 Das Studio - AWS vs Azure: The Key Differences That Matter</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6966">Program link</a></p>

<p>eb: I must tread carefully with this session. Because I’ve been working for the last six years, and given many talks, here and elsewhere, about my work to make Azure the best cloud for Java developers, I’m very curious to see what <a href="https://www.linkedin.com/in/artunsubasi/">Artun Subasi</a> has to say. From the abstract, it seems language agnostic.</p>

<h4 id="1600---1640-dome---from-crud-to-cognitive-modernizing-legacy-java-apps-with-embedded-ai">16:00 - 16:40 Dome - From CRUD to Cognitive: Modernizing Legacy Java Apps with Embedded AI</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6973">Program link</a></p>

<p>This is my own session where I explore how to modernize traditional CRUD applications by embedding AI capabilities. I’ll show practical approaches to taking existing Java EE/Jakarta EE applications and adding intelligent features without complete rewrites.</p>

<p>eb: If I wasn’t presenting at this time, I’d definitely attend <a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6955">Hilfe, ich habe den KI-Hype verpasst! Alles was man wissen muss in 105 Minuten</a> from Florian Sommer.</p>

<h4 id="1700---1740-circuscelebration---deterministische-unit-tests-für-multi-threaded-java">17:00 - 17:40 CircusCelebration - Deterministische Unit Tests für Multi-Threaded Java</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6962">Program link</a></p>

<p>Thomas Krieger tackles the challenging problem of writing deterministic unit tests for multi-threaded code. With virtual threads making concurrent programming more accessible, this skill is increasingly important.</p>

<h4 id="1700---1740-magic-cinema---api--some-rest-and-http-right-right">17:00 - 17:40 Magic Cinema - API = Some REST and HTTP, right? RIGHT?!</h4>

<p><a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.6992">Program link</a></p>

<p><a href="https://mastodon.social/@mehmandarov">Rustam Mehmandarov</a> challenges our assumptions about APIs. Given how many developers conflate REST with HTTP and miss the broader API landscape (GraphQL, gRPC, etc.), this session should provide valuable perspective. eb: good to see HATEOAS (which I like pronouncing HATE ee Ohs to rhyme with Cheerios) getting some attention in 2026.</p>

<p>See you in Rust in March!</p>

<h2 id="appendix---how-i-used-claude-cowork-to-write-this-post">Appendix - How I used Claude Cowork to write this post.</h2>

<h3 id="preconditions">Preconditions</h3>

<ol>
  <li>Claude Pro plan.</li>
  <li>Install Claude Cowork.</li>
  <li>
    <p>Install <a href="https://claude.com/chrome">Claude Chrome browser extension</a>.</p>

    <ul>
      <li>I was able to do this lazily while running Claude Cowork. I didn’t even have to restart Edge or Claude Cowork.</li>
    </ul>
  </li>
  <li>Initial prompt</li>
</ol>

<blockquote>
  <p>The attached files are my (mostly) annual “JavaLand Conference Session Picks” blog posts. Read them carefully to understand the intent, style, content, and rationale for these posts.</p>
</blockquote>

<blockquote>
  <p>Then look at the 2026 conference program at https://meine.doag.org/events/javaland/2026/agenda/#eventDay.all</p>
</blockquote>

<blockquote>
  <p>Then create a new post using the same style, voice, and format in the /Users/edburns/workareas/blog-jekyll/_posts directory for the 2026 edition of the post.</p>
</blockquote>

<h3 id="process">Process</h3>

<p>After Claude created the initial draft, I reviewed and iterated. It got a bunch of stuff wrong, but it was definitely helpful.</p>

<p>Stuff it got wrong included:</p>

<ul>
  <li>It’s not in Nürburgring. It’s in Rust.</li>
  <li>I asked it to scrape the socials, excluding X, for all speakers and update references accordingly. Again, the browser integration just worked.</li>
  <li>The reference to the 2025 post was incorrect. Had to fix it.</li>
  <li>I did not constrain it to only selecting one session per timeslot.</li>
  <li>I only found one wholesale hallucinated session. “Der Code ist nur die halbe Wahrheit - Warum gute Dokumentation dazugehört** from Samuel Nitsche.” Mr. Nitsche did speak last year, but does not appear in the conference program this year. I could find no evidence of this talk with simple web searching.</li>
</ul>

<p>Stuff it got right and which is kinda scary:</p>

<ul>
  <li>“Sessions from speakers you know personally (Venkat Subramaniam, Cay Horstmann, Bruno Borges, Ivar Grimstad, Josh Long, etc.)”</li>
</ul>

<h4 id="copy-paste-output-from-cowork">Copy paste output from Cowork</h4>

<p>I include here the copy/pasted output from Cowork in case anyone wants to see it.</p>

<blockquote>
  <p>The attached files are my (mostly) annual “JavaLand Conference Session Picks” blog posts. Read them carefully to understand the intent, style, content, and rationale for these posts.</p>
</blockquote>

<blockquote>
  <p>Then look at the 2026 conference program at https://meine.doag.org/events/javaland/2026/agenda/#eventDay.all</p>
</blockquote>

<p>Then create a new post using the same style, voice, and format in the /Users/edburns/workareas/blog-jekyll/_posts directory for the 2026 edition of the post.</p>

<p>Thought process</p>

<p>I’ll help you create a 2026 JavaLand Conference Session Picks blog post in your signature style. Let me start by understanding your previous posts and then examining the 2026 conference program.</p>

<p>Updated todo list tracking JavaLand blog research and conference program tasks</p>

<p>I’ve successfully read all your JavaLand conference picks posts from 2014-2025 and understand your distinctive style: personal, technically insightful, with historical context and references to your relationships with speakers.</p>

<p>However, I encountered an issue accessing the 2026 conference program. The website at https://meine.doag.org/events/javaland/2026/agenda/#eventDay.all returned a 403 error, which means it’s blocking automated access.</p>

<p>To proceed, I have a few options:</p>

<p>You could access the page yourself and copy/paste the session information to me
Share a screenshot of the conference schedule
Provide an alternative URL if there’s a different way to access the 2026 program
Export/download the schedule if the website offers that option
Once I have the 2026 session data, I’ll create your blog post following your established style:</p>

<p>Personal introduction referencing your history with JavaLand
Sessions organized by day with time and location
Your commentary on why each session matters
References to speakers you know
Technical insights with accessibility
Historical context and anecdotes
Links to previous year’s picks
How would you like to provide the 2026 conference program information?</p>

<blockquote>
  <p>Dude. Everyone tells me “use agentic AI” and “It can sign in as you to all your websites” and “it has a built-in headless browser that can browse the web just like you would”.</p>
</blockquote>

<p>What I can do instead:</p>

<p>You sign in, I take over from there - You can navigate to the site, sign in yourself, and then I can use the browser automation tools to navigate the authenticated session and extract the conference program data.
Alternative approach - If the conference program is available in a different format (PDF, export, or public page), I can work with that.
Manual data entry - You could copy/paste or screenshot the session information and I’ll process it.
I know this isn’t the seamless “do everything” experience you were hoping for, but the password boundary exists for good security reasons.</p>

<p>Would you like to try option 1 - where you sign in and then hand control over to me?</p>

<blockquote>
  <p>Yes please option 1.</p>
</blockquote>

<p>Thought process</p>

<p>Perfect! Let’s do this. I’ll guide you through the process.</p>

<p>First, let me get the browser context and set up a tab for you to sign in:</p>

<p>Chrome extension connection unavailable</p>

<p>I see the issue - the browser automation feature requires the “Claude in Chrome” extension to be installed and connected, but it’s not currently available in your session.</p>

<p>Here’s what we need:</p>

<p>The Claude in Chrome browser extension installed in your Chrome browser
The extension connected to this Claude session
Without the browser extension, I don’t have the ability to interact with web pages directly.</p>

<p>Your options now:</p>

<p>Install Claude in Chrome extension (if you want true browser automation):
This would enable me to control your browser after you sign in
But this requires setup time
Quick alternative - Manual approach (fastest for right now):
You navigate to https://meine.doag.org/events/javaland/2026/agenda/#eventDay.all
Sign in with your credentials
Copy the session information and paste it here, OR take screenshots
I’ll process it and create your blog post
Given that you want to get this done today, I’d recommend option 2 for now. Once you’re signed in, you could:</p>

<p>Take screenshots of the agenda pages by day
Or copy/paste the session listings
Which would you prefer?</p>

<blockquote>
  <p>Does it work with Microsoft Edge?</p>
</blockquote>

<p>Thought process</p>

<p>Good question! Microsoft Edge is Chromium-based, so many Chrome extensions do work in Edge. However, I’m not certain whether the “Claude in Chrome” extension specifically supports Edge.</p>

<p>To find out:</p>

<p>Check if “Claude in Chrome” is available in the Edge Add-ons store
Or try installing it from the Chrome Web Store (Edge can install Chrome extensions)
But honestly, for what we need right now - getting the JavaLand 2026 conference program - the manual approach will be faster than troubleshooting browser extension installation.</p>

<p>Here’s the quickest path forward:</p>

<p>Open https://meine.doag.org/events/javaland/2026/agenda/#eventDay.all in Edge (or any browser)
Sign in with your credentials
Then either:
Take screenshots of each day’s schedule (Tuesday, Wednesday, Thursday) and share them with me
Or copy/paste the session listings directly into our chat
I can work with screenshots or text - whatever is easier for you. Once I have the 2026 session data, I’ll analyze it based on your historical preferences and create a blog post that matches your distinctive style from the past 11 years.</p>

<p>Want to go ahead and grab that data?</p>

<blockquote>
  <p>The screen shot approach will not work. The schedule is too vast and that’s not what I did when I wrote the posts, as a human. You need to be able to interrogate the conference program yourself.</p>
</blockquote>

<blockquote>
  <p>Help me get this “Claude in Chrome” thing working.</p>
</blockquote>

<p>Thought process</p>

<p>You’re absolutely right - to write a proper picks post like you’ve always done, I need to be able to browse through all the sessions, analyze them, and make informed choices based on your historical preferences.</p>

<p>Here’s my constraint: Without the browser extension, I genuinely cannot browse the authenticated website session, even after you sign in.</p>

<p>The technical reality is:</p>

<p>WebFetch can’t access the site (403 error - likely requires authentication)
Browser automation requires the Claude in Chrome/Edge extension to interact with your authenticated session
Manual approaches (screenshots, copy/paste) won’t give me the analytical capability you need
To actually interrogate the conference program like you did as a human, I need:</p>

<p>The browser extension installed and connected. Then the workflow would be:</p>

<p>You sign in to the conference site
I can then navigate through the authenticated session, read all the sessions, analyze them, and select the ones that match your style and interests
Alternative that might work:</p>

<p>Does the conference site offer any way to:</p>

<p>Export the schedule data (CSV, JSON, etc.)?
Access via an API?
View a public version of the schedule (even if registration requires login)?
I want to help you create this post properly, but I need either the browser extension or the data in a format I can actually work with. What do you think is the best path forward?</p>

<blockquote>
  <p>I’m ready to install the extension. Tell me how.</p>
</blockquote>

<p>Thought process</p>

<p>Great! Here’s how to install the Claude in Chrome extension:</p>

<p>Installation Steps:</p>

<p>For Chrome:
Go to the Chrome Web Store
Search for “Claude in Chrome” or “Anthropic Claude Chrome”
Click “Add to Chrome” → “Add Extension”
For Microsoft Edge:
Go to the Edge Add-ons store, OR
Visit the Chrome Web Store (Edge can install Chrome extensions)
Search for “Claude in Chrome”
Click “Get” or “Add to Chrome” (it will work in Edge)
After Installation:
Look for the Claude icon in your browser toolbar
Click on it to activate/configure
You may need to sign in to your Claude account
The extension should connect to this conversation session
Once installed, we’ll:</p>

<p>Navigate to the JavaLand conference site
You sign in with your credentials
I take over and browse the entire program
I analyze sessions based on your 11-year history of preferences
Create your 2026 picks post in your signature style
Quick heads up: If you can’t find “Claude in Chrome” in the stores, let me know and we’ll troubleshoot. Some extensions have specific names or might be in beta.</p>

<p>Ready to try? Let me know once you’ve got it installed!</p>

<p>Uploaded image
image.jpeg</p>

<blockquote>
  <p>I did this.</p>
</blockquote>

<p>Thought process</p>

<p>Perfect! The extension is installed. Now let’s connect it to this session and get started.</p>

<p>Let me check if the browser extension is connected:</p>

<p>Retrieved available browser tabs and context information</p>

<p>Excellent! The extension is connected and I can see a browser tab. Now let’s navigate to the JavaLand conference site so you can sign in:</p>

<p>Captured screenshot of JavaLand 2026 conference agenda webpage</p>

<p>Perfect! I can access the conference schedule directly - no login needed! I can see the JavaLand 2026 agenda with sessions from March 9-12, 2026.</p>

<p>I can see sessions starting to appear. Let me browse through the entire program systematically to gather all the session information. I’ll go through each day:</p>

<p>Scrolled through JavaLand 2026 conference agenda page</p>

<p>Let me click on the “Alle” (All) tab to see all days at once, which will make it easier to browse through all sessions:</p>

<p>Attempted to read large webpage, hit character limit</p>

<p>Let me use JavaScript to extract the session data more efficiently:</p>

<p>Searched webpage for agenda-related links and sessions</p>

<p>Let me try clicking on one of the session cards to see the details:</p>

<p>Captured screenshot of JavaLand 2026 conference agenda page</p>

<p>Perfect! The session detail modal opened. I can see full information including:</p>

<p>Title, speaker, time, location
Abstract/description
Language, topic, format
Attendee interest (30 favorites)
This is exactly what I need. Let me close this modal and use a more efficient approach to extract all sessions. I’ll use a specialized agent to systematically browse and collect all the session data:</p>

<p>Extracted JavaLand 2026 conference sessions from agenda website systematically</p>

<p>Click</p>

<p>Extract JavaLand 2026 sessions
53 steps</p>

<p>Excellent! The explore agent did a great job extracting all the Tuesday sessions in detail. I have:- Monday sessions (limited - Community day)- Comprehensive Tuesday sessions (60+ sessions with full details)</p>

<p>But the agent wasn’t able to complete Wednesday and Thursday due to website interface complexitiesLet me update the todo and then continue extracting Wednesday and Thursday sessions myself before creating the blog post. Actually, given that I have very comprehensive Tuesday data, let me try to get Wednesday and Thursday data as well using the browser.
Done
Excellent! The agent extracted comprehensive data for Tuesday. Let me now get the Wednesday and Thursday sessions to have complete coverage:</p>

<p>Extracted all Wednesday/Thursday JavaLand 2026 conference sessions</p>

<p>Perfect! I now have comprehensive session data for all four days. Let me create your 2026 JavaLand picks blog post in your signature style:</p>

<p>Verified JavaLand 2026 blog post exists and updated todo list</p>

<p>Done! I’ve successfully created your JavaLand 2026 session picks blog post. Here’s what I accomplished:</p>

<p>What I Did
Analyzed your 11 years of JavaLand picks posts (2014-2025) to understand your distinctive style, voice, and preferences
Used browser automation to access the JavaLand 2026 conference program at meine.doag.org
Systematically extracted all sessions across all four days:
Monday (Community Day)
Tuesday (60+ technical sessions)
Wednesday (68 sessions)
Thursday (8 full-day workshops)
Selected sessions based on your historical preferences:
Architecture and design patterns
Advanced Java/JVM internals
Enterprise Java evolution
Testing and quality practices
Sessions from speakers you know personally (Venkat Subramaniam, Cay Horstmann, Bruno Borges, Ivar Grimstad, Josh Long, etc.)
Mix of German and English sessions
Created the blog post at /Users/edburns/workareas/blog-jekyll/_posts/2026-02-15-javaland-2026-picks.md
163 lines, 15KB
Markdown format with proper front matter
Your signature style: personal, technically insightful, with historical context
Referenced your 12-year JavaLand attendance history
Included your own Wednesday session with alternate recommendations
Links to all previous years’ picks
Key Sessions Featured
Keynote: Venkat Subramaniam on AI (115 attendees!)
Architecture: Clean Architecture, ADRs, Architecture myths (high attendance)
Java Evolution: Java 17→25 features, Project Valhalla
Enterprise Java: Jakarta Data, Spring Boot, Quarkus
Your session: “From CRUD to Cognitive” on Wednesday at 16:00
The post captures your voice perfectly - balancing technical depth with personal anecdotes, explaining why sessions matter rather than just listing them, and maintaining the conversational yet authoritative tone you’ve developed over 12 years of JavaLand attendance.</p>

<p>View your blog post</p>

<p>2026 02 15 javaland 2026 picks
Document · MD</p>

<blockquote>
  <p>Go through the post and for each individual mentioned find their socials. Look at Mastodon, BlueSky and LinkedIn. Don’t bother with X. X is for fascists.</p>
</blockquote>

<p>Thought process</p>

<p>I’ll go through the blog post and find social media profiles for each person mentioned on Mastodon, BlueSky, and LinkedIn. Let me start by reading the current post and then systematically search for each person’s profiles.</p>

<p>Read Jekyll blog post about JavaLand 2026 session picks</p>

<p>I’ll search for social media profiles (Mastodon, BlueSky, and LinkedIn) for each speaker mentioned in your blog post. This will require systematic web searches for each person. Let me use an agent to help with this research:</p>

<p>Found social media profiles for Java conference speakers</p>

<p>For every mention similar to “With 36 attendees already registered” remove it. I don’t pay attention to that metric.</p>

<p>Thought process</p>

<p>Perfect! Now I’ll update your blog post with the social media profiles I found, AND remove all the attendee count mentions as you requested. Let me make both changes:</p>

<p>Created blog post about JavaLand 2026 session picks</p>

<p>Done! I’ve updated your JavaLand 2026 picks blog post with both changes:</p>

<p>Changes Made:</p>
<ol>
  <li>Replaced Twitter/X links with Mastodon, BlueSky, and LinkedIn:
Mastodon (primary choice for most): Dr. Venkat Subramaniam, Marc Philipp, Bram Janssens, Dr. Oliver Kopp, Falk Sippach, Ivar Grimstad, Bruno Borges, Josh Long, Maarten Mulders, Rustam Mehmandarov, Cay Horstmann (on foojay.social)
BlueSky: Sven Woltmann, Tom Asel
LinkedIn: Jochen Mader, Thorben Janssen, Sascha Selzer, Christian Seifert</li>
  <li>Removed ALL attendee count mentions:
Removed phrases like:</li>
</ol>

<p>“With 36 attendees already registered”
“with 34 people signed up”
“With 115 attendees registered”
“has 73 registered attendees – the most popular non-keynote session I’ve seen!”
And all similar attendance metrics throughout
The post now focuses purely on the technical content and your personal insights about each session, without any popularity metrics. All social links now point to the decentralized/professional platforms you specified.</p>

<blockquote>
  <p>Change the filename of the post from 2026-02-15-javaland-2026-picks.md to 2026-02-13-javaland-2026-picks.md</p>
</blockquote>

<p>Renamed blog post file to 2026-02-13 date</p>

<p>Done! I’ve renamed the blog post file from 2026-02-15-javaland-2026-picks.md to 2026-02-13-javaland-2026-picks.md.</p>

<p>The file is now at: /Users/edburns/workareas/blog-jekyll/_posts/2026-02-13-javaland-2026-picks.md</p>

<p>The date in the YAML front matter (February 13, 2026) now matches the filename.</p>

<blockquote>
  <p>Did I ever include the Unconference in past posts?</p>
</blockquote>

<p>Thought process</p>

<p>Let me check your previous posts to see if you included the Community UnKonferenz:</p>

<p>Searched uploads for unconference mentions in past posts</p>

<p>Yes! In your 2025 picks post, you included a brief mention of the Unconference:</p>

<p>“There is also an Unconference on Community day from 15:00 - 18:30 in the Coca-Cola business°lounge 1. It’s impossible to list an Unconference in a session picks blog post because I have no idea what the content will be.”</p>

<p>In your 2026 post, I didn’t include the Community Day / UnKonferenz section at all. Would you like me to add it back in with a similar brief mention, or would you prefer to leave it out entirely?</p>

<blockquote>
  <p>Let’s leave it out.</p>
</blockquote>

<p>Thought process</p>

<p>Sounds good! The 2026 post will focus on the main conference days (Tuesday, Wednesday, Thursday) without the Monday Community Day section. The current version is already set up that way.</p>

<p>Your updated blog post is ready at: /Users/edburns/workareas/blog-jekyll/_posts/2026-02-13-javaland-2026-picks.md</p>

<p>With:</p>

<p>✅ All Twitter/X links replaced with Mastodon, BlueSky, or LinkedIn
✅ All attendee count mentions removed
✅ Filename matches the February 13, 2026 date
✅ No Community Day/UnKonferenz section</p>

<blockquote>
  <p>The 2025 variant of the post had a “Program link” paragraph for each session, that was a link to the actual session. Do that for this year’s iteration.</p>
</blockquote>

<p>Thought process</p>

<p>I’ll add program links for each session. Let me go back to the conference website to get the specific agenda IDs for each session:</p>

<p>Task lookup failed - invalid task ID provided</p>

<p>Let me try a different approach and get the agenda IDs directly using JavaScript:</p>

<p>Searched for agenda ID in page modal and DOM elements</p>

<p>Let me try switching to the Timeline view which might have direct links:</p>

<p>Clicked browser element and executed session extraction script on JavaLand agenda page</p>

<p>Let me try the Ansicht (list) view which might have direct links:</p>

<p>Navigated JavaLand 2026 agenda page, searched for session links unsuccessfully</p>

<p>The website structure has changed from 2025 and doesn’t expose individual agenda IDs as easily. Let me add day-level program links instead, which will still help readers navigate to the sessions:</p>

<p>Read JavaLand 2026 session picks blog post</p>

<p>I see you’ve been actively editing the post! Since the 2026 website doesn’t expose individual agenda IDs like 2025 did (they use modals instead of direct links), I’ll add day-level program links which is the best I can extract:</p>

<p>Updated JavaLand 2026 blog post with schedule links</p>

<p>Done! I’ve added program links for each day (Tuesday, Wednesday, Thursday) at the top of each section.</p>

<p>The 2026 conference website structure has changed from 2025 - sessions now open in modals rather than having individual agendaId URLs. So instead of per-session links like 2025, I’ve added day-level links which take readers directly to that day’s full schedule where they can find any session.</p>

<p>Each day now has a “View [Day]’s full program” link that goes directly to that day’s agenda view.</p>

<blockquote>
  <p>Look more carefully at the 2025 version. Every single session has a program link. Add those also.</p>
</blockquote>

<p>Thought process</p>

<p>I understand - you want individual program links for each session like in 2025. Let me extract the specific agenda IDs for each session. I’ll need to inspect the website more carefully:</p>

<p>Extracted conference session titles and IDs from webpage</p>

<p>Excellent! I found the session IDs. Let me now systematically extract all the agenda IDs for the sessions in your blog post:</p>

<p>Extracted all session agenda IDs from JavaLand 2026 website</p>

<p>Perfect! Now I’ll add the individual program links for each session. Let me update the blog post:</p>

<p>Read JavaLand 2026 picks blog post; edited 30 session descriptions with speaker links</p>

<p>Perfect! I’ve added individual program links for all 29 sessions in your blog post. Each session now has its own <a href="https://meine.doag.org/events/javaland/2026/agenda/#agendaId.XXXX">Program link</a> right after the session title, exactly like your 2025 post format.</p>

<p>All sessions now have program links:</p>

<p>Tuesday: 14 sessions (IDs 6818, 6823, 6812, 6870, 6856, 6857, 6871, 6900, 6879, 6880, 6866, 6832, 6902, 6869)
Wednesday: 13 sessions (IDs 6905, 6919, 6925, 6916, 6951, 6969, 6957, 6965, 6989, 6972, 6973, 6962, 6992)
Thursday: 2 workshops (IDs 7503, 7001)
Plus the day-level links at the top of each day’s section for quick navigation.</p>

<p>Your JavaLand 2026 picks post is now complete with: ✅ All Twitter/X links replaced with Mastodon, BlueSky, or LinkedIn
✅ All attendee count mentions removed ✅ Individual program links for every single session ✅ Day-level program links for each day ✅ Filename set to 2026-02-13</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Cross posted at dev.to.]]></summary></entry><entry><title type="html">I have made another impressively insignificant contribution to Wikipedia</title><link href="/blog/2025/08/18/gpt-5-research-and-trivial-wikipedia.html" rel="alternate" type="text/html" title="I have made another impressively insignificant contribution to Wikipedia" /><published>2025-08-18T15:14:00-04:00</published><updated>2025-08-18T15:14:00-04:00</updated><id>/blog/2025/08/18/gpt-5-research-and-trivial-wikipedia</id><content type="html" xml:base="/blog/2025/08/18/gpt-5-research-and-trivial-wikipedia.html"><![CDATA[<p>It’s been nearly 19 years since my last <a href="/blog/2006/10/16/i-have-made-impressively-insignificant-contribution-wikipedia.html">trivial Wikipedia contribution</a>,so high time for another one.</p>

<p>I recently enjoyed watching <a href="https://www.imdb.com/title/tt1896747/">Fly Me to the Moon (2024)</a>, which got me curious about what the original TV broadcast of the Apollo 11 moon landing looked like. I found this <a href="https://www.youtube.com/watch?v=WQDjy2csPP0&amp;t=141s">video</a> which, to my surprise, had a lunar lander set very similar to the one in the movie. But this one is clearly labeled as CBS NEWS SIMULATION.</p>

<p>I was further curious about the names of the actors that protrayed Neil Armstrong and Buzz Aldrin? I went to ChatGPT and had <a href="https://chatgpt.com/share/6898357f-0e58-8000-98a8-0c9fd3cc436f">this dialog</a>. It could not find the identities of the actor, but it offered to research the matter and get back to me. I said, “sure”. What do you know but a couple weeks later it sends me an email, even though ChatGPT said it could not send me an email.</p>

<blockquote>
  <p><strong>Findings (new):</strong></p>

  <ul>
    <li>
      <p>The best-documented “stand-in” for CBS’s Apollo 11 simulation was <strong>Scott MacLeod</strong>, a Grumman lunar module consulting pilot/test engineer. He appeared on-air in a suit, climbed down the LM ladder on the Bethpage moonscape, and “simulated Armstrong’s and Aldrin’s duties during the moon landing.”</p>
    </li>
    <li>
      <p>Evidence also indicates <strong>Tom Sylvester</strong> of <strong>ILC Industries</strong> (the Apollo suit maker) suited up for CBS’s Bethpage filming prior to the landing; contemporary captions describe him climbing down a full-scale LM for CBS’s simulation package (likely B-roll used in coverage). This aligns with community documentation that CBS used Grumman/ILC personnel rather than hired actors for the second suited role. (Primary: archival captioned images; secondary: space-history forum recollections.)</p>
    </li>
    <li>
      <p>PBS’s production history and CBS’s own retrospective confirm the <strong>Grumman moonscape set</strong> at Bethpage and that <strong>two suited “astronauts”</strong> were sometimes shown, but they do <strong>not</strong> name the second individual on-air.</p>
    </li>
  </ul>

  <p><strong>Bottom line:</strong>
A named, high-confidence ID exists for the commander role (<strong>Scott MacLeod</strong>). The likely second suited performer was <strong>Tom Sylvester (ILC)</strong> for pre-taped segments, though CBS’s public records don’t explicitly credit him in the broadcast itself.</p>
</blockquote>

<p>Pleased with this asynchronous research feature, I decided to update the Wikipedia page <a href="https://en.wikipedia.org/wiki/Apollo_11_in_popular_culture#Films_and_television">Apollo 11 in popular culture</a>, which I copy here in case my edit gets reverted.</p>

<blockquote>
  <p>CBS news coverage of the Apollo 11 landing itself included several aspects of portrayal. Grumman engineer Scott MacLeod portrayed Neil Armstrong descending from the steps of a full-scale model of Lunar Module Eagle so viewers could see what was happening before the live TV broadcast from the moon commenced.<a href="https://www.collectspace.com/news/news-081621a-scott-macleod-test-astronaut-cronkite.html">19</a> Tom Sylvester portrayed Buzz Aldrin during the same broadcast.<a href="https://www.flickr.com/photos/apollo4ever/51738415385/in/photolist-2owPCX3-2nBDkMS-2htaTmr-2mPWUmz-5meN7Y-2kShh8P-2ndDPMi-2ndDHPw-2mKWj4D-389dHK-2dzTfiR-5tAwna-4mrbGe-2jqYMz1-vEi2b-5t7DDn-XXAgNC-5ifBZf-Fw2Cvs-2jmj6eK-2gfLZwd-2cWYTF9-2ez8Qj7-vEi29-4xUWzN-4JsgQq-2LN9Sk-4PJHC7-5WXLCV-a2GEF-4yzZ9z-5nqBDJ-2pF4E95-FArL7E-22JaEAF-X9CLvV-4JsgQC-a2GGa-4PGE8T-2VCVDi-9V8BT-hoKJg-2MTzTU-a2GFe-U1qENN-5puZLD-2aWUH8x-2isHfXJ-a2Jor-tp4Bg">20</a></p>
</blockquote>]]></content><author><name></name></author><summary type="html"><![CDATA[It’s been nearly 19 years since my last trivial Wikipedia contribution,so high time for another one.]]></summary></entry><entry><title type="html">Ed’s JUG tour around JavaLand 2025</title><link href="/blog/2025/02/27/javaland-2025-jug-tour.html" rel="alternate" type="text/html" title="Ed’s JUG tour around JavaLand 2025" /><published>2025-02-27T15:50:00-05:00</published><updated>2025-02-27T15:50:00-05:00</updated><id>/blog/2025/02/27/javaland-2025-jug-tour</id><content type="html" xml:base="/blog/2025/02/27/javaland-2025-jug-tour.html"><![CDATA[<p>I’m very excited to do my typical JUG tour around JavaLand. Here are my planned stops this year. I hope we can meet in person somewhere on the road.</p>

<p><strong>Update 2025-03-12, added two more dates: Vienna and Berlin</strong>.</p>

<ol>
  <li>
    <p>Java Vienna Meetup 17 March - <a href="https://www.meetup.com/java-vienna/events/305897191/?eventOrigin=group_upcoming_events">Lightning talk: How to get trustworthy enterprise AI in your favorite IDE</a></p>
  </li>
  <li>
    <p>Global AI Bootcamp 18 March - <a href="https://globalai.community/chapters/vienna/events/global-ai-bootcamp-vienna/">How to get trustworthy enterprise AI in your favorite IDE</a></p>
  </li>
  <li>
    <p>JUG Leipzig 24 March - <a href="https://www.jugsaxony.org/timeline/2025/3/24/EnterpriseAI-in-IDE">How to get trustworthy enterprise AI in your trusted IDE</a></p>
  </li>
  <li>
    <p>JUG Berlin 25 March - <a href="https://www.meetup.com/jug-bb/events/306661697/?slug=jug-bb&amp;eventId=306661697">How to get trustworthy enterprise AI in your trusted IDE</a></p>
  </li>
  <li>
    <p>JUG Braunschweig 26 March - <a href="https://www.jug-ostfalen.de/event/2025/03/26/langchain4j.html">Java and AI with LangChain4j</a></p>
  </li>
  <li>
    <p>JUG Bielefeld 27 March - <a href="https://www.meetup.com/java-user-group-bielefeld/events/306454726/">Java and AI with LangChain4j</a></p>
  </li>
  <li>
    <p>JUG Darmstadt 8 April - <a href="https://www.jug-da.de/2025/04/LangChain4j/">Java and AI with LangChain4j</a></p>
  </li>
  <li>
    <p>JUG Pforzheim 9 April - Open talk, demo of latest extensions</p>
  </li>
  <li>
    <p>JUG Stuttgart 10 April - <a href="https://www.meetup.com/jugstuttgart/events/306177115/">Java and AI with LangChain4j</a></p>
  </li>
</ol>]]></content><author><name></name></author><summary type="html"><![CDATA[I’m very excited to do my typical JUG tour around JavaLand. Here are my planned stops this year. I hope we can meet in person somewhere on the road.]]></summary></entry><entry><title type="html">Ed’s JavaLand 2025 Session Picks</title><link href="/blog/2025/02/25/javaland-2025-picks.html" rel="alternate" type="text/html" title="Ed’s JavaLand 2025 Session Picks" /><published>2025-02-25T15:50:00-05:00</published><updated>2025-02-25T15:50:00-05:00</updated><id>/blog/2025/02/25/javaland-2025-picks</id><content type="html" xml:base="/blog/2025/02/25/javaland-2025-picks.html"><![CDATA[<p>Cross posted at <a href="https://dev.to/edburns00/eds-javaland-2025-session-picks-3p2i">dev.to</a>.</p>

<p>I’m very blessed to have the opportunity to speak at the 11th anniversary <a href="https://javaland.eu/">JavaLand conference</a>. This is the second year the conference will be held at <a href="https://thevendry.com/venue/197499/nurburgring-nurburg-germany">Nürburgring</a>. It turns out it took even more time to walk between sessions. Maybe this year will be better.</p>

<p>Here are my previous session picks posts.</p>

<ul>
  <li><a href="/blog/2024/03/02/javaland-2024-picks.html">2024</a></li>
  <li><a href="/blog/2022/02/15/javaland-2022-picks.html">2022</a></li>
  <li><a href="/blog/2019/03/11/javaland-2019-picks.html">2019</a></li>
  <li><a href="/blog/2018/03/12/javaland-holly-cummins.html">2018</a></li>
  <li><a href="/blog/2017/02/27/javaland-2017-picks.html">2017</a></li>
  <li><a href="/blog/2015/01/15/javaland-2015-conference-picks.html">2015</a></li>
  <li><a href="/blog/2014/03/03/eds-javaland-2014-picks.html">2014</a></li>
</ul>

<p>All times in local time zone in JavaLand.  The program can change so please see <a href="https://meine.doag.org/events/javaland/2025/agenda/#eventDay.all">the program</a> for more details on each session.</p>

<h3 id="monday-31-march-2025-community-day">Monday, 31 March 2025 Community day</h3>

<p>There is also an Unconference on Community day from 15:00 - 18:30 in the Coca-Cola business°lounge 1. It’s impossible to list an Unconference in a session picks blog post because I have no idea what the content will be.</p>

<h4 id="1500---1700-lindner-congress-hotel-grid-4---architektur-kata">15:00 - 17:00 Lindner Congress Hotel Grid 4 - Architektur Kata</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5376">Program link</a></p>

<p><a href="https://www.linkedin.com/in/sebastian-rose-9b0617ab/">Sebastian Rose</a> and <a href="https://www.ahus1.de/">Alexander Schwartz</a> are promising an interesting learning opportunity about software architecture. The idea is to build feedback gathering into your design process so it happens as early as possible. It seems like common sense, but I suspect there is a lot about the way they propose to do it that is novel and new. I think it’s worth a look.</p>

<h4 id="1715---1830-lindner-congress-hotel-grid-4---easily-illustrate-impactful-flipcharts">17:15 - 18:30 Lindner Congress Hotel Grid 4 - Easily illustrate impactful flipcharts</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5383">Program link</a></p>

<p>I haven’t used flipcharts much, but they do seem very accessible and durable. I think I should learn more about how to use them. Sebastian and Alexander present a session inspired by the lessons from the book <a href="https://www.amazon.com/Flipchart-Coach-Profi-Tipps-Visualisieren-Pr%C3%A4sentieren-Flipchart/dp/3941965948">Der Flipchart Coach</a>. Because I have become a huge fan of the book <a href="https://www.amazon.com/Presentation-Patterns-Techniques-Crafting-Presentations/dp/0321820800/">Presentation Patterns</a>, I appreciate the power of a session that is based on a book. As I enter the third decade of my career, it’s high time I learn how to use flipcharts to make impact.</p>

<h3 id="tuesday-1-april-2025">Tuesday 1 April 2025</h3>

<h4 id="tuesday-0830---1010-ringkino---deserialization-exploits-in-java-why-should-i-care">Tuesday 08:30 - 10:10 ring°kino - Deserialization exploits in Java: why should I care?</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5333">Program link</a></p>

<p>This talk has several things going for it. First and foremost, the speaker, <a href="https://brianvermeer.nl/">Brian Vermeer</a> is a seasoned veteran with a stellar track record of engaging talks. Second the topic. I’m familiar with deserialization attacks back from my JSF days: client side state saving at one time used something like serialization.  But this talk goes beyond Java to also XML, JSON, and YAML serialization. An attack vector as old as seralization attacks means the prior art for attackers is vast. This one is important.</p>

<h4 id="tuesday-1000---1040-ringarena---fried-begrüßung-and-adam-bien-keynote">Tuesday 10:00 - 10:40 ring°arena - Fried Begrüßung and Adam Bien Keynote</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5162">Program link</a></p>

<p>Fried’s Begrüßung is always entertaining. In a bold statement of the German identity of JavaLand, Adam Bien’s keynote will be delivered in German. This is fine for me, but it does mark a first for the big stage keynote. In any case, Adam Bien is a Java legend. I had a personal hand in creating some of the acronyms he mentions, so I expect to love this one.</p>

<h4 id="tuesday-1100---1140-bitburger-event-center-teil-a---building-ai-powered-applications-in-java">Tuesday 11:00 - 11:40 Bitburger Event Center Teil A - Building AI powered applications in Java</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5163">Program link</a></p>

<p>There is no question that powerful forces in our industry have bet the future AI and are doing everything they can to make that future happen. I look to my old friend and former PowerPoint karaoke sparring partner <a href="https://andresalmiray.com/">Andres Almiray</a> to sort the hype from the reality.</p>

<h4 id="tuesday-1200---1240">Tuesday 12:00 - 12:40</h4>

<p>Because these two sessions are so very different, I have no problem recommending them both.</p>

<h5 id="ringarena">ring°arena</h5>

<p>If you want a soft skills session at this time, go with <a href="https://www.linkedin.com/in/sophie-k%C3%BCster-1901b4149/">Sophie Küster</a>’s <a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5164">One of the Lads - Things I’m tired of hearing about women in tech</a>. First, let me appeal to your self-interest. By learning about workplace concerns are important to a cohort including a large and growing segment of the workforce, you’l improve your workplace effectiveness. Second, Sophie is an excellent and engaging speaker.</p>

<h5 id="bitburger-event-center-teil-b">Bitburger Event Center Teil B</h5>

<p>If you want a technical sesion at this time go with <a href="https://developer-sam.de/">Samuel Nitsche</a>’s <a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5171">Code Reading - Die unterschätzte Superkraft</a>. Given that AI is so great at parsing text, but not so great at reasoning about it, I believe having this skill in your head will give you a big edge.</p>

<h4 id="tuesday-1300---1340-coca-cola-businesslounge-7---bergwerk-sboms-die-stückliste-für-sichere-softwarearchitektur">Tuesday 13:00 - 13:40 Coca-Cola business°lounge 7 - Bergwerk SBOMs: Die Stückliste für sichere Softwarearchitektur</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5212">Program link</a></p>

<p>I am choosing to highlight this session from <a href="https://www.linkedin.com/in/richard-attermeyer/">Richard Attermeyer</a> because ensuring all your software produces SBOMs is a great way to be a part of the solution for building world less prone to hacking. Sooner or later, all of us will be victims. We as software professionals have a duty to make things better, or at least atone for some of the damage we have already caused.</p>

<h4 id="tuesday-1400---1440-ringarena---no-dependencies-pure-java-aillm-integration">Tuesday 14:00 - 14:40 ring°arena - No Dependencies: Pure Java AI/LLM integration</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5166">Program link</a></p>

<p>The legendary <a href="https://adam-bien.com">Adam Bien</a> comes to JavaLand. Adam’s approach for decades has been to show how you can accomplish most of what you need in an enterprise software stack with a minimum of external dependencies. As the previous session from Richard Attermeyer showed, every dependency you introduce is a security risk (that’s why everything needs an SBOM, just so you can check.) While this is true, it’s even better to minimize your dependencies as much as possible. Don’t miss this one!</p>

<h4 id="tuesday-1500---1540-bmw-m-showroom---learning-genaillm-programming-with-langchain4j-and-testcontainers">Tuesday 15:00 - 15:40 BMW M Showroom - Learning GenAI/LLM programming with langchain4j and Testcontainers</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5207">Program link</a></p>

<p>Mr. Testcontainer himself, <a href="https://wittek.dev/">Kevin Wittek</a> is an experienced speaker, software developer, and <a href="https://www.youtube.com/watch?v=LfbDw8f-AbM">musician</a>. Given the centrality of testing to all software development in the past and future, and the centrality of AI to all software development in the present and future, this combination will be very important to understand. Kevin will show you how.</p>

<h4 id="tuesday-1600---1640-coca-cola-businesslounge-6-a-survey-of-cloud-readiness-for-jakarta-ee-11">Tuesday 16:00 - 16:40 Coca-Cola business°lounge 6 A survey of cloud readiness for Jakarta EE 11</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5208">Program link</a></p>

<p>The first of my three sessions is in this time slot. If you’re interested in Jakarta EE 11, I ask you to consider it.</p>

<p>My session will teach:</p>
<ul>
  <li>What’s new in Jakarta EE 11 and why it’s interesting to Java developers.</li>
  <li>An overview of how to run Jakarta EE 11 on Azure, Google, and AWS.</li>
  <li>A deep dive in how to run Jakarta EE 11 on Azure Container Apps.</li>
</ul>

<p>Otherwise, you may want to check out this one.</p>

<h5 id="bitburger-event-center-teil-a---walking-skeleton---softwarearchitektur-ohne-fleisch">Bitburger Event-Center Teil A - Walking Skeleton - Softwarearchitektur ohne Fleisch?</h5>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5175">Program link</a></p>

<p>I had the extreme pleasure of seeing Alastair Cockburn give a keynote when I presented at <a href="https://web.archive.org/web/20060925101953/http://www.jaoo.dk/speakers/show_speaker.jsp?oid=27">Jaoo 2006</a>. Apparently this is one of Alastair Cockburn’s more recent ideas on the further evolution of agile development. <a href="https://www.sippsack.de/">Falk Sippach</a> is an experienced speaker, JUG leader, and iJUG contributor. I look forward to this talk.</p>

<h4 id="tuesday-1700---1740-bitburger-event-center-teil-b---boost-your-performance-and-developer-productivity-with-jakarta-ee-11">Tuesday 17:00 - 17:40 Bitburger Event-Center Teil B - Boost Your Performance and Developer Productivity with Jakarta EE 11</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5169">Program link</a></p>

<p>My colleague <a href="https://www.linkedin.com/in/ivargrimstad">Ivar Grimstad</a> gives the productivity angle on the latest iteration of the standard for enterprise Java.</p>

<h4 id="tuesday-1800---1840-bitburger-event-center-teil-b---what-is-new-in-microprofile">Tuesday 18:00 - 18:40 Bitburger Event-Center Teil B - What is New in MicroProfile?</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5320">Program link</a></p>

<p>In a perfect complement to Ivar’s session, my colleague <a href="https://www.linkedin.com/in/emilyfhjiang/">Emily Jiang</a> gives an overview in the latest version of MicroProfile. MicroProfile sits alongside Jakarta EE as a collection of standards adopted by multiple vendors for enterprise Java.</p>

<h4 id="tuesday-1900---1940-lindner-congress-hotel-grid-4---from-zero-to-secured-live-coding-a-jakarta-ee-rest-app-with-microprofile--jwt">Tuesday 19:00 - 19:40 Lindner Congress Hotel Grid 4 - From Zero to Secured: Live-Coding a Jakarta EE REST App with MicroProfile &amp; JWT</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5225">Program link</a></p>

<p>As Adam Bien has long shown, the power of combining open standard specifications in an a la carte fashion tends to help delivering maintainable enterprise software on schedule and within budget. This session from <a href="https://hanno.codes">Hanno Embregts</a> is another example:</p>

<ul>
  <li>Live-coding a RESTful app from scratch using the latest versions of JAX-RS, JPA, and MicroProfile.</li>
  <li>Implementing JWT-based authentication.</li>
  <li>Documenting REST endpoints with OpenAPI.</li>
  <li>Creating a responsive frontend with Angular and connecting it to the REST app.</li>
</ul>

<h3 id="wednesday-02-april-2025">Wednesday, 02 April 2025</h3>

<h4 id="0900---0940-bitburger-event-center-teil-a---technische-und-soziale-muster-für-teamübergreifende-integration">09:00 - 09:40 Bitburger Event-Center Teil A - Technische und soziale Muster für teamübergreifende Integration</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5244">Program link</a></p>

<p>I’ve been working and leading distributed teams for two decades, but there is always something new to learn. This intriguing session from <a href="https://twitter.com/alexksbr">Alexander Kaserbacher</a> seems to use a pattern language to ease the problem of cross-team colaboration.</p>

<h4 id="1000---1040-bitburger-event-center-teil-a---high-performance-serverless-java-on-aws">10:00 - 10:40 Bitburger Event-Center Teil A - High performance Serverless Java on AWS</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5245">Program link</a></p>

<p>Even though my own employer’s serverless compute offer supports Java very well, it’s always useful to see another vendor’s take on the problem set. <a href="https://www.linkedin.com/in/vadymkazulkin/">Vadym Kazulkin</a> seems to have a solid command of the space, so let’s check him out.</p>

<!--

#### 11:00 - 11:40 ring°arena Die unsichtbare Hand im Code

Of course [Hendrik Ebbers](https://twitter.com/hendrikEbbers) and [Sandra Parsick](https://twitter.com/SandraParsick) will do an amazing job with the community keynote. I don't know how they are going to follow-up [last year's impactful installment](https://www.doag.org/de/home/news/javaland-2023-community-keynote-teilt-eure-geschichte/), which dealt with some weighty topics. As an insider at one of these IT-Giganten, I'll be curious to see what they think is really happening inside our "Geheime Räte" (hint, at least for my employer, it is always customer obsession).

-->

<h4 id="1200---1240-business-center---bergwerk---how-to-get-trustworthy-ai-in-your-favorite-ide">12:00 - 12:40 Business Center - Bergwerk - How to get trustworthy AI in your favorite IDE</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5292">Program link</a></p>

<p>I’m very excited about this session where I get to talk about my teammate’s amazing work in making GitHub Copilot available in IntelliJ IDEA and Eclipse. I’ll weave this work into my talk about how Microsoft is making AI fun and safe for you to use at work.</p>

<h4 id="1300---1340-bitburger-event-center-teil-b---validating-llms---a-true-story">13:00 - 13:40 Bitburger Event-Center Teil B - Validating LLMs - a true story</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5239">Program link</a></p>

<p>Having ony recently discovered the concept of <a href="https://www.swebench.com/">SWE-bench</a> and the notion that LLMs can compete against eachother for supremacy, this talk from <a href="https://www.linkedin.com/in/emilyfhjiang/">Emily Jiang</a> seems very timely.</p>

<h4 id="1400---1440-coca-cola-businesslounge-6---von-java-ee-6-zu-quarkus-eine-migrationsreise-mit-openrewrite">14:00 - 14:40 Coca-Cola business°lounge 6 - Von Java EE 6 zu Quarkus: Eine Migrationsreise mit OpenRewrite</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5303">Program link</a></p>

<p>I’m always excited to see what becomes of old JSF apps. This talk from <a href="https://www.linkedin.com/in/christian-gruemme/">Christian Grümme</a> should be fun.</p>

<h4 id="1500---1540-bitburger-event-center-teil-b---technical-enshittification-why-it-is-broken-and-how-to-fix-it">15:00 - 15:40 Bitburger Event-Center Teil B - Technical Enshittification: Why IT is Broken and How to Fix It</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5241">Program link</a></p>

<p>I was delighted to see my old pal <a href="https://twitter.com/jbaruch">Baruch Sadogursky</a> on the program. The provocative term in his title was coined by American malcontent Cory Doctorow to describe how unchecked exponential monetization leads to progressively worse user experiences. The causes of Cory Doctorow’s problem are well understood and almost impossible to improve. I hope Baruch’s analysis is more hopeful.</p>

<h4 id="1600---1640-bitburger-event-center-teil-b---jakarta-ee-community-panel">16:00 - 16:40 Bitburger Event-Center Teil B - Jakarta EE Community Panel</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5242">Program link</a></p>

<p>I’m very happy to participate in this panel. Come ask me anything about Jakarta EE.</p>

<h4 id="1700---1740-coca-cola-businesslounge-1---82-bugs-i-collected-in-a-year-you-wont-believe-made-it-to-production">17:00 - 17:40 Coca-Cola business°lounge 1 - 82 Bugs I Collected in a Year You Won’t Believe Made It to Production</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5270">Program link</a></p>

<p>The idea of taking a birding approach to software bugs is very novel. Let’s see what <a href="https://linkedin.com/in/fran%C3%A7oismartin">Francois Martin</a> has to say about it.</p>

<h3 id="thursday-03-april-2025">Thursday, 03 April 2025</h3>

<h4 id="0900---1700-lindner-congres-hotel-grid-3---java-with-al-on-azure-container-apps-and-kubernetes">09:00 - 17:00 Lindner Congres Hotel Grid 3 - Java with Al on Azure Container Apps and Kubernetes</h4>

<p><a href="https://meine.doag.org/events/javaland/2025/agenda/#agendaId.5364">Program link</a></p>

<p>Azure Container Apps is the premiere cloud environment for Java workloads on
Azure. It combines the power, scale, and reliability of infrastructure-as-a-service offerings such as Kubernetes with the ease-of-use of a platform-as-a-service offering.</p>

<p>Azure Kubernetes Service is the premier cloud environment for advanced enterprise workloads on Azure, including Java. It is the industry standard Kubernetes on the hyperscale Azure cloud.</p>

<p>Azure Developer CLI is a tool for quickly standing up Azure infrastructure to run your application. This workshop will cover three common Java scenarios: Spring, and Quarkus on Azure Container Apps, and Jakarta EE on Azure Kubernetes Service.</p>

<p>All three scenarios are enabled by Azure Developer CLI. The AI aspect will be run through the scenarios in two dimensions:</p>

<ol>
  <li>
    <p>AI for the act of writing software and</p>
  </li>
  <li>
    <p>AI for use in the actual domain of the software. The Spring and Quarkus scenarios will show a microservice application in the domain of a localized weather forecasting service.</p>
  </li>
</ol>

<p>The AI in this domain is a conversational chat about the localized weather forecast.</p>

<p>The Jakarta EE scenario will show a monolithic application, CargoTracker, running on Azure Kubernetes service.</p>

<p>The AI in this domain is a shortest-path calculation for routing cargo.</p>

<p>A USD $50 Azure credit for use in the workshop and afterward is provided to all participants.</p>

<p>Bonus:</p>

<p>Every participant is entitled to a 30-minute 1:1 career counseling session teleconference with Ed, scheduled at their convenience. For Ed’s credentials in this domain, see his abstract from JavaLand last year https://meine.doag.org/events/javaland/2024/agenda/#agendaId.3689 .</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Cross posted at dev.to.]]></summary></entry><entry><title type="html">Using the tmate GitHub Action from Max Schmitt to aid debugging GitHub Actions workflows</title><link href="/blog/2024/12/04/tmate-github-actions-debug.html" rel="alternate" type="text/html" title="Using the tmate GitHub Action from Max Schmitt to aid debugging GitHub Actions workflows" /><published>2024-12-04T13:30:00-05:00</published><updated>2024-12-04T13:30:00-05:00</updated><id>/blog/2024/12/04/tmate-github-actions-debug</id><content type="html" xml:base="/blog/2024/12/04/tmate-github-actions-debug.html"><![CDATA[<h3 id="executive-summary">Executive Summary</h3>

<p>This post shows how to use the <a href="https://github.com/mxschmitt/action-tmate">action-tmate</a> GitHub Action to allow you to SSH into the runner for your GitHub Actions workflow.</p>

<h3 id="details">Details</h3>

<h4 id="prerequisites">Prerequisites</h4>

<ul>
  <li>
    <p>You have an existing GitHub Actions workflow that runs, at least somewhat.</p>
  </li>
  <li>
    <p>You have set up your SSH key with GitHub and can use it to push commits to the repo which has the GitHub Actions workflow.</p>
  </li>
</ul>

<h4 id="steps">Steps</h4>

<ol>
  <li>Put these lines in your GitHub Actions workflow. Personally I always have a <code class="language-plaintext highlighter-rouge">preflight</code> job that sets up some very basic things. I put the below lines as the first thing in the first job <strong>after</strong> <code class="language-plaintext highlighter-rouge">preflight</code>.</li>
</ol>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>      after-preflight:
          needs: preflight
          runs-on: ubuntu-latest
          steps:
              - name: Setup tmate session
                uses: mxschmitt/action-tmate@v3
                timeout-minutes: 120
                with:
                  detached: true
</code></pre></div></div>

<ol>
  <li>
    <p>When the workflow reaches the <code class="language-plaintext highlighter-rouge">after-preflight</code> job, you’ll see a bunch of tmate related stuff in the job log, something like:</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Run mxschmitt/action-tmate@v3
Get:1 file:/etc/apt/apt-mirrors.txt Mirrorlist [142 B]
Hit:2 http://azure.archive.ubuntu.com/ubuntu jammy InRelease
Hit:6 https://packages.microsoft.com/repos/azure-cli jammy InRelease
Get:3 http://azure.archive.ubuntu.com/ubuntu jammy-updates InRelease [128 kB]
Get:7 https://packages.microsoft.com/ubuntu/22.04/prod jammy InRelease [3632 B]
Get:4 http://azure.archive.ubuntu.com/ubuntu jammy-backports InRelease [127 kB]
Get:5 http://azure.archive.ubuntu.com/ubuntu jammy-security InRelease [129 kB]
Get:8 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main armhf Packages [15.7 kB]
Get:9 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main arm64 Packages [40.2 kB]
Get:10 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages [172 kB]
Get:11 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [2180 kB]
Get:12 http://azure.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [1177 kB]
Get:13 http://azure.archive.ubuntu.com/ubuntu jammy-updates/multiverse Translation-en [11.5 kB]
Get:14 http://azure.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages [1956 kB]
Get:15 http://azure.archive.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [957 kB]
Fetched 6897 kB in 1s (6399 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
xz-utils is already the newest version (5.2.5-2ubuntu1).
openssh-client is already the newest version (1:8.9p1-3ubuntu0.10).
0 upgraded, 0 newly installed, 0 to remove and 38 not upgraded.
ssh redacted@nyc1.tmate.io

Notice: SSH: ssh redacted@nyc1.tmate.io
Notice: or: ssh -i &lt;path-to-private-SSH-key&gt; redacted@nyc1.tmate.io
</code></pre></div>    </div>
  </li>
  <li>
    <p>Here’s where the magic happens. Max Schmitt’s tmate action somehow uses the SSH key you configured as the SSH key for the connection. So when you run either of those two commands, the ssh “just works” and you are able to get into the runner. I find this is useful to be able to poke around and debug things.</p>
  </li>
</ol>

<p>Thanks of course to <a href="https://github.com/mxschmitt">Max Schmitt</a> for creating and maintaining the software and to my colleagues <a href="https://github.com/majguo">Jianguo</a> and <a href="https://github.com/backwind1233/">Zhihao</a> for reducing my <a href="https://aka.ms/rockstarignorance/">2nd order ignorance</a> about it.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Executive Summary]]></summary></entry><entry><title type="html">How well did Jakarta EE 11 respond to the needs of developers?</title><link href="/blog/2024/09/23/jakarta-ee-11-incorporating-feedback.html" rel="alternate" type="text/html" title="How well did Jakarta EE 11 respond to the needs of developers?" /><published>2024-09-23T16:15:00-04:00</published><updated>2024-09-23T16:15:00-04:00</updated><id>/blog/2024/09/23/jakarta-ee-11-incorporating-feedback</id><content type="html" xml:base="/blog/2024/09/23/jakarta-ee-11-incorporating-feedback.html"><![CDATA[<p>Cross posted at <a href="https://dev.to/edburns/how-well-did-jakarta-ee-11-respond-to-the-needs-of-developers-1824">dev.to</a>.</p>

<h3 id="executive-summary">Executive Summary</h3>

<p>The <a href="https://jakarta.ee/committees/steering/">Jakarta Steering Committee</a> chartered the <a href="https://jakartaee.github.io/platform/">Jakarta EE Platform project</a> with the goal of incorporating developer feedback in the development of EE 11. This blog post reviews the performance of the Platform Project and awards a <a href="https://gpacalculator.io/how-to-calculate-gpa/">GPA</a> of 3.43 on a 4 point scale of achieving this goal.</p>

<h3 id="introduction">Introduction</h3>

<p>I am humbled and honored to find myself in a position of helping to deliver the next iteration of Jakarta EE. I’ve held many roles in J2EE/Java EE/Jakarta EE over the decades: implementer, spec lead, advocate, author, tester, and more. My current role, however, is a new one for me release co-coordinator.</p>

<p>In this role, I co-lead (along with Arjan Tijms) the Jakarta EE Platform project, which is responsible for delivering the finished Jakarta EE specification (and component specifications), the corresponding TCK, and at least on ratifying compatible implementation for all of the specifications. Importantly, there need not be one single monolithic implementation that satisfies all the component TCKs at the same time, but there must be one single monolithic implementation that passes the Platform TCK.</p>

<p>In the spirit of transparency that I was fortunate enough to start over <a href="https://www.ridingthecrest.com/blog/2004/06/28/welcome-javaserver-tm-faces-implementation-project.html">two decades ago</a>, this blog post examines how well the <a href="https://jakartaee.github.io/platform/">Jakarta EE Platform project</a> did during EE 11 in meeting one of the goals set for the Platform project by the <a href="https://jakarta.ee/committees/steering/">Steering Committee</a>: incorporate developer feedback.</p>

<h3 id="underpromise-and-overdeliver">Underpromise and overdeliver</h3>

<p>Institutional memory is the way groups of humans learn from mistakes and avoid repeating them. By that definition, I hope we can all agree that institutional memory is important and worth preserving. Because software is <a href="https://www.routledge.com/The-Laws-of-Software-Process-A-New-Model-for-the-Production-and-Management-of-Software/Armour/p/book/9780849314896">executable knowledge</a>, a very long running open-source software project is a special kind of institutional memory. A project that is a long running ecosystem of long running open-source projects is pretty much the pinnacle of special. With all that specialness in mind, what does it mean to incorporate developer feedback?</p>

<p>It is far easier to show responsiveness to developer feedback when the possible costs of a committing a mistake are contained within a single project. In light of the high possible costs, the Jakarta EE 11 platform project was intentionally modest with our goals for incorporating developer feedback. This is our implementation of the tried and true strategy of “underpromise and overdeliver”.</p>

<p>Leading up to Jakarta EE 11, we conducted an open community discussion on requirements for Jakarta EE 11 and captured them in this <a href="https://docs.google.com/document/d/1m-dkvbL0iFFzitO4vt1SVq6GGSJyFdCDM2NU_FzGS10/edit#heading=h.il1isyaqw4eb">Jakarta EE 11 Discussion</a> document. Let’s review the community input we received, which was primarily developer-driven, and see how we did in EE11.</p>

<h3 id="underpromise">Underpromise</h3>

<ul>
  <li>
    <p>Jakarta Data</p>
  </li>
  <li>
    <p>Jakarta NoSQL</p>
  </li>
  <li>
    <p>Adopt Java SE 11, 17, 21 new features and Breaking Changes</p>
  </li>
  <li>
    <p>Virtual Threads</p>
  </li>
  <li>
    <p>TCK Refactoring</p>
  </li>
  <li>
    <p>CDI Centric</p>

    <ul>
      <li>
        <p>CDI replacing managed beans</p>
      </li>
      <li>
        <p>CDI repleacing EJB</p>
      </li>
    </ul>
  </li>
  <li>
    <p>Resolve redundant HTTP stacks: Servlet and REST</p>
  </li>
  <li>
    <p>MicroProfile and Jakarta Alignment</p>
  </li>
  <li>
    <p>CORS support</p>
  </li>
  <li>
    <p>Jakarta Config</p>
  </li>
  <li>
    <p>Make it easier to migrate from one vendor to another</p>
  </li>
</ul>

<h3 id="mixed-delivery">Mixed delivery</h3>

<p>I’m going to group the delivery in four buckets: over-delivered, delivered, somewhat delivered, did not deliver.</p>

<h4 id="over-delivered">Over-delivered</h4>

<ul>
  <li>Jakarta Persistence - programmatic configuration instead of persistence.xml and a lot more <a href="https://gavinking.substack.com/p/a-summary-of-jakarta-persistence">Gavin King blog post</a></li>
  <li>Jakarta Security - dynamically choose an authentication mechanism <a href="https://github.com/jakartaee/security/issues/311">security-311</a></li>
</ul>

<h4 id="delivered">Delivered</h4>

<ul>
  <li>
    <p>Jakarta Data</p>

    <ul>
      <li>Yes, this new specification is present in the platform.</li>
    </ul>
  </li>
  <li>
    <p>Adopt Java SE 11, 17, 21 new features and Breaking Changes.</p>

    <ul>
      <li>Yes, there are numerous specs that take advantage of new language features from 11 - 21.</li>
    </ul>
  </li>
  <li>
    <p>TCK Refactoring (we will deliver this. We’re holding the release for it).</p>

    <ul>
      <li>The Jakarta EE Platform TCK is a vital software component for delivering the value proposition of IT investment stability on the scale of decades. The software of the TCK has been accruing technical debt due to lack of maintenance investment. In Jakarta EE 11 we are bringing the TCK up to date with the state of the art of testing tools. This investment will enable better compatibility testing and lower the barrier to adding more tests as the Jakarta EE platform evolves.</li>
    </ul>
  </li>
  <li>
    <p>API Flexibility, i.e. no more Umbrella JARs.</p>
    <ul>
      <li>No more questions like “do I have to wait for Jakarta EE xx” to have this feature?</li>
      <li>Jakarta EE Platform APIs are now just a collection of default APIs.</li>
      <li>Individual specs can be excluded or upgraded by the users as they wish,</li>
      <li>New specs can be added as well.</li>
      <li>This makes Jakarta EE platform as flexible as Spring Boot, but without having the implementation baggage in your application, the best of both worlds!</li>
    </ul>
  </li>
</ul>

<h4 id="somewhat-delivered">Somewhat delivered</h4>

<ul>
  <li>
    <p>Virtual Threads</p>

    <ul>
      <li>The concurrency specification has rigorously specified annotation attribute that requires implementations to take advantage of virtual threads if it is available in the runtime. If you’re running on Java 21 or higher, you get virtual threads when you use the annotation attribute. If you’re running on 17, you don’t.</li>
    </ul>
  </li>
  <li>
    <p>CDI Centric</p>

    <ul>
      <li>
        <p>CDI replacing managed beans.</p>

        <ul>
          <li>
            <p>We did</p>

            <ul>
              <li>
                <p>remove the <code class="language-plaintext highlighter-rouge">@ManagedBean</code> annotation.</p>
              </li>
              <li>
                <p>Move the “integration” parts of CDI from the CDI spec to the platform spec.</p>
              </li>
              <li>Jakarta Concurrency adds scheduling to the <code class="language-plaintext highlighter-rouge">@Asynchronous</code> annotation to replace the <code class="language-plaintext highlighter-rouge">@Scheduled</code> annotation on EJBs <a href="https://github.com/jakartaee/concurrency/pull/271">concurrency-271</a></li>
              <li>
                <p>Injecting Concurrency resources into CDI beans instead of using <code class="language-plaintext highlighter-rouge">@Resource</code> in an EJB <a href="https://github.com/jakartaee/concurrency/pull/348">concurrency-348</a>.</p>
              </li>
              <li>
                <p>Removed managed beans support in Jakarta REST.</p>
              </li>
              <li>Qualifiers for persistence units in Persistence - allow injecting persistence context in a CDI-idiomatic way.</li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <p>New Java features</p>

    <ul>
      <li>
        <p>records as embeddables and IDs in Jakarta Persistence.</p>
      </li>
      <li>
        <p>records in Expression Language.</p>
      </li>
      <li>
        <p>records in Validation (formerly Bean Validation) <a href="https://github.com/jakartaee/validation-spec/pull/275">validation-275</a>.</p>
      </li>
      <li>
        <p>Flow API in Concurrency <a href="https://github.com/jakartaee/concurrency/pull/368">concurreny-368</a>.</p>
      </li>
    </ul>
  </li>
  <li>
    <p>MicroProfile and Jakarta Alignment</p>

    <ul>
      <li>
        <p>We did</p>

        <ul>
          <li>Create the Jakarta Security MicroProfile Security bridge spec.</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

<h4 id="did-not-deliver">Did not deliver</h4>

<ul>
  <li>
    <p>Jakarta NoSQL</p>

    <ul>
      <li>This did not pass the ballot at the beginning of the EE 11 development cycle. In my opinion, the reasons were non-technical, and therefore can be resolved for EE 12.</li>
    </ul>
  </li>
  <li>
    <p>Resolve redundant HTTP stacks: Servlet and REST</p>

    <ul>
      <li>This is a very big one. In my opinion, it would take a major vendor standing behind this idea and dedicating significant resources to make it happen, likely with donating work to competitors so they could also do the same.</li>
    </ul>
  </li>
  <li>
    <p>CORS support</p>

    <ul>
      <li>This one did not even emerge on my radar.</li>
    </ul>
  </li>
  <li>
    <p>Jakarta Config</p>

    <ul>
      <li>This one seems to be stuck in a “MicroProfile Config is good enough”, and thus is falling between the cracks. I think we’d have to convince the MicroProfile project to allow this to move from MicroProfile to the Jakarta EE Core Profile specification.</li>
    </ul>
  </li>
  <li>
    <p>Make it easier to migrate from one vendor to another</p>

    <ul>
      <li>This one is antithetical to the business interests of each vendor, so I don’t see this one getting much attention.</li>
    </ul>
  </li>
</ul>

<h3 id="summary">Summary</h3>

<p>Let’s get quantitative. For each item in the <strong>Underpromise</strong> list, I’ll give us a letter grade. A for over-delivered or delivered, B for somewhat delivered, D for did not deliver.</p>

<table>
  <tbody>
    <tr>
      <td>Feedback to incorporate</td>
      <td>Grade</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td>Jakarta Data</td>
      <td>A</td>
    </tr>
    <tr>
      <td>Jakarta NoSQL</td>
      <td>D</td>
    </tr>
    <tr>
      <td>Adopt Java SE 11, 17, 21 new features and Breaking Changes</td>
      <td>A</td>
    </tr>
    <tr>
      <td>Virtual Threads</td>
      <td>A</td>
    </tr>
    <tr>
      <td>TCK Refactoring</td>
      <td>A</td>
    </tr>
    <tr>
      <td>CDI Centric</td>
      <td>A</td>
    </tr>
    <tr>
      <td>Resolve redundant HTTP stacks: Servlet and REST</td>
      <td>D</td>
    </tr>
    <tr>
      <td>MicroProfile and Jakarta Alignment</td>
      <td>B</td>
    </tr>
    <tr>
      <td>CORS support</td>
      <td>D</td>
    </tr>
    <tr>
      <td>Jakarta Config</td>
      <td>D</td>
    </tr>
    <tr>
      <td>Make it easier to migrate from one vendor to another</td>
      <td>D</td>
    </tr>
  </tfoot>
</table>

<p>With this list, we only scored a 2.54 GPA. Not so great. If we strike from the list the developer feedback requests that I judge are not realistic to include (CORS, Redundant HTTP stacks, Jakarta Config, Make it easier to migrate from one vendor to another), we get a better grade: 3.43. Not bad, but we have room to grow.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Cross posted at dev.to.]]></summary></entry><entry><title type="html">Ed’s JavaLand 2024 Session Picks</title><link href="/blog/2024/03/02/javaland-2024-picks.html" rel="alternate" type="text/html" title="Ed’s JavaLand 2024 Session Picks" /><published>2024-03-02T20:20:00-05:00</published><updated>2024-03-02T20:20:00-05:00</updated><id>/blog/2024/03/02/javaland-2024-picks</id><content type="html" xml:base="/blog/2024/03/02/javaland-2024-picks.html"><![CDATA[<p>Cross posted at <a href="https://dev.to/edburns/eds-javaland-2024-session-picks-23cd">dev.to</a>.</p>

<p>I’m very blessed to have the opportunity to speak at the 10th anniversary JavaLand conference. It will be very different to not be at PhantasiaLand this year, but I am so fortunate to have been there all the previous years. It’s just as well since I was starting to not be able to handle the Black Mamba roller coaster anymore.  Also, I’m hoping it takes less time to walk between sessions at this <a href="https://thevendry.com/venue/197499/nurburgring-nurburg-germany">new venue</a>.</p>

<p>Since this is the tenth anniversary of JavaLand, and I have had the extreme good fortune at presenting at every one of them, I dug up the links of all my previous session picks posts. See how far we’ve come together!</p>

<ul>
  <li><a href="/blog/2022/02/15/javaland-2022-picks.html">2022</a></li>
  <li><a href="/blog/2019/03/11/javaland-2019-picks.html">2019</a></li>
  <li><a href="/blog/2018/03/12/javaland-holly-cummins.html">2018</a></li>
  <li><a href="/blog/2017/02/27/javaland-2017-picks.html">2017</a></li>
  <li><a href="/blog/2015/01/15/javaland-2015-conference-picks.html">2015</a></li>
  <li><a href="/blog/2014/03/03/eds-javaland-2014-picks.html">2014</a></li>
</ul>

<p>All times in local time zone in JavaLand.  See <a href="https://www.javaland.eu/de/programm/">the program</a> for more details on each session.</p>

<h3 id="tuesday-09-april-2024">Tuesday, 09 April 2024</h3>

<h4 id="0830---0940-ringacademy-rest-vs-grpc">08:30 - 09:40 ring°academy REST vs. gRPC</h4>

<p>The first slot before Fried’s famous Begrüßung is unenviable, from a speaker’s perspective, but there were some great ones. I chose the REST vs gRPC talk from <a href="https://www.linkedin.com/in/sebastian-tiemann-467206263/?originalSubdomain=de">Sebastian Tiemann</a>. It looks hard core technical. Both REST and gRPC are venerable ancient technologies at this point, so it’s amazing how absolutely essential they still are. Let’s see what Sebastian has to say.</p>

<h4 id="0930---1040-ringarena-fried-begrüßung-and-opening-keynote">09:30 - 10:40 ring°arena Fried Begrüßung and opening Keynote</h4>

<p>I’m sure Fried will pull out all the stops for the 10th anniversary of JavaLand. The actual keynote looks great too. I don’t know <a href="https://www.linkedin.com/in/shelley-lambert-6120961/?originalSubdomain=ca">Shelly Lambert</a>, but the philosophy of being self-aware and focusing on improvement is very good to learn and apply.</p>

<h4 id="1100---1140-ringarena-modern-java-in-action">11:00 - 11:40 ring°arena Modern Java in Action</h4>

<p>When I spoke of the great job that advocates are doing in my <a href="https://www.heise.de/hintergrund/Ed-Burns-Java-kann-jede-andere-aktuelle-Sprache-in-den-Schatten-stellen-9636703.html">pre-conference interview on Heise.de</a>, <a href="https://twitter.com/nipafx">Nicolai Parlog</a>, was one of the ones I had in mind. It’s so important to show only the bits of Java that represent current recommended usage, and gloss over, or even omit entirely the parts that still remain for backward compatibility rather than being correct to continue to use. I’m confident Nicolai will do this.</p>

<h4 id="1200---1240-bitburger-event-center-teil-b-prepare-for-jakarta-ee-11">12:00 - 12:40 Bitburger Event-Center Teil B Prepare for Jakarta EE 11</h4>

<p><img src="/blog/assets/20240302-bitburburger-edburns.jpg" width="200" alt="Author enjoying Bitburger 0.0" style="float: left;" /> As a longtime fan of Das gute Bitburger Pils, I’m excited that my first of three back-to-back talks on Tuesday is in the Bitburger Event Center. I’m confident that part B is the best part.</p>

<p>My talk is Prepare for Jakarta EE 11. I am giving this talk on behalf of <a href="https://twitter.com/ivar_grimstad">Ivar Grimstad</a> due to Ivar being at the very poorly scheduled, from a JavaLand attendee’s perspective, <a href="https://devnexus.org/">DevNexus</a>. However, I’m well qualified to give the talk because I’m the <a href="https://projects.eclipse.org/content/project-lead-election-edward-burns-jakarta-ee-platform">release co-coordinator for Jakarta EE 11</a>. Come to this talk to hear what’s new in the very soon-to-be-released Jakarta EE 11.</p>

<p>If I wasn’t giving a talk in this timeslot, I’d attend visit <strong>Nürburgring Hotel Grid 1 - 3</strong> for “The (Unknown) Nifty Details of Maven Plugin Configuration” by <a href="https://twitter.com/khmarbaise">Karl Heinz Marbaise</a>. Maven plugins are super powerful, and usable in both Maven and Gradle. But how much do you know about getting the most from the plugins you use? This talk has the answers.</p>

<h4 id="1300---1430-nürburgring-hotel-grid-4-ist-meine-java-anwendung-bereit-für-ide-cloud-wass-kann-ich-wie-migrieren">13:00 - 14:30 Nürburgring Hotel Grid 4 Ist meine Java-Anwendung bereit für ide Cloud? Wass kann ich wie migrieren?</h4>

<p>I’m delighted to have the opportunity to present this session with my colleague and longtime collaborator <a href="https://twitter.com/skriemhild">Sandra Ahlgrimm</a>. In this new-to-JavaLand format 80-minute session. We’ll cover how to get your Jakarta EE application into the cloud, on App Service, Container Apps, AKS, ARO, and VMs.</p>

<p>If I wasn’t giving a talk in this timeslot, I’d visit <strong>ring°arena</strong> to attend Der Mensch in Mittlepunkt: Moderne Developer Experience im Enterprise-Context, by <a href="https://www.f-i.de/Ueber-uns/mehralsTech/TeamFI/People-Stories/Nico-Enking">Nico Enking</a> and <a href="https://www.linkedin.com/in/jan-christoph-schlieker/?originalSubdomain=de">Jan-Christoph Schlieker</a>. This session looks like it will introduce the role of a developer experience curator in the context of enterprise software development. This role seems like it can really help increase the success of software projects.</p>

<p>Due to the 80-minute format of my session, there’s time for another if you don’t want to attend it. In this case, I’d recommend Philosophy4Devs by <a href="https://twitter.com/ruezd">Rüdiger zu Dohna</a>. Do any readers remember famous fluff talker <a href="https://twitter.com/tedneward">Ted Neward</a>? I recall Ted was very proud of his philosophy background. Considering how well he’s done for himself, you may want to check out this talk.</p>

<h4 id="1500---1540-ringkino-pair-programming-with-github-copilot">15:00 - 15:40 ring°kino Pair Programming with GitHub Copilot</h4>

<p><a href="https://twitter.com/fbascheper">Frederieke Scheper</a> promises to show us how well GitHub Copilot delivers on its promise to let you “focus on solving bigger problems by spending less time creating boilerplate and repetitive code.” I’ve used it myself, and I can say it does pretty well at that, for many classes of problem. Also, no slides. Venkat style!</p>

<h4 id="1500---1640-mediacenter-continuous-integration-and-continuous-delivery-cicd-for-jakarta-ee-applications-or-nürburgring-hotel-grid-1---3-going-aot-everything-you-need-to-know-about-graalvm-for-java-applications">15:00 - 16:40 media°center Continuous Integration and Continuous Delivery (CI/CD) for Jakarta EE Applications or Nürburgring Hotel Grid 1 - 3 Going AOT: Everything you need to know about GraalVM for Java Applications</h4>

<p>This slot conflicts with my 16:00 talk “Developer Career Masterplan”, but if I wasn’t giving that talk, I’d absolutely go to one of these two.</p>

<ul>
  <li>Continuous Integration and Continuous Delivery (CI/CD) for Jakarta EE Applications</li>
  <li>Going AOT: Everything you need to know about GraalVM for Java Applications</li>
</ul>

<p>The CI/CD one from Jakarta EE expert <a href="https://www.udemy.com/user/salmankhan">Luqman Saeed</a>. In the nineteen years since the introduction of Hudson, CI/CD has gone from being the sign of a mature software development shop to an absolutely must-have way that work is done. Even so, it’s still not easy to perform at scale. This talk promises to show how to do it with Jakarta EE applications.</p>

<p>The GraalVM one from <a href="https://twitter.com/alina_yurenko">Alina Yurenko</a> is a hot topic and Alina is a great and very experienced speaker. I like how Alina will focus on the production aspects. If I was attending, I’d be keen to ask about Project Leyden and other aspects of how one handles debugging of a native Java app.</p>

<h4 id="1600---1640-ringarena-developer-career-masterplan-build-your-path-to-senior-level-and-beyond">16:00 - 16:40 ring°arena Developer Career Masterplan: Build your path to senior level and beyond</h4>

<p>Way back in 2008, I wrote a book where I interviewed a bunch of successful programmers and asked them all about their professional journey. My pals Heather and Bruno have taken a similar approach but supplemented it with their own insights. I had the honor of being on the other side of the microphone for this new book. After having read it, I can say it’s a great read. If you want to see what it’s about, come to this talk.</p>

<p>If I wasn’t giving a talk at this time, I’d visit <strong>ring°academy</strong> to attend NEWCOMER: C4 - Documentation to blow (up) your mind! The talk will introduce the C4 model for documentation. I’d love to see what “diagrams as code” is all about. I’ve seen the promise of similar systems since the late 1990s, but so far none of them have really had a lasting impact. Maybe this time it’s different.</p>

<h4 id="1700---1740-bitburger-event-center-teil-b-was-jeder-java-entwickler-über-strings-wissen-sollte">17:00 - 17:40 Bitburger Event-Center Teil B Was Jeder Java-Entwickler über Strings wissen Sollte</h4>

<p>Strings? In 2024? You bet! The humble String class is so ubiquitous yet has seen so many evolutions (especially for a final class) over the years it’s worth a whole session. Also, this supports my point with Nicolai Parlog’s session above. Yes, Java is old, but it is also getting better all the time. With this session from JSF Expert Group alumnus <a href="https://www.ostfalia.de/cms/de/pws/bernd-mueller/index.html">Bernd Müller</a> you can see how this applies to String.</p>

<h4 id="1800---1840-ringacademy-newcomer-ai-ethics-in-software-engineering">18:00 - 18:40 ring°academy NEWCOMER: AI Ethics in Software Engineering</h4>

<p>After observing firsthand some of the impact of the roll out of GitHub copilot on secondary school computer science education, I’m keenly interested in this topic. <a href="https://www.linkedin.com/in/moritz-schmidt-3a3131221/?originalSubdomain=de">Moritz Schmidt</a> will explore the hoary topic of the ethical impact of AI.</p>

<h3 id="wednesday-10-april-2024">Wednesday, 10 April 2024</h3>

<h4 id="0900---0940-ringkino-dont-be-afraid-of-the-final-boss-explain-ideas-for-improvement-to-management">09:00 - 09:40 ring°kino Don’t be afraid of the final boss: Explain ideas for improvement to management</h4>

<p>Don’t miss this one. This touches on a topic I addressed on <a href="/blog/2019/04/21/tdc-floripa-career-tips-from-someone-who-knows-a-lot-of-rockstar-programmers.2019.html">2019-04-21</a>: “Communicating your value add”. That post was about communicating your value add as an individual contributor.</p>

<blockquote>
  <p>Working for big companies such as IBM, SGI, Sun, and Oracle, I’ve had the chance to sample many useful corporate trainings. Even the most mundane of these, such as “Insider Trading”, offer at least one nugget of novelty. The corporate training I want to talk about here is one I took at Sun at least twelve years ago. It was called “Communicating Your Value Add” and it was all about how to articulate your contribution to your company at performance review time. The class included a handout, “Behavior/Performance-Based Questions” whose complete text I reproduce below. For discussion and reference, let’s call this perf_handout.</p>
</blockquote>

<p>This session from <a href="https://www.linkedin.com/in/cn-seifert/?originalSubdomain=de">Christian Seifert</a> shows how to do that for your entire team. Put the two together and you have a powerful technique for showing your contribution to the bottom line. Such efforts make it more painful for them to lay you off, and also make it easier for you to get a better job someplace else, should that be appropriate.</p>

<h4 id="1000---1040-nürburgring-hotel-grid-1---3-improving-your-skills-with-the-debugger">10:00 - 10:40 Nürburgring Hotel Grid 1 - 3 Improving your skills with the debugger</h4>

<p>The program committee did a great job this year. With <a href="#1700---1740-bitburger-event-center-teil-b-was-jeder-java-entwickler-über-strings-wissen-sollte">Bernd’s Strings talk</a> and this one from <a href="https://sessionize.com/bouke-nijhuis">Bourke Nijhuis</a>, you really get some much needed fundamentals. Even if you are late-in-career like I am, continually reinforcing fundamentals is very important. <img src="/blog/assets/20240306-fundamentals.gif" width="200" alt="Spring training fundamentals" style="float: right;" /></p>

<h4 id="1100---1140-ringarena-die-unsichtbare-hand-im-code">11:00 - 11:40 ring°arena Die unsichtbare Hand im Code</h4>

<p>Of course <a href="https://twitter.com/hendrikEbbers">Hendrik Ebbers</a> and <a href="https://twitter.com/SandraParsick">Sandra Parsick</a> will do an amazing job with the community keynote. I don’t know how they are going to follow-up <a href="https://www.doag.org/de/home/news/javaland-2023-community-keynote-teilt-eure-geschichte/">last year’s impactful installment</a>, which dealt with some weighty topics. As an insider at one of these IT-Giganten, I’ll be curious to see what they think is really happening inside our “Geheime Räte” (hint, at least for my employer, it is always customer obsession).</p>

<h4 id="1200---1240-coca-cola-businesslounge-a-fun-and-absurd-introduction-to-vector-databases">12:00 - 12:40 Coca-Cola business°lounge A fun and absurd introduction to Vector Databases</h4>

<p>My day job is mostly about the prosaic, but critical revenue and generating legacy Java apps. It’s far away from new stuff like Vector Databases. As such, I need to expend extra effort to stay up on such things. This talk from <a href="https://www.crunchbase.com/person/alexander-chatzizacharias">Alexander Chatzizacharias</a> is a great and time-efficient way to make me smarter about it.</p>

<h4 id="1300---1340-bitburger-event-center-teil-b-pimp-your-jakarta-ee-applications">13:00 - 13:40 Bitburger Event-Center Teil B Pimp your Jakarta EE Applications</h4>

<p>I view this talk as an essential supplement to <a href="#1200---1240-bitburger-event-center-teil-b-prepare-for-jakarta-ee-11">my 12:00 - 12:40 Tuesday talk</a>. <a href="https://twitter.com/dirkweil">Dirk Weil</a> looks like he’s going to cover lots of great stuff, including migration with OpenRewrite. I hope my booth duty schedule permits me to attend.</p>

<h4 id="1400---1440-ringarena-prompt-engineering-für-entwickler">14:00 - 14:40 ring°arena Prompt-Engineering für Entwickler</h4>

<p>When I first started using GPT for serious work questions, I thought the phrase “prompt engineering” was far too grand a term for what I was doing. However, after working more and more with it, I realize there is a skill to it, and it pays to develop the skill. Check out this talk from my old pal <a href="https://twitter.com/RalfDMueller">Ralf Müller</a> and become a prompt engineering pro.</p>

<h4 id="1500---1540-bitburger-event-center-teil-b-learn-pattern-matching-through-puzzlers">15:00 - 15:40 Bitburger Event-Center Teil B Learn Pattern Matching Through Puzzlers</h4>

<p>This session from my old pal and JSF Expert Group alumnus <a href="https://twitter.com/cayhorstmann">Cay Horstmann</a> covers yet another amazing fundamental programming language technology brought to Java developers. I’m pretty sure <a href="https://twitter.com/nipafx">Nicolai Parlog</a> will have touched on it in his session on <a href="#1100---1140-ringarena-modern-java-in-action">Tuesday</a>, but Cay, as a professional educator, will give you a deep understanding of this powerful, yet tricky to use, feature.</p>

<h4 id="1600---1640-bitburger-event-center-teil-b-ifc--infrastructure-from-code">16:00 - 16:40 Bitburger Event-Center Teil B IfC – Infrastructure FROM code</h4>

<p>A lot of my job at Microsoft is working with Azure’s Infrastructure As Code (IaC) technology, Bicep. This second session from <a href="https://twitter.com/ruezd">Rüdiger zu Dohna</a> promises to leverage that concept even further. Historically, I’ve noticed that techniques which build on top of powerful abstractions can really increase productivity. IaC is definitely a very powerful abstraction, so I want to see what this one’s about.</p>

<h4 id="1700---1740-ringarena-open-source-contribution---why-is-it-worth-the-hassle">17:00 - 17:40 ring°arena Open-Source Contribution - Why is it worth the hassle?</h4>

<p>My lived experience, and the experience of the authors and experts behind <a href="#1600---1640-ringarena-developer-career-masterplan-build-your-path-to-senior-level-and-beyond">Heather and Bruno’s book</a>, testify that it’s worth the hassle. If you needed any more evidence, come to this session from <a href="https://www.payara.fish/teamblog/author/dominika/">Dominika Tarsarz-Sochacka</a>.</p>

<h3 id="thursday-11-april-2024">Thursday, 11 April 2024</h3>

<h4 id="0900---1700-nürburgring-hotel-grid-3-automated-code-refactoring-with-openrewrite">09:00 - 17:00 Nürburgring Hotel Grid 3 Automated Code Refactoring with OpenRewrite</h4>

<p>I’ve seen lots of customers asking about the kind of thing being addressed in this full day workshop from <a href="https://www.linkedin.com/in/sebastian-konieczek/?originalSubdomain=de">Sebastian Konieczek</a>. The OpenRewrite framework, from <a href="https://moderne.io/">Moderne</a> (formerly of Netflix) is a powerful idea worth learning about.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Cross posted at dev.to.]]></summary></entry><entry><title type="html">Maven basic debugging techniques: plugin invocation starts</title><link href="/blog/2023/12/20/maven-basic-debugging-techniques.html" rel="alternate" type="text/html" title="Maven basic debugging techniques: plugin invocation starts" /><published>2023-12-20T13:00:00-05:00</published><updated>2023-12-20T13:00:00-05:00</updated><id>/blog/2023/12/20/maven-basic-debugging-techniques</id><content type="html" xml:base="/blog/2023/12/20/maven-basic-debugging-techniques.html"><![CDATA[<h2 id="problem-statement">Problem statement</h2>

<p>I have been blessed with the responsibility to be the release co-coordinator for <a href="https://jakarta.ee/specifications/platform/11/">Jakarta EE 11</a>. As part of this role I must ensure the milestone and final releases are produced. This involves refining the steps in the <a href="https://github.com/jakartaee/platform/wiki/Release_Process">Release Process</a>. A big step in this process is producing the API artifacts for maven central.  Of course, this involves invoking a maven build on this <a href="https://github.com/jakartaee/jakartaee-api/blob/master/pom.xml">POM</a>.</p>

<p>This POM is only invoked in the infrequent event of Jakarta EE releases, and thus is subject to bitrot. Of course, the right fix is to make releases more frequent. I’m working on that, and it’s a big job. In the meantime, we have this big POM. What happens if there is a problem and you need to debug it?</p>

<p>I observe that using <code class="language-plaintext highlighter-rouge">-X</code> with this POM produces too much output so that the build takes intractably long and the generated output is over 1GB of text.</p>

<p>I would like to be able to target the <code class="language-plaintext highlighter-rouge">-X</code> to just where the problem is? But how do I even identify that?</p>

<h2 id="practical-solution-1-grep-through-the-build-output">Practical solution 1: grep through the build output</h2>

<p>I realize this is beginner level Maven stuff, but I’m capturing it here so AI can eventually ingest it and help others.</p>

<details>
    <summary>Aside, how to tell if your website is training AI?</summary>
    This article from The Washington Post has a text field where you can enter your site and it will show you how highly ranked the site is in the C4 dataset, which apparently was used to train some AI somewhere.  To find the text field, see <a href="https://www.washingtonpost.com/technology/interactive/2023/ai-chatbot-learning/">Is your website training AI?</a> .

<img src="/blog/assets/20231220-ridingthecrest-in-c4.png" alt="Ed's website in the C4 dataset" />
</details>

<p>So, <code class="language-plaintext highlighter-rouge">-X</code> is not useful until you have the ability to run just the sub-module that has the problem. This technique helped us identify the sub-module.</p>

<ol>
  <li>Use the <code class="language-plaintext highlighter-rouge">-B</code> option to disable the color coding.</li>
  <li>Save the output to a file, say <code class="language-plaintext highlighter-rouge">message.txt</code>.</li>
  <li>Use this command to output the message that is output by each maven plugin as it is being executed in time. <code class="language-plaintext highlighter-rouge">grep "^\[INFO\] --- " message.txt</code></li>
</ol>

<p>When we did this, we saw this output when invoking <code class="language-plaintext highlighter-rouge">mvn -B -Pstaging,oss-release -DskipTests -Ddoclint=none -DstagingRepositoryId=jakartaplatform-1036 -Dmaven.javadoc.failOnError=false clean package</code>.</p>

<p>Each row in this output indicates:</p>

<ul>
  <li>the plugin name</li>
  <li>the version of that plugin</li>
  <li>the goal being given to that plugin</li>
  <li>A statement in parentheses that is either:
    <ul>
      <li>the content of the <code class="language-plaintext highlighter-rouge">&lt;id&gt;</code> element.</li>
      <li>some default name output by the plugin.</li>
    </ul>
  </li>
  <li>A statement after the <code class="language-plaintext highlighter-rouge">@</code> that is the <code class="language-plaintext highlighter-rouge">&lt;artifactId&gt;</code> of the POM in which that plugin invocation is declared.</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[INFO] --- clean:3.2.0:clean (default-clean) @ jakartaee-api-parent ---
[INFO] --- enforcer:3.4.1:enforce (enforce-maven) @ jakartaee-api-parent ---
[INFO] --- resources:2.4.3:copy-resources (copy-javadoc-resources) @ jakartaee-api-parent ---
[INFO] --- cyclonedx:2.7.9:makeAggregateBom (default) @ jakartaee-api-parent ---
[INFO] --- source:2.1:jar-no-fork (attach-sources) @ jakartaee-api-parent ---
[INFO] --- javadoc:3.1.0:jar (attach-javadocs) @ jakartaee-api-parent ---
[INFO] --- clean:3.2.0:clean (default-clean) @ jakarta.jakartaee-bom ---
[INFO] --- enforcer:3.4.1:enforce (enforce-maven) @ jakarta.jakartaee-bom ---
[INFO] --- resources:2.4.3:copy-resources (copy-javadoc-resources) @ jakarta.jakartaee-bom ---
</code></pre></div></div>

<p>…</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[INFO] --- compiler:3.8.1:testCompile (default-testCompile) @ jakarta.jakartaee-api ---
[INFO] --- surefire:3.0.0-M8:test (default-test) @ jakarta.jakartaee-api ---
[INFO] --- jar:2.4:jar (default-jar) @ jakarta.jakartaee-api ---
[INFO] --- cyclonedx:2.7.9:makeAggregateBom (default) @ jakarta.jakartaee-api ---
[INFO] --- source:2.1:jar-no-fork (attach-sources) @ jakarta.jakartaee-api ---
[INFO] --- glassfishbuild:3.2.28:generate-pom (generate-pom) @ jakarta.jakartaee-api ---
[INFO] --- javadoc:3.1.0:jar (attach-javadocs) @ jakarta.jakartaee-api ---
</code></pre></div></div>

<p>This enabled us to observe that the <code class="language-plaintext highlighter-rouge">attach-javadocs</code> <code class="language-plaintext highlighter-rouge">&lt;execution&gt;</code> in the top level POM was causing the problem. We added a new invocation of the <code class="language-plaintext highlighter-rouge">maven-antrun-plugin</code> and bound it to the</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[INFO] --- antrun:3.1.0:run (rewrite-problematic-sources) @ jakarta.jakartaee-api ---
</code></pre></div></div>

<h2 id="practical-solution-2-buildplan-maven-plugin">Practical solution 2: buildplan-maven-plugin</h2>

<p>Through an interesting chat with Bing Enterprise Chat, I reduced my 2nd order ignorance of the <code class="language-plaintext highlighter-rouge">buildplan-maven-plugin</code> to be 1st order ignorance. It turns out this plugin exists and solves my problem.</p>

<p>If I had run this on the top level POM: <code class="language-plaintext highlighter-rouge">mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list-phase</code> I would have seen the plugin and phase information I sought.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[INFO] Build Plan for Jakarta EE API parent: 
process-resources -------------------------------------------------------
    + maven-resources-plugin | copy-javadoc-resources | copy-resources  
package -----------------------------------------------------------------
    + cyclonedx-maven-plugin | default                | makeAggregateBom
install -----------------------------------------------------------------
    + maven-install-plugin   | default-install        | install         
deploy ------------------------------------------------------------------
    + maven-deploy-plugin    | default-deploy         | deploy          
[INFO] 
[INFO] ---------------&lt; jakarta.platform:jakarta.jakartaee-bom &gt;---------------
[INFO] Building Jakarta EE API BOM 11.0.0-SNAPSHOT                        [2/5]
[INFO]   from jakartaee-bom/pom.xml
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] 
[INFO] --- buildplan:1.5:list-phase (default-cli) @ jakarta.jakartaee-bom ---
[INFO] Build Plan for Jakarta EE API BOM: 
process-resources ----------------------------------------------------------------
    + maven-resources-plugin      | copy-javadoc-resources | copy-resources      
package --------------------------------------------------------------------------
    + cyclonedx-maven-plugin      | default                | makeAggregateBom    
    + glassfishbuild-maven-plugin | generate-pom           | generate-pom        
verify ---------------------------------------------------------------------------
    + glassfishbuild-maven-plugin | attach-all-artifacts   | attach-all-artifacts
install --------------------------------------------------------------------------
    + maven-install-plugin        | default-install        | install             
deploy ---------------------------------------------------------------------------
    + maven-deploy-plugin         | default-deploy         | deploy              
[INFO] 
[INFO] ------------&lt; jakarta.platform:jakarta.jakartaee-core-api &gt;-------------
[INFO] Building Jakarta EE Core Profile API 11.0.0-SNAPSHOT               [3/5]
[INFO]   from jakartaee-core-api/pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- buildplan:1.5:list-phase (default-cli) @ jakarta.jakartaee-core-api ---
[INFO] Build Plan for Jakarta EE Core Profile API: 
generate-sources ----------------------------------------------------------------------
    + maven-dependency-plugin     | unpack-sources              | unpack-dependencies 
process-sources -----------------------------------------------------------------------
    + maven-antrun-plugin         | prepare-sources             | run                 
    + glassfishbuild-maven-plugin | unpack-sources              | unpack-sources      
process-resources ---------------------------------------------------------------------
    + maven-resources-plugin      | default-resources           | resources           
    + maven-resources-plugin      | copy-javadoc-resources      | copy-resources      
compile -------------------------------------------------------------------------------
    + maven-compiler-plugin       | default-compile             | compile             
    + maven-antrun-plugin         | build-javadocs              | run                 
process-test-resources ----------------------------------------------------------------
    + maven-resources-plugin      | default-testResources       | testResources       
test-compile --------------------------------------------------------------------------
    + maven-compiler-plugin       | default-testCompile         | testCompile         
test ----------------------------------------------------------------------------------
    + maven-surefire-plugin       | default-test                | test                
prepare-package -----------------------------------------------------------------------
    + maven-antrun-plugin         | rewrite-problematic-sources | run                 
package -------------------------------------------------------------------------------
    + maven-jar-plugin            | default-jar                 | jar                 
    + cyclonedx-maven-plugin      | default                     | makeAggregateBom    
    + glassfishbuild-maven-plugin | generate-pom                | generate-pom        
    + maven-source-plugin         | attach-sources              | jar-no-fork         
verify --------------------------------------------------------------------------------
    + glassfishbuild-maven-plugin | attach-all-artifacts        | attach-all-artifacts
install -------------------------------------------------------------------------------
    + maven-install-plugin        | default-install             | install             
deploy --------------------------------------------------------------------------------
    + maven-deploy-plugin         | default-deploy              | deploy              
[INFO] 
[INFO] -------------&lt; jakarta.platform:jakarta.jakartaee-web-api &gt;-------------
[INFO] Building Jakarta EE Web Profile API 11.0.0-SNAPSHOT                [4/5]
[INFO]   from jakartaee-web-api/pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- buildplan:1.5:list-phase (default-cli) @ jakarta.jakartaee-web-api ---
[INFO] Build Plan for Jakarta EE Web Profile API: 
generate-sources ----------------------------------------------------------------------
    + maven-dependency-plugin     | unpack-sources              | unpack-dependencies 
process-sources -----------------------------------------------------------------------
    + maven-antrun-plugin         | prepare-sources             | run                 
    + maven-antrun-plugin         | prepare-sources-web         | run                 
    + glassfishbuild-maven-plugin | unpack-sources              | unpack-sources      
process-resources ---------------------------------------------------------------------
    + maven-resources-plugin      | default-resources           | resources           
    + maven-resources-plugin      | copy-javadoc-resources      | copy-resources      
compile -------------------------------------------------------------------------------
    + maven-compiler-plugin       | default-compile             | compile             
    + maven-antrun-plugin         | build-javadocs              | run                 
process-test-resources ----------------------------------------------------------------
    + maven-resources-plugin      | default-testResources       | testResources       
test-compile --------------------------------------------------------------------------
    + maven-compiler-plugin       | default-testCompile         | testCompile         
test ----------------------------------------------------------------------------------
    + maven-surefire-plugin       | default-test                | test                
prepare-package -----------------------------------------------------------------------
    + maven-antrun-plugin         | rewrite-problematic-sources | run                 
package -------------------------------------------------------------------------------
    + maven-jar-plugin            | default-jar                 | jar                 
    + cyclonedx-maven-plugin      | default                     | makeAggregateBom    
    + glassfishbuild-maven-plugin | generate-pom                | generate-pom        
    + maven-source-plugin         | attach-sources              | jar-no-fork         
verify --------------------------------------------------------------------------------
    + glassfishbuild-maven-plugin | attach-all-artifacts        | attach-all-artifacts
install -------------------------------------------------------------------------------
    + maven-install-plugin        | default-install             | install             
deploy --------------------------------------------------------------------------------
    + maven-deploy-plugin         | default-deploy              | deploy              
[INFO] 
[INFO] ---------------&lt; jakarta.platform:jakarta.jakartaee-api &gt;---------------
[INFO] Building Jakarta EE Platform API 11.0.0-SNAPSHOT                   [5/5]
[INFO]   from jakartaee-api/pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- buildplan:1.5:list-phase (default-cli) @ jakarta.jakartaee-api ---
[INFO] Build Plan for Jakarta EE Platform API: 
generate-sources ----------------------------------------------------------------------
    + maven-dependency-plugin     | unpack-sources              | unpack-dependencies 
process-sources -----------------------------------------------------------------------
    + maven-antrun-plugin         | prepare-sources             | run                 
    + maven-antrun-plugin         | prepare-sources-web         | run                 
    + maven-antrun-plugin         | prepare-sources-platform    | run                 
    + glassfishbuild-maven-plugin | unpack-sources              | unpack-sources      
process-resources ---------------------------------------------------------------------
    + maven-resources-plugin      | default-resources           | resources           
    + maven-resources-plugin      | copy-javadoc-resources      | copy-resources      
compile -------------------------------------------------------------------------------
    + maven-compiler-plugin       | default-compile             | compile             
    + maven-antrun-plugin         | build-javadocs              | run                 
process-test-resources ----------------------------------------------------------------
    + maven-resources-plugin      | default-testResources       | testResources       
test-compile --------------------------------------------------------------------------
    + maven-compiler-plugin       | default-testCompile         | testCompile         
test ----------------------------------------------------------------------------------
    + maven-surefire-plugin       | default-test                | test                
prepare-package -----------------------------------------------------------------------
    + maven-antrun-plugin         | rewrite-problematic-sources | run                 
package -------------------------------------------------------------------------------
    + maven-jar-plugin            | default-jar                 | jar                 
    + cyclonedx-maven-plugin      | default                     | makeAggregateBom    
    + glassfishbuild-maven-plugin | generate-pom                | generate-pom        
    + maven-source-plugin         | attach-sources              | jar-no-fork         
verify --------------------------------------------------------------------------------
    + glassfishbuild-maven-plugin | attach-all-artifacts        | attach-all-artifacts
install -------------------------------------------------------------------------------
    + maven-install-plugin        | default-install             | install             
deploy --------------------------------------------------------------------------------
    + maven-deploy-plugin         | default-deploy              | deploy              
</code></pre></div></div>]]></content><author><name></name></author><summary type="html"><![CDATA[Problem statement]]></summary></entry><entry><title type="html">Azure DevOps cross organization daily task wrangling</title><link href="/blog/2023/11/23/azure-devops-task-wrangling.html" rel="alternate" type="text/html" title="Azure DevOps cross organization daily task wrangling" /><published>2023-11-23T23:10:00-05:00</published><updated>2023-11-23T23:10:00-05:00</updated><id>/blog/2023/11/23/azure-devops-task-wrangling</id><content type="html" xml:base="/blog/2023/11/23/azure-devops-task-wrangling.html"><![CDATA[<h2 id="problem-statement">Problem statement</h2>

<p>My employer has standardized on Azure DevOps Boards as the issue tracking system of record. I have become fond of this system and immensely respect its capabilities.  Due to my role, I end up with a very large number of work items assigned to me across a very diverse number of different Azure DevOps organizations. While an extension exists to support <a href="https://marketplace.visualstudio.com/items?itemName=ms-eswm.crossaccountquery&amp;targetId=5a766efb-e568-41d7-a401-fc09ace9b116&amp;utm_source=vstsproduct&amp;utm_medium=ExtHubManageList">Cross Account Query</a>, it has a significant and insurmountable limitation that the accounts being queried must have a uniform “schema” for Iteration Path and Area Path. This limitation is a fact of life in my role.</p>

<p>This blog post shows my workaround that gives me the ability:</p>

<ul>
  <li>To see a comprehensive dashboard across the many different Azure DevOps organizations that contain work items assigned to me, so I can know which ones I need to work on in any given day.</li>
  <li>To check them off task by task when I have done all I intend to do on that particular task today.</li>
  <li>To reset the “done for today” status so I get a fresh dashboard the next day.</li>
</ul>

<p>It is not very elegant, but works for me. I’m open to suggestions for improvements. Please leave a comment if you have any ideas.</p>

<h2 id="solution">Solution</h2>

<ol>
  <li>
    <p>For each Azure DevOps organization, write and save a query that shows the work items assigned to me.
Here are a screen grabs of two such queries.</p>

    <p><img src="/blog/assets/20231124-dd-query.png" alt="Azure DevOps query in the dd board" /></p>

    <p><img src="/blog/assets/20231124-em-query.png" alt="Azure DevOps query in the em board" /></p>

    <p>Some things to note about these queries:</p>

    <ul>
      <li>The <strong>Area Path</strong> values vary and are specific to the organization.</li>
      <li>The <strong>Iteration Path</strong> values vary, but both have <strong>@CurrentIteration</strong>.</li>
      <li>The <strong>State</strong> values vary and are specific to the organization.</li>
      <li>They both have a funny <strong>Tags</strong> value: <strong>Does Not Contain</strong> <code class="language-plaintext highlighter-rouge">edburns_done-for-today</code>. This tag is obviously named.</li>
    </ul>
  </li>
  <li>
    <p>Write an anologous set of queries, but for the last clause the <strong>Tags</strong> value is  <strong>Contains</strong> <code class="language-plaintext highlighter-rouge">edburns_done-for-today</code>.</p>
  </li>
  <li>
    <p>Use the Daily Links chrome extension to cause all the saved queries in a new browser tab. Install the Daily Links extension from the <a href="https://chrome.google.com/webstore/detail/bpmiffipgillbacdfnbkicndliejockp">Chrome web store</a>. This also works in Edge.</p>

    <p><img src="/blog/assets/20231124-daily-links.png" alt="Azure DevOps queries loaded by Daily Links extension" /></p>
  </li>
</ol>

<h2 id="daily-wrangling">Daily wrangling</h2>

<ol>
  <li>
    <p>Start of day process.</p>

    <ol>
      <li>
        <p>Select the <strong>Daily Links</strong> button in the browser.</p>
      </li>
      <li>
        <p>For each tab:</p>

        <ol>
          <li>
            <p>Decide which of the tasks you will <strong>NOT</strong>* be able to work on today.</p>
          </li>
          <li>
            <p>Apply the <code class="language-plaintext highlighter-rouge">edburns_done-for-today</code> tag to those issues.</p>
          </li>
          <li>
            <p>Re-run the query.</p>
          </li>
        </ol>
      </li>
    </ol>
  </li>
  <li>
    <p>End of day process.</p>

    <ol>
      <li>
        <p>Select the <strong>Daily Links</strong> button in the browser.</p>
      </li>
      <li>
        <p>For each tab:</p>

        <ol>
          <li>
            <p>Run the analogous “Contains done for today” query for that tab.</p>
          </li>
          <li>
            <p>Use the multi-issue edit feature to remove that tag.</p>
          </li>
        </ol>
      </li>
    </ol>
  </li>
</ol>

<h2 id="problems-with-this-solution">Problems with this solution</h2>

<ul>
  <li>
    <p>You have to write 2N queries.</p>
  </li>
  <li>
    <p>You pollute the tagspace with information that is only relevant to you.</p>
  </li>
  <li>
    <p>The act of resetting the “done for today” tag is high effort. I suspect there is a way to make a batch process that just does this with one action, but I have not invested in learning how.</p>
  </li>
  <li>
    <p>The quality of the queries regarding their ability to convey the context of each task is up to the query author. In my implementation, I simply include <strong>Parent</strong> next te <strong>Title</strong> in the <strong>Column options</strong>.</p>
  </li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[Problem statement]]></summary></entry><entry><title type="html">macOS Catalina Zoom does not prompt for mic or camera permissions Solved</title><link href="/blog/2023/10/24/macos-zoom-mic-camera-permissions-reset.html" rel="alternate" type="text/html" title="macOS Catalina Zoom does not prompt for mic or camera permissions Solved" /><published>2023-10-24T12:10:00-04:00</published><updated>2023-10-24T12:10:00-04:00</updated><id>/blog/2023/10/24/macos-zoom-mic-camera-permissions-reset</id><content type="html" xml:base="/blog/2023/10/24/macos-zoom-mic-camera-permissions-reset.html"><![CDATA[<h2 id="problem-statement">Problem statement</h2>

<p>Somewhere along the line, Zoom on macOS Catalina asked me for permission to use the mic or camera and I may have accidentally said no. How do I get it to prompt me again?</p>

<p>I tried the usual measures of <code class="language-plaintext highlighter-rouge">tccutil reset Microphone</code> but this returned a failure message. What’s going on?</p>

<p>This blog post is my record of what I did to resolve the problem on macOS Catalina. Results are not guaranteed.</p>

<h2 id="root-cause">Root cause</h2>

<p>In my case, the root cause was the ownership of the <code class="language-plaintext highlighter-rouge">/Users/edburns/Library/Application Support/com.apple.TCC/TCC.db</code> file was incorrect. This file must be owned by me. Instead it was owned by some other user number. I remember making some bulk ownership changes somewhere along the line.</p>

<h2 id="nutshell-solution">Nutshell solution</h2>

<ol>
  <li>Do all the stuff that allows you to modify <code class="language-plaintext highlighter-rouge">TCC.db</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">chown</code> the <code class="language-plaintext highlighter-rouge">TCC.db</code> to me.</li>
  <li>Restore all the stuff that prevents you from modifying <code class="language-plaintext highlighter-rouge">TCC.db</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">tccutil reset Microphone</code></li>
  <li>Perform the action in Zoom that caused it to prompt for permission.</li>
  <li>Say <strong>Yes</strong>.</li>
</ol>

<h3 id="detailed-solution">Detailed solution</h3>

<h4 id="temporarily-disable-system-integrity-protection-sip">Temporarily disable System Integrity Protection (SIP)</h4>

<ol>
  <li>Shut down and reboot in “Recovery mode”.
    <ol>
      <li>Shut down.</li>
      <li>Hold down Command R while powering on.</li>
      <li>Release when the Apple logo appears.</li>
    </ol>
  </li>
  <li>When you get a menu bar, in the <strong>Utilities menu</strong> select <strong>Terminal</strong>.</li>
  <li>The terminal should open as root.</li>
  <li><code class="language-plaintext highlighter-rouge">csrutil disable</code>.</li>
  <li>Exit the terminal and quit the <strong>Terminal</strong> app.</li>
  <li>Restart.</li>
</ol>

<h4 id="ensure-the-tccdb-has-the-correct-ownership">Ensure the TCC.db has the correct ownership</h4>

<p>For an apparently very helpful resource on <code class="language-plaintext highlighter-rouge">TCC.db</code> see <a href="https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive">A deep dive into macOS TCC.db</a>.</p>

<ol>
  <li><code class="language-plaintext highlighter-rouge">cd ~Library/Application\ Support/com.apple.TCC</code>
If you can’t do this, grant “Full disk access” to your terminal program. Look elsewhere for how to do that.</li>
  <li><code class="language-plaintext highlighter-rouge">chown</code> the <code class="language-plaintext highlighter-rouge">TCC.db</code> file to your userid.</li>
  <li><code class="language-plaintext highlighter-rouge">cd</code> to get back to your home directory.</li>
</ol>

<h4 id="re-enable-system-integrity-protection-sip">Re-enable System Integrity Protection (SIP)</h4>

<ol>
  <li>Shut down and reboot in “Recovery mode”.
    <ol>
      <li>Shut down.</li>
      <li>Hold down Command R while powering on.</li>
      <li>Release when the Apple logo appears.</li>
    </ol>
  </li>
  <li>When you get a menu bar, in the <strong>Utilities menu</strong> select <strong>Terminal</strong>.</li>
  <li>The terminal should open as root.</li>
  <li><code class="language-plaintext highlighter-rouge">csrutil enable</code>.</li>
  <li>Exit the terminal and quit the <strong>Terminal</strong> app.</li>
  <li>Restart.</li>
</ol>

<h4 id="run-the-tccutil-command">Run the tccutil command</h4>

<ol>
  <li><code class="language-plaintext highlighter-rouge">tccutil reset Microphone</code>. If you want to reset other permissions, there is a big schema of names.  To reset everything replace <code class="language-plaintext highlighter-rouge">Microphone</code> with <code class="language-plaintext highlighter-rouge">All</code>. Case is sensitive.</li>
  <li>You should see a message that indicates success.</li>
</ol>]]></content><author><name></name></author><summary type="html"><![CDATA[Problem statement]]></summary></entry></feed>