<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kotlin on foojay.io - Friends Of OpenJDK</title><link>https://foojay.io/today/category/kotlin/</link><description>Recent content in Kotlin on foojay.io - Friends Of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 21 Sep 2026 06:03:50 +0000</lastBuildDate><atom:link href="https://foojay.io/today/category/kotlin/index.xml" rel="self" type="application/rss+xml"/><item><title>Can You Explain the Diff Your AI Agent Just Wrote?</title><link>https://foojay.io/today/can-you-explain-the-diff-your-ai-agent-just-wrote/</link><pubDate>Tue, 15 Sep 2026 14:12:01 +0000</pubDate><guid>https://foojay.io/today/can-you-explain-the-diff-your-ai-agent-just-wrote/</guid><description>&lt;p&gt;Every Java developer has been in a code review where the question is simple: &amp;ldquo;What does this method do?&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;The answer used to tell you something. The developer who wrote it would describe the intent, the edge cases, the trade-off they considered and rejected. The code review was a conversation about the invariant the code protects.&lt;/p&gt;&#10;&lt;p&gt;Now the answer is sometimes: &amp;ldquo;The agent wrote it.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;The code compiles. The tests pass. The linter is clean. Nobody in the review can explain the architecture of the PR, including the person who submitted it.&lt;/p&gt;</description></item><item><title>Reflection-Free Serialization on the JVM: Four Formats In, Avro Out</title><link>https://foojay.io/today/reflection-free-serialization-on-the-jvm-four-formats-in-avro-out/</link><pubDate>Thu, 10 Sep 2026 06:56:00 +0000</pubDate><guid>https://foojay.io/today/reflection-free-serialization-on-the-jvm-four-formats-in-avro-out/</guid><description>&lt;p&gt;I run a model layer that accepts the same business data in JSON, XML, YAML, and TOML and converts it all to Avro. The project was greenfield, so the question was never what to migrate away from. It was a question of which serialization library the layer would be built with: Jackson or kotlinx.serialization. Jackson was the safe answer, with a module for every format we needed and years of production behind it. What pulled me the other way was the assumption that runtime reflection costs real CPU under load. That turned out to be true of one Jackson path and not the other, which I will get to. The reasons the choice held up were not the reasons I made it.&lt;/p&gt;</description></item><item><title>One Base URL, Many Coding Agents: What an OpenAI-Compatible Gateway Looks Like From java.net.http</title><link>https://foojay.io/today/one-base-url-many-coding-agents-what-an-openai-compatible-gateway-looks-like-from-java-net-http/</link><pubDate>Wed, 09 Sep 2026 16:09:53 +0000</pubDate><guid>https://foojay.io/today/one-base-url-many-coding-agents-what-an-openai-compatible-gateway-looks-like-from-java-net-http/</guid><description>&lt;p&gt;Somewhere in every coding agent there is an HTTP client. Claude Code, Codex, Cursor, Cline, OpenCode: strip away the terminal UI or the editor pane and each of them serializes a conversation into JSON, POSTs it to a base URL with an API key in a header, and streams the answer back. The client owns the prompt assembly, the tool loop and the rendering; the model sits on the far side of that socket.&lt;/p&gt;</description></item><item><title>“Commit created” — but it isn’t: why the agent’s word needs external verification, and what the mistake costs</title><link>https://foojay.io/today/commit-created-no-no-no-what-the-the-agents-word-needs-external-verification-what-the-mistake-costs/</link><pubDate>Tue, 08 Sep 2026 08:54:03 +0000</pubDate><guid>https://foojay.io/today/commit-created-no-no-no-what-the-the-agents-word-needs-external-verification-what-the-mistake-costs/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;A detailed report reads like proof. The agent lists the files it touched, names the branch, quotes a commit hash, adds a test count and closes with &amp;ldquo;done&amp;rdquo;. The work has a shape. The shape looks right. You have six more tickets.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;The report is model output. The commit, if it exists, lives in .git. The file, if it exists, lives on disk. The build result lives in a process exit code and a run log. The chat window is none of those places, and it can only vouch for itself.&lt;/p&gt;</description></item><item><title>Did Your AI Agent Ever Run a Debugger? One JVM Bug, Two Agent Runs</title><link>https://foojay.io/today/did-your-ai-agent-run-the-debugger-one-jvm-bug-two-agent-runs/</link><pubDate>Thu, 03 Sep 2026 13:48:32 +0000</pubDate><guid>https://foojay.io/today/did-your-ai-agent-run-the-debugger-one-jvm-bug-two-agent-runs/</guid><description>&lt;p&gt;Java developers reach for the debugger without thinking about it. Set a breakpoint, run the failing test, look at the variables, then decide what to change.&lt;/p&gt;&#10;&lt;p&gt;Most AI coding agents I have watched skip that step. They read the stack trace, read the source, and propose a patch. The reasoning can look excellent and still be a guess about a program nobody ran.&lt;/p&gt;&#10;&lt;p&gt;I wanted to know what that guess costs. So I took one real JVM bug, one model, one prompt, and ran it twice with two debugging workflows. Here is what the two transcripts show.&lt;/p&gt;</description></item><item><title>Getting Started with Exposed: Kotlin ORM Made Simple</title><link>https://foojay.io/today/exposed-kotlin-orm-complete-guide/</link><pubDate>Mon, 06 Jul 2026 03:39:00 +0000</pubDate><guid>https://foojay.io/today/exposed-kotlin-orm-complete-guide/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;&#10;&lt;p&gt;For quite some time, I have been a huge fan of and fascinated by JetBrains products, tools, and libraries because of their masterful craftsmanship in product creation and their pristine focus on building high-quality developer tools.&lt;/p&gt;&#10;&lt;p&gt;Even more excitingly, JetBrains Java Annotated Monthly newsletters have featured most of the technical articles I wrote for Foojay on topics such as Java, Spring, Spring Boot 4, and OpenRewrite.&lt;/p&gt;&#10;&lt;p&gt;Recently, one Kotlin Domain-Specific Language (DSL) library caught my attention. I immediately tried converting my existing Spring Boot 4 application from Java to Kotlin using Exposed, an ORM framework for Kotlin.&#10;&lt;img src="https://foojay.io/today/exposed-kotlin-orm-complete-guide/Exposed-1024x683.jpg" alt="Exposed" width="1024" height="683" loading="lazy" decoding="async"&gt; Kotlin SQL Libary&lt;/p&gt;</description></item><item><title>You’re invited to IntelliJ IDEA Conf 2026!</title><link>https://foojay.io/today/youre-invited-to-intellij-idea-conf-2026/</link><pubDate>Mon, 29 Jun 2026 18:35:08 +0000</pubDate><guid>https://foojay.io/today/youre-invited-to-intellij-idea-conf-2026/</guid><description>&lt;p&gt;&lt;strong&gt;We are excited to invite you to IntelliJ IDEA Conf 2026, a free virtual event on September 8-9, 2026.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;IntelliJ IDEA Conf is a celebration of the developer community, bringing together professionals who strive for excellence in software development. Join us for this free, live online conference and learn from industry leaders and experts on September 8-9, 2026.&lt;/p&gt;&#10;&lt;p&gt;You&amp;rsquo;ll be able to learn about a broad range of topics relevant to modern Java and Kotlin development, including language evolution, enterprise Java, Spring-based applications, build tooling, containerized workflows, JVM performance, and data access technologies. For more details, see the agenda below.&lt;/p&gt;</description></item><item><title>Making illegal state unrepresentable</title><link>https://foojay.io/today/making-illegal-state-unrepresentable/</link><pubDate>Tue, 21 Apr 2026 18:50:02 +0000</pubDate><guid>https://foojay.io/today/making-illegal-state-unrepresentable/</guid><description>&lt;p&gt;A couple of years ago, I wrote that &lt;a href="https://blog.frankel.ch/builder-pattern-finite-state-machine/" target="_blank" rel="noopener noreferrer"&gt;The Builder pattern is a finite state machine!&lt;/a&gt;. A state machine consists of states and transitions between them. As a developer, I want to make illegal states unrepresentable, &lt;em&gt;i.e.&lt;/em&gt;, users of my API can&amp;rsquo;t create non-existent transitions. My hypothesis is that only a static typing system allows this at compile-time. Dynamic typing systems rely on runtime validation.&lt;/p&gt;&#10;&lt;p&gt;In this blog post, I will show that it holds true, with a caveat. If your model has many combinations, you also need generics and other niceties to avoid too much boilerplate code. My exploration will use Python, Java, Kotlin, Rust, and Gleam. With that background in mind, let&amp;rsquo;s move on to the model itself.&lt;/p&gt;</description></item><item><title>Command completion (..) in IntelliJ IDEA</title><link>https://foojay.io/today/command-completion-intellij-idea/</link><pubDate>Tue, 20 Jan 2026 07:31:35 +0000</pubDate><guid>https://foojay.io/today/command-completion-intellij-idea/</guid><description>&lt;p&gt;How many shortcuts can you remember? Three? Five? More? I try to learn as many as I can and still forget some of them…&lt;/p&gt;&#10;&lt;p&gt;What if you could unlock IntelliJ IDEA features, without having to remember shortcuts? You can still use shortcuts if you want. But you don&amp;rsquo;t &lt;em&gt;&lt;strong&gt;have&lt;/strong&gt;&lt;/em&gt;to.&lt;/p&gt;&#10;&lt;p&gt;Command completion (..) is a new feature in IntelliJ IDEA that lets you discover and execute IDE actions right from your editor.&lt;/p&gt;</description></item><item><title>On dependencies in objects</title><link>https://foojay.io/today/on-dependencies-in-objects/</link><pubDate>Fri, 17 Oct 2025 16:58:39 +0000</pubDate><guid>https://foojay.io/today/on-dependencies-in-objects/</guid><description>&lt;p&gt;In , objects collaborate. The initial idea of collaboration, first found in Smalltalk, was for object A to send a message to object B. Languages designed later use method calling. In both cases, the same question stands: how does an object reference other objects to reach the desired results?&lt;/p&gt;&#10;&lt;p&gt;In this post, I tackle the problem of passing dependencies to an object. I will go through several options and analyze their respective pros and cons.&lt;/p&gt;</description></item><item><title>Preparing for Spring Boot 4 and Spring Framework 7: What’s New?</title><link>https://foojay.io/today/preparing-for-spring-framework-7-and-spring-boot-4/</link><pubDate>Mon, 11 Aug 2025 14:42:40 +0000</pubDate><guid>https://foojay.io/today/preparing-for-spring-framework-7-and-spring-boot-4/</guid><description>&lt;p&gt;&lt;strong&gt;I&amp;rsquo;m a passionate Spring Framework and Spring Boot enthusiast, and I always look forward to exploring and experimenting with the latest features and improvements they introduce. With Spring Boot 4 and Spring Boot Framework 7 right around the corner, now&amp;rsquo;s the perfect time to dive into the key enhancements that will shape the future of modern Java and enterprise application development.&lt;/strong&gt;&#10;&lt;img src="https://foojay.io/today/preparing-for-spring-framework-7-and-spring-boot-4/SpringImage.jpg" alt="Spring Boot 4" width="1024" height="576" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;In this blog post, we will discuss some key features enhanced as part of Spring Framework 7 and Spring Boot 4.&lt;/p&gt;</description></item><item><title>Pattern-matching across different languages</title><link>https://foojay.io/today/pattern-matching-across-different-languages/</link><pubDate>Tue, 05 Aug 2025 07:40:40 +0000</pubDate><guid>https://foojay.io/today/pattern-matching-across-different-languages/</guid><description>&lt;p&gt;Pattern matching is a major feature in software development. While pattern matching applies in several locations, its current usage is limited to &lt;code&gt;switch case&lt;/code&gt; blocks. I want to compare the power of pattern matching across a couple of programming languages I&amp;rsquo;m familiar with in this post.&lt;/p&gt;&#10;&lt;p&gt;I assume that every reader is familiar with the &lt;code&gt;switch case&lt;/code&gt; syntax inherited from C. In short:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The &lt;code&gt;switch&lt;/code&gt; clause references a value-returning statement&lt;/li&gt;&#10;&lt;li&gt;Each &lt;code&gt;case&lt;/code&gt; clause sets another statement; if the value matches the statement, it executes the related block&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;case&lt;/code&gt; clauses are evaluated in order. The first clause that matches gets its block executed&lt;/li&gt;&#10;&lt;li&gt;In C, &lt;code&gt;case&lt;/code&gt; clauses are fall-through; you need to explicitly &lt;code&gt;break&lt;/code&gt; to escape the &lt;code&gt;switch&lt;/code&gt;, otherwise, the next &lt;code&gt;case&lt;/code&gt; is evaluated&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="javas-pattern-matching"&gt;Java&amp;rsquo;s pattern matching&lt;/h2&gt;&#10;&lt;p&gt;I&amp;rsquo;ll start with Java, as it was the first programming language I used in a professional context.&lt;/p&gt;</description></item><item><title>Kotlin adoption inside ING, five years later</title><link>https://foojay.io/today/ing-kotlin-adoption-five-years/</link><pubDate>Wed, 02 Jul 2025 06:21:47 +0000</pubDate><guid>https://foojay.io/today/ing-kotlin-adoption-five-years/</guid><description>&lt;p&gt;&lt;em&gt;TL;DR: Five years after its introduction Kotlin adoption inside ING keeps growing year after year, with a current adoption rate of just over 11%. We were also featured as one of the user stories for the KotlinConf 2025 Keynote.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Five years ago, &lt;a href="https://medium.com/@Frevib" target="_blank" rel="noopener noreferrer"&gt;Hielke&lt;/a&gt; and I wrote one of the first blogs of this account about being &lt;a href="https://medium.com/ing-blog/introducing-kotlin-at-ing-a-long-but-rewarding-story-1bfcd3dc8da0" target="_blank" rel="noopener noreferrer"&gt;the first team to put Kotlin on production at ING&lt;/a&gt;. The article generated some interest and to this day it is still present as one of the &lt;a href="https://kotlinlang.org/lp/server-side/case-studies/" target="_blank" rel="noopener noreferrer"&gt;Kotlin website case studies&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Authoring an OpenRewrite Recipe</title><link>https://foojay.io/today/authoring-an-openrewrite-recipe/</link><pubDate>Mon, 09 Jun 2025 17:22:13 +0000</pubDate><guid>https://foojay.io/today/authoring-an-openrewrite-recipe/</guid><description>&lt;p&gt;I&amp;rsquo;ve been eying OpenRewrite for some time, but I haven&amp;rsquo;t had time to play with it yet. In case you never heard about OpenRewrite, OpenRewrite takes care of refactoring your codebase to newer language, framework, and paradigm versions.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;OpenRewrite is an open-source automated refactoring ecosystem for source code, enabling developers to effectively eliminate technical debt within their repositories.&lt;/p&gt;&#10;&lt;p&gt;It consists of an auto-refactoring engine that runs prepackaged, open-source refactoring recipes for common framework migrations, security fixes, and stylistic consistency tasks – reducing your coding effort from hours or days to minutes. Build tool plugins like the OpenRewrite Gradle plugin and the OpenRewrite Maven plugin help you run these recipes on one repository at a time.&lt;/p&gt;</description></item><item><title>Pull request testing on Kubernetes: testing locally and on GitHub workflows</title><link>https://foojay.io/today/pull-request-testing-on-kubernetes-testing-locally-and-on-github-workflows/</link><pubDate>Sun, 16 Mar 2025 17:32:27 +0000</pubDate><guid>https://foojay.io/today/pull-request-testing-on-kubernetes-testing-locally-and-on-github-workflows/</guid><description>&lt;p&gt;Imagine an organization with the following practices:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Commits code on GitHub&lt;/li&gt;&#10;&lt;li&gt;Runs its CI/CD pipelines with GitHub Actions&lt;/li&gt;&#10;&lt;li&gt;Runs its production workload on Kubernetes&lt;/li&gt;&#10;&lt;li&gt;Uses Google Cloud&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;A new engineer manager arrives and asks for the following:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;On every PR, run integration tests in a Kubernetes cluster similar to the production one.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;It sounds reasonable.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Engineering manager: I want #integrationtests to run on the app deployed on #Cloud infra for each #GitHub PR ✅&lt;/p&gt;</description></item><item><title>Review of Junie, a coding agent by JetBrains – Revie</title><link>https://foojay.io/today/checking-out-junie-a-coding-agent-by-jetbrains/</link><pubDate>Wed, 26 Feb 2025 01:38:47 +0000</pubDate><guid>https://foojay.io/today/checking-out-junie-a-coding-agent-by-jetbrains/</guid><description>&lt;p&gt;Other languages: &lt;a href="https://flounder.dev/es/posts/trying-out-junie/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt; &lt;a href="https://flounder.dev/ko/posts/trying-out-junie/" target="_blank" rel="noopener noreferrer"&gt;한국어&lt;/a&gt; &lt;a href="https://flounder.dev/pt/posts/trying-out-junie/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt; &lt;a href="https://flounder.dev/zh/posts/trying-out-junie/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Recently, I talked about &lt;a href="https://flounder.dev/duplicate-finder/" target="_blank" rel="noopener noreferrer"&gt;Duplicate Finder&lt;/a&gt; on the &lt;a href="https://foojay.io/today/category/podcast/"&gt;Foojay Podcast&lt;/a&gt; hosted by &lt;a href="https://foojay.social/@frankdelporte" target="_blank" rel="noopener noreferrer"&gt;Frank Delporte&lt;/a&gt;. We briefly touched upon implementing support for other formats, and Frank asked if I&amp;rsquo;m planning on adding AsciiDoc, as it could be useful for his technical writing at Azul.&lt;/p&gt;&#10;&lt;p&gt;We agreed to think about adding the support soon. At the same time I got access to &lt;a href="https://www.jetbrains.com/junie/" target="_blank" rel="noopener noreferrer"&gt;Junie&lt;/a&gt;, a newly announced coding agent by JetBrains, which is currently in early access. After a while, a thought came to me that this is a great opportunity to try it in action.&lt;/p&gt;</description></item><item><title>Duplicate finder – Tests</title><link>https://foojay.io/today/duplicate-finder-for-text-requirements/</link><pubDate>Wed, 18 Dec 2024 16:00:44 +0000</pubDate><guid>https://foojay.io/today/duplicate-finder-for-text-requirements/</guid><description>&lt;p&gt;Other languages: &lt;a href="https://flounder.dev/es/posts/duplicate-finder-requirements/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt; &lt;a href="https://flounder.dev/ko/posts/duplicate-finder-requirements/" target="_blank" rel="noopener noreferrer"&gt;한국어&lt;/a&gt; &lt;a href="https://flounder.dev/pt/posts/duplicate-finder-requirements/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt; &lt;a href="https://flounder.dev/zh/posts/duplicate-finder-requirements/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;This post is about the development of the duplicate finder tool. For downloads and instructions on how to use it, see the &lt;a href="https://flounder.dev/duplicate-finder/" target="_blank" rel="noopener noreferrer"&gt;Download&lt;/a&gt; page&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;It&amp;rsquo;s been a while since I published the &lt;a href="https://flounder.dev/posts/duplicate-finder-intro/" target="_blank" rel="noopener noreferrer"&gt;intro to the duplicate finder project&lt;/a&gt;, so it looks like high time to provide some progress on that.&lt;/p&gt;&#10;&lt;p&gt;Before starting to write the program code, it makes sense to lay down the requirements first. A good way to do this is by writing tests. Not only will the tests help us develop faster, but they will also ensure that the code adheres to the specification.&lt;/p&gt;</description></item><item><title>How does it feel to test a compiler?</title><link>https://foojay.io/today/how-does-it-feel-to-test-a-compiler/</link><pubDate>Thu, 08 Aug 2024 06:47:59 +0000</pubDate><guid>https://foojay.io/today/how-does-it-feel-to-test-a-compiler/</guid><description>&lt;p&gt;&lt;strong&gt;Hi, my name is Alex. I work as a QA engineer on the &lt;a href="https://kotlinlang.org/docs/native-overview.html" title="Kotlin/Native" target="_blank" rel="noopener noreferrer"&gt;Kotlin/Native&lt;/a&gt; team. I&amp;rsquo;m often asked by friends and colleagues what it&amp;rsquo;s like to test a compiler, so I decided to write an article about it.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ll briefly talk about my path to compiler testing, the Kotlin/Native compiler, the specifics of the tasks, the tools I use, and the knowledge that helps me in my work.&lt;/p&gt;&#10;&lt;h2 id="about-me"&gt;About me&lt;/h2&gt;&#10;&lt;p&gt;I graduated with a bachelor&amp;rsquo;s and master&amp;rsquo;s degree in Software Engineering and then spent ten years in backend automation testing, including testing email backends (IMAP, POP3 protocols, email storage system, etc.), leading a testing team, and building test processes and test automation from scratch.&lt;/p&gt;</description></item><item><title>New video series "JavaFX In Action", Part 1</title><link>https://foojay.io/today/new-video-series-javafx-in-action-part-1/</link><pubDate>Tue, 16 Jul 2024 07:35:29 +0000</pubDate><guid>https://foojay.io/today/new-video-series-javafx-in-action-part-1/</guid><description>&lt;p&gt;JavaFX is a powerful user interface framework, often overlooked in the world of desktop applications development. With this new series of video interviews, I want to take you behind-the-scenes of some applications built using JavaFX.&lt;/p&gt;&#10;&lt;p&gt;JavaFX combines the best features of a modern user interface toolkit with the unparalleled strength of the Java platform. This approach enables you to perform heavy &amp;ldquo;background tasks&amp;rdquo;, like processing large amounts of data, while still providing a responsive user interface.&lt;/p&gt;</description></item><item><title>Dynamic watermarking on the JVM</title><link>https://foojay.io/today/dynamic-watermarking-on-the-jvm/</link><pubDate>Tue, 09 Jul 2024 07:59:29 +0000</pubDate><guid>https://foojay.io/today/dynamic-watermarking-on-the-jvm/</guid><description>&lt;p&gt;Displaying images on your website makes for an interesting problem: on one side, you want to make them publicly available; on the other, you want to protect them against undue use. The age-long method to achieve it is watermarking:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;A &lt;strong&gt;digital watermark&lt;/strong&gt; is a kind of marker covertly embedded in a noise-tolerant signal such as audio, video or image data. It is typically used to identify ownership of the copyright of such signal. &amp;ldquo;Watermarking&amp;rdquo; is the process of hiding digital information in a carrier signal; the hidden information should, but does not need to, contain a relation to the carrier signal. Digital watermarks may be used to verify the authenticity or integrity of the carrier signal or to show the identity of its owners. It is prominently used for tracing copyright infringements and for banknote authentication.&lt;/p&gt;</description></item><item><title>Foojay Podcast #54: Music and MIDI with Java and Kotlin</title><link>https://foojay.io/today/foojay-podcast-54/</link><pubDate>Mon, 24 Jun 2024 18:23:33 +0000</pubDate><guid>https://foojay.io/today/foojay-podcast-54/</guid><description>&lt;p&gt;MIDI is a universal standard for communicating between musical instruments and computers.&lt;/p&gt;&#10;&lt;p&gt;Within OpenJDK, there is a whole Java package dedicated to MIDI communication and data handling. Is it up to date? Are there better approaches now? And what can we do with music, Java, and Kotlin?&lt;/p&gt;&#10;&lt;p&gt;Let&amp;rsquo;s find out&amp;hellip;&lt;/p&gt;&#10;&lt;h2 id="video"&gt;Video&lt;/h2&gt;&#10;&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;&#10;&#9;&#9;&#9;&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/tHKZA9yqIVM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;&#10;&#9;&#9;&lt;/div&gt;&#10;&#10;&lt;h2 id="podcast-apps"&gt;Podcast Apps&lt;/h2&gt;&#10;&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Foojay Podcast #53: JCON Report, Part 5 – CQRS, JOOQ, GraphQL, API, Vaadin, OpenRewrite, ErrorProne, Gateways, Proxies,...</title><link>https://foojay.io/today/foojay-podcast-53/</link><pubDate>Mon, 17 Jun 2024 09:24:52 +0000</pubDate><guid>https://foojay.io/today/foojay-podcast-53/</guid><description>&lt;p&gt;This is the final part of the JCON interviews. Did I save the best for last? It&amp;rsquo;s up to you to decide&amp;hellip;&lt;/p&gt;&#10;&lt;p&gt;In this episode you&amp;rsquo;ll hear Simon Martinelli, Nicolas Fränkel, Marcus Hellberg, Rick Ossendrijver, and Abdel Sghiouar.&lt;/p&gt;&#10;&lt;p&gt;We talked about a bunch of topics like evolving your APIs, GraphQL, Java versus Kotlin versus Rust, Vaadin, AI and ChatGPT, OpenRewrite, ErrorProne, Infrastructure, and a lot more.&lt;/p&gt;&#10;&lt;h2 id="video"&gt;Video&lt;/h2&gt;&#10;&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;&#10;&#9;&#9;&#9;&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/6ops5sU_UiY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;&#10;&#9;&#9;&lt;/div&gt;&#10;&#10;&lt;h2 id="podcast-apps"&gt;Podcast Apps&lt;/h2&gt;&#10;&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Book review: Frontend Development with JavaFX and Kotlin</title><link>https://foojay.io/today/book-review-frontend-development-with-javafx-and-kotlin/</link><pubDate>Fri, 14 Jun 2024 09:06:53 +0000</pubDate><guid>https://foojay.io/today/book-review-frontend-development-with-javafx-and-kotlin/</guid><description>&lt;figure class="size-full is-resized"&gt;&#10; &lt;img src="https://foojay.io/today/book-review-frontend-development-with-javafx-and-kotlin/cover.jpg" alt="" width="327" height="466" style="width:auto;height:200px" loading="lazy" class="is-zoomable"&gt;&lt;/figure&gt;&#10;&#10;&lt;p&gt;For a personal pet project, I started experimenting with JavaFX and Kotlin to create a user interface with a lot of Java / Kotlin background processing. As I knew there is a book available on this specific topic, Apress was so kind to send me a review copy of &lt;a href="https://www.amazon.nl/Frontend-Development-JavaFX-Kotlin-State/dp/1484297164" target="_blank" rel="noopener noreferrer"&gt;Frontend Development with JavaFX and Kotlin: Build State-of-the-Art Kotlin GUI Applications&lt;/a&gt; by Peter Späth (152 pages, 48€ on paper, 35.5€ for ebook on Amazon.nl).&lt;/p&gt;</description></item><item><title>Hack a Java application with the debugger</title><link>https://foojay.io/today/debugger-godmode-hacking-a-jvm-application-with-the-debugger/</link><pubDate>Thu, 13 Jun 2024 04:58:03 +0000</pubDate><guid>https://foojay.io/today/debugger-godmode-hacking-a-jvm-application-with-the-debugger/</guid><description>&lt;p&gt;Read in other languages: &lt;a href="https://flounder.dev/zh/posts/debugger-god-mode/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt; &lt;a href="https://flounder.dev/es/posts/debugger-god-mode/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt; &lt;a href="https://flounder.dev/pt/posts/debugger-god-mode/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Back in the day, computer games were different. Not only have graphics and mechanics evolved since, but there&amp;rsquo;s also one characteristic that doesn&amp;rsquo;t seem very common in games today: nearly all of them had cheat codes.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Cheat codes were sequences of keys that would give you something extraordinary, such as infinite ammo or the ability to walk through walls. The most common and powerful of them was &amp;lsquo;god mode&amp;rsquo; – it made you invincible.&lt;/p&gt;</description></item><item><title>Java: Functional Programming f(x) – Part2</title><link>https://foojay.io/today/java-functional-programming-fx-part2/</link><pubDate>Mon, 03 Jun 2024 17:05:56 +0000</pubDate><guid>https://foojay.io/today/java-functional-programming-fx-part2/</guid><description>&lt;p&gt;In &lt;a href="https://foojay.io/today/java-functional-programming/"&gt;the preceding article&lt;/a&gt;, we explored the significance of &lt;strong&gt;Functional Programming, Lambda Calculus&lt;/strong&gt;, and other related concepts.&lt;/p&gt;&#10;&lt;p&gt;In this article, we delve deeper into the essential aspects of Functional Programming, such as…​&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;1. Lambda Expressions&#10;2. Method References&#10;3. Functional Interfaces&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;And we will discuss about the relationship between each of the features.&lt;/p&gt;&#10;&lt;h2 id="1-lambda-expressions"&gt;1. Lambda Expressions&lt;/h2&gt;&#10;&lt;p&gt;JSR 335 has greatly facilitated programming in a multicore environment by introducing Lambda Expressions/closures/anonymous method, and related features.&lt;/p&gt;</description></item><item><title>Learn how to debug unresponsive Java/JVM applications, then reload the fix on the fly, using a hands-on example</title><link>https://foojay.io/today/debug-unresponsive-apps/</link><pubDate>Thu, 23 May 2024 07:14:31 +0000</pubDate><guid>https://foojay.io/today/debug-unresponsive-apps/</guid><description>&lt;p&gt;Read in other languages: &lt;a href="https://flounder.dev/zh/posts/debug-unresponsive-apps/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt; &lt;a href="https://flounder.dev/es/posts/debug-unresponsive-apps/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt; &lt;a href="https://flounder.dev/pt/posts/debug-unresponsive-apps/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;There are a lot of debugger tutorials out there that teach you how to set line breakpoints, log values, or evaluate expressions. While this knowledge alone gives you a lot of tools for debugging your application, real-world scenarios may be somewhat trickier and require a more advanced approach.&lt;/strong&gt;&#10;&lt;img src="https://foojay.io/today/debug-unresponsive-apps/debug-unresponsive-apps-banner-3e5418c2.jpg" alt="Debug Unresponsive Apps – post banner" width="1600" height="840" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;In this article, we will learn how to locate code that causes a UI freeze without much prior knowledge of the project and fix faulty code on the fly.&lt;/p&gt;</description></item><item><title>Duplicate Finder for Documentation</title><link>https://foojay.io/today/duplicate-finder-for-documentation/</link><pubDate>Wed, 08 May 2024 22:08:04 +0000</pubDate><guid>https://foojay.io/today/duplicate-finder-for-documentation/</guid><description>&lt;p&gt;Other languages: &lt;a href="https://flounder.dev/es/posts/duplicate-finder-intro/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt; &lt;a href="https://flounder.dev/ko/posts/duplicate-finder-intro/" target="_blank" rel="noopener noreferrer"&gt;한국어&lt;/a&gt; &lt;a href="https://flounder.dev/pt/posts/duplicate-finder-intro/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt; &lt;a href="https://flounder.dev/zh/posts/duplicate-finder-intro/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;&lt;br&gt;&#10;This post is about the development of the duplicate finder tool. For downloads and instructions on how to use it, see the &amp;lsquo;Download&amp;rsquo; page&#10;&lt;a href="https://flounder.dev/duplicate-finder/" target="_blank" rel="noopener noreferrer"&gt;Download&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Anyone who worked on technical documentation in a big team is certainly aware of the content duplication issue. Even with the best tools and practices at hand, duplication is fundamentally difficult to overcome.&#10;&lt;img src="https://flounder.dev/img/duplicate-finder-banner.png" alt="Duplicate Finder for Documentation - Post banner" title="Duplicate Finder for Documentation - Post banner" loading="lazy" decoding="async"&gt;&lt;/p&gt;</description></item><item><title>Functional Programming: Revolutionizing Software Development</title><link>https://foojay.io/today/java-functional-programming/</link><pubDate>Thu, 25 Apr 2024 17:43:17 +0000</pubDate><guid>https://foojay.io/today/java-functional-programming/</guid><description>&lt;h2 id="java-functional-programming-fx--part1"&gt;Java: Functional Programming f(x) – Part1&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Mathematics serves as the driving force behind significant advancements in computer science from my perspective. We deeply root the fundamental principles that we utilize in our daily programming tasks and application development in mathematical concepts. I am constantly intrigued by the opportunity to incorporate mathematical ideas into the programming languages I work with as a student of Mathematics.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Many other programming paradigms, like functional programming, take inspiration from Mathematics to address challenges related to concurrency and parallelism. Computing shifts towards utilizing multiple cores and distributed systems, which makes this increasingly important.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Debug Without Breakpoints – Guide to IntelliJ IDEA's Pause</title><link>https://foojay.io/today/debug-without-breakpoints/</link><pubDate>Mon, 22 Apr 2024 06:59:28 +0000</pubDate><guid>https://foojay.io/today/debug-without-breakpoints/</guid><description>&lt;p&gt;Read in other languages: &lt;a href="https://flounder.dev/zh/posts/debug-without-breakpoints/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt; &lt;a href="https://flounder.dev/es/posts/debug-without-breakpoints/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt; &lt;a href="https://flounder.dev/pt/posts/debug-without-breakpoints/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;In a typical debugging scenario, you would set breakpoints to tell the debugger when to suspend your program. A breakpoint usually corresponds to the moment that marks the starting point of the further investigation.&lt;/p&gt;&#10;&lt;p&gt;However, in some situations you aren&amp;rsquo;t certain about where to set a breakpoint. Other times, you might prefer to suspend the program at a particular &lt;em&gt;time&lt;/em&gt; rather than aiming at a specific &lt;em&gt;line&lt;/em&gt;.&#10;&lt;img src="https://foojay.io/today/debug-without-breakpoints/debug-without-breakpoints-banner-1024x538.jpg" alt="post banner" width="1024" height="538" loading="lazy" decoding="async"&gt;&lt;/p&gt;</description></item><item><title>The pitfall of implicit returns</title><link>https://foojay.io/today/the-pitfall-of-implicit-returns/</link><pubDate>Mon, 18 Mar 2024 10:47:02 +0000</pubDate><guid>https://foojay.io/today/the-pitfall-of-implicit-returns/</guid><description>&lt;p&gt;Implicit returns are a feature in some languages. They have recently bitten me, so here&amp;rsquo;s my opinion.&lt;/p&gt;&#10;&lt;h2 id="statements-expressions-and-returns"&gt;Statements, expressions, and returns&lt;/h2&gt;&#10;&lt;p&gt;Before diving into implicit returns, we must explain two programming concepts influencing them. A lot of literature is available on the subject, so I&amp;rsquo;ll paraphrase one of the existing definitions:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;An expression usually refers to a piece of code that can be evaluated to a value. In most programming languages, there are typically three different types of expressions: arithmetic, character, and logical.&lt;/p&gt;</description></item></channel></rss>