<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marco Behler</title>
    <description>The latest articles on DEV Community by Marco Behler (@marcobehler).</description>
    <link>https://dev.to/marcobehler</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F261171%2F08192f5a-b0b5-4a55-945d-ed420ae26a8a.jpg</url>
      <title>DEV Community: Marco Behler</title>
      <link>https://dev.to/marcobehler</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcobehler"/>
    <language>en</language>
    <item>
      <title>Prompt Engineering - Basic Concepts For Developers</title>
      <dc:creator>Marco Behler</dc:creator>
      <pubDate>Wed, 17 Jul 2024 13:20:28 +0000</pubDate>
      <link>https://dev.to/marcobehler/prompt-engineering-basic-concepts-for-developers-37b</link>
      <guid>https://dev.to/marcobehler/prompt-engineering-basic-concepts-for-developers-37b</guid>
      <description>&lt;p&gt;I made a video about the basic concepts that you need to understand when trying to write non-trivial applications on top of LLMs. Enjoy!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/NO7eeQJIU3Y"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>ai</category>
      <category>promptengineering</category>
    </item>
    <item>
      <title>Building Docker Images - Best Practices</title>
      <dc:creator>Marco Behler</dc:creator>
      <pubDate>Fri, 21 Jun 2024 08:12:40 +0000</pubDate>
      <link>https://dev.to/marcobehler/building-docker-images-best-practices-2l5l</link>
      <guid>https://dev.to/marcobehler/building-docker-images-best-practices-2l5l</guid>
      <description>&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Learn best practices for &lt;a href="https://youtu.be/JcGwgNMZc_E"&gt;building Docker images&lt;/a&gt;, including optimizing build speed and reducing image size.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Highlights&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker layers are additive and impact image size 📦&lt;/li&gt;
&lt;li&gt;Chain commands in one RUN instruction to reduce layer count ⛓️&lt;/li&gt;
&lt;li&gt;Layer order matters for efficient builds 🔄&lt;/li&gt;
&lt;li&gt;Utilize .dockerignore to exclude unnecessary files during build ⚠️&lt;/li&gt;
&lt;li&gt;Use directory caching for faster dependency retrieval 🚀&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Insights&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Docker layers are crucial in understanding image size and build efficiency. Each command in a Dockerfile creates a new layer, impacting the final image size. Properly managing layers is key to optimizing image size and build speed. 🧱&lt;/p&gt;

&lt;p&gt;Chaining commands in a single RUN instruction helps reduce the number of layers created during the build process. This consolidation can significantly speed up the build process and result in smaller image sizes. ⛓&lt;/p&gt;

&lt;p&gt;Layer order plays a vital role in build efficiency. Placing frequently changing files towards the bottom of the Dockerfile ensures that only necessary layers are rebuilt, saving time and resources. 🔄&lt;/p&gt;

&lt;p&gt;Utilizing .dockerignore allows you to exclude unnecessary files and directories from the build context, speeding up the build process by reducing the amount of data sent to the Docker daemon. Proper file management can lead to faster builds and smaller images. ⚠️&lt;/p&gt;

&lt;p&gt;Directory caching is a powerful tool to optimize dependency retrieval during builds. By specifying which folders to cache, unnecessary downloads can be avoided, resulting in faster build times and more efficient use of dependencies. 🚀&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/JcGwgNMZc_E"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
    </item>
    <item>
      <title>Spring Boot &amp; Kotlin - Crash Course For Java Devs</title>
      <dc:creator>Marco Behler</dc:creator>
      <pubDate>Fri, 22 Sep 2023 07:29:41 +0000</pubDate>
      <link>https://dev.to/marcobehler/spring-boot-kotlin-crash-course-for-java-devs-27dh</link>
      <guid>https://dev.to/marcobehler/spring-boot-kotlin-crash-course-for-java-devs-27dh</guid>
      <description>&lt;p&gt;Let's write a &lt;a href="https://youtu.be/yA5_xp2nlgk"&gt;Spring Boot application in Kotlin&lt;/a&gt;. We'll start from scratch with an empty skeleton project and then go about building a tiny CRUD REST service. Along the way we'll cover all important Kotlin language basics &amp;amp; concepts, as well as more advanced topics like, for example, Kotlin &amp;amp; JPA support.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/yA5_xp2nlgk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>springboot</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How To Learn Any Programming Topic</title>
      <dc:creator>Marco Behler</dc:creator>
      <pubDate>Fri, 11 Aug 2023 10:53:18 +0000</pubDate>
      <link>https://dev.to/marcobehler/how-to-learn-any-programming-topic-2f1l</link>
      <guid>https://dev.to/marcobehler/how-to-learn-any-programming-topic-2f1l</guid>
      <description>&lt;p&gt;As the title says. Want to learn a specific programming topic? In this video I'll show you my personal approach that has served me well over the last decade. &lt;/p&gt;

