<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Igor Kulakov on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/author/igor-kulakov/</link><description>Articles written by Igor Kulakov on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 26 Feb 2025 01:38:47 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/author/igor-kulakov/index.xml" rel="self" type="application/rss+xml"/><item><title>Review of Junie, a coding agent by JetBrains – Revie</title><link>https://foojayio.github.io/website/today/checking-out-junie-a-coding-agent-by-jetbrains/</link><pubDate>Wed, 26 Feb 2025 01:38:47 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&lt;hr&gt;
&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://foojayio.github.io/website/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;
&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>Foojay Podcast #66: Let's Talk About Java Code!</title><link>https://foojayio.github.io/website/today/foojay-podcast-66/</link><pubDate>Tue, 11 Feb 2025 08:24:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-66/</guid><description>&lt;p&gt;In this Foojay podcast, we dive into a few articles that were published recently and focus on code.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Igor Kulakov of JetBrains gives us his insights into the tool he created to find duplicate content in documentation.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --&gt;
&lt;ul&gt;
&lt;li&gt;Rijo Sam explains how you can generate real random values and how he created a train departure display.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --&gt;
&lt;ul&gt;
&lt;li&gt;Maxillian Arruda explains in a very detailed post the different ways to construct a complex Java object.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --&gt;
&lt;ul&gt;
&lt;li&gt;And we start with Wim De Troye about the code changes he had to do in a project that got upgraded from Spring Boot 2 to 3.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/IB7drozkKUk?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Duplicate finder – Tests</title><link>https://foojayio.github.io/website/today/duplicate-finder-for-text-requirements/</link><pubDate>Wed, 18 Dec 2024 16:00:44 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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;
&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;
&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>Profile IntelliJ IDEA with its own profiler</title><link>https://foojayio.github.io/website/today/profile-intellij-idea-with-its-own-profiler/</link><pubDate>Wed, 16 Oct 2024 15:49:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/profile-intellij-idea-with-its-own-profiler/</guid><description>&lt;p&gt;Other languages: &lt;a href="https://flounder.dev/es/posts/profile-idea-with-idea/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/ko/posts/profile-idea-with-idea/" target="_blank" rel="noopener noreferrer"&gt;한국어&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/profile-idea-with-idea/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
 &lt;a href="https://flounder.dev/zh/posts/profile-idea-with-idea/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Just like my &lt;a href="https://foojayio.github.io/website/today/debugger-godmode-hacking-a-jvm-application-with-the-debugger/"&gt;previous post&lt;/a&gt;
, this one is going to be slightly meta. Obviously, you can use IntelliJ IDEA &lt;a href="https://flounder.dev/posts/get-started-with-profiling/" target="_blank" rel="noopener noreferrer"&gt;to profile another process&lt;/a&gt;
, but did you know IntelliJ IDEA can profile itself?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This might be useful if you are writing an &lt;a href="https://plugins.jetbrains.com/docs/intellij/sdk.html" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA plugin&lt;/a&gt;
 and need to address issues related to your plugin&amp;rsquo;s performance.&lt;/p&gt;
&lt;p&gt;Also, regardless of whether you are a plugin author, the described case might be interesting to you because the profiling strategy that I&amp;rsquo;ll cover is not exclusive to IntelliJ IDEA &amp;ndash; you can use it to troubleshoot similar bottlenecks in other types of projects and using other tools.&lt;/p&gt;</description></item><item><title>Allocation Profiling in Java</title><link>https://foojayio.github.io/website/today/get-started-with-allocation-profiling/</link><pubDate>Fri, 09 Aug 2024 08:44:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/get-started-with-allocation-profiling/</guid><description>&lt;p&gt;&lt;strong&gt;Read in other languages&lt;/strong&gt; : &lt;a href="https://flounder.dev/zh/posts/allocation-profiling/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
 &lt;a href="https://flounder.dev/es/posts/allocation-profiling/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/allocation-profiling/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;We often find ourselves in situations when code is not working properly, and we have no idea where to even begin investigating.&lt;/p&gt;
