<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog on Yonatan Karp-Rudin</title><link>https://yonatankarp.github.io/blog/</link><description>Recent content in Blog on Yonatan Karp-Rudin</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 26 Jun 2024 00:00:00 +0100</lastBuildDate><atom:link href="https://yonatankarp.github.io/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>XKCD: From Tile to Picture - Seeing the Full Image</title><link>https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/</link><pubDate>Wed, 26 Jun 2024 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/</guid><description>&lt;p&gt;Table of Contents&lt;/p&gt;
&lt;p&gt;&lt;a href=""&gt;Toggle
&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/#Introduction"&gt;Introduction&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/#Step_1_Trying_the_Easy_Way"&gt;Step 1: Trying the Easy Way&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/#Step_2_Downloading_the_Image"&gt;Step 2: Downloading the Image&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/#Finding_the_Image_Size"&gt;Finding the Image Size&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/#Downloading_the_Tiles"&gt;Downloading the Tiles&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/#Building_the_Image_from_the_Tiles"&gt;Building the Image from the Tiles&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/#Slicing_the_Cake"&gt;Slicing the Cake&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/#The_Bug"&gt;The Bug&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/#Step_3_Share_the_Results"&gt;Step 3: Share the Results&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/#Conclusion"&gt;Conclusion&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/xkcd-from-tile-to-picture/#Credits"&gt;Credits&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;If there&amp;rsquo;s one thing I can say about myself, it&amp;rsquo;s that I love challenges related to software programming. They don&amp;rsquo;t need to be meaningful or even useful, but I enjoy the challenge. That&amp;rsquo;s why when I saw this message on my LinkedIn, I had to take on the challenge!&lt;/p&gt;</description></item><item><title>How to Fix Misconfigurations in RedisTemplate</title><link>https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/</link><pubDate>Wed, 05 Jun 2024 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/</guid><description>&lt;p&gt;Table of Contents&lt;/p&gt;
&lt;p&gt;&lt;a href=""&gt;Toggle
&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Initial_Configuration"&gt;Initial Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Creating_the_RedisTemplate_Bean"&gt;Creating the RedisTemplate Bean&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Writing_Tests"&gt;Writing Tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Identifying_The_Issue"&gt;Identifying The Issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Fixing_the_Issue"&gt;Fixing the Issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Where_to_Find_the_Code"&gt;Where to Find the Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yonatankarp.github.io/blog/fix-misconfigurations-redistemplate/#Credits"&gt;Credits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Our story begins with a colleague and me trying to debug an issue with our project for a few hours. We needed to fetch a value from Redis storage, but whenever the service ran, the fetched value was &lt;code&gt;null&lt;/code&gt;. Despite our efforts, we couldn&amp;rsquo;t find a solution on the internet, and to make matters worse, our code was actually covered by tests that had all passed!&lt;/p&gt;</description></item><item><title>Observability in Action: How to Use OpenTelemetry</title><link>https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/</link><pubDate>Tue, 17 Oct 2023 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/</guid><description>&lt;p&gt;Table of Contents&lt;/p&gt;
&lt;p&gt;&lt;a href=""&gt;Toggle
&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Introduction"&gt;Introduction&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Introduction_to_Service_Instrumentation"&gt;Introduction to Service Instrumentation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Part_1_%e2%80%93_Building_the_Client_Library"&gt;Part 1 – Building the Client Library&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Adding_Dependencies"&gt;Adding Dependencies&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Domain_Modeling"&gt;Domain Modeling&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Constructing_the_HTTP_Client"&gt;Constructing the HTTP Client&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Connecting_everything_together"&gt;Connecting everything together&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Part_2_%e2%80%93_Building_the_Service"&gt;Part 2 – Building the Service&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Adding_Dependencies-2"&gt;Adding Dependencies&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Loading_the_Facts"&gt;Loading the Facts&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Storing_and_Reading_Facts"&gt;Storing and Reading Facts&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Dockerizing_the_Project"&gt;Dockerizing the Project&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Setting_up_docker-compose"&gt;Setting up docker-compose&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Running_the_Service"&gt;Running the Service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Part_3_%e2%80%93_Setting_Up_Instrumentation_with_OpenTelemetry"&gt;Part 3 – Setting Up Instrumentation with OpenTelemetry&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#HoneyCombio"&gt;HoneyComb.io&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Introduction-2"&gt;Introduction&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Setting_up"&gt;Setting up&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Setting_Up_OpenTelemetry"&gt;Setting Up OpenTelemetry&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Prerequisites"&gt;Prerequisites&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Integrating_the_OpenTelemetry_SDK_and_Agent"&gt;Integrating the OpenTelemetry SDK and Agent&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Dependency_Integration"&gt;Dependency Integration&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/observability-in-action-opentelemetry/#Constructing_the_Gradle_Task_for_the_OpenTelemetry_Agent"&gt;Constructing the Gradle Task for the OpenTelemetry Agent&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[Interview Questions] Concurrency vs. Parallelism: Decoding the Simultaneous Illusion</title><link>https://yonatankarp.github.io/blog/interview-questions-concurrency-parallelism/</link><pubDate>Sat, 11 Mar 2023 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/interview-questions-concurrency-parallelism/</guid><description>&lt;blockquote&gt;
&lt;p&gt;TL;DR - What are the differences between concurrent and parallel programming?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;One of my most successful posts so far is a detailed explanation of my favorite interview question (see &lt;a href="https://yonatankarp.com/how-does-hashmap-work-in-java"&gt;How does HashMap work in Java?&lt;/a&gt; for more details). As a result, I&amp;rsquo;ve decided to create a series of posts breaking down more questions. All the questions that will be answered during this series have been used in my current employer&amp;rsquo;s hiring process.&lt;/p&gt;</description></item><item><title>Real-Life Problem Solving: Lessons from My Engineering Principles</title><link>https://yonatankarp.github.io/blog/real-life-problem-solving-engineering-principles/</link><pubDate>Sun, 05 Mar 2023 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/real-life-problem-solving-engineering-principles/</guid><description>&lt;p&gt;My employer announced a few months ago that any employee who works for three years or more is entitled to a sabbatical. This sabbatical is a fully paid one-month vacation of your choice. Since my wife and I had accumulated a significant number of vacation days, we decided to embark on a two-month trip to Asia—a destination we had long desired to visit. In this post, I will describe step by step how I applied methods from my day-to-day work as a software engineer to solve real-life problems.&lt;/p&gt;</description></item><item><title>How To Build Your Domain Gateway With OpenApi</title><link>https://yonatankarp.github.io/blog/build-domain-gateway-openapi/</link><pubDate>Wed, 14 Dec 2022 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/build-domain-gateway-openapi/</guid><description>&lt;div class="editors-note"&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; This article explains what a domain gateway is, how to build one, and why you would want it.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Table of Contents&lt;/p&gt;
&lt;p&gt;&lt;a href=""&gt;Toggle
&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#What_is_a_Domain_Gateway"&gt;What is a Domain Gateway?&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Domain_Gateway_Dos"&gt;Domain Gateway Do&amp;rsquo;s&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Domain_Gateway_Donts"&gt;Domain Gateway Don&amp;rsquo;ts&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Ok_Im_Convinced%e2%80%a6"&gt;Ok, I&amp;rsquo;m Convinced…&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#How_Do_I_Build_a_Domain_Gateway"&gt;How Do I Build a Domain Gateway?&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Tech_Stack"&gt;Tech Stack&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Domain_Gateway_Structure"&gt;Domain Gateway Structure&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#API_Specs"&gt;API Specs&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Hello_Service"&gt;Hello Service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Goodbye_Service"&gt;Goodbye Service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Domain_Gateway_Service"&gt;Domain Gateway Service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Generating_Multiple_Specs"&gt;Generating Multiple Specs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Add_Generated_Code_To_Project"&gt;Add Generated Code To Project&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Using_The_Generated_Code"&gt;Using The Generated Code&lt;/a&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Clients_Definition"&gt;Clients Definition&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://yonatankarp.github.io/blog/build-domain-gateway-openapi/#Domain_Gateway_Definition"&gt;Domain Gateway Definition&lt;/a&gt;&lt;/p&gt;</description></item><item><title>How to Use OpenApi to Build a Robust RESTful API</title><link>https://yonatankarp.github.io/blog/openapi-robust-restful-api/</link><pubDate>Sun, 04 Dec 2022 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/openapi-robust-restful-api/</guid><description>&lt;div class="editors-note"&gt;
&lt;p&gt;&lt;strong&gt;Editor&amp;rsquo;s Note:&lt;/strong&gt; This post was originally written by me and published on SumUp&amp;rsquo;s blog. However, a lot has changed since then. I am no longer working for SumUp, OpenAPI has released two major versions, Spring Boot has had a major release, and even Gradle has had multiple major releases. Not only that, but my writing skills have improved dramatically since then, and over time, I have found some small mistakes in the original article. Since the original article is one of my most successful, I decided to rewrite it and publish an updated version.&lt;/p&gt;</description></item><item><title>Create a Custom Spring Boot App Banner</title><link>https://yonatankarp.github.io/blog/custom-spring-boot-banner/</link><pubDate>Fri, 02 Dec 2022 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/custom-spring-boot-banner/</guid><description>&lt;p&gt;Today, I&amp;rsquo;d like to share a fun feature of Spring with you. It&amp;rsquo;s not new or crucial, but it&amp;rsquo;s definitely enjoyable!&lt;/p&gt;
&lt;p&gt;Normally, when you launch your Spring Boot app, you see a standard banner in the logs like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://yonatankarp.github.io/images/blog/medium-1*qhCPGhoCfVHDiV_8C2w-IQ.png" alt="Spring Boot Banner"&gt;&lt;/p&gt;
&lt;p&gt;But have you ever thought about replacing that Spring banner with your own custom banner? If you have, then this article is for you!&lt;/p&gt;
&lt;p&gt;To begin, let&amp;rsquo;s visit &lt;a href="https://patorjk.com/"&gt;https://patorjk.com/&lt;/a&gt;, a website that helps us create custom text. You can enter the desired text for your log and choose from a variety of fonts. For example:&lt;/p&gt;</description></item><item><title>How does HashMap work in Java?</title><link>https://yonatankarp.github.io/blog/how-hashmap-works-java/</link><pubDate>Fri, 02 Dec 2022 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/how-hashmap-works-java/</guid><description>&lt;p&gt;As an interviewer, I often ask the question about how HashMap works in Java. It helps me assess a candidate&amp;rsquo;s understanding of data structures, JVM internals, and their problem-solving approach. I&amp;rsquo;ve encountered many candidates, including juniors, mid-levels, and seniors, who couldn&amp;rsquo;t answer this question correctly. So, I decided to share the answer with everyone.&lt;/p&gt;
&lt;p&gt;In this article, I will explain the HashMap question step by step.&lt;/p&gt;
&lt;h3 id="what-is-the-contract-between-the-equals-and-hashcode-functions-in-java"&gt;What is the contract between the equals() and hashCode() functions in Java?&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://yonatankarp.github.io/images/blog/medium-1*o-EXRh62Vv1wF6hGc8enkg.jpeg" alt=""&gt;&lt;/p&gt;</description></item><item><title>How to Break Your HashMap in Less Than a Minute</title><link>https://yonatankarp.github.io/blog/break-hashmap-less-than-a-minute/</link><pubDate>Fri, 02 Dec 2022 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/break-hashmap-less-than-a-minute/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Never use mutable objects as keys in your HashMap!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After I wrote my article &lt;a href="https://yonatankarp.com/how-does-hashmap-work-in-java"&gt;&lt;strong&gt;How does HashMap work in Java?&lt;/strong&gt;&lt;/a&gt;, a few people suggested more topics related to HashMap. As a result, I decided to create a short series of articles about it.&lt;/p&gt;
&lt;p&gt;In today&amp;rsquo;s article, we will discuss JVM HashMaps and how they can be easily broken if not used carefully. It&amp;rsquo;s important to note that while we&amp;rsquo;ll be focusing on the JVM world, the same principles apply to most modern programming languages.&lt;/p&gt;</description></item><item><title>How to inject multiple implementations in the Spring Framework</title><link>https://yonatankarp.github.io/blog/inject-multiple-implementations-spring/</link><pubDate>Fri, 11 Feb 2022 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/inject-multiple-implementations-spring/</guid><description>&lt;p&gt;Recently, I had a discussion with one of my colleagues during a code review. We talked about a hidden gem in Spring (as well as other frameworks like Micronaut) that could simplify our code.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s consider a task: developing a good morning greeting system that supports both English and Hebrew languages. The system should greet us in each of these languages.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll begin with the native implementation by introducing our greeters:&lt;/p&gt;</description></item><item><title>4 Reasons Why Amazon Keyspaces is Problematic!</title><link>https://yonatankarp.github.io/blog/amazon-keyspaces-problematic/</link><pubDate>Thu, 30 Dec 2021 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/amazon-keyspaces-problematic/</guid><description>&lt;p&gt;Around a year ago, my team and I were tasked with building a high-performance system capable of handling a large volume of requests. After careful consideration, we chose Cassandra as our database.&lt;/p&gt;
&lt;p&gt;When it came to productizing our system, we explored three main options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://cassandra.apache.org/_/index.html"&gt;&lt;strong&gt;Self-hosted Cassandra&lt;/strong&gt;&lt;/a&gt;: We ruled this out due to the need for hardware maintenance.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.datastax.com/"&gt;&lt;strong&gt;DataStax&lt;/strong&gt;&lt;/a&gt;: Dubbed the &amp;ldquo;Confluence-Kafka&amp;rdquo; of Cassandra, it offers a fully cloud-based implementation managed by the DataStax team.&lt;/p&gt;</description></item><item><title>Build your own Twitter Bot with Kotlin</title><link>https://yonatankarp.github.io/blog/build-twitter-bot-kotlin/</link><pubDate>Wed, 15 Dec 2021 00:00:00 +0100</pubDate><guid>https://yonatankarp.github.io/blog/build-twitter-bot-kotlin/</guid><description>&lt;p&gt;I read an excellent article by &lt;a href="https://medium.com/u/f864d52751a7"&gt;Martin Erlic&lt;/a&gt; called &amp;ldquo;&lt;a href="https://medium.com/@SeloSlav/how-to-make-a-scary-russian-twitter-bot-with-java-b7b62768a3ac"&gt;How To Make a Scary Russian Twitter Bot With Java&lt;/a&gt;&amp;rdquo; and I wanted to update it using Kotlin.&lt;/p&gt;
&lt;p&gt;Unlike the original article, I will use Kotlin, a newer and more modern JVM-based language, and Gradle as the build system.&lt;/p&gt;
&lt;p&gt;To build the bot, follow these simple steps:&lt;/p&gt;
&lt;h3 id="step-1--create-a-twitter-application"&gt;Step 1 — Create a Twitter Application&lt;/h3&gt;
&lt;p&gt;The first step is to create a &lt;a href="https://apps.twitter.com/"&gt;Twitter Application&lt;/a&gt; using the user account you want to perform the API requests with. By creating the Twitter application, you will obtain the API key and API secret, which we&amp;rsquo;ll later use to authenticate our bot with Twitter.&lt;/p&gt;</description></item></channel></rss>