<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>A N M Bazlur Rahman on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/author/bazlur-rahman/</link><description>Articles written by A N M Bazlur Rahman on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 20 Feb 2026 17:48:21 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/author/bazlur-rahman/index.xml" rel="self" type="application/rss+xml"/><item><title>A Visual Diff of Java’s Evolution: Inside java.evolved</title><link>https://foojayio.github.io/website/today/a-visual-diff-of-javas-evolution-inside-java-evolved/</link><pubDate>Fri, 20 Feb 2026 17:48:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-visual-diff-of-javas-evolution-inside-java-evolved/</guid><description>&lt;p&gt;A community project called &lt;a href="https://javaevolved.github.io/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;java.evolved&lt;/strong&gt;&lt;/a&gt;
 was recently launched to document how common Java coding patterns have changed across releases. Instead of explaining features in isolation, the site presents &amp;ldquo;before and after&amp;rdquo; examples: traditional idioms next to modern alternatives.&lt;/p&gt;
&lt;p&gt;The approach targets a practical problem. Most developers work in mixed-era codebases where Java 6, 8, and 17 styles coexist. Rather than memorizing new language features, the site shows what existing code would look like if written today.
&lt;img src="https://foojayio.github.io/website/today/a-visual-diff-of-javas-evolution-inside-java-evolved/Screenshot-2026-02-20-at-6.28.07-AM-700x446.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Announcing: Sustainability for Java Developers</title><link>https://foojayio.github.io/website/today/announcing-sustainability-for-java-developers-a-new-collaborative-guide-from-the-foojay-io-community/</link><pubDate>Mon, 02 Feb 2026 11:04:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-sustainability-for-java-developers-a-new-collaborative-guide-from-the-foojay-io-community/</guid><description>&lt;p&gt;Java developers from around the world are writing a book about a question that&amp;rsquo;s becoming impossible to ignore: how do we write software that&amp;rsquo;s good for both our projects and the planet?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Sustainability for Java Developers: Towards an Understanding of Sustainable Java Software Development&lt;/em&gt; is now freely available on Leanpub, bringing together Java Champions, architects, and technical writers to look at sustainability from every angle.&lt;/p&gt;
&lt;figure class="wp-block-image size-large is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="793" height="1024" src="sustainabilitybook-793x1024.png" alt="" class="wp-image-122569" style="width:277px;height:auto"&gt;
&lt;/figure&gt;
&lt;p&gt;The book covers everything from the environmental footprint of our data centers to the ethics of open source supply chains, from efficient data formats to the often-overlooked topic of career longevity.&lt;/p&gt;</description></item><item><title>AI Applications with LangChain4j Guardrails and Spring Boot</title><link>https://foojayio.github.io/website/today/building-robust-ai-applications-with-langchain4j-guardrails-and-spring-boot/</link><pubDate>Tue, 29 Jul 2025 11:16:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-robust-ai-applications-with-langchain4j-guardrails-and-spring-boot/</guid><description>&lt;p&gt;&lt;strong&gt;As AI applications become increasingly complex, ensuring that language models behave predictably and safely is paramount. LangChain4j&amp;rsquo;s guardrails feature provides a powerful framework for validating both the inputs and outputs of your AI services.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article demonstrates how to implement comprehensive guardrails in a Spring Boot application, with practical examples that you can adapt to your use cases.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📦 &lt;strong&gt;Complete source code available at&lt;/strong&gt; : &lt;a href="https://github.com/rokon12/guardrails-demo" target="_blank" rel="noopener noreferrer"&gt;github.com/rokon12/guardrails-demo&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h2-0-understanding-langchain4j-guardrails"&gt;Understanding LangChain4j Guardrails&lt;/h2&gt;
&lt;p&gt;In LangChain4j, guardrails are validation mechanisms that operate exclusively on AI Services, the framework&amp;rsquo;s high-level abstraction for interacting with language models. Unlike simple validators, guardrails provide sophisticated control over the entire AI interaction lifecycle.&lt;/p&gt;</description></item><item><title>Java’s Structured Concurrency: Finally Finding Its Footing</title><link>https://foojayio.github.io/website/today/javas-structured-concurrency-finally-finding-its-footing/</link><pubDate>Wed, 04 Jun 2025 12:21:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/javas-structured-concurrency-finally-finding-its-footing/</guid><description>&lt;p&gt;The structured concurrency API changed again after two incubations and four rounds of previews.&lt;/p&gt;
&lt;p&gt;Ideally, this scenario is unexpected.&lt;/p&gt;
&lt;p&gt;However, given its status as a preview API, such changes can occur, as was the case here.&lt;/p&gt;
&lt;p&gt;These changes lend considerable maturity to the API, and I am hopeful it will now stabilize without requiring further modifications.&lt;/p&gt;
&lt;h3 id="h3-0-what-actually-changed-this-time"&gt;&lt;strong&gt;What Actually Changed This Time&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;When I first started working with structured concurrency back in its incubation phase, I was excited about the promise of cleaner concurrent code.&lt;/p&gt;</description></item><item><title>Building FormPilot</title><link>https://foojayio.github.io/website/today/building-formpilot-my-journey-creating-an-ai-powered-form-filler-with-rag-langchain4j-and-ollama/</link><pubDate>Tue, 06 May 2025 10:00:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-formpilot-my-journey-creating-an-ai-powered-form-filler-with-rag-langchain4j-and-ollama/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer: This article details an experimental project built for learning and demonstration purposes. The implementation described is not intended as production-grade solution. Some parts of the code were generated using JetBrains&amp;rsquo; AI Agent, &lt;a href="https://www.jetbrains.com/junie/" target="_blank" rel="noopener noreferrer"&gt;Junie&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Have you ever found yourself filling out the same information on web forms over and over again? Name, email, address, phone number&amp;hellip; it&amp;rsquo;s tedious and time-consuming. As a developer who values efficiency, I decided to tackle this problem head-on by building FormPilot, an intelligent form filler that leverages the power of Large Language Models (LLMs) to fill out forms with contextually appropriate information automatically.&lt;/p&gt;</description></item><item><title>Enhancing LLM’s Conversations with Efficient Summarization</title><link>https://foojayio.github.io/website/today/summarizingtokenwindowchatmemory-enhancing-llms-conversations-with-efficient-summarization/</link><pubDate>Mon, 03 Mar 2025 13:16:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/summarizingtokenwindowchatmemory-enhancing-llms-conversations-with-efficient-summarization/</guid><description>&lt;p&gt;&lt;strong&gt;LLM chat models have become an integral part of many applications today. We are all experimenting and exploring the best ways to utilize them effectively. For Java developers, LangChain4j has been an incredible tool in this journey.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;By design, most available APIs, such as ChatGPT and Gemini, operate in a &lt;strong&gt;fire-and-forget&lt;/strong&gt; mode. They don&amp;rsquo;t retain previous interactions, meaning every request is treated as a completely new one.&lt;/p&gt;
&lt;p&gt;However, for a smooth and engaging conversation, maintaining context is crucial&amp;mdash;otherwise, the interaction becomes disjointed and frustrating. The common solution is to pass previous messages along with each new prompt, allowing the LLM to infer context. This is where the &lt;strong&gt;chat memory&lt;/strong&gt; concept comes in.&lt;/p&gt;</description></item><item><title>Java Tips # 01 -  Writing Shebang Scripts in Pure Java</title><link>https://foojayio.github.io/website/today/java-tips-01-writing-shebang-scripts-in-pure-java/</link><pubDate>Tue, 29 Oct 2024 17:06:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-tips-01-writing-shebang-scripts-in-pure-java/</guid><description>&lt;p&gt;&lt;strong&gt;Did you know you can write a CLI script in Java just as easily as you would in a bash script, and run it directly from the shell?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is commonly called a shebang script, though we are mostly familiar with writing them in bash. Bash scripts are great, but they can be obscure to developers who aren&amp;rsquo;t familiar with the syntax. As a Java developer, you&amp;rsquo;d likely prefer to get things done the Java way. Well, since Java 11, you can do exactly that!&lt;/p&gt;</description></item><item><title>Interview with a Java Champion: Reflections on a Storied Career and Insights for the Next Generation</title><link>https://foojayio.github.io/website/today/interview-with-a-java-champion-reflections-on-a-storied-career-and-insights-for-the-next-generation/</link><pubDate>Mon, 19 Aug 2024 07:52:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/interview-with-a-java-champion-reflections-on-a-storied-career-and-insights-for-the-next-generation/</guid><description>&lt;h3 id="h3-0-introduction"&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;/h3&gt;
&lt;figure class="alignleft"&gt;
 &lt;img decoding="async" src="https://media.licdn.com/dms/image/v2/C4E03AQHOSJQsBSmS3A/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1517742324318?e=1729123200&amp;amp;v=beta&amp;amp;t=jVizFMHohUoyR_Jp1Cgi5UO-0lVIMQO2fRu3ivz1LHk" alt=""&gt;
&lt;/figure&gt;
&lt;p&gt;In the fast-paced world of software development, a few individuals leave a lasting impact through their dedication and contributions. Our guest today is a seasoned developer, a respected author, and a cornerstone of the Java community.&lt;/p&gt;
&lt;p&gt;With over two decades of experience, he has played a key role in the evolution of Java from a niche language to a critical tool in various industries. In this interview, he shares his journey, insights, and advice for developers at all stages of their careers.&lt;/p&gt;</description></item><item><title>Creating a Command Line Tool with JBang and PicoCLI to Generate Release Notes</title><link>https://foojayio.github.io/website/today/creating-a-command-line-tool-with-jbang-and-picocli-to-generate-release-notes/</link><pubDate>Wed, 24 Jul 2024 09:44:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-a-command-line-tool-with-jbang-and-picocli-to-generate-release-notes/</guid><description>&lt;p&gt;Lately, I have been playing with JBang and PicoCLI, and I am pretty amazed at what we can do with these tools. I needed to create a script that would go to a specified repository on GitHub, check the commit range, and verify if any tickets were associated with them. Additionally, I wanted to check if the ticket is accepted and if the commit was approved or not. The idea was to integrate this script along with the CI/CD pipeline.&lt;/p&gt;</description></item><item><title>Java's Unsafe is Finally Going Away</title><link>https://foojayio.github.io/website/today/unsafe-is-finally-going-away-embracing-safer-memory-access-with-jep-471/</link><pubDate>Thu, 11 Jul 2024 07:52:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/unsafe-is-finally-going-away-embracing-safer-memory-access-with-jep-471/</guid><description>&lt;p&gt;Java, being a safe language, doesn&amp;rsquo;t usually allow direct low-level access. Memory is primarily managed on the heap, so developers don&amp;rsquo;t typically deal with memory directly. However, library developers are occasionally required to manipulate memory outside the heap for performance or specific use cases. This is where the controversial &lt;a href="https://github.com/openjdk/jdk/blob/master/src/jdk.unsupported/share/classes/sun/misc/Unsafe.java" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;sun.misc.Unsafe&lt;/strong&gt;&lt;/a&gt;
 comes in.&lt;/p&gt;
&lt;p&gt;While undeniably powerful, &lt;strong&gt;sun.misc.Unsafe&lt;/strong&gt; is a double-edged sword. Its improper use can lead to severe consequences, including memory leaks, crashes due to invalid memory access, and even security vulnerabilities like buffer overflows. As the name suggests, it&amp;rsquo;s inherently unsafe.&lt;/p&gt;</description></item><item><title>Exploring New Features in JDK 23: Simplifying Java with Module Import Declarations with JEP 476</title><link>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-simplifying-java-with-module-import-declarations-with-jep-476/</link><pubDate>Thu, 20 Jun 2024 16:14:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-simplifying-java-with-module-import-declarations-with-jep-476/</guid><description>&lt;p&gt;As Java evolves, simplifying code and improving developer productivity remain priorities.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://openjdk.org/jeps/476" target="_blank" rel="noopener noreferrer"&gt;JEP 476&lt;/a&gt;
 introduces a new feature in JDK 23: Module Import Declarations.&lt;/p&gt;