&lt;p&gt;What is your own approach to learning programming languages/frameworks and services? Let me know!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/kVwRFlYa3jk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>programming</category>
    </item>
    <item>
      <title>How To Approach Dependency Management in Java</title>
      <dc:creator>Marco Behler</dc:creator>
      <pubDate>Wed, 02 Aug 2023 07:34:30 +0000</pubDate>
      <link>https://dev.to/marcobehler/how-to-approach-dependency-management-in-java-fi1</link>
      <guid>https://dev.to/marcobehler/how-to-approach-dependency-management-in-java-fi1</guid>
      <description>&lt;p&gt;&lt;a href="https://youtu.be/6GJAjDcFHTo"&gt;In this video&lt;/a&gt; we will cover real-life considerations when working with dependencies in Java:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to find &amp;amp; trust the right dependencies?&lt;/li&gt;
&lt;li&gt;How to consistently keep them updated?&lt;/li&gt;
&lt;li&gt;How to protect against vulnerabilities?&lt;/li&gt;
&lt;li&gt;How to handle team backlash against adding new dependencies?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And more :)&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/6GJAjDcFHTo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
    </item>
    <item>
      <title>How To REALLY Do Code Reviews</title>
      <dc:creator>Marco Behler</dc:creator>
      <pubDate>Wed, 05 Apr 2023 11:17:36 +0000</pubDate>
      <link>https://dev.to/marcobehler/how-to-really-do-code-reviews-4joa</link>
      <guid>https://dev.to/marcobehler/how-to-really-do-code-reviews-4joa</guid>
      <description>&lt;p&gt;&lt;a href="https://youtu.be/DYamyCSDtew"&gt;A follow-up&lt;/a&gt; to How To Do Code Reviews, with many moooooore details on the human factors involved in a code review, as well as several options on how to approach reviewing pull requests.&lt;/p&gt;

&lt;p&gt;Just a quick recap, what is the scenario? A user sent in a GitHub pull request for our Google Photos clone. Which means we have to do a code review. How should you do such review? What is or isn't important? Let's find out in this episode of Marco Codes.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/DYamyCSDtew"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Solving Java Multithreading Challenges in My Google Photos Clone</title>
      <dc:creator>Marco Behler</dc:creator>
      <pubDate>Mon, 03 Apr 2023 16:10:14 +0000</pubDate>
      <link>https://dev.to/marcobehler/solving-java-multithreading-challenges-in-my-google-photos-clone-2ce9</link>
      <guid>https://dev.to/marcobehler/solving-java-multithreading-challenges-in-my-google-photos-clone-2ce9</guid>
      <description>&lt;p&gt;&lt;a href="https://youtu.be/VtpNcdjjwdA"&gt;In this video&lt;/a&gt; we want to turn our Google Photos clone from single-threaded to multi-threaded, to generate thumbnails much faster than before. &lt;/p&gt;

&lt;p&gt;But there are a couple of challenges along the way. We'll learn that using Java's Parallel File Streams seems to be a buggy endeavor, so we'll fall back on good, old ExecutorServices. &lt;/p&gt;

&lt;p&gt;But how many threads should we use to generate thumbnails? How can threads get in conflict with each other? How do we make our program fail-safe for threading issues? &lt;/p&gt;

&lt;p&gt;Watch to find out!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/VtpNcdjjwdA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>java</category>
      <category>webdev</category>
      <category>backend</category>
    </item>
    <item>
      <title>How to Implement Full-Text Search in a Text Editor</title>
      <dc:creator>Marco Behler</dc:creator>
      <pubDate>Thu, 12 Jan 2023 14:54:24 +0000</pubDate>
      <link>https://dev.to/marcobehler/how-to-implement-full-text-search-in-a-text-editor-36o1</link>
      <guid>https://dev.to/marcobehler/how-to-implement-full-text-search-in-a-text-editor-36o1</guid>
      <description>&lt;p&gt;Let's continue building our Java based, command-line text editor that we started here @ &lt;a href="https://youtu.be/kT4JYQi9w4w"&gt;https://youtu.be/kT4JYQi9w4w&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/RDFogWPnkOM"&gt;This is Part 4&lt;/a&gt; and we will cover: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to implement full-text search&lt;/li&gt;