&lt;p&gt;Can&amp;rsquo;t we just stare at the code until the solution eventually comes to us? Sure, but this method probably won&amp;rsquo;t work without deep knowledge of the project and a lot of mental effort. A smarter approach would be to use the tools you have at hand. They can point you in the right direction.&lt;/p&gt;</description></item><item><title>A Beginner's Guide to IntelliJ Profiler</title><link>https://foojayio.github.io/website/today/beginners-guide-to-java-profiler/</link><pubDate>Thu, 04 Jul 2024 06:26:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/beginners-guide-to-java-profiler/</guid><description>&lt;p&gt;Read in other languages: &lt;a href="https://flounder.dev/zh/posts/get-started-with-profiling/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
 &lt;a href="https://flounder.dev/es/posts/get-started-with-profiling/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/get-started-with-profiling/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Sometimes your app works, but you want to increase performance by boosting its throughput or reducing latency. Other times, you just want to know how code behaves at runtime, determine where the hot spots are, or figure out how a framework operates under the hood.&lt;/p&gt;
&lt;p&gt;This is a perfect use case for profilers. They offer a bird&amp;rsquo;s eye view of arbitrarily large execution chunks, which helps you see problems at scale.&lt;/p&gt;</description></item><item><title>Hack a Java application with the debugger</title><link>https://foojayio.github.io/website/today/debugger-godmode-hacking-a-jvm-application-with-the-debugger/</link><pubDate>Thu, 13 Jun 2024 04:58:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugger-godmode-hacking-a-jvm-application-with-the-debugger/</guid><description>&lt;p&gt;Read in other languages: &lt;a href="https://flounder.dev/zh/posts/debugger-god-mode/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
 &lt;a href="https://flounder.dev/es/posts/debugger-god-mode/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/debugger-god-mode/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Back in the day, computer games were different. Not only have graphics and mechanics evolved since, but there&amp;rsquo;s also one characteristic that doesn&amp;rsquo;t seem very common in games today: nearly all of them had cheat codes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cheat codes were sequences of keys that would give you something extraordinary, such as infinite ammo or the ability to walk through walls. The most common and powerful of them was &amp;lsquo;god mode&amp;rsquo; &amp;ndash; it made you invincible.&lt;/p&gt;</description></item><item><title>Learn how to debug unresponsive Java/JVM applications, then reload the fix on the fly, using a hands-on example</title><link>https://foojayio.github.io/website/today/debug-unresponsive-apps/</link><pubDate>Thu, 23 May 2024 07:14:31 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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;
&lt;img src="https://flounder.dev/img/debug-unresponsive-apps-banner.png" alt="Debug Unresponsive Apps – post banner" loading="lazy"&gt;
&lt;/p&gt;
&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://foojayio.github.io/website/today/duplicate-finder-for-documentation/</link><pubDate>Wed, 08 May 2024 22:08:04 +0000</pubDate><guid>https://foojayio.github.io/website/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;
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
&lt;a href="https://flounder.dev/duplicate-finder/" target="_blank" rel="noopener noreferrer"&gt;Download&lt;/a&gt;
&lt;/p&gt;
&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.
&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"&gt;
&lt;/p&gt;</description></item><item><title>Debug Without Breakpoints – Guide to IntelliJ IDEA's Pause</title><link>https://foojayio.github.io/website/today/debug-without-breakpoints/</link><pubDate>Mon, 22 Apr 2024 06:59:28 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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;
&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;.
&lt;img src="https://foojayio.github.io/website/today/debug-without-breakpoints/debug-without-breakpoints-banner-1024x538.png" alt="post banner" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Localize applications with AI</title><link>https://foojayio.github.io/website/today/localize-apps-with-ai/</link><pubDate>Wed, 20 Mar 2024 08:50:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/localize-apps-with-ai/</guid><description>&lt;p&gt;Read in other languages: &lt;a href="https://flounder.dev/zh/posts/localize-apps-with-ai/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
 &lt;a href="https://flounder.dev/es/posts/localize-apps-with-ai/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/localize-apps-with-ai/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ever wondered if AI can localize an entire project? In this article, we follow the process end-to-end using the Spring Petclinic as an example. We prepare the project for localization, automate the translation using Python and DeepL, and analyze the results&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Whether you are thinking of localizing your project or just learning how to do that, AI might help you. It offers a cost-efficient entry point for experiments and automations.&lt;/p&gt;</description></item></channel></rss>