&lt;p&gt;This feature aims to streamline the process of importing multiple packages from a module, enhancing code readability and reducing boilerplate.&lt;/p&gt;
&lt;h3 id="h3-0-what-is-jep-476"&gt;&lt;strong&gt;What is JEP 476?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;JEP 476 proposes the ability to import all packages exported by a module with a single declaration. This is particularly useful for developers who frequently use multiple packages from the same module, as it eliminates the need for numerous individual import statements.&lt;/p&gt;</description></item><item><title>Exploring New Features in JDK 23: Simplifying Java with Primitive Type Patterns with JEP 455</title><link>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-simplifying-java-with-primitive-type-patterns-with-jep-455/</link><pubDate>Thu, 06 Jun 2024 10:37:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-simplifying-java-with-primitive-type-patterns-with-jep-455/</guid><description>&lt;p&gt;&lt;strong&gt;Java continues to evolve, introducing features that streamline coding practices and improve readability. &lt;a href="https://openjdk.org/jeps/455" target="_blank" rel="noopener noreferrer"&gt;JEP 455&lt;/a&gt;
 is one such proposal that enhances the switch statement, making it more versatile and expressive.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article delves into how JEP 455 can be utilized to handle complex decision-making scenarios more efficiently. We&amp;rsquo;ll examine a practical example to illustrate the benefits of this feature.&lt;/p&gt;
&lt;h3 id="h3-0-what-s-new-in-jep-455"&gt;&lt;strong&gt;What&amp;rsquo;s New in JEP 455?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;This JEP introduces the following key features:&lt;/p&gt;</description></item><item><title>Records for Cleaner and More Expressive Parameterized Tests in JUnit 5</title><link>https://foojayio.github.io/website/today/records-for-cleaner-and-more-expressive-parameterized-tests-in-junit-5/</link><pubDate>Wed, 03 Apr 2024 09:00:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/records-for-cleaner-and-more-expressive-parameterized-tests-in-junit-5/</guid><description>&lt;h3 id="h3-0-introduction"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;:&lt;/h3&gt;
&lt;p&gt;Parameterized testing in JUnit 5 is a potent technique for executing the same test logic with various inputs. While you can use a variety of data structures, such as custom classes, arrays, or collections, Java records offer a compelling advantage in readability, type safety, and expressiveness.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s examine how to leverage Java records for parameterized tests through a concrete example &amp;ndash; testing an expression evaluator.&lt;/p&gt;
&lt;h3 id="h3-1-the-expression-evaluator-scenario"&gt;The Expression Evaluator Scenario&lt;/h3&gt;
&lt;p&gt;Consider a simple expression evaluator capable of handling the following:&lt;/p&gt;</description></item><item><title>Journey of a Java Champion: Bert Jan Schrijver's Path to Mastery and Community Leadership</title><link>https://foojayio.github.io/website/today/journey-of-a-java-champion-bert-jan-schrijvers-path-to-mastery-and-community-leadership/</link><pubDate>Wed, 10 Jan 2024 15:50:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/journey-of-a-java-champion-bert-jan-schrijvers-path-to-mastery-and-community-leadership/</guid><description>&lt;figure class="alignright size-full"&gt;
 &lt;img fetchpriority="high" decoding="async" width="400" height="400" src="image.png" alt="" class="wp-image-105572"&gt;
&lt;/figure&gt;
&lt;p&gt;Bert Jan is CTO at &lt;a href="https://www.openvalue.eu/" target="_blank" rel="noopener noreferrer"&gt;OpenValue&lt;/a&gt;
 and focuses on Java, software architecture, Continuous Delivery and DevOps.&lt;/p&gt;
&lt;p&gt;Bert Jan is a Java Champion, JavaOne Rock Star speaker, Duke&amp;rsquo;s Choice Award winner and leads NLJUG, the Dutch Java User Group.&lt;/p&gt;
&lt;p&gt;He loves to share his experience by speaking at conferences, writing for the Dutch Java magazine and helping out Devoxx4Kids by teaching kids how to code. Bert Jan is easily reachable on Twitter at &lt;a href="https://twitter.com/bjschrijver" target="_blank" rel="noopener noreferrer"&gt;@bjschrijver&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Diagnose and Mitigate Pinning in Java's Virtual Thread Execution</title><link>https://foojayio.github.io/website/today/how-to-diagnose-and-mitigate-pinning-in-javas-virtual-thread-execution/</link><pubDate>Tue, 10 Oct 2023 09:08:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-diagnose-and-mitigate-pinning-in-javas-virtual-thread-execution/</guid><description>&lt;p&gt;&lt;strong&gt;In &lt;a href="https://foojayio.github.io/website/today/web-crawling-in-java-a-tale-of-classical-threads-and-virtual-threads/"&gt;our last article&lt;/a&gt;
, we highlighted the impressive performance gains achieved through the use of virtual threads. However, upon diving deeper into the code, we discovered an issue caused by the jsoup library: a phenomenon known as pinning. But before we delve into solutions, let&amp;rsquo;s take a moment to understand what pinning actually is.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-what-is-pinning"&gt;What is Pinning?&lt;/h2&gt;
&lt;p&gt;In the context of virtual threads, pinning refers to the condition where a virtual thread is &amp;ldquo;stuck&amp;rdquo; to its carrier thread (the platform thread on which it runs).&lt;/p&gt;</description></item><item><title>Web Crawling in Java: Classical Threads and Virtual Threads</title><link>https://foojayio.github.io/website/today/web-crawling-in-java-a-tale-of-classical-threads-and-virtual-threads/</link><pubDate>Fri, 29 Sep 2023 12:23:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/web-crawling-in-java-a-tale-of-classical-threads-and-virtual-threads/</guid><description>&lt;p&gt;I&lt;strong&gt;n today&amp;rsquo;s fast-paced digital world, web crawling is a cornerstone technology behind search engines, data analysis tools, and various other applications.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Java, a language known for its robustness and scalability, offers intriguing ways to implement web crawling.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yet, the thread model you choose can make a world of difference.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This article unfolds a compelling narrative around web crawling in Java, contrasting classical threads with their newer counterpart: virtual threads.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-environment-setup"&gt;&lt;strong&gt;Environment Setup&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Before diving into the code and its intricate comparisons, ensure you have JDK 21 installed on your system. If you&amp;rsquo;re using a Unix-based system, SDKMAN! It makes this simple. Just open your terminal and run &lt;code&gt;curl -s &amp;quot;https://get.sdkman.io&amp;quot; | bash&lt;/code&gt; to install SDKMAN!, followed by &lt;code&gt;source &amp;quot;$HOME/.sdkman/bin/sdkman-init.sh&amp;quot;&lt;/code&gt; to initialize it. Finally, install JDK 21 with &lt;code&gt;sdk install java 21.0.0-&amp;lt;vendor&amp;gt;&lt;/code&gt;, replacing &amp;lt;vendor&amp;gt; with your preferred vendor (e.g., zulu, adopt).&lt;/p&gt;</description></item><item><title>Exploring the Impact of Stack Size on JVM Thread Creation: A Myth Debunked</title><link>https://foojayio.github.io/website/today/exploring-the-impact-of-stack-size-on-jvm-thread-creation-a-myth-debunked/</link><pubDate>Wed, 20 Sep 2023 06:59:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-the-impact-of-stack-size-on-jvm-thread-creation-a-myth-debunked/</guid><description>&lt;p&gt;&lt;strong&gt;Among Java developers, a prevailing assumption is that the number of native threads that can be created within the Java Virtual Machine (JVM) is linked to the stack size. To scrutinize this widespread notion, an experiment was conducted. The results revealed that stack size plays a less significant role in native thread creation than previously thought.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-the-experiment"&gt;&lt;strong&gt;The Experiment&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The experiment utilized the following Java program, which continuously creates threads and counts them using an &lt;a href="https://download.java.net/java/early_access/jdk21/docs/api/java.base/java/util/concurrent/atomic/AtomicInteger.html" target="_blank" rel="noopener noreferrer"&gt;AtomicInteger&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>A Look at Sealed Classes, Pattern Matching, Functional Paradigms</title><link>https://foojayio.github.io/website/today/embracing-modernity-a-comprehensive-look-at-sealed-classes-pattern-matching-and-functional-paradigms-in-java/</link><pubDate>Mon, 11 Sep 2023 08:42:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/embracing-modernity-a-comprehensive-look-at-sealed-classes-pattern-matching-and-functional-paradigms-in-java/</guid><description>&lt;h3 id="h3-0-introduction"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The introduction of Sealed Classes in Java and the combination with pattern matching in switch statements has sparked a debate among software developers.&lt;/p&gt;
&lt;p&gt;The argument in question raises concerns about the real-life use cases for Sealed Classes and suggests that pattern matching with switch might promote poor coding practices.&lt;/p&gt;
&lt;p&gt;This article aims to counter these assertions by examining the principles and practical applications of Sealed Classes and pattern matching.&lt;/p&gt;</description></item><item><title>Unlocking Java Wisdom: A Conversation with Oracle ACE Simon Martinelli</title><link>https://foojayio.github.io/website/today/unlocking-java-wisdom-a-conversation-with-oracle-ace-simon-martinelli/</link><pubDate>Fri, 01 Sep 2023 16:00:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/unlocking-java-wisdom-a-conversation-with-oracle-ace-simon-martinelli/</guid><description>&lt;figure class="alignright size-full"&gt;
 &lt;img fetchpriority="high" decoding="async" width="460" height="460" src="image-2.png" alt="" class="wp-image-102139"&gt;
&lt;/figure&gt;
&lt;p&gt;In a recent insightful interview, Simon Martinelli, an Oracle ACE associate and veteran Java developer, shares his career experiences, software development philosophies, and views on mentoring. With over two decades in the industry, Martinelli offers a perspective that combines the wisdom of experience with a focus on simplicity and constant learning.&lt;/p&gt;
&lt;h2 id="h2-0-profiles"&gt;Profiles:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🌍 Homepage:&lt;a href="https://martinelli.ch/" target="_blank" rel="noopener noreferrer"&gt;martinelli.ch&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👔 LinkedIn:&lt;a href="https://www.linkedin.com/in/simonmartinelli/?originalSubdomain=ch" target="_blank" rel="noopener noreferrer"&gt;Simon Martinelli on LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐦 Twitter:&lt;a href="https://twitter.com/simas_ch" target="_blank" rel="noopener noreferrer"&gt;@simas_ch on Twitter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📦 GitHub:&lt;a href="https://github.com/simasch" target="_blank" rel="noopener noreferrer"&gt;simasch on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-fun-fact"&gt;Fun Fact:&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Before starting my IT career, I was working as a traffic controller at Swiss Railways.&lt;/p&gt;</description></item><item><title>Testable Code: A Journey Through Consideration and Refactoring</title><link>https://foojayio.github.io/website/today/writing-testable-code-a-journey-through-consideration-and-refactoring/</link><pubDate>Wed, 30 Aug 2023 06:47:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/writing-testable-code-a-journey-through-consideration-and-refactoring/</guid><description>&lt;p&gt;&lt;strong&gt;In an ideal world, every piece of code we write would be easily testable, clearly understood, and perfectly maintainable. However, reality often presents us with complex problems and solutions that aren&amp;rsquo;t always straightforward. Writing testable code sometimes requires a thoughtful approach, deep consideration of the use cases, and even refactoring to ensure that the code is robust and fully tested.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-the-challenge-of-testing"&gt;The Challenge of Testing&lt;/h2&gt;
&lt;p&gt;Imagine a scenario where you need to create an Amazon S3 client based on different credential providers. At first glance, the implementation might seem simple. However, when it comes to writing unit tests for this code, challenges arise.&lt;/p&gt;</description></item><item><title>Exploring File Storage Solutions in Spring Boot</title><link>https://foojayio.github.io/website/today/exploring-file-storage-solutions-in-spring-boot-database-local-systems-cloud-services-and-beyond/</link><pubDate>Wed, 23 Aug 2023 08:07:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-file-storage-solutions-in-spring-boot-database-local-systems-cloud-services-and-beyond/</guid><description>&lt;p&gt;&lt;strong&gt;When building a web application, managing file uploads properly is a common requirement. After receiving, files can be stored in several places: in a file system, in a database or, more commonly, in a cloud storage service.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this article, we will cover how to store files in a database using Spring Boot and discuss some alternatives.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Recently, a fellow developer who I helped in past reached out to me on Slack seeking assistance with handling file uploads in a Spring Boot application. After providing some guidance, I decided to compile this article to assist others facing similar challenges.&lt;/p&gt;</description></item><item><title>Thread-Safe Counter in Java: A Comprehensive Guide</title><link>https://foojayio.github.io/website/today/thread-safe-counter-in-java-a-comprehensive-guide/</link><pubDate>Thu, 17 Aug 2023 06:59:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/thread-safe-counter-in-java-a-comprehensive-guide/</guid><description>&lt;p&gt;&lt;strong&gt;In this tutorial, we will explore the concept of thread safety in Java, specifically focusing on a simple counter.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We will start by understanding why a basic counter is not safe for multiple threads; then, we will progressively enhance its thread safety using different techniques such as synchronization, locks, Unsafe, VarHandle, and finally, AtomicInteger.&lt;/p&gt;
&lt;p&gt;We will be referencing the code from this &lt;a href="https://github.com/rokon12/counter" target="_blank" rel="noopener noreferrer"&gt;repository&lt;/a&gt;
 throughout the tutorial.&lt;/p&gt;