&lt;li&gt;including instant search and&lt;/li&gt;
&lt;li&gt;being able to search forwards and backwards!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're going to be in for a ride!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/RDFogWPnkOM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>java</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>7 Awesome Libraries for Java Unit &amp; Integration Testing</title>
      <dc:creator>Marco Behler</dc:creator>
      <pubDate>Mon, 09 Jan 2023 14:43:23 +0000</pubDate>
      <link>https://dev.to/marcobehler/7-awesome-libraries-for-java-unit-integration-testing-4c12</link>
      <guid>https://dev.to/marcobehler/7-awesome-libraries-for-java-unit-integration-testing-4c12</guid>
      <description>&lt;p&gt;&lt;a href="https://youtu.be/JVPHSdHViMg" rel="noopener noreferrer"&gt;In this video&lt;/a&gt; you'll find 7 awesome Java libraries that will improve your unit &amp;amp; integration tests.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://assertj.github.io/doc/" rel="noopener noreferrer"&gt;AssertJ&lt;/a&gt; - fluent assertions&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.awaitility.org/" rel="noopener noreferrer"&gt;Awaitility&lt;/a&gt; - asynchronous testing&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://site.mockito.org/" rel="noopener noreferrer"&gt;Mockito&lt;/a&gt; - Java mocking&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://jitpack.io/p/davidmoten/subethasmtp" rel="noopener noreferrer"&gt;Wiser&lt;/a&gt; - in-memory SMTP server&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/marschall/memoryfilesystem" rel="noopener noreferrer"&gt;MemoryFileSystem&lt;/a&gt; - in-memory file system&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://wiremock.org/" rel="noopener noreferrer"&gt;Wiremock&lt;/a&gt; - HTTP mocking&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.testcontainers.org/" rel="noopener noreferrer"&gt;TestContainers&lt;/a&gt; - throw-away sidecar containers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/JVPHSdHViMg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>How to Build a Google Photos Clone in Java - Part 1</title>
      <dc:creator>Marco Behler</dc:creator>
      <pubDate>Fri, 09 Dec 2022 08:56:13 +0000</pubDate>
      <link>https://dev.to/marcobehler/how-to-build-a-google-photos-clone-in-java-part-1-4d3j</link>
      <guid>https://dev.to/marcobehler/how-to-build-a-google-photos-clone-in-java-part-1-4d3j</guid>
      <description>&lt;p&gt;Ever wanted a sneak peek into how a web application like Google Photos is built from the ground up?&lt;br&gt;
Then let's re-implement (some of) its functionality with Java and, along the way, discuss not only the "how" but also "why" we are implementing things a certain way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/eUPejYY1B3U" rel="noopener noreferrer"&gt;Part 1&lt;/a&gt;: Generating thumbnails for a directory of photos with Java and ImageMagick, which will serve as the basis for our photo backend service.&lt;/p&gt;

&lt;p&gt;► Source Repository&lt;br&gt;
GitHub: &lt;a href="https://github.com/marcobehlerjetbrains/google-photos-clone" rel="noopener noreferrer"&gt;https://github.com/marcobehlerjetbrains/google-photos-clone&lt;/a&gt;&lt;br&gt;
Branch: Main&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/eUPejYY1B3U"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>discuss</category>
    </item>
    <item>
      <title>How to Build a Text Editor With Java (Part 3)</title>
      <dc:creator>Marco Behler</dc:creator>
      <pubDate>Fri, 25 Nov 2022 08:44:00 +0000</pubDate>
      <link>https://dev.to/marcobehler/how-to-build-a-text-editor-with-java-part-3-222p</link>
      <guid>https://dev.to/marcobehler/how-to-build-a-text-editor-with-java-part-3-222p</guid>
      <description>&lt;p&gt;Let's continue building our Java based, command-line text editor that we started here @ &lt;a href="https://youtu.be/kT4JYQi9w4w"&gt;https://youtu.be/kT4JYQi9w4w&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;This is Part 3 and we will cover: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to implement Page Up &amp;amp; Page Down functionality. &lt;/li&gt;
&lt;li&gt;How to make the End key work properly, including cursor snapping. &lt;/li&gt;
&lt;li&gt;And how to make our text editor work on all operating systems, including macOS and Windows - not just Linux. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're going to be in for a ride!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/72Dt_U9DQh4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Build a Command-Line Text Editor With Java (Part 2)</title>
      <dc:creator>Marco Behler</dc:creator>
      <pubDate>Tue, 20 Sep 2022 10:10:53 +0000</pubDate>
      <link>https://dev.to/marcobehler/how-to-build-a-command-line-text-editor-with-java-part-2-5bn1</link>
      <guid>https://dev.to/marcobehler/how-to-build-a-command-line-text-editor-with-java-part-2-5bn1</guid>
      <description>&lt;p&gt;Let's continue building our Java based, command-line text editor that we started here @ &lt;a href="https://youtu.be/kT4JYQi9w4w"&gt;https://youtu.be/kT4JYQi9w4w&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;This is Part 2 and we will cover: How to detect "complex" key presses like arrow up, arrow down and friends. How to move the cursor around on the screen, how to load and display text files, as well as a first, vertical scrolling implementation. &lt;/p&gt;

&lt;p&gt;You're going to be in for a ride!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/HwPjeb2xnEo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>java</category>
      <category>tutorial</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