&lt;p&gt;Before we dive into the different implementations, let&amp;rsquo;s define a Counter interface that all our counter classes will implement.&lt;/p&gt;</description></item><item><title>Sealed Interfaces &amp; Pattern Matching: Java's Modern Capabilities</title><link>https://foojayio.github.io/website/today/sealed-interfaces-and-pattern-matching-a-quick-dive-into-javas-modern-capabilities/</link><pubDate>Wed, 09 Aug 2023 07:01:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/sealed-interfaces-and-pattern-matching-a-quick-dive-into-javas-modern-capabilities/</guid><description>&lt;p&gt;&lt;strong&gt;Sealed classes in Java are a new feature that provides a way to restrict the classes that can inherit from a superclass or extend an interface. This new language feature enhances the encapsulation and provides more control to developers over their codebase.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this tutorial, we will explore sealed classes, how to use them to find all subclasses, and how to apply pattern matching in a practical context.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s start with a basic interface definition named &lt;code&gt;Shape&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Book Review: "OpenJDK Migration for Dummies"</title><link>https://foojayio.github.io/website/today/book-review-openjdk-migration-for-dummies/</link><pubDate>Fri, 04 Aug 2023 09:02:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-openjdk-migration-for-dummies/</guid><description>&lt;p&gt;&lt;strong&gt;The subject of Java licensing and OpenJDK migration is complex and vital to many software engineers.&lt;/strong&gt; &lt;strong&gt;I am no different. It&amp;rsquo;s a topic often shrouded in legal jargon and technicalities, making it difficult to approach.&lt;/strong&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&amp;ldquo;OpenJDK Migration for Dummies&amp;rdquo; by&lt;a href="https://www.linkedin.com/in/siritter/" target="_blank" rel="noopener noreferrer"&gt;Simon Ritter&lt;/a&gt;
 offers a fresh perspective, breaking down these challenges into digestible segments. (&lt;a href="https://www.azul.com/openjdk-migration-for-dummies/" target="_blank" rel="noopener noreferrer"&gt;Get it for free here.&lt;/a&gt;
)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.azul.com/openjdk-migration-for-dummies/" target="_blank" rel="noopener noreferrer"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;img decoding="async" class="alignright wp-image-101738" src="dummies-373x510.png" alt="" width="270" height="369"&gt;
&lt;p&gt;](&lt;a href="https://www.azul.com/openjdk-migration-for-dummies/" target="_blank" rel="noopener noreferrer"&gt;https://www.azul.com/openjdk-migration-for-dummies/&lt;/a&gt;
)&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;The book directly speaks to my core expertise in Java, providing clarity and guidance.&lt;/p&gt;</description></item><item><title>Preparing for JDK 21: A Comprehensive Overview of Key Features and Enhancements</title><link>https://foojayio.github.io/website/today/preparing-for-jdk-21-a-comprehensive-overview-of-key-features-and-enhancements/</link><pubDate>Wed, 02 Aug 2023 10:46:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/preparing-for-jdk-21-a-comprehensive-overview-of-key-features-and-enhancements/</guid><description>&lt;p&gt;&lt;strong&gt;As we inch closer to the release of JDK 21 in September (next month!), it&amp;rsquo;s crucial to familiarize ourselves with the transformative features and improvements this version is poised to bring to the Java ecosystem.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s embark on a comprehensive tour of the noteworthy changes and enhancements in JDK 21.&lt;/p&gt;
&lt;h2 id="h2-0-revising-the-balance-of-serviceability-and-performance-with-jep-451"&gt;Revising the Balance of Serviceability and Performance with JEP 451&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s begin with JEP 451, &amp;ldquo;Prepare to Disallow the Dynamic Loading of Agents.&amp;rdquo; Graduating to Completed status in preparation for JDK 21, this proposal doesn&amp;rsquo;t ban the dynamic loading of agents into a running JVM outright. Instead, it issues warnings when such loading happens, preparing the terrain for a future JDK release that will disallow such loading by default.&lt;/p&gt;</description></item><item><title>Busting Myths, Building Futures: A Conversation with Cay Horstmann on Java and Machine Learning</title><link>https://foojayio.github.io/website/today/busting-myths-building-futures-a-conversation-with-cay-horstmann-on-java-and-machine-learning/</link><pubDate>Mon, 24 Jul 2023 15:12:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/busting-myths-building-futures-a-conversation-with-cay-horstmann-on-java-and-machine-learning/</guid><description>&lt;figure class="alignright size-medium is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="cay-pfh-big-edited.jpg" alt="" class="wp-image-101427" width="503" height="356"&gt;
&lt;/figure&gt;
&lt;br /&gt;
&lt;p&gt;In our ongoing series of interviews with the movers and shakers of the software world, we bring you a conversation with Cay Horstmann, a towering figure in the Java community and a respected academic and entrepreneur.&lt;/p&gt;
&lt;p&gt;Known for his prolific contributions in the form of textbooks, online content, and courses, Cay has been instrumental in shaping the Java education landscape.&lt;/p&gt;
&lt;p&gt;In this insightful conversation, he speaks about a range of topics, including the challenges and potential for Java in the realms of data science and machine learning, the current state of the software development industry, the impact of AI on developers, and his unique perspective on learning by practice with immediate feedback. He also shares some intriguing anecdotes from his journey in academia and the software industry.&lt;/p&gt;</description></item><item><title>Dive into the OpenJDK: Top 10 Reads on Foojay.io</title><link>https://foojayio.github.io/website/today/dive-into-the-openjdk-top-10-reads-on-foojay-io/</link><pubDate>Wed, 19 Jul 2023 07:45:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/dive-into-the-openjdk-top-10-reads-on-foojay-io/</guid><description>&lt;p&gt;Foojay.io is a community platform dedicated to the needs of Java developers (and beyond, e.g., Kotlin) who use OpenJDK and related technologies.&lt;/p&gt;
&lt;p&gt;It serves as a central hub for sharing knowledge, resources, and tools related to Java and OpenJDK.&lt;/p&gt;
&lt;p&gt;The platform offers a wide range of content, including articles, tutorials, and insights from industry experts and Java enthusiasts.&lt;/p&gt;
&lt;p&gt;Whether you&amp;rsquo;re a seasoned developer or a beginner in the world of Java, Foojay.io provides valuable information and a supportive community to help you navigate and excel in your Java development journey.&lt;/p&gt;</description></item><item><title>Charting the Course of Java: An Insightful Conversation with Java Champion, Sebastian Daschner</title><link>https://foojayio.github.io/website/today/charting-the-course-of-java-an-insightful-conversation-with-java-champion-sebastian-daschner/</link><pubDate>Tue, 11 Jul 2023 15:34:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/charting-the-course-of-java-an-insightful-conversation-with-java-champion-sebastian-daschner/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="Sebastian.jpeg" alt="" class="wp-image-100950" width="375" height="375"&gt;
&lt;/figure&gt;
&lt;p&gt;In this insightful interview, renowned Java Champion, Oracle Developer Champion, and JavaOne Rockstar, Sebastian Daschner, shares his journey in the field of Java enterprise software development.&lt;/p&gt;
&lt;p&gt;With a vast array of experience from being a self-employed consultant, trainer, and author to his contributions to the open-source community, Daschner provides a unique perspective on Java&amp;rsquo;s current state and future, especially in the enterprise context.&lt;/p&gt;
&lt;p&gt;He delves into his strategies for balancing his varied roles, offers tips for aspiring developers, discusses the challenges in the software development industry, and underlines the importance of continuous learning.&lt;/p&gt;</description></item><item><title>The Evolution of Java: Challenging Stereotypes and Embracing Modernity</title><link>https://foojayio.github.io/website/today/the-evolution-of-java-challenging-stereotypes-and-embracing-modernity/</link><pubDate>Fri, 07 Jul 2023 16:15:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-evolution-of-java-challenging-stereotypes-and-embracing-modernity/</guid><description>&lt;p&gt;On a flight from Zurich to Toronto, I found myself in an engaging conversation with a fellow passenger. Among various topics, our conversation navigated toward our careers and, inevitably, as I am a Java developer, towards the world of Java.&lt;/p&gt;
&lt;p&gt;This gentleman, having worked with Java some 15-20 years ago, was surprised to learn that I still actively use the language. &amp;ldquo;Isn&amp;rsquo;t it slow?&amp;rdquo; he questioned. His question echoed a stereotype that I have often encountered, one that has stuck to Java from its earlier days.&lt;/p&gt;</description></item><item><title>Exploring the Depths of Java: A Comprehensive Conversation with Jakob Jenkov, Part-II</title><link>https://foojayio.github.io/website/today/exploring-the-depths-of-java-a-comprehensive-conversation-with-jakob-jenkov-part-ii/</link><pubDate>Wed, 05 Jul 2023 16:21:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-the-depths-of-java-a-comprehensive-conversation-with-jakob-jenkov-part-ii/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="jekov.jpeg" alt="" class="wp-image-98946" width="400" height="400"&gt;
&lt;/figure&gt;
&lt;p&gt;Welcome back to the second installment of our in-depth conversation with Jakob Jenkov, a leading figure in the world of Java. If you joined us for&lt;a href="https://foojayio.github.io/website/today/exploring-the-depths-of-java-a-comprehensive-conversation-with-jakob-jenkov-part-i/"&gt;Part I&lt;/a&gt;
, you&amp;rsquo;ll recall the insightful discussions around the evolving landscape of Java and its continuous improvements. Today, we delve even deeper into the subject. Jakob will share his thoughts on the challenges of modern software development, the impacts of artificial intelligence on developers, and much more. Get ready for another fascinating exploration into the depths of Java with Jakob Jenkov!&lt;/p&gt;</description></item><item><title>Exploring the Depths of Java: A Comprehensive Conversation with Jakob Jenkov, Part-I</title><link>https://foojayio.github.io/website/today/exploring-the-depths-of-java-a-comprehensive-conversation-with-jakob-jenkov-part-i/</link><pubDate>Thu, 29 Jun 2023 13:33:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-the-depths-of-java-a-comprehensive-conversation-with-jakob-jenkov-part-i/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="jekov.jpeg" alt="" class="wp-image-98946" width="400" height="400"&gt;
&lt;/figure&gt;
&lt;p&gt;Welcome to the first part of our deep dive with Jakob Jenkov, a seasoned software developer and AWS solution architect, whose love for coding began with a Commodore 128 in the late &amp;rsquo;80s. Over the past decades, Jenkov has navigated the world of programming, with a particular emphasis on Java, making significant contributions to the community through his professional work and informative content on jenkov.com.&lt;/p&gt;
&lt;p&gt;In this exclusive interview, Jenkov shares his career journey, his thoughts on the evolving landscape of Java, and how his interest in both low-level and high-level programming intersects in his current role. His unique insights into the future of Java and its significance in today&amp;rsquo;s increasingly diverse computing environments provide a captivating read for both Java enthusiasts and the broader software development community.&lt;/p&gt;</description></item><item><title>Exploring Java 21's Intriguing Additions (Part 1)</title><link>https://foojayio.github.io/website/today/exploring-java-21s-intriguing-additions-unveiling-new-features-part-1/</link><pubDate>Tue, 20 Jun 2023 13:40:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-java-21s-intriguing-additions-unveiling-new-features-part-1/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction:&lt;/h2&gt;
&lt;p&gt;Java 21 is going to introduce several intriguing additions that enhance the language&amp;rsquo;s capabilities.&lt;/p&gt;
&lt;p&gt;This article aims to discuss a few notable features that stand out, providing an overview of their functionalities and potential use cases.&lt;/p&gt;
&lt;br /&gt;
&lt;h2 id="h2-1-character-enhancements"&gt;Character Enhancements:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Character.isEmoji(int codePoint)&lt;/code&gt;: This method determines whether a character is considered an emoji based on its Unicode properties defined in Unicode Emoji (&lt;a href="https://unicode.org/reports/tr51/#Emoji_Properties_and_Data_Files" target="_blank" rel="noopener noreferrer"&gt;Unicode Emoji Technical Standard #51&lt;/a&gt;
). For example, executing &lt;code&gt;Character.isEmoji(9203)&lt;/code&gt; would return &lt;code&gt;true&lt;/code&gt; for the character ⏳, which has the code point 9203.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Character.isEmojiPresentation(int codePoint)&lt;/code&gt;: Similar to &lt;code&gt;isEmoji()&lt;/code&gt;, this method checks if a character has the Emoji Presentation property. It helps identify characters that display as emojis when rendered.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Example:&lt;/p&gt;</description></item><item><title>Breaking the Code: How Chris Newland is Changing the Game in JVM Performance!</title><link>https://foojayio.github.io/website/today/breaking-the-code-how-chris-newland-is-changing-the-game-in-jvm-performance/</link><pubDate>Mon, 12 Jun 2023 08:44:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/breaking-the-code-how-chris-newland-is-changing-the-game-in-jvm-performance/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="chris.png" alt="" class="wp-image-98734" width="384" height="384"&gt;
&lt;/figure&gt;
&lt;p&gt;We&amp;rsquo;re excited to introduce you to Chris Newland, an industry veteran and dedicated JVM performance specialist.&lt;/p&gt;
&lt;p&gt;Chris has a long-standing history of contributing to the Java community with open-source tools aimed at enhancing Java and JVM understanding.&lt;/p&gt;
&lt;p&gt;Among his well-known tools is JITWatch, which has gained significant recognition and use in the JVM community.&lt;/p&gt;
&lt;p&gt;In this conversation, we delve into Chris&amp;rsquo;s journey, his motivations, and his thoughts on JVM performance, Java ecosystem changes, and the role of AI in software development.&lt;/p&gt;</description></item><item><title>Cracking Code and Conventions: An Exclusive Interview with Nicolas Fränkel</title><link>https://foojayio.github.io/website/today/cracking-code-and-conventions-an-exclusive-interview-with-nicolas-frankel/</link><pubDate>Mon, 05 Jun 2023 11:06:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/cracking-code-and-conventions-an-exclusive-interview-with-nicolas-frankel/</guid><description>&lt;figure class="alignright is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="nicols-510x510.jpeg" alt="" class="wp-image-98603" width="383" height="383"&gt;
&lt;/figure&gt;
&lt;p&gt;In this enlightening interview, we explore the unique journey of Nicolas Fränkel, a seasoned professional in the software industry. From an architecture student to a passionate software developer, Nicolas shares his candid thoughts about the current state of software development and the potential impacts of AI.&lt;/p&gt;
&lt;p&gt;Profile:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🧑‍💼LinkedIn:&lt;a href="https://www.linkedin.com/in/nicolasfrankel/" target="_blank" rel="noopener noreferrer"&gt;Nicolas Fränkel &amp;ndash; Head of Developer Experience &amp;ndash; API7.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐦Twitter:&lt;a href="https://twitter.com/nicolas_frankel" target="_blank" rel="noopener noreferrer"&gt;@nicolas_frankel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👨‍💻GitHub:&lt;a href="https://github.com/nfrankel" target="_blank" rel="noopener noreferrer"&gt;nfrankel (Nicolas Fränkel)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📝Blog:&lt;a href="https://blog.frankel.ch/" target="_blank" rel="noopener noreferrer"&gt;Nicolas Fränkel - A Java geek&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📚Medium:&lt;a href="https://nfrankel.medium.com/" target="_blank" rel="noopener noreferrer"&gt;Nicolas Fränkel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💡Hashnode:&lt;a href="https://hashnode.com/@nfrankel" target="_blank" rel="noopener noreferrer"&gt;Nicolas Fränkel&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bazlur: Can you tell us about your background and how you got started in the software industry?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Resilience in Coding: Miro Wengner on Thriving in the Software Industry</title><link>https://foojayio.github.io/website/today/resilience-in-coding-miro-wengner-on-thriving-in-the-software-industry/</link><pubDate>Wed, 31 May 2023 16:24:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/resilience-in-coding-miro-wengner-on-thriving-in-the-software-industry/</guid><description>&lt;figure class="alignright size-full"&gt;
 &lt;img fetchpriority="high" decoding="async" width="426" height="426" src="miro.jpeg" alt="" class="wp-image-98571"&gt;
&lt;/figure&gt;
&lt;p&gt;In this insightful discussion, we sit down with Miro Wengner, an accomplished software engineer with a deep-rooted affinity for Java. Miro shares his professional journey, highlights the significant challenges in the field, and reflects on the key moments that shaped his career.&lt;/p&gt;
&lt;h2 id="h2-0-profile"&gt;Profile&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🐦 Twitter: &lt;a href="https://twitter.com/miragemiko" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/miragemiko&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👔 LinkedIn: &lt;a href="https://www.linkedin.com/in/mwengner/" target="_blank" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/mwengner/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 GitHub &lt;a href="https://github.com/mirage22" target="_blank" rel="noopener noreferrer"&gt;https://github.com/mirage22&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🏠Home Page: &lt;a href="https://www.wengnermiro.com/" target="_blank" rel="noopener noreferrer"&gt;https://www.wengnermiro.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Fun fact: When I was in my early 30s, I took my sister to Amsterdam. We visited almost all the museums, and I realized they kept selling me a student ticket without asking me the whole time. And it happened many more times after that. So finally, when I was 38, my wife told me I should grow a beard and that I didn&amp;rsquo;t look like a student, so I&amp;rsquo;ve had a beard ever since. So I could get a beer without showing id.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>JConf Toronto 2023 and the Dawn of a New Era of Concurrency</title><link>https://foojayio.github.io/website/today/java-threads-reimagined-a-reflection-on-jconf-toronto-2023-and-the-dawn-of-a-new-era-of-concurrency/</link><pubDate>Tue, 23 May 2023 16:52:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-threads-reimagined-a-reflection-on-jconf-toronto-2023-and-the-dawn-of-a-new-era-of-concurrency/</guid><description>&lt;p&gt;&lt;a href="https://2023.jconftoronto.dev/" target="_blank" rel="noopener noreferrer"&gt;JConf Toronto&lt;/a&gt;
, held on May 3rd, 2023, was a memorable gathering of Java enthusiasts and experts from both the local and global communities.&lt;/p&gt;
&lt;p&gt;The event took place at the Chestnut Conference Center, Toronto, featuring a wide variety of in-depth sessions, interactive Q&amp;amp;As, and two insightful keynote presentations.
&lt;img src="https://foojayio.github.io/website/today/java-threads-reimagined-a-reflection-on-jconf-toronto-2023-and-the-dawn-of-a-new-era-of-concurrency/PXL_20230503_203934815-1024x771.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Notable keynote speakers included &lt;a href="https://twitter.com/venkat_s" target="_blank" rel="noopener noreferrer"&gt;Venkat Subramaniam&lt;/a&gt;
 and &lt;a href="https://nealford.com/" target="_blank" rel="noopener noreferrer"&gt;Neal Ford&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Venkat&amp;rsquo;s keynote, titled &amp;ldquo;&lt;strong&gt;Know Your Java&lt;/strong&gt;,&amp;rdquo; was a deep dive into the intricacies of Java, demonstrating that there&amp;rsquo;s always something new to learn, even in a language that&amp;rsquo;s over two decades old.&lt;/p&gt;</description></item><item><title>An Industry Expert's Guide to Thriving in Software Development and Security</title><link>https://foojayio.github.io/website/today/decoding-success-an-industry-experts-guide-to-thriving-in-software-development-and-security/</link><pubDate>Tue, 23 May 2023 15:14:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/decoding-success-an-industry-experts-guide-to-thriving-in-software-development-and-security/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="erik.jpeg" alt="" class="wp-image-98444" width="450" height="675"&gt;
&lt;/figure&gt;
&lt;p&gt;In today&amp;rsquo;s fast-paced tech world, understanding the intricacies of software development and product management is key to success.&lt;/p&gt;
&lt;p&gt;In this enlightening discussion, we speak with Erik Costlow, a Senior Director of Product Management at Azul, who shares valuable insights from his journey of transitioning from engineering to product management, current industry trends, challenges in software development, and advice for new programmers.&lt;/p&gt;
&lt;p&gt;With a unique perspective and wealth of experience, Erik&amp;rsquo;s insights are sure to be invaluable for anyone seeking to navigate the complex landscape of the software industry.&lt;/p&gt;</description></item><item><title>Announcing "Java Unscripted: An Asynchronous Exploration of Excellence</title><link>https://foojayio.github.io/website/today/announcing-java-unscripted-an-asynchronous-exploration-of-excellence/</link><pubDate>Tue, 16 May 2023 10:09:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-java-unscripted-an-asynchronous-exploration-of-excellence/</guid><description>&lt;h3 id="h3-0-itl-dr"&gt;&lt;strong&gt;ITL;DR&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Introducing &amp;ldquo;Java Unscripted,&amp;rdquo; a series featuring interviews with Java industry experts. We aim to inspire and guide new developers with these insights. Interested in participating? Fill out our &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfyZEjdUaL_NTRKO-Gfk_Y9jIhuUszka3p1Kw6cWVdRBkOESQ/viewform" target="_blank" rel="noopener noreferrer"&gt;Interview Participation Form&lt;/a&gt;
. Let&amp;rsquo;s share your story with our community!&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;br /&gt;
&lt;p&gt;In a rapidly evolving world of technology, insights from industry luminaries can act as a beacon for those looking to navigate the challenging landscape. Over the years, industry leaders have seen the technological landscape transform. As a result, they possess a treasure trove of experiences and insights that can inspire and guide the upcoming generation of professionals. This idea inspired our new interview series, &amp;ldquo;&lt;strong&gt;&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfyZEjdUaL_NTRKO-Gfk_Y9jIhuUszka3p1Kw6cWVdRBkOESQ/viewform" target="_blank" rel="noopener noreferrer"&gt;Java Unscripted: An Asynchronous Exploration of Excellence.&lt;/a&gt;
&lt;/strong&gt; &amp;quot;&lt;/p&gt;</description></item><item><title>Discovering the Secrets to Success: An Exclusive Interview with Michael</title><link>https://foojayio.github.io/website/today/discovering-the-secrets-to-success-an-exclusive-interview-with-java-champion-michael-p-redlich/</link><pubDate>Mon, 15 May 2023 17:35:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/discovering-the-secrets-to-success-an-exclusive-interview-with-java-champion-michael-p-redlich/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="michael-redlich.jpg" alt="" class="wp-image-98312" width="480" height="480"&gt;
&lt;/figure&gt;
&lt;p&gt;In this interview, we had the pleasure of speaking with Michael P. Redlich, a seasoned software developer with over 30 years of experience in the field.&lt;/p&gt;
&lt;p&gt;Michael shares his journey from learning Fortran IV to contributing to major Jakarta EE specifications and provides valuable insights for junior developers looking to succeed in the ever-evolving world of technology.&lt;/p&gt;
&lt;p&gt;He emphasizes the importance of continuous learning and adapting to new technologies, and contributing to open-source projects.&lt;/p&gt;</description></item><item><title>A Comprehensive Guide to Java Virtual Threads (Part 1)</title><link>https://foojayio.github.io/website/today/unleashing-the-power-of-lightweight-concurrency-a-comprehensive-guide-to-java-virtual-threads-part-1/</link><pubDate>Tue, 09 May 2023 08:33:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/unleashing-the-power-of-lightweight-concurrency-a-comprehensive-guide-to-java-virtual-threads-part-1/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Java Virtual Threads, also known as lightweight threads, is an exciting new feature introduced in Project Loom.&lt;/p&gt;
&lt;p&gt;Virtual threads aim to simplify concurrent programming in Java by providing an efficient and easy-to-use concurrency model.&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll cover the basics of Java Virtual Threads, how they work, why they are beneficial for developers, and how they overcome the limitations of traditional Java threads.&lt;/p&gt;
&lt;h2 id="h2-1-what-are-virtual-threads"&gt;What are Virtual Threads?&lt;/h2&gt;
&lt;p&gt;Java is made of threads. When we run a Java program, its main method is invoked as the first call frame of the main thread created by the Java launcher. It gives us many things: sequential control flow, local variables, exception handling, single-step debugging, and profiling.&lt;/p&gt;</description></item><item><title>Unlocking Java Secrets with Frank Delporte Foojay.io Today</title><link>https://foojayio.github.io/website/today/unlocking-java-secrets-with-frank-delporte-insights-stories-and-tips-for-success/</link><pubDate>Mon, 10 Apr 2023 13:48:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/unlocking-java-secrets-with-frank-delporte-insights-stories-and-tips-for-success/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="Frank-7-XS.jpg" alt="" class="wp-image-57087" width="450" height="413"&gt;
&lt;/figure&gt;
&lt;p&gt;Welcome to our exclusive interview with &lt;a href="https://www.linkedin.com/in/frankdelporte/" target="_blank" rel="noopener noreferrer"&gt;Frank Delporte&lt;/a&gt;
, a Senior Technical Writer at Azul, Java Champion, and a passionate advocate for all things related to Java and Java on &lt;a href="https://www.raspberrypi.org/" target="_blank" rel="noopener noreferrer"&gt;Raspberry Pi&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;With extensive experience in the software industry, Frank has dedicated his career to making Java accessible to beginners and experienced developers alike.&lt;/p&gt;
&lt;p&gt;In this interview, we will explore his journey in the software world, his work at &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
, his contributions to the Java community, and the valuable advice he has for newcomers who have just started learning Java.&lt;/p&gt;</description></item><item><title>Unlocking the Secrets to a Successful Software Engineering Career: An Interview with Otavio Santana</title><link>https://foojayio.github.io/website/today/unlocking-the-secrets-to-a-successful-software-engineering-career-an-interview-with-otavio-santana/</link><pubDate>Mon, 03 Apr 2023 11:55:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/unlocking-the-secrets-to-a-successful-software-engineering-career-an-interview-with-otavio-santana/</guid><description>&lt;figure class="alignright size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="otavio-edited.webp" alt="" class="wp-image-65618" width="481" height="481"&gt;
&lt;/figure&gt;
&lt;p&gt;In this exclusive interview, we had the pleasure of speaking with &lt;a href="https://www.linkedin.com/in/otaviojava/" target="_blank" rel="noopener noreferrer"&gt;Otavio Santana&lt;/a&gt;
, a Java Champion and passionate software engineer and architect dedicated to empowering fellow engineers to deliver efficient, scalable software on the Cloud.&lt;/p&gt;
&lt;p&gt;Otavio shares valuable insights from his journey in the open-source world, highlighting the importance of mentorship and open-source contributions for career growth.&lt;/p&gt;
&lt;p&gt;With &lt;a href="https://otaviojava.com/awards/" target="_blank" rel="noopener noreferrer"&gt;numerous awards and recognitions&lt;/a&gt;
 under his belt, Otavio discusses his current projects, the concept of evolutionary architecture, and the impact of simplicity on software development.&lt;/p&gt;</description></item><item><title>Debate on the Future of Java and Kotlin on Foojay.io Today</title><link>https://foojayio.github.io/website/today/competing-for-the-crown-a-friendly-debate-on-the-future-of-java-and-kotlin-on-foojay-io-today/</link><pubDate>Wed, 29 Mar 2023 13:50:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/competing-for-the-crown-a-friendly-debate-on-the-future-of-java-and-kotlin-on-foojay-io-today/</guid><description>&lt;p&gt;&lt;strong&gt;Java and Kotlin are two of the most popular programming languages on the Java Virtual Machine. But both languages have pros and cons, and developers often have to choose between them based on the needs of their project, the people on their team, and their own preferences.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Recently, a conversation took place in &lt;a href="https://join.slack.com/t/foojay/shared_invite/zt-jnkc9y5x-vS05~nb37oq9pSp1sgDGvA" title="Foojay&amp;#39;s Slack channel" target="_blank" rel="noopener noreferrer"&gt;Foojay&amp;rsquo;s Slack channel&lt;/a&gt;
, where participants discussed the comparison of Java and Kotlin. Foojay.io is a central place for the Java community to get daily information.&lt;/p&gt;</description></item><item><title>Navigating the Challenges of Modern Software Development: An Exclusive Interview with Shai Almog</title><link>https://foojayio.github.io/website/today/navigating-the-challenges-of-modern-software-development-an-exclusive-interview-with-shai-almog/</link><pubDate>Mon, 27 Mar 2023 16:39:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/navigating-the-challenges-of-modern-software-development-an-exclusive-interview-with-shai-almog/</guid><description>&lt;figure class="alignleft size-full"&gt;
 &lt;img fetchpriority="high" decoding="async" width="474" height="474" src="shai-almog.jpg" alt="" class="wp-image-61677"&gt;
&lt;/figure&gt;
&lt;p&gt;Welcome to our exclusive interview with &lt;a href="https://www.linkedin.com/in/shai-almog-81a42/" target="_blank" rel="noopener noreferrer"&gt;Shai Almog&lt;/a&gt;
, an accomplished entrepreneur, author, blogger, and Java expert with over two decades of experience in the software industry.&lt;/p&gt;
&lt;p&gt;Shai has been instrumental in developing innovative tools and solutions at &lt;a href="https://www.codenameone.com/" target="_blank" rel="noopener noreferrer"&gt;Codename One&lt;/a&gt;
 and &lt;a href="https://lightrun.com/" target="_blank" rel="noopener noreferrer"&gt;Lightrun&lt;/a&gt;
, significantly impacting how Java applications are debugged and monitored in production.&lt;/p&gt;
&lt;p&gt;In this fascinating conversation, Shai shares his journey, from his early exposure to programming to his growth as a developer and entrepreneur.&lt;/p&gt;</description></item><item><title>From Assembler to Chat-GPT: Steve Poole on the Shifting Landscape of Programming</title><link>https://foojayio.github.io/website/today/from-assembler-to-chat-gpt-steve-poole-on-the-shifting-landscape-of-programming/</link><pubDate>Mon, 20 Mar 2023 11:56:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/from-assembler-to-chat-gpt-steve-poole-on-the-shifting-landscape-of-programming/</guid><description>&lt;figure class="alignright size-large is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="image-4-921x1024.png" alt="" class="wp-image-63004" width="461" height="512"&gt;
&lt;/figure&gt;
&lt;p&gt;Welcome to our exclusive interview with &lt;a href="https://www.linkedin.com/in/noregressions/" target="_blank" rel="noopener noreferrer"&gt;Steve Poole&lt;/a&gt;
, a seasoned Java developer, leader, and evangelist with a lot of experience in the tech industry.&lt;/p&gt;
&lt;p&gt;As a Developer Advocate for &lt;a href="https://www.sonatype.com/" target="_blank" rel="noopener noreferrer"&gt;Sonatype&lt;/a&gt;
, Steve has been deeply involved in Java SDKs and JVMs since Java was less than version 1.&lt;/p&gt;
&lt;p&gt;In his long and successful career, he has had many roles, such as being a representative or lead on different &lt;a href="https://jcp.org/en/jsr/overview" target="_blank" rel="noopener noreferrer"&gt;Java Specification Requests&lt;/a&gt;
 (JSRs), committing to many open-source projects at &lt;a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache&lt;/a&gt;
, &lt;a href="https://www.eclipse.org/org/foundation/" target="_blank" rel="noopener noreferrer"&gt;Eclipse&lt;/a&gt;
, and &lt;a href="https://openjdk.org/" target="_blank" rel="noopener noreferrer"&gt;OpenJDK&lt;/a&gt;
, and actively taking part in the &lt;a href="https://adoptium.net/en-GB/" target="_blank" rel="noopener noreferrer"&gt;Adopt OpenJDK group&lt;/a&gt;
 to promote community involvement.&lt;/p&gt;</description></item><item><title>Comparing Map.of() and new HashMap() in Java</title><link>https://foojayio.github.io/website/today/speed-test-comparing-map-of-new-hashmap/</link><pubDate>Thu, 16 Mar 2023 08:16:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/speed-test-comparing-map-of-new-hashmap/</guid><description>&lt;p&gt;Java is a popular programming language used for developing a wide range of applications, including web, mobile, and desktop applications.&lt;/p&gt;
&lt;p&gt;It provides many useful data structures for developers to use in their programs, one of which is the &lt;code&gt;Map&lt;/code&gt; interface.&lt;/p&gt;
&lt;p&gt;The Map interface is used to store data in key-value pairs, making it an essential data structure for many applications.&lt;/p&gt;
&lt;p&gt;In this article, we will discuss the use of &lt;code&gt;Map.of()&lt;/code&gt; and new &lt;code&gt;HashMap&amp;lt;&amp;gt;()&lt;/code&gt; in Java, the difference between them, and the benefits of using Map.of().&lt;/p&gt;</description></item><item><title>From Law Degree to Java Champion: Geertjan Wielenga on the Success of Java and Navigating the Software Industry</title><link>https://foojayio.github.io/website/today/from-law-degree-to-java-champion-geertjan-wielenga-on-the-success-of-java-and-navigating-the-software-industry/</link><pubDate>Mon, 13 Mar 2023 11:07:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/from-law-degree-to-java-champion-geertjan-wielenga-on-the-success-of-java-and-navigating-the-software-industry/</guid><description>&lt;figure class="alignright size-large is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="https://media.licdn.com/dms/image/C4E03AQHPaOIko7idtg/profile-displayphoto-shrink_800_800/0/1598955813161?e=1683763200&amp;amp;v=beta&amp;amp;t=-F4XJx_E2F68XRT8-aQu982KIxiA8BJ43HuReoUgAMo" alt="" width="394" height="394"&gt;
&lt;/figure&gt;
&lt;p&gt;In this interview, we chat with&lt;a href="https://www.linkedin.com/in/geertjanwielenga/" target="_blank" rel="noopener noreferrer"&gt;Geertjan Wielenga&lt;/a&gt;
, a Java Champion and developer advocate at &lt;a href="https://www.azul.com/" target="_blank" rel="noopener noreferrer"&gt;Azul&lt;/a&gt;
. Geertjan talks about how he unusually got into the software industry and what it was like to work with Java and its community.&lt;/p&gt;
&lt;p&gt;He talks about what has made Java so successful, the problems developers face in a constantly changing industry, and how important it is for people to work together and be involved in the community.&lt;/p&gt;</description></item><item><title>My Adventures at ConFoo Conference in Montreal</title><link>https://foojayio.github.io/website/today/java-friends-and-cold-weather-my-adventure-at-confoo-conference/</link><pubDate>Mon, 06 Mar 2023 19:16:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-friends-and-cold-weather-my-adventure-at-confoo-conference/</guid><description>&lt;p&gt;I attended the &lt;a href="https://confoo.ca/en/2023" target="_blank" rel="noopener noreferrer"&gt;ConFoo conference in Montreal&lt;/a&gt;
, which covered a range of technologies like cloud computing, Java and JVM technologies, Javascript, DevOps, architecture and design patterns, PHP, security, test and quality, management, UX and UI, and more.&lt;/p&gt;
&lt;p&gt;The conference took place over three days at the Bonaventure Hotel in Montreal, but I could only attend on the second day.&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="alignnone size-medium wp-image-62703" src="PXL_20230223_204517242-700x394.jpg" alt="" width="700" height="394"&gt;
&lt;br /&gt;
&lt;p&gt;To make it possible, I requested the organizers schedule both of my talks on the same day, so I could fly in from Toronto in the morning and leave in the evening. I was grateful to them for accommodating my request.&lt;/p&gt;</description></item><item><title>Java Sealed Classes: Building Robust and Secure Applications</title><link>https://foojayio.github.io/website/today/java-sealed-classes-in-action-building-robust-and-secure-applications/</link><pubDate>Mon, 20 Feb 2023 11:11:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-sealed-classes-in-action-building-robust-and-secure-applications/</guid><description>&lt;p&gt;Java sealed classes were introduced in Java 15 as a way to restrict the inheritance hierarchy of a class or interface.&lt;/p&gt;
&lt;p&gt;A sealed class or interface restricts the set of classes that can implement or extend it, which can help prevent bugs and make code more maintainable.&lt;/p&gt;
&lt;p&gt;Suppose you&amp;rsquo;re building an e-commerce application that supports different payment methods, such as credit cards, PayPal, and Bitcoin. You could define a sealed class called PaymentMethod that permits various subclasses for each payment method:&lt;/p&gt;</description></item><item><title>Optional in Java: A Swiss Army Knife for Handling Nulls and Improving Code Quality</title><link>https://foojayio.github.io/website/today/optional-in-java-a-swiss-army-knife-for-handling-nulls-and-improving-code-quality/</link><pubDate>Wed, 01 Feb 2023 05:29:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/optional-in-java-a-swiss-army-knife-for-handling-nulls-and-improving-code-quality/</guid><description>&lt;p&gt;In Java, dealing with null values can be a real headache. Nulls can cause all sorts of problems in your code, from NullPointerExceptions to convoluted if statements and error-prone logic. Fortunately, Java 8 introduced the Optional class, which offers a simple and powerful way to handle nulls and improve code quality. Optional is a container object that may or may not contain a non-null value and provides a range of practical methods for working with its contents. In this article, we&amp;rsquo;ll explore the many use cases of Optional in Java and show you how to use this powerful class to write cleaner, more expressive, and more resilient code.&lt;/p&gt;</description></item><item><title>Java Bytecode: Journey to the Wonderland (Part 3)</title><link>https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-3/</link><pubDate>Tue, 24 Jan 2023 15:27:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-3/</guid><description>&lt;p&gt;Our &lt;a href="https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-2/" title="previous article"&gt;previous article&lt;/a&gt;
 unpacked Bytecode further and discussed ConstantPool, today I&amp;rsquo;ll go through several resources for working with it now.&lt;/p&gt;
&lt;p&gt;Java bytecode is the Java Virtual Machine&amp;rsquo;s (JVM) intermediate representation of Java code. While Java bytecode is not meant to be human-readable, it may be edited and manipulated for several reasons. This article examines the tools and methods used to change and work with Java bytecode.&lt;/p&gt;
&lt;p&gt;Changing Java bytecode is often done to add new features to a Java program that already exists. This can be done with a bytecode injector, a tool that lets you add bytecode to a Java class file that has already been compiled. Bytecode injectors are often used for logging or debugging information and for allowing runtime updates like A/B testing or feature flags.&lt;/p&gt;</description></item><item><title>Why Many Developers Don't Write or Give Talks</title><link>https://foojayio.github.io/website/today/why-many-developers-dont-write-or-give-talks-and-how-to-overcome-challenges/</link><pubDate>Wed, 11 Jan 2023 09:53:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-many-developers-dont-write-or-give-talks-and-how-to-overcome-challenges/</guid><description>&lt;p&gt;I asked on &lt;a href="https://twitter.com/bazlur_rahman/status/1610800339405389826" title="Twitter" target="_blank" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;
 and &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7016566492548775936/" title="LinkedIn" target="_blank" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
 why many developers don&amp;rsquo;t write or give talks, and I was amused by the response I received. This article is about that.&lt;/p&gt;
&lt;h2 id="h2-0-the-problems"&gt;The problems:&lt;/h2&gt;
&lt;p&gt;It turns out, developers do not write blogs or give presentations for a variety of reasons. Some developers may believe they lack interesting experiences or information to share or that they are not experts in their profession. Others may be shy or fearful of public speaking. Due to their hectic schedules, individuals may not have time to write about or discuss their jobs, which is another reason.&lt;/p&gt;</description></item><item><title>Why Did We Choose JSF for the Eclipse Starter for Jakarta EE?</title><link>https://foojayio.github.io/website/today/why-did-we-choose-jakarta-faces-for-the-ui-of-the-eclipse-starter-for-jakarta-ee/</link><pubDate>Tue, 13 Dec 2022 10:27:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-did-we-choose-jakarta-faces-for-the-ui-of-the-eclipse-starter-for-jakarta-ee/</guid><description>&lt;p&gt;After being taken care of by the &lt;a href="https://www.jcp.org/en/home/index" target="_blank" rel="noopener noreferrer"&gt;Java Community Process&lt;/a&gt;
 (JCP), Java EE is now supported by the &lt;a href="https://www.eclipse.org/org/foundation/" target="_blank" rel="noopener noreferrer"&gt;Eclipse Foundation&lt;/a&gt;
 as &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This means that we can focus more on open standards for governance, open-source development, and testing for compatibility.&lt;/p&gt;
&lt;p&gt;It is also a great way to include openness to all vendors, a clear flow of intellectual property (IP), well-defined procedures for defining specifications, and a level playing field.&lt;/p&gt;</description></item><item><title>A Minor But Useful Refactoring Technique That Would Reduce Your Code Footprint (Part 2)</title><link>https://foojayio.github.io/website/today/a-minor-but-useful-refactoring-technique-that-would-reduce-your-code-footprint-part-2/</link><pubDate>Wed, 26 Oct 2022 15:16:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-minor-but-useful-refactoring-technique-that-would-reduce-your-code-footprint-part-2/</guid><description>&lt;p&gt;As I keep refactoring, this article will focus on a few more interesting ways to do it. These are pretty much minor yet effective and useful changes.&lt;/p&gt;
&lt;h2 id="h2-0-stream-nonematch-and-stream-anymatch"&gt;Stream.noneMatch() and Stream.anyMatch()&lt;/h2&gt;
&lt;p&gt;In some situations, we need to find a single case among many. For example, we want to do a certain operation if we have a list of items and a certain item is in that list. Usually, we run a for loop and then use a loop inside the for loop to check the value against our case. Check out the following piece of code:&lt;/p&gt;</description></item><item><title>Foojay Podcast #6: Welcome to Foojay!</title><link>https://foojayio.github.io/website/today/foojay-podcast-6/</link><pubDate>Mon, 24 Oct 2022 15:50:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-6/</guid><description>&lt;p&gt;In this episode of the Foojay Podcast, we want to give you a look behind the &lt;strong&gt;curtains of Foojay.io&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The very first post on the website dates from &lt;strong&gt;April 25th in 2020,&lt;/strong&gt; and it was by Geertjan Wielenga.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s look back and what has happened on Foojay during the &lt;strong&gt;2,5 years&lt;/strong&gt; since that first post, and talk to some of the &lt;strong&gt;people&lt;/strong&gt; behind the project.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/cwJXTTYzsGU?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Minor Techniques That Would Reduce Your Code Footprint (Part 1)</title><link>https://foojayio.github.io/website/today/a-minor-but-useful-refactoring-technique-that-would-reduce-your-code-footprint-part-1/</link><pubDate>Thu, 20 Oct 2022 14:32:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-minor-but-useful-refactoring-technique-that-would-reduce-your-code-footprint-part-1/</guid><description>&lt;p&gt;Finally, we upgraded to Java 11 from Java 8.&lt;/p&gt;
&lt;p&gt;That was a long-awaited move, but I&amp;rsquo;m pleased that we eventually made it.&lt;/p&gt;
&lt;p&gt;The next thing that came to mind when I stated this was, &amp;ldquo;Why not Java 17 directly?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Eventually, we will move to 17, but we had to begin someplace.&lt;/p&gt;
&lt;p&gt;And the transition to 11 was not easy either.&lt;/p&gt;
&lt;p&gt;We had several dependencies with Mockito, which made the journey somewhat tricky, but we were able to manage it.&lt;/p&gt;</description></item><item><title>What Does The JVM Look Like, How Does It Work?</title><link>https://foojayio.github.io/website/today/what-does-a-modern-jvm-look-like-and-how-does-it-work/</link><pubDate>Thu, 29 Sep 2022 05:29:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-does-a-modern-jvm-look-like-and-how-does-it-work/</guid><description>&lt;p&gt;Knowing how to code is fantastic, but it is even more enjoyable if we understand how a specific programming ecosystem works.&lt;/p&gt;
&lt;p&gt;I recall the C course I took during my first semester at university. I wanted to learn how C compilers take a program, verify it, and then compile it. As a side project, I wrote a small program that checks another C program to see if there are any syntax errors. I named it &lt;strong&gt;Cyntax&lt;/strong&gt;. It didn&amp;rsquo;t accomplish much, but I felt euphoria while doing it.&lt;/p&gt;</description></item><item><title>The 5 Most Pivotal and Innovative Additions to OpenJDK 19</title><link>https://foojayio.github.io/website/today/the-5-most-pivotal-and-innovative-additions-to-openjdk-19/</link><pubDate>Tue, 20 Sep 2022 16:25:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-5-most-pivotal-and-innovative-additions-to-openjdk-19/</guid><description>&lt;p&gt;Although &lt;a href="https://foojayio.github.io/website/today/openjdk-19-released/"&gt;OpenJDK 19&lt;/a&gt;
 is not an LTS, it is still a significant release, in my opinion.&lt;/p&gt;
&lt;p&gt;It includes several game-changing features that will alter the Java landscape.&lt;/p&gt;
&lt;p&gt;Many features intrigue my interest, but there are five in particular that I can&amp;rsquo;t wait to try out. Let&amp;rsquo;s break those down and talk about them separately.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://openjdk.org/jeps/425" target="_blank" rel="noopener noreferrer"&gt;JEP 425: Virtual Threads (Preview)&lt;/a&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Under the umbrella of Project Loom, JEP 425 introduces virtual threads, which aim to dramatically reduce the effort of writing, maintaining, and observing high-throughput concurrent applications on the Java platform. This is a &lt;a href="https://openjdk.java.net/jeps/12" target="_blank" rel="noopener noreferrer"&gt;preview feature&lt;/a&gt;
. Consider the following example:&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 15)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-15/</link><pubDate>Wed, 31 Aug 2022 17:30:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-15/</guid><description>&lt;p&gt;This article will discuss how we do asynchronous method invocation with &lt;a href="https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/concurrent/Callable.html" target="_blank" rel="noopener noreferrer"&gt;Callable&lt;/a&gt;
 and &lt;a href="https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/concurrent/Future.html" target="_blank" rel="noopener noreferrer"&gt;Future&lt;/a&gt;
 with a practical example.&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="alignnone size-medium wp-image-57278" src="Playground.java_-700x227.png" alt="" width="700" height="227"&gt;
&lt;br /&gt;
&lt;p&gt;Look at the code snippet. It doesn&amp;rsquo;t have anything yet, but &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-14/"&gt;as we learned about Java threading&lt;/a&gt;
, we know anything we put here will run on the main thread unless we spawn a new thread from here.&lt;/p&gt;
&lt;p&gt;Now consider a case where you work as a banker, and you need to calculate how much credit you can provide to a person.&lt;/p&gt;</description></item><item><title>Java Bytecode Simplified: Journey to the Wonderland (Part 2)</title><link>https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-2/</link><pubDate>Tue, 16 Aug 2022 15:15:22 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-2/</guid><description>&lt;p&gt;Our &lt;a href="https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-1/"&gt;previous article&lt;/a&gt;
 introduced Bytecode and discussed what it includes.&lt;/p&gt;
&lt;p&gt;This article will delve a bit deeper into ConstantPool.&lt;/p&gt;
&lt;p&gt;Highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bytecode is a representation that is abstract in nature. They are fictitious codes for a fictitious machine known as the Java Virtual Machine. The Java virtual machine is a piece of software that interprets &lt;strong&gt;Bytecode&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The JVM is a stack-based computer. Real CPUs are register-based systems and execute machine code. Java is compiled into Bytecode, an intermediate form, which is then executed by the &lt;a href="https://en.wikipedia.org/wiki/Just-in-time_compilation" target="_blank" rel="noopener noreferrer"&gt;Just In Time&lt;/a&gt;
 (JIT) compiler, which generates machine code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before going any further, let&amp;rsquo;s explore &lt;code&gt;javap&lt;/code&gt;, which is a very handy tool for deconstructing byte code.&lt;/p&gt;</description></item><item><title>Top 7 Features in Jakarta EE 10 Release</title><link>https://foojayio.github.io/website/today/top-7-features-in-jakarta-ee-10/</link><pubDate>Tue, 28 Jun 2022 08:33:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/top-7-features-in-jakarta-ee-10/</guid><description>&lt;p&gt;Java EE has been a dominant force behind all enterprise development in Java. Lately, it was renamed to &lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
, while transitioning to the Eclipse Foundation.&lt;/p&gt;
&lt;p&gt;This transition opened the door to open governance, open compatibility testing (the earlier &lt;a href="https://en.wikipedia.org/wiki/Technology_Compatibility_Kit" target="_blank" rel="noopener noreferrer"&gt;Technology Compatibility Kit&lt;/a&gt;
 was closed source), and of course, open-source contributions. That means no specific vendor has more influence than any other and it is a more distributed process now.&lt;/p&gt;</description></item><item><title>How to Add an Event to the Foojay Event Calendar</title><link>https://foojayio.github.io/website/today/how-to-add-an-event-to-the-foojay-event-calendar/</link><pubDate>Tue, 07 Jun 2022 09:34:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-add-an-event-to-the-foojay-event-calendar/</guid><description>&lt;p&gt;Foojay.io, the place for &lt;strong&gt;f&lt;/strong&gt; riends of &lt;strong&gt;O&lt;/strong&gt; pen&lt;strong&gt;J&lt;/strong&gt;DK, is a friendly community of users of the OpenJDK, such as Java developers and Kotlin developers.&lt;/p&gt;
&lt;p&gt;It is a collaborative community with tips and insights being shared on a daily basis on &lt;a href="https://foojayio.github.io/website/today/"&gt;Foojay Today&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;At Foojay, we maintain a list of past and upcoming Java events. It helps the worldwide OpenJDK community find events and participate in them easily.&lt;/p&gt;
&lt;p&gt;You will find all the events in the following link:&lt;/p&gt;</description></item><item><title>Book Review: Monolith to Microservices (Part 2)</title><link>https://foojayio.github.io/website/today/book-review-monolith-to-microservices-part-2/</link><pubDate>Wed, 25 May 2022 09:09:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-monolith-to-microservices-part-2/</guid><description>&lt;p&gt;This is the second article &lt;a href="https://foojayio.github.io/website/today/book-review-monolith-to-microservices-part-1/"&gt;of the first one I wrote the other day&lt;/a&gt;
, &amp;ldquo;&lt;a href="https://www.amazon.ca/Monolith-Microservices-Evolutionary-Patterns-Transform/dp/1492047848" target="_blank" rel="noopener noreferrer"&gt;Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith&lt;/a&gt;
&amp;rdquo; by Sam Newman.&lt;/p&gt;
&lt;p&gt;In this article, I will summarize chapter two.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/book-review-monolith-to-microservices-part-2/monolith-to-microservice.jpeg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-chapter-2-planning-to-migration"&gt;&lt;strong&gt;Chapter #2: Planning to Migration&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;In this chapter, the book discusses the goal and mindset. When we are looking for a Microservices, what should be our goal.&lt;/p&gt;
&lt;p&gt;It argues that our goal shouldn&amp;rsquo;t be the Microservices. Something worked for Netflix or Amazon, which means it will work for me as well. This thought process has a major flaw. It makes you fall into a cargo cult mentality.&lt;/p&gt;</description></item><item><title>Book Review: Monolith to Microservices (Part 1)</title><link>https://foojayio.github.io/website/today/book-review-monolith-to-microservices-part-1/</link><pubDate>Wed, 18 May 2022 07:43:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/book-review-monolith-to-microservices-part-1/</guid><description>&lt;p&gt;I have just finished reading &lt;a href="https://www.amazon.ca/Monolith-Microservices-Evolutionary-Patterns-Transform/dp/1492047848" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith&lt;/a&gt;
&amp;rdquo; by Sam Newman.&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="alignnone size-medium wp-image-55937" src="monolith-to-microservice-388x510.jpeg" alt="" width="388" height="510"&gt;
&lt;br /&gt;
&lt;p&gt;This book is undoubtedly great. It explains the critical aspects applicable when moving away from a monolith to a microservices architecture.&lt;/p&gt;
&lt;p&gt;In this article, I will try to summarize some of the key elements from the book that impacted me.&lt;/p&gt;
&lt;p&gt;This book contains five chapters, each of which has a great deal of context and explanation.&lt;/p&gt;</description></item><item><title>How to run the Java Incubator Module from the Command Line and IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/how-to-run-the-java-incubator-module-from-the-command-line-and-intellij-idea/</link><pubDate>Tue, 10 May 2022 16:52:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-run-the-java-incubator-module-from-the-command-line-and-intellij-idea/</guid><description>&lt;p&gt;&lt;a href="https://openjdk.java.net/jeps/425" target="_blank" rel="noopener noreferrer"&gt;JEP 425: Virtual Threads (Preview)&lt;/a&gt;
 has been proposed recently. It has been a long-awaited feature in Java. It opens the door to Structured Concurrency. This article isn&amp;rsquo;t about it, in case you are interested, you can read, the &lt;a href="https://openjdk.java.net/jeps/8277129" target="_blank" rel="noopener noreferrer"&gt;JEP draft: Structured Concurrency (Incubator)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Also, if you are interested in how the incubator module works, please read: &lt;a href="https://openjdk.java.net/jeps/11" target="_blank" rel="noopener noreferrer"&gt;JEP 11: Incubator Modules&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;I downloaded the &lt;a href="https://jdk.java.net/loom/" target="_blank" rel="noopener noreferrer"&gt;early access build&lt;/a&gt;
 and wrote the following very simple program that demonstrates structure concurrency.&lt;/p&gt;</description></item><item><title>How to enable java preview feature and run code from IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/how-to-run-project-loom-from-intellij-idea/</link><pubDate>Sun, 08 May 2022 10:07:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-run-project-loom-from-intellij-idea/</guid><description>&lt;p&gt;&lt;a href="https://openjdk.java.net/jeps/425" target="_blank" rel="noopener noreferrer"&gt;JEP 425: Virtual Threads (Preview)&lt;/a&gt;
 has been proposed recently. It has been a long-awaited feature in Java. I wanted to give it a try. So I download the &lt;a href="https://jdk.java.net/loom/" target="_blank" rel="noopener noreferrer"&gt;early release&lt;/a&gt;
 of JDK which has the &lt;a href="https://wiki.openjdk.java.net/display/loom/Main" target="_blank" rel="noopener noreferrer"&gt;project loom&lt;/a&gt;
 in it. However, it is under preview.&lt;/p&gt;
&lt;p&gt;The following snippet was pretty much my first program written for testing virtual threads.&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java"&gt;public class Main {
 public static void main(String[] args) throws InterruptedException {
 Thread.startVirtualThread(() -&amp;gt; {
 System.out.println("Hello from virtual thread");
 }).join();
 }
}&lt;/pre&gt;
&lt;p&gt;It is so simple that I could just run it in the command line using the &lt;a href="https://openjdk.java.net/jeps/330" target="_blank" rel="noopener noreferrer"&gt;source code launcher&lt;/a&gt;
 :&lt;/p&gt;</description></item><item><title>How To Submit Your Next Article On Foojay.io</title><link>https://foojayio.github.io/website/today/how-to-submit-your-next-article-on-foojay-io/</link><pubDate>Tue, 03 May 2022 18:32:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-submit-your-next-article-on-foojay-io/</guid><description>&lt;p&gt;Foojay, the place for friends of OpenJDK, is a friendly community of Java and Kotlin developers who share tips and insights every day on &lt;a href="https://foojayio.github.io/website/today/"&gt;Foojay Today&lt;/a&gt;
. We would love to publish your article too!&lt;/p&gt;
&lt;p&gt;Since September 2026, Foojay.io moved from a WordPress system to a static site built with &lt;a href="https://gohugo.io/" target="_blank" rel="noopener noreferrer"&gt;Hugo&lt;/a&gt;
 and published from a public GitHub repository, &lt;a href="https://github.com/foojayio/website" target="_blank" rel="noopener noreferrer"&gt;github.com/foojayio/website&lt;/a&gt;
. Contributing an article means adding a small folder of files (your text and images) to that repository. You don&amp;rsquo;t need to know Hugo — everything you need is in a ready-made template.&lt;/p&gt;</description></item><item><title>Top 10 Java Language Features</title><link>https://foojayio.github.io/website/today/top-10-java-language-features/</link><pubDate>Tue, 12 Apr 2022 17:06:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/top-10-java-language-features/</guid><description>&lt;p&gt;Every programming language provides ways to express our ideas and then translates them into reality.&lt;/p&gt;
&lt;p&gt;Some are unique to that particular language and some are common to many other programming languages.&lt;/p&gt;
&lt;p&gt;In this article, I will explore ten Java programming features used frequently by developers in their day-to-day programming jobs.&lt;/p&gt;
&lt;h2 id="h2-0-collection-s-factory-method"&gt;Collection&amp;rsquo;s factory method&lt;/h2&gt;
&lt;p&gt;Collections are the most frequently used feature in our daily coding. They are used as a container where we store objects and pass them along.&lt;/p&gt;</description></item><item><title>Three Mistakes Developers Make Preventing Getting Hired On Projects</title><link>https://foojayio.github.io/website/today/three-mistakes-junior-software-developers-make-preventing-getting-hired-on-amazing-projects/</link><pubDate>Wed, 06 Apr 2022 07:46:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/three-mistakes-junior-software-developers-make-preventing-getting-hired-on-amazing-projects/</guid><description>&lt;p&gt;Being hired is not easy and it is especially somewhat tricky for junior software developers to be taken on to work on amazing projects. The reason is clear: industries always want people with the right skills and a junior software developer does not typically always have those. We get to learn to program and acquire knowledge from universities and colleges, which is not enough to be able to work on unique projects right away.&lt;/p&gt;</description></item><item><title>5 Things You Probably Didn’t Know About Java Concurrency</title><link>https://foojayio.github.io/website/today/5-things-you-probably-didnt-know-about-java-concurrency/</link><pubDate>Fri, 25 Mar 2022 05:51:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/5-things-you-probably-didnt-know-about-java-concurrency/</guid><description>&lt;p&gt;Threads are at the heart of the Java programming language. When we run a &amp;ldquo;Hello World&amp;rdquo; Java program, we run on the main thread. From there, we can create threads easily, as we need to compose our application code to be functional, responsive, and performant, all at the same time.&lt;/p&gt;
&lt;p&gt;Think about a web server: it simultaneously handles many thousands of requests at the same time. In Java, we achieve this using multiple threads. While threads are helpful, they are full of dread/thread to many developers.&lt;/p&gt;</description></item><item><title>7 Reasons Why, After 26 Years, Java Still Makes Sense!</title><link>https://foojayio.github.io/website/today/7-reasons-why-after-26-years-java-still-makes-sense/</link><pubDate>Tue, 15 Mar 2022 08:02:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/7-reasons-why-after-26-years-java-still-makes-sense/</guid><description>&lt;p&gt;Java has been and continues to be the most popular language over the last two decades. It has always been in the top 5 in the &lt;a href="https://www.tiobe.com/tiobe-index/" target="_blank" rel="noopener noreferrer"&gt;TIOBE index&lt;/a&gt;
 in terms of popularity. Besides popularity, Java is especially dominant in the enterprise world.&lt;/p&gt;
&lt;p&gt;However, in recent years, with the popularity of microservices and data science, other programming languages, such as Python, have gained in popularity. Some developers may view this as concerning news, as it may indicate the decline of Java, while others would argue differently.&lt;/p&gt;</description></item><item><title>Java Bytecode Simplified: Journey to the Wonderland (Part 1)</title><link>https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-1/</link><pubDate>Tue, 08 Mar 2022 10:16:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-bytecode-simplified-journey-to-the-wonderland-part-1/</guid><description>&lt;p&gt;There are two ways to see a thing. One, see it as it appears to us; two, see it and appreciate it. For example, we get light when we switch on a lightbulb. We press the button and then get busy with our life. Pretty simple, but boring. On the other hand, if we know how the light gets energy from an electrical power grid far from our home with wires and while travelling through the wires and filament, the filament heats up and starts emitting photons, we get to see in the light; we can then appreciate the blessing.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 14)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-14/</link><pubDate>Tue, 01 Mar 2022 12:03:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-14/</guid><description>&lt;p&gt;In our &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-13/"&gt;previous article&lt;/a&gt;
, we discussed the thread pool&amp;rsquo;s sizing. We stipulated that if work is computational, we don&amp;rsquo;t need more threads than the available number of processors. We will discuss this idea a bit further in this article.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s think about an example:&lt;/p&gt;
&lt;p&gt;We all know how to compute the Fibonacci series. The simple code is given below-&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic"&gt;public static long fib(int n) {
 if (n &amp;lt; 2) {
 return n;
 } else {
 return fib(n - 2) + fib(n - 2);
 }
}&lt;/pre&gt;
&lt;p&gt;Over here, we have used recursion to solve the Fibonacci series. To find the Fibonacci number of n, we must know the previous two. Each of them again will require to calculate the previous two. The process will continue until it reaches to the bases case and then we have a result.&lt;/p&gt;</description></item><item><title>7 Ways to Improve Your Code Reading Skills</title><link>https://foojayio.github.io/website/today/7-ways-to-improve-your-code-reading-skills/</link><pubDate>Fri, 18 Feb 2022 21:21:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/7-ways-to-improve-your-code-reading-skills/</guid><description>&lt;p&gt;Reading source code is in the job description of a software developer. However, this experience is not always pleasant. Not everyone would like to read someone else&amp;rsquo;s code because they find it boring, sometimes frustrating. There are cases when you start reading someone else&amp;rsquo;s code but end up getting a bitter feeling because you are not being able to understand it or the code is not well written. Most developers want to focus on writing code rather reading it, not realizing that reading code is also an important skill to have.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 13)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-13/</link><pubDate>Tue, 08 Feb 2022 08:15:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-13/</guid><description>&lt;p&gt;&lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-12/"&gt;Our previous article&lt;/a&gt;
 discussed different ways to create a Java thread pool and put and execute result-bearing tasks to the Pool. This article will go a bit in-depth about how many worker threads we could put in a pool to get the best result.&lt;/p&gt;
&lt;p&gt;Using the Executors factory class, we can create our thread pool; however, all the factory methods internally create an instance of ThreadPoolExcutors. This class is the representation of ThreadPool that we use. We can directly create a pool invoking its constructor. The constructor takes 7 arguments:&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 12)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-12/</link><pubDate>Tue, 01 Feb 2022 16:02:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-12/</guid><description>&lt;p&gt;In our &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-11/"&gt;previous article&lt;/a&gt;
, we introduced ThreadPool through the Executor Framework. This article will discuss the different ways we can create ThreadPool.&lt;/p&gt;
&lt;p&gt;The Executors is a factory class, and it has a few static methods ( factory method). Let&amp;rsquo;s look at them one by one-&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Executors.newFixedThreadPool(int nThreads):&lt;/strong&gt; - this method takes an argument, and with that, we can specify the number of threads we want to have. The threads it creates are called worker Threads. It doesn&amp;rsquo;t matter how many tasks we put into this ThreadPool; the number of thread will remain the same the whole lifetime of this ThreadPool. If a thread dies for some reason, it will create a new one to keep the number the same.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 11)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-11/</link><pubDate>Wed, 26 Jan 2022 07:58:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-11/</guid><description>&lt;p&gt;In the &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-2/" title="second article of this series"&gt;second article of this series&lt;/a&gt;
, we saw that we can create a functional web server application using Java threads. With that, we could receive multiple requests from many clients and serve them properly.&lt;/p&gt;
&lt;p&gt;However, there is a limitation. We cannot just receive an unbounded number of requests simultaneously. The constraint is not on the sockets. The modern OS can handle millions of open sockets at a time. That means, in theory, we should be able to serve that many requests at a time.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 10)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-10/</link><pubDate>Wed, 22 Dec 2021 09:23:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-10/</guid><description>&lt;p&gt;In this article, I will discuss &lt;code&gt;BlockingQueue&lt;/code&gt;, one of the essential concurrent collections available in the concurrent package in the JDK. In &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-6/"&gt;one of our previous articles&lt;/a&gt;
, we discussed the Producer/Consumer pattern. We will implement the same pattern today using BlockingQueue.&lt;/p&gt;
&lt;p&gt;In that implementation, we used a buffer, and when Buffer is full, we put the producer thread in a waiting state. And if Buffer is empty, we put the consumer thread in a waiting state. To coordinate between threads, we had to use, wait(), notify() and notifyAll(), these low-level constructs. However, if we use BlockingQueue, we don&amp;rsquo;t have to use these low-level details. BlockingQueue was implemented with such details built in, so that we can just rely on it. It has two methods that are important in our discussion:&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 9)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-9/</link><pubDate>Tue, 14 Dec 2021 11:14:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-9/</guid><description>&lt;p&gt;&lt;strong&gt;In &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-8/"&gt;our last article&lt;/a&gt;
, we discussed thread-safety in naive terms and shared a couple of ways to ensure thread safety.&lt;/strong&gt; &lt;strong&gt;We also introduced a package containing thread-safe classes, which we can confidently use without worrying much, e.g., AtomicInteger. This is because they are designed in a thread-safe way.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Today in this article, we will continue the discussion and share a few more thread-safe classes that we can use in our day-to-day coding.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 8)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-8/</link><pubDate>Tue, 07 Dec 2021 18:15:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-8/</guid><description>&lt;p&gt;The term thread safety is a frequently and commonly pronounced word among Java developers. However, it is still one of the misunderstood terms as well. In this article, I will try to explain in a very simplified way what it is and how we can achieve it while we write our day-to-day code.&lt;/p&gt;
&lt;p&gt;The idea is, when writing a piece of code, it usually contains method and data. If we write a class, it may hold some data in terms of state. For example, if we want to write a Counter class, we will have a variable inside the counter class that holds the current count.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 7)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-7/</link><pubDate>Tue, 23 Nov 2021 10:10:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-7/</guid><description>&lt;p&gt;&lt;strong&gt;In &lt;a href="https://foojayio.github.io/website/today/author/bazlur-rahman/"&gt;our previous Java threading articles in this series&lt;/a&gt;
, we learned a great deal about how we can create threads and how to use them while avoiding the issues that come with them. But what does this leave us with? Can we create as many threads as we want? I wish I could answer this with a straight yes or no. In this article, I will try to come up with an answer via an exercise, so bear with me!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 6)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-6/</link><pubDate>Tue, 16 Nov 2021 15:02:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-6/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Have you ever wondered what is the purpose of the &amp;ldquo;wait()&amp;rdquo;, &amp;ldquo;notify()&amp;rdquo;, &amp;ldquo;notifyAll()&amp;rdquo; methods that come with each Java object? Well, this article will explain that!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-5/"&gt;the previous article&lt;/a&gt;
, we learned how to use shared variables in a multi-threaded context and ensure thread safety avoiding data race and race conditions. However, in programming, sometimes multiple threads require to coordinate with each other by sending signals. For example -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For a thread, it&amp;rsquo;s not yet their turn to start work; rather it&amp;rsquo;s waiting for a signal to start.&lt;/li&gt;
&lt;li&gt;A thread is working, but to complete its work, it needs more data; it can send a signal to the Producer to produce more data.&lt;/li&gt;
&lt;li&gt;Another thread that are producing data can signal other thread that data is ready.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Basically, there are many similar cases when we need to coordinate among multiple threads. Let&amp;rsquo;s discuss this in this article.&lt;/p&gt;</description></item><item><title>Let’s Use Optional to Fix Method Contracts</title><link>https://foojayio.github.io/website/today/lets-use-optional-to-fix-method-contracts/</link><pubDate>Wed, 10 Nov 2021 11:56:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/lets-use-optional-to-fix-method-contracts/</guid><description>&lt;p&gt;A method is a contract: when we define one, we put thought into it. We specify parameters with their type and also a return type. When we invoke a method, we expect it to behave according to the contract. If it doesn&amp;rsquo;t, it&amp;rsquo;s a violation of the contract.&lt;/p&gt;
&lt;p&gt;We have been dealing with such violations all the time. We invoke a method with its proper arguments and we get a return. However, sometimes we end up getting a null, which is, in fact, a clear violation. We shouldn&amp;rsquo;t accept such a violation. If a method cannot return the value of the specified type, it should mention that in the method signature, the method may or may not be returning the value you are expecting. If we know it from the method signature, we then write our code accordingly.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 5)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-5/</link><pubDate>Tue, 02 Nov 2021 08:29:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-5/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-4/"&gt;our previous article&lt;/a&gt;
, we discussed the &amp;ldquo;data race&amp;rdquo; concept and how we can solve it using volatile keywords. However, this is not the only problem we face when dealing with code that runs in multi-threaded environments. In this article, we will discuss another situation called &amp;ldquo;race conditions&amp;rdquo; and how we can resolve it.&lt;/p&gt;
&lt;p&gt;By now, we know that threads share memory space so that multiple threads can read from and write to the same variable. Unfortunately, although this ability gives us faster memory access, it has an unpleasant side effect which we call &amp;ldquo;race condition,&amp;rdquo; and it creates data inconsistency in the program. To understand the problem, let&amp;rsquo;s see an example.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 4)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-4/</link><pubDate>Tue, 26 Oct 2021 13:04:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-4/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-3/"&gt;the previous article&lt;/a&gt;
, we discussed the visibility problem while working with multiple threads.&lt;/p&gt;
&lt;p&gt;We will discuss another similar situation in this article. However, we will use symbols and pseudocode to explain this.&lt;/p&gt;
&lt;h2 id="h2-0-symbols"&gt;Symbols&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s define the symbols first.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;L&lt;/code&gt; - Local variable, e.g., &lt;code&gt;L1&lt;/code&gt;, &lt;code&gt;L2&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;S&lt;/code&gt; - Shared variable, e.g., &lt;code&gt;S1&lt;/code&gt;, &lt;code&gt;S2&lt;/code&gt;, etc. These variables are visible among multiple threads. They can be static as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;S.X&lt;/code&gt; - here &lt;code&gt;X&lt;/code&gt; is a field of an object where &lt;code&gt;S&lt;/code&gt; is the reference of that Object, e.g., &lt;code&gt;S1.X&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 3)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-3/</link><pubDate>Thu, 21 Oct 2021 13:20:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-3/</guid><description>&lt;p&gt;Continuing &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-2/"&gt;from part 2&lt;/a&gt;
, let&amp;rsquo;s start this article with a bit of context first (&lt;em&gt;and if you don&amp;rsquo;t like reading text, you can skip this introduction, and go directly to the section below where I discuss pieces of code&lt;/em&gt;).&lt;/p&gt;
&lt;h2 id="h2-0-context"&gt;Context&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When we start an application program, the operating system creates a process.&lt;/li&gt;
&lt;li&gt;Each process has a unique id (we call it PID) and a memory boundary.&lt;/li&gt;
&lt;li&gt;A process allocates its required memory from the main memory, and it manipulates data within a boundary.&lt;/li&gt;
&lt;li&gt;No other process can access the allocated memory that is already acquired by a process.&lt;/li&gt;
&lt;li&gt;It works like a sandbox, and in that way avoids processes stepping on one another&amp;rsquo;s foot.&lt;/li&gt;
&lt;li&gt;Ideally, we can have many small processes to run multiple things simultaneously on our computers and let the operating systems scheduler schedule them as it sees fit.&lt;/li&gt;
&lt;li&gt;In fact, this is how it was done before the development of threads. However, when we want to do large pieces of work, breaking them into smaller pieces, we need to accumulate them once they are finished.&lt;/li&gt;
&lt;li&gt;And not all tiny pieces can be independent, some of them must rely on each other, and thus we need to share information amongst them.&lt;/li&gt;
&lt;li&gt;To do that, we use inter-process communication. The problem with this idea is that having too many processes on a computer and then communicating with each other isn&amp;rsquo;t cheap. And precisely that is where the notion of threads comes into the picture.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The idea of the thread is that a process can have many tiny processes within itself. These small processes can share the memory space that a process acquires. These little processes are called a thread. So the bottom line is, threads are independent execution environments in the CPU and share the same memory space. That allows them faster memory access and better performance.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 2)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-2/</link><pubDate>Tue, 12 Oct 2021 09:07:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-2/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-thread-programming-part-1/"&gt;our earlier article&lt;/a&gt;
, we explained the background to threading and how to create and start a thread.&lt;/p&gt;
&lt;p&gt;In this article, let&amp;rsquo;s see an example where we can use Threads to our benefit.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s assume we are going to build a web server. For the sake of the example, let&amp;rsquo;s constrain ourselves to one single use case, which is that the web server will listen to any client, and if it receives a URL, it will return the top five most frequently used words in that website.&lt;/p&gt;</description></item><item><title>Java Thread Programming (Part 1)</title><link>https://foojayio.github.io/website/today/java-thread-programming-part-1/</link><pubDate>Thu, 07 Oct 2021 10:07:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-thread-programming-part-1/</guid><description>&lt;h2 id="h2-0-what-is-a-thread"&gt;What is a Thread?&lt;/h2&gt;
&lt;p&gt;We write code in a file line by line, and then it gets executed. To be able to execute a piece of code requires an execution environment. In Java, &lt;strong&gt;a thread is an execution environment&lt;/strong&gt;. If a program has only one execution environment, then we call this program a single-threaded program.&lt;/p&gt;
&lt;p&gt;Interestingly, in Java, we can create a lot of threads to run different parts of the code of a program executing independently. And when we have achieved that, we call it a multi-threaded program.&lt;/p&gt;</description></item><item><title>Reclaim 25% of Java Heap Memory &amp; Lower Your Cloud Bills</title><link>https://foojayio.github.io/website/today/compact-strings-reclaim-25-of-java-heap-memory-lower-your-cloud-bills/</link><pubDate>Fri, 24 Sep 2021 09:15:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/compact-strings-reclaim-25-of-java-heap-memory-lower-your-cloud-bills/</guid><description>&lt;p&gt;Did you know that you can save up to 25% of your heap memory and your Cloud bills without any effort? Well, it&amp;rsquo;s true. Many exciting features have been added to the latest releases of Java recently and I&amp;rsquo;m going to cover one that is often overlooked in this article.&lt;/p&gt;
&lt;p&gt;We all know that Strings are the most used Object in any Java application. In fact, they probably take up almost half of the heap size of any Java application. Before delving into this much further, let me answer your obvious question: what are Strings made of?&lt;/p&gt;</description></item></channel></rss>