<?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: Mammad Yahyayev</title>
    <description>The latest articles on DEV Community by Mammad Yahyayev (@mammadyahyayev).</description>
    <link>https://dev.to/mammadyahyayev</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%2F1118006%2F33b3bbae-e10f-4f78-9be6-a6d858e765c0.jpeg</url>
      <title>DEV Community: Mammad Yahyayev</title>
      <link>https://dev.to/mammadyahyayev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mammadyahyayev"/>
    <language>en</language>
    <item>
      <title>Supercharge Your Java Side Projects: Create CI Pipeline with GitHub Actions</title>
      <dc:creator>Mammad Yahyayev</dc:creator>
      <pubDate>Fri, 11 Jul 2025 04:47:52 +0000</pubDate>
      <link>https://dev.to/mammadyahyayev/supercharge-your-java-side-projects-create-ci-pipeline-with-github-actions-2hb1</link>
      <guid>https://dev.to/mammadyahyayev/supercharge-your-java-side-projects-create-ci-pipeline-with-github-actions-2hb1</guid>
      <description>&lt;p&gt;Hello developers, and welcome to my new article!&lt;/p&gt;

&lt;p&gt;In today’s article, I’m going to introduce a CI pipeline solution for your side projects. This setup will help you automate various processes, such as enforcing coding style and running tests, making your development workflow much smoother.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Bother with a Pipeline for a “Side Project”?
&lt;/h2&gt;

&lt;p&gt;Whenever you have a billion dollar startup idea, you need to create a project on GitHub to develop. It’s rare for developers to think about deployment servers before writing a single line of code, as there’s so much to achieve before reaching the deployment stage.&lt;/p&gt;

&lt;p&gt;However, until the deployment phase, crucial aspects like coding style, comprehensive tests, and security vulnerability checks often get overlooked. This is because developers typically prioritize more immediate and seemingly necessary tasks.&lt;/p&gt;

&lt;p&gt;If you aspire to be a successful tech entrepreneur, automating these tedious tasks is essential. Therefore, it’s highly beneficial to create a reusable project template that incorporates CI. This will save you significant time and effort across almost all your future projects. CI pipelines should undoubtedly be a core component of this template.&lt;/p&gt;

&lt;p&gt;In this article, we’ll walk through building a simple, yet powerful, CI pipeline on GitHub. We’ll set it up to automatically build your Java application and, crucially, enforce code quality with &lt;a href="https://checkstyle.sourceforge.io/" rel="noopener noreferrer"&gt;Checkstyle&lt;/a&gt; every time you push code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simple CI Pipeline: What We’re Building
&lt;/h2&gt;

&lt;p&gt;Our goal is straightforward: every time you push code to your GitHub repository (or open a pull request), we want GitHub Actions to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check out your code.&lt;/li&gt;
&lt;li&gt;Set up a Java Development Kit (JDK).&lt;/li&gt;
&lt;li&gt;Build your Java application using Maven or Gradle.&lt;/li&gt;
&lt;li&gt;Run Checkstyle to ensure your code adheres to quality standards. If Checkstyle finds any violations, the pipeline will fail, notifying you immediately.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1: Set up a Spring Boot Project and Checkstyle Plugin
&lt;/h3&gt;

&lt;p&gt;Working with Spring Boot combined with Gradle is so much easy and faster choice. I always create my projects with the help of &lt;a href="https://start.spring.io/" rel="noopener noreferrer"&gt;Spring Initializr&lt;/a&gt; website. Download and export the zip file of your project.&lt;/p&gt;

&lt;p&gt;It is time to add Checkstyle plugin and configurations to your&lt;br&gt;
&lt;code&gt;build.gradle&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="n"&gt;plugins&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="s1"&gt;'java'&lt;/span&gt;
 &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="s1"&gt;'org.springframework.boot'&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s1"&gt;'3.4.5'&lt;/span&gt;
 &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="s1"&gt;'io.spring.dependency-management'&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s1"&gt;'1.1.7'&lt;/span&gt;
 &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="s1"&gt;'checkstyle'&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;checkstyle&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="n"&gt;toolVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"10.25.0"&lt;/span&gt;
 &lt;span class="n"&gt;configFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"${rootProject.projectDir}/checkstyle/checkstyle.xml"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
 &lt;span class="n"&gt;ignoreFailures&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Optional: Configure reports to be generated&lt;/span&gt;
&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Checkstyle&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;configureEach&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;reports&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
        &lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create &lt;code&gt;checkstyle&lt;/code&gt; folder in your project’s root directory.&lt;/li&gt;
&lt;li&gt;Create &lt;code&gt;checkstyle.xml&lt;/code&gt; file in &lt;code&gt;checkstyle&lt;/code&gt; folder.&lt;/li&gt;
&lt;li&gt;Copy the content of this file.&lt;/li&gt;
&lt;li&gt;Paste copied content into &lt;code&gt;checkstyle.xml&lt;/code&gt; file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Create GitHub Actions
&lt;/h3&gt;

&lt;p&gt;Visit project’s GitHub repository. Click &lt;code&gt;Actions&lt;/code&gt; tab to create GitHub Actions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzupb463gqb4s5g7kqwoc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzupb463gqb4s5g7kqwoc.png" alt="GitHub Actions Tab" width="800" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the newly opened tab, click &lt;strong&gt;‘New Workflow’&lt;/strong&gt; button which will open following page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72bpsld2dj9d6v5e4y7n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72bpsld2dj9d6v5e4y7n.png" alt="New Workflow Page" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;‘Configure’&lt;/strong&gt; button of &lt;strong&gt;‘Java with Gradle’&lt;/strong&gt; workflow. GitHub will provide you a default GitHub Actions template.&lt;/p&gt;

&lt;p&gt;Use following code snippet to create Checkstyle job.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkstyle&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;master"&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;master"&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;checkstyle&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout main repository and submodules&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Set up JDK &lt;/span&gt;&lt;span class="m"&gt;21&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-java@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;java-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;21'&lt;/span&gt;
          &lt;span class="na"&gt;distribution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;temurin'&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run Checkstyle&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./gradlew checkstyleMain&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Upload Checkstyle Report&lt;/span&gt;
        &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;failure()&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/upload-artifact@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;checkstyle-report&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build/reports/checkstyle/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By the way, Java version is 21 in my project, therefore, you should update following code block to your project’s Java version, otherwise, pipeline might fail.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Set up JDK &lt;/span&gt;&lt;span class="m"&gt;21&lt;/span&gt;
  &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-java@v4&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;java-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;21'&lt;/span&gt;
    &lt;span class="na"&gt;distribution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;temurin'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Publish Changes To master Branch
&lt;/h3&gt;

&lt;p&gt;Before making changes, make sure you pull remote changes into your local machine. Update the code and publish your changes to master branch. GitHub will automatically aware of your push and start Checkstyle job.&lt;/p&gt;

&lt;p&gt;You can monitor the job’s status directly within your commit history on GitHub. You will see either a ❌ (failed) or ✔️ (successful) icon next to your commit. For instance, in the following image, the Checkstyle job failed for a specific reason. You can click the &lt;strong&gt;‘Details’&lt;/strong&gt; button to view the logs and understand why it failed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83i91aa71feeczsddvae.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83i91aa71feeczsddvae.png" alt="Failed Pipeline View" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: GitHub Action for Projects with Submodules
&lt;/h3&gt;

&lt;p&gt;If your project includes submodules, you’ll need to slightly modify your workflow file to ensure they are also covered by the action.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkstyle&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;master"&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;master"&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;checkstyle&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout main repository and submodules&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
        &lt;span class="c1"&gt;# new lines&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;submodules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;recursive&lt;/span&gt; 
          &lt;span class="na"&gt;fetch-depth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Set up JDK &lt;/span&gt;&lt;span class="m"&gt;21&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-java@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;java-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;21'&lt;/span&gt;
          &lt;span class="na"&gt;distribution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;temurin'&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run Checkstyle&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./gradlew checkstyleMain&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Upload Checkstyle Report&lt;/span&gt;
        &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;failure()&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/upload-artifact@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;checkstyle-report&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build/reports/checkstyle/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5 (Optional): Add Status of a Job in Readme file
&lt;/h3&gt;

&lt;p&gt;Optionally, pipeline status can also be seen in your project’s README file. GitHub will offer you this feature, therefore, accept it if you want to see cool status badges on your project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;![Checkstyle&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://github.com/&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;project-name&amp;gt;&lt;/span&gt;/actions/workflows/&lt;span class="nt"&gt;&amp;lt;job-file-name&amp;gt;&lt;/span&gt;.yml/badge.svg)](https://github.com/&lt;span class="nt"&gt;&amp;lt;project-name&amp;gt;&lt;/span&gt;/actions/workflows/&lt;span class="nt"&gt;&amp;lt;job-file-name&amp;gt;&lt;/span&gt;.yml)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What’s Next? Expanding Your Pipeline
&lt;/h2&gt;

&lt;p&gt;This is just the beginning! A robust CI pipeline can do much more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Run Unit Tests:&lt;/strong&gt; Add a &lt;code&gt;mvn test&lt;/code&gt; or &lt;code&gt;gradle test&lt;/code&gt; step immediately after your build. This is fundamental for any project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Coverage:&lt;/strong&gt; Integrate tools like JaCoCo to measure your test coverage and upload reports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static Code Analysis:&lt;/strong&gt; Explore more advanced tools like SonarQube (which has a free cloud tier for open-source projects) for deeper code quality insights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration Tests:&lt;/strong&gt; If you have them, run integration tests after unit tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notifications:&lt;/strong&gt; Configure GitHub Actions to send notifications to Slack, Discord, or email on workflow failures.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building a CI pipeline for your side projects, even a simple one like this, is a game-changer. You’ll write better code, with more confidence, and ultimately enjoy your side projects more.&lt;/p&gt;

&lt;p&gt;So, go ahead, implement this pipeline for your next Java side project.&lt;/p&gt;

&lt;p&gt;What are your favorite CI/CD tools for side projects? Share your thoughts and experiences in the comments below!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👍 If you like the article, please consider clapping 👏 and following.&lt;/li&gt;
&lt;li&gt;⭐ Star &lt;a href="https://github.com/mammadyahyayev/blog-posts" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;➕ Follow me on &lt;a href="https://www.linkedin.com/in/mammadyahya/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; | &lt;a href="https://x.com/mammadyahyayev" rel="noopener noreferrer"&gt;X (Twitter)&lt;/a&gt; | &lt;a href="https://github.com/mammadyahyayev" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👁 Check out my other stories.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📚 Recommended Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.devgenius.io/constant-folding-in-jvm-how-the-compiler-makes-your-code-faster-d5c6ec05f25c" rel="noopener noreferrer"&gt;Constant Folding in JVM: How the Compiler Makes Your Code Faster!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mammadyahya.medium.com/best-way-to-replace-duplicated-request-parameters-in-spring-boot-20b0f9df5c3b" rel="noopener noreferrer"&gt;Best Way to Replace Duplicated Request Parameters in Spring Boot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>cicd</category>
      <category>github</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Best Productivity App in the World 💪</title>
      <dc:creator>Mammad Yahyayev</dc:creator>
      <pubDate>Wed, 02 Jul 2025 10:32:56 +0000</pubDate>
      <link>https://dev.to/mammadyahyayev/the-best-productivity-in-the-world-5h6p</link>
      <guid>https://dev.to/mammadyahyayev/the-best-productivity-in-the-world-5h6p</guid>
      <description>&lt;h1&gt;
  
  
  Read the full article: &lt;a href="https://medium.com/@mammadyahya/the-best-productivity-app-in-the-world-ticktick-666cee24bc94" rel="noopener noreferrer"&gt;https://medium.com/@mammadyahya/the-best-productivity-app-in-the-world-ticktick-666cee24bc94&lt;/a&gt;
&lt;/h1&gt;

</description>
      <category>programming</category>
      <category>productivity</category>
      <category>focus</category>
    </item>
    <item>
      <title>🚀 I Wrote a Docker Interview Handbook - And You Can Download It for FREE!</title>
      <dc:creator>Mammad Yahyayev</dc:creator>
      <pubDate>Wed, 23 Apr 2025 05:58:35 +0000</pubDate>
      <link>https://dev.to/mammadyahyayev/i-wrote-a-docker-interview-handbook-and-you-can-download-it-for-free-27io</link>
      <guid>https://dev.to/mammadyahyayev/i-wrote-a-docker-interview-handbook-and-you-can-download-it-for-free-27io</guid>
      <description>&lt;p&gt;Hey Docker enthusiasts and followers of my &lt;a href="https://mammadyahya.medium.com/list/docker-advance-83e513e29130" rel="noopener noreferrer"&gt;Docker Advance Series&lt;/a&gt;. 👋&lt;/p&gt;

&lt;p&gt;After years of working with Docker in real-world projects - from building containerized microservices to helping teams scale and deploy seamlessly - I realized how much people struggle with Docker interview questions. Not because they don't know Docker, but because the questions often test real-life usage, not just definitions.&lt;/p&gt;

&lt;p&gt;So I decided to do something about it… &lt;/p&gt;

&lt;p&gt;Some developers might underestimate the impact of Docker questions to their interviews, however, answering Docker related questions confidently will impress people in front of you and increase your chances of getting hired. &lt;/p&gt;

&lt;h2&gt;
  
  
  📘 Introducing: Docker Interview Handbook - First Edition
&lt;/h2&gt;

&lt;p&gt;I've compiled 50+ practical Docker interview questions along with concise, real-world answers and examples to help you:&lt;br&gt;
Prepare for technical interviews with confidence&lt;br&gt;
Refresh and deepen your Docker knowledge&lt;br&gt;
Understand real-life Docker use cases and best practices&lt;br&gt;
Impress any hiring manager&lt;/p&gt;

&lt;h2&gt;
  
  
  🐳 What's Inside?
&lt;/h2&gt;

&lt;p&gt;Clear explanations of core Docker concepts&lt;br&gt;
Questions covering images, containers, volumes, networks, security, Compose, troubleshooting, and more&lt;br&gt;
A clean, beginner-friendly writing style&lt;/p&gt;

&lt;h2&gt;
  
  
  💌 How to Get It (Free!)
&lt;/h2&gt;

&lt;p&gt;This first edition is completely free - no strings attached. All I ask is for your email so I can send you:&lt;br&gt;
The eBook (PDF) &lt;br&gt;
All future editions for free&lt;br&gt;
Updates and bonus content when they drop&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fforms.gle%2F9udNjxZKqctMvShj7" rel="noopener noreferrer"&gt;Click here to download the book&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💭 Why I'm Doing This
&lt;/h2&gt;

&lt;p&gt;I've learned so much from open communities and free resources. This book is my way of giving back - and helping others prepare better, smarter, and faster.&lt;br&gt;
Whether you're a junior dev preparing for your first Docker interview or a senior engineer brushing up for a tough tech screening - this book has something for you.&lt;br&gt;
Let's make Docker interviews less scary and more fun 💪&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;👍 If you like the article, please consider following.&lt;br&gt;
⭐ Star GitHub repository&lt;br&gt;
➕ Follow me on &lt;a href="https://www.linkedin.com/in/mammadyahya/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; | &lt;a href="https://x.com/mammadyahyayev" rel="noopener noreferrer"&gt;X (Twitter)&lt;/a&gt; | &lt;a href="https://github.com/mammadyahyayev" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;br&gt;
👁 Check out my other &lt;a href="https://medium.com/@mammadyahya" rel="noopener noreferrer"&gt;stories&lt;/a&gt;.&lt;br&gt;
🎥 Subscribe my email list from &lt;a href="https://mammadyahya.medium.com/subscribe" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tech</category>
      <category>docker</category>
      <category>devops</category>
      <category>programming</category>
    </item>
    <item>
      <title>You Write Java, JVM Rewrites It!</title>
      <dc:creator>Mammad Yahyayev</dc:creator>
      <pubDate>Wed, 02 Apr 2025 05:35:54 +0000</pubDate>
      <link>https://dev.to/mammadyahyayev/constant-folding-in-jvm-how-the-compiler-makes-your-code-faster-3ejn</link>
      <guid>https://dev.to/mammadyahyayev/constant-folding-in-jvm-how-the-compiler-makes-your-code-faster-3ejn</guid>
      <description>&lt;p&gt;Hello Java developers. Welcome to my new article. Today’s topic is Constant Folding.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Constant Folding?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Constant_folding" rel="noopener noreferrer"&gt;Constant folding&lt;/a&gt; is a crucial optimization technique used by the Java Virtual Machine (JVM) and compiler to enhance performance. It is not only utilized in JVM, but also used in other modern languages’ compilers.&lt;/p&gt;

&lt;p&gt;This technique eliminates redundant computations by evaluating constant expressions at compile-time rather than runtime. This results in faster execution and reduced bytecode size.&lt;/p&gt;

&lt;p&gt;For example, consider the following Java code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConstantFoldingExample&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Java compiler recognizes that &lt;code&gt;5 + 10&lt;/code&gt; is a constant expression and simplifies it to &lt;code&gt;15&lt;/code&gt;. As a result, the compiled bytecode does not contain an addition operation but directly loads &lt;code&gt;15&lt;/code&gt; into the variable.&lt;/p&gt;

&lt;p&gt;Let’s explore the bytecode by using &lt;a href="https://docs.oracle.com/en/java/javase/11/tools/javap.html" rel="noopener noreferrer"&gt;javap&lt;/a&gt; command line tool. Execute following lines in your terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;javac ConstantFoldingExample.java
&lt;span class="nv"&gt;$ &lt;/span&gt;javap &lt;span class="nt"&gt;-c&lt;/span&gt; ConstantFoldingExample
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The compiled bytecode might look like following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;bipush&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;  &lt;span class="c1"&gt;// Push the constant value 15 onto the stack&lt;/span&gt;
 &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;istore_1&lt;/span&gt;   &lt;span class="c1"&gt;// Store it in variable x&lt;/span&gt;
 &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;getstatic&lt;/span&gt; &lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="nc"&gt;Ljava&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nc"&gt;PrintStream&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
 &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;iload_1&lt;/span&gt;    &lt;span class="c1"&gt;// Load x (which is 15)&lt;/span&gt;
 &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;invokevirtual&lt;/span&gt; &lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nc"&gt;PrintStream&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;I&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="no"&gt;V&lt;/span&gt;
 &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Does Constant Folding Occur in Only Arithmetic Operations?
&lt;/h2&gt;

&lt;p&gt;The short answer is no. It occurs in following cases.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arithmetic Operations (Addition, Subtraction, Multiplication and so on)&lt;/li&gt;
&lt;li&gt;String Concatenation&lt;/li&gt;
&lt;li&gt;Boolean&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ve already seen how constant folding occurs in arithmetic operations, let’s see other two.&lt;/p&gt;

&lt;h3&gt;
  
  
  String Concatenation
&lt;/h3&gt;

&lt;p&gt;Consider following Java code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConstantFoldingWithStrings&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Hello"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"World"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Message: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do the same actions as you did in arithmetic operation in order to get the bytecode.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;    &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="c1"&gt;// String HelloWorld&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output is truncated for simplicity. No need to say anything, it is obvious from the result.&lt;/p&gt;

&lt;h3&gt;
  
  
  Boolean Folding
&lt;/h3&gt;

&lt;p&gt;Boolean folding might confuse you, but we will see the both possible options ( &lt;code&gt;false&lt;/code&gt; and &lt;code&gt;true&lt;/code&gt; case ).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;true&lt;/code&gt; case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConstantFoldingWithBooleans&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;isBool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bool: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;isBool&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here’s the generated bytecode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;iconst_1&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;istore_1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;iconst_1&lt;/code&gt; opcode means ‘Push int constant &lt;code&gt;1&lt;/code&gt;‘ and in &lt;code&gt;1&lt;/code&gt; means &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Let’s see the &lt;code&gt;false&lt;/code&gt; case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConstantFoldingWithBooleans&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;isBool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bool: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;isBool&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generated bytecode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;iconst_0&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;istore_1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;iconst_0&lt;/code&gt; opcode means ‘Push &lt;code&gt;int&lt;/code&gt; constant &lt;code&gt;0&lt;/code&gt;‘ and in &lt;code&gt;0&lt;/code&gt; means &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tricky Example
&lt;/h3&gt;

&lt;p&gt;Most of the time, we don’t write code this way by embedding constants directly into expressions. Instead, we store them in &lt;strong&gt;variables&lt;/strong&gt; for better readability and maintainability. However, constant folding will happen when the variables are declared as &lt;code&gt;final&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Consider following example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConstantFolding&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;campaignPoints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;getTransactionAmount&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;campaignPoints&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Amount: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;

   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;getTransactionAmount&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In above example, if we don’t write final keyword in front of the variables, constant folding will not happen at compile time. Let’s see what will be generated as bytecode.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;invokestatic&lt;/span&gt;  &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;    &lt;span class="c1"&gt;// Method getTransactionAmount:()I&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sipush&lt;/span&gt;        &lt;span class="mi"&gt;2000&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;imul&lt;/span&gt;
&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;iconst_2&lt;/span&gt;
&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;imul&lt;/span&gt;
&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;istore_1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Constant Folding didn’t occur regardless of &lt;code&gt;final&lt;/code&gt; keywords. Why?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgw6ckl0qv8ksrxdges28.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgw6ckl0qv8ksrxdges28.gif" alt="Confused" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The trick is hidden behind the equation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;getTransactionAmount&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;campaignPoints&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java is calculates the arithmetic operations from left to right. So first operand ( &lt;code&gt;getTransactionAmount()&lt;/code&gt; ) is not &lt;code&gt;final&lt;/code&gt;. This is the reason why Constant Folding didn’t occur.&lt;/p&gt;

&lt;p&gt;If we wrap the constant variables with parentheses or switch the operands positions, then Constant Folding will occur.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;getTransactionAmount&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;campaignPoints&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// or&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;campaignPoints&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;getTransactionAmount&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// or&lt;/span&gt;

&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;multiplier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;campaignPoints&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;multiplier&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;getTransactionAmount&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can choose one of the above. Here’s the generated bytecode&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;invokestatic&lt;/span&gt;  &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;    &lt;span class="c1"&gt;// Method getTransactionAmount:()I&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sipush&lt;/span&gt;        &lt;span class="mi"&gt;4000&lt;/span&gt;  &lt;span class="c1"&gt;// 2000 * 2 = 4000&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;imul&lt;/span&gt;
&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;istore_1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This time Constant Folding occurred.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of Constant Folding
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Improves performance by eliminating redundant computations.&lt;/li&gt;
&lt;li&gt;Reduces bytecode size.&lt;/li&gt;
&lt;li&gt;JVM executes optimized bytecode faster&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📃Conclusion
&lt;/h2&gt;

&lt;p&gt;Constant folding is a powerful optimization that enhances Java program efficiency by precomputing constant expressions.&lt;/p&gt;

&lt;p&gt;As always, source code is available on &lt;a href="https://github.com/mammadyahyayev/blog-posts/tree/master/jvm/constant-folding" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👍 If you like the article, please consider clapping 👏 and following.&lt;/li&gt;
&lt;li&gt;⭐ Star &lt;a href="https://github.com/mammadyahyayev/blog-posts" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;➕ Follow me on &lt;a href="https://www.linkedin.com/in/mammadyahya/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; | &lt;a href="https://x.com/mammadyahyayev" rel="noopener noreferrer"&gt;X (Twitter)&lt;/a&gt; | &lt;a href="https://github.com/mammadyahyayev" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👁 Check out my other stories.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>java</category>
      <category>jvm</category>
    </item>
    <item>
      <title>How to Improve Presentation Skills?</title>
      <dc:creator>Mammad Yahyayev</dc:creator>
      <pubDate>Wed, 26 Feb 2025 05:25:58 +0000</pubDate>
      <link>https://dev.to/mammadyahyayev/how-to-improve-presentation-skills-1523</link>
      <guid>https://dev.to/mammadyahyayev/how-to-improve-presentation-skills-1523</guid>
      <description>&lt;p&gt;Hello people, today I will share the favorite tricks that I learned from the course on Udemy. The course is PowerPoint Presentation Masterclass — Presentation Design &amp;amp; Animation. These tricks that I will share today, saved my tons of time while creating presentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why creating presentation is important?
&lt;/h2&gt;

&lt;p&gt;Before we begin, I want to answer the questions. Creating a good presentation could be vitally important in your life.&lt;/p&gt;

&lt;p&gt;Let’s assume you have a company, and you need to advertise your products. The most important thing is the presentation. Sometimes presentations give more insights about your products than words.&lt;/p&gt;

&lt;p&gt;Good presentations skills that bring you more money and more success.&lt;/p&gt;

&lt;p&gt;You need to acquire this skill, it doesn’t matter what is your occupation, because &lt;strong&gt;90% of time you will need this in your life&lt;/strong&gt;. College/University students, public speakers, teachers, developers, product owners, project managers and list goes on and all of them should have good presentation skills if they want to stand out from the rest of people.&lt;/p&gt;

&lt;h2&gt;
  
  
  How can I create good presentation?
&lt;/h2&gt;

&lt;p&gt;This one is other important question. If you have great presentation skills, but you create for the wrong audience, it will be time wasting.&lt;/p&gt;

&lt;p&gt;Before creating any presentation, you need to know your audience. Where and to which audience are you going to present?.&lt;/p&gt;

&lt;p&gt;If you are a teacher and you need to explain some difficult concept to the students, giving plenty of animations can be distracting even if it looks amazing.&lt;/p&gt;

&lt;p&gt;But if you are a product owner in a game company, adding animations will be enticing to game lovers. Therefore before the presentation, always identify your audience.&lt;/p&gt;

&lt;p&gt;The another thing that you need to give attention that is the time of the presentation. Let’s assume you are a public speaker, and you have limited time to present. If you create numerous slides, perhaps there will be no time to complete your presentation or you can present every slide quicker, but this time you will be uncertain whether people understand your idea or not.&lt;/p&gt;

&lt;p&gt;Therefore, I prefer not to present the slides that takes more than 30 minutes to talk all of them, but it depends on the place where you are going to present.&lt;/p&gt;

&lt;p&gt;If you want to create a good presentation, you need to consider the followings.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Know your audience&lt;/li&gt;
&lt;li&gt;Adjust time of the presentation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why speed is important to create presentation?
&lt;/h2&gt;

&lt;p&gt;When I was university, I had spent my whole day to create presentations. After creating each presentation, I have learned new things then applied them for the future presentations to save time and effort.&lt;/p&gt;

&lt;p&gt;When I say speed is important, I don’t mean add 2 images, some texts to complete the presentations in 5 minutes. Explaining your idea is more important than speed, but saving some time meanwhile creating your presentations, can be very helpful to think more about the idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structure of your presentation folder
&lt;/h2&gt;

&lt;p&gt;In my point of view, the most important things the structure of your presentation folder. Actually, a lot of people, don’t structure the presentations, they will keep all images, resources in different folders, files and this takes so much time to find them. Thus the most crucial thing is the structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmka2dl3suodo8ihmiyvm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmka2dl3suodo8ihmiyvm.png" alt="folder structure" width="800" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the image above, this is the structure of my presentations. I keep all images, icons on Images folder, and some documents, pdf files, word files, presentations files on Resources folder.&lt;/p&gt;

&lt;p&gt;This is the base structure of my all presentations and saves tons of my time. Furthermore, if you need you can add other folders, files depend on the presentations you want to make, but the base structure always remains the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Renaming files, images
&lt;/h2&gt;

&lt;p&gt;It is good to collect the images, files, generally resources in advance. If there are tons of files that have unclear names and you don’t rename the files, you will spend your time to find the correct image in the folder.&lt;/p&gt;

&lt;p&gt;For example, let’s download the picture at below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft9otxz2931dhwruv66vu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft9otxz2931dhwruv66vu.png" alt="metro" width="683" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I download this picture, the name was &lt;em&gt;pexels-trace-hudson-2475301.jpg&lt;/em&gt;. It will be hard to remember, if you have lots of images.&lt;/p&gt;

&lt;p&gt;Thus I can rename it to train or metro for based on the image. You might say, this will take time to rename it, but trust me it will be less than to find it. Same purpose works well for the files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Slides’ contents in one file
&lt;/h2&gt;

&lt;p&gt;I really like to store all slides’ contents in one Microsoft Word file or notepad. After I found my resources, I copy contents from websites, pdf files into one file and modify it a little bit such as adding titles, adjusting font size, changing font family and so on. Then I will copy from that Microsoft Word file into slides.&lt;/p&gt;

&lt;p&gt;The plan is created automatically, if you keep all the contents in one file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0oqbdmu4686kw8zydtn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0oqbdmu4686kw8zydtn.png" alt="slide content" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The texts copied from the Wikipedia and those are just examples, I adjusted a little bit, but I kept underlines, perhaps you need to highlight them in the slides as well.&lt;/p&gt;

&lt;p&gt;The another great thing about this, you can prepare your presentation by reading from it, because adding every resource into your slides will make it untidy. However you need to speak more than you wrote in the slides. Creating this Word file will assist you to make your speech.&lt;/p&gt;

&lt;h2&gt;
  
  
  Slide size and Zoom out
&lt;/h2&gt;

&lt;p&gt;When you add images into your slides, sometimes they will be inserted abnormally bigger. In order to fit them in slide, you need to zoom out. Sometimes it takes a little bit of time. Therefore I set the size of the paper 16:9 size, and work with 50% zoom. You will understand why it is so useful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fct8if7bgyamy5lqsqy39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fct8if7bgyamy5lqsqy39.png" alt="zoom out slide" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is my workarea for each slide. The great thing is that I can add different images to the around of the slide.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2zuc91xdk6cjav9pbqa6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2zuc91xdk6cjav9pbqa6.png" alt="slide workarea" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see on the above, I added different images around the slide. If I want to give color to shape, no need to set the value of the RGB color manually. Use Eyedropper to give background colors. I take screenshots of the colors from the website Color Hunt.&lt;/p&gt;

&lt;p&gt;Take a screenshot, place the image around the slide, then click the color with Eyedropper to give the color to the shape. With this way, we can easiliy resize, select, adjust the images, shapes or texts. 16:9 slide size and 50% zoom are a great combination.&lt;/p&gt;

&lt;p&gt;However you can set those values whatever you want. In order to change slide size. Do the following steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Design tab on menu&lt;/li&gt;
&lt;li&gt;In Design tab, you will see Slide Size&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkrwik0wxpgyax1yibc3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkrwik0wxpgyax1yibc3.png" alt="slide size" width="183" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also you can customize your slide size by yourself.&lt;/p&gt;

&lt;p&gt;Caution: I use &lt;em&gt;Microsoft Powerpoint Professional&lt;/em&gt; 2016, I hope it will be in the same location in other versions of Powerpoint, if you can’t find it, let me know in the comment section below, I will try to help you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Access Toolbar
&lt;/h2&gt;

&lt;p&gt;A lot of people underestimate power of the Quick Access Toolbar, but it provide you really good amount of time. There are some tools that hard to find in Powerpoint, if you have less practice.&lt;/p&gt;

&lt;p&gt;Quick Access Toolbar, as the name suggest, allow you to access those tools easily and quickly. In my presentations, I use following tools regularly.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Shapes&lt;/li&gt;
&lt;li&gt;Textbox&lt;/li&gt;
&lt;li&gt;Equation&lt;/li&gt;
&lt;li&gt;Eyedropper&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can add your favorite tools into &lt;em&gt;Quick Access Toolbar&lt;/em&gt;, and you can access them by using keyword combinations or clicking the icon of the tool with mouse.&lt;/p&gt;

&lt;p&gt;Adding tools into &lt;em&gt;Quick Access Toolbar&lt;/em&gt; is so easy. Click right button of the mouse over the tool, then popup will be appear over tool, then click &lt;em&gt;Add to Quick Access Toolbar&lt;/em&gt; option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4fsa2itqqxdafb86kpa5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4fsa2itqqxdafb86kpa5.png" alt="quick access toolbar" width="451" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can manage the tools from &lt;em&gt;Quick Access Toolbar&lt;/em&gt; window. In order to open the window, do the following steps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frv41rwmwz25hwur2cwqo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frv41rwmwz25hwur2cwqo.png" alt="quick access toolbar" width="640" height="68"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the icon which highlighted with arrow. Then select More Commands option in the opened popup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjzl7ov0sz1zug9qeyw3r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjzl7ov0sz1zug9qeyw3r.png" alt="highlighted quick access toolbar" width="220" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After choosing the More Commands, window will be open on the center of screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxn25huo8stjgqn6v88o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxn25huo8stjgqn6v88o.png" alt="more commands window" width="800" height="710"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can configure your toolbar from here. In order to access the tools fast, use keyboards combinations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3mu3bwynji0sxc9hei6j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3mu3bwynji0sxc9hei6j.png" alt="shortcuts" width="800" height="78"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you press Alt key, you will see the numbers and letters like above image. After that you can press any number to use tools from Quick Access Toolbar. In my case,&lt;br&gt;
&lt;strong&gt;Alt + 1&lt;/strong&gt; is Shapes, &lt;strong&gt;Alt + 2&lt;/strong&gt; is Textbox and so on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep open Format panel
&lt;/h2&gt;

&lt;p&gt;Format panel allows you to add more adjustments for shapes, texts, backgrounds, images and so on. If you keep this panel open, you can easily modify the objects without moving over the ribbon menu.&lt;/p&gt;

&lt;p&gt;The another great thing is, when you select different objects, it will change Format panel to &lt;strong&gt;Format Shape, Format Picture, Format Background&lt;/strong&gt; based on the element.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0tf3wbok4rvgyt0pkig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0tf3wbok4rvgyt0pkig.png" alt="format panel" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you right-click on the slide, then select Format Background or right-click on the shape, then select Format Shape and similarly applies to text objects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh1jfqckugsy15ofcfdv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh1jfqckugsy15ofcfdv.png" alt="shapes" width="528" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Keyboard combinations
&lt;/h2&gt;

&lt;p&gt;Keyboard combinations are very important in Microsoft Powerpoint as in every other desktop application. If you get accustom to work with them, you will not want to move your hand from the keyboard most of the times.&lt;/p&gt;

&lt;p&gt;I don’t force you to learn every keyboard combination in Powerpoint, because it is almost impossible to remember all of them, just learn the basic and most common ones such as increase or decrease the font size, create or duplicate slide, quick access toolbar keyword combinations that we’ve already seen those.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpn7nmxzrb5c59q7kx4o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpn7nmxzrb5c59q7kx4o.png" alt="keyboard combination" width="728" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try these combinations on your own, but don’t forget that you need to select text in order to apply text related keyboard combinations, select slides for slide related keyboard combinations, select objects for object related keyboard combinations and so on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I want to conclude the article with the Udemy course that I’ve mention on the beginning of the article. The course helped me a lot to learn plenty of new things, even if I have quite experience in Microsoft Powerpoint.&lt;/p&gt;

&lt;p&gt;It is highly recommended for those of who want to put presentation skill into their skill stack.&lt;/p&gt;

&lt;p&gt;👍 If you like the article, please consider following.&lt;br&gt;
⭐ Star GitHub repository&lt;br&gt;
➕ Follow me on &lt;a href="https://www.linkedin.com/in/mammadyahya/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; | &lt;a href="https://x.com/mammadyahyayev" rel="noopener noreferrer"&gt;X (Twitter)&lt;/a&gt; | &lt;a href="https://github.com/mammadyahyayev" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;br&gt;
👁 Check out my other &lt;a href="https://medium.com/@mammadyahya" rel="noopener noreferrer"&gt;stories&lt;/a&gt;.&lt;br&gt;
🎥 Subscribe my email list from &lt;a href="https://mammadyahya.medium.com/subscribe" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>life</category>
      <category>skill</category>
      <category>presentation</category>
      <category>tech</category>
    </item>
    <item>
      <title>How to Update File in Docker Container If You Can’t Use Vim or Nano?</title>
      <dc:creator>Mammad Yahyayev</dc:creator>
      <pubDate>Fri, 24 Jan 2025 05:54:20 +0000</pubDate>
      <link>https://dev.to/mammadyahyayev/how-to-update-file-in-docker-container-if-you-cant-use-vim-or-nano-2i0g</link>
      <guid>https://dev.to/mammadyahyayev/how-to-update-file-in-docker-container-if-you-cant-use-vim-or-nano-2i0g</guid>
      <description>&lt;p&gt;Read the full article: &lt;a href="https://medium.com/devops-dev/docker-advance-part-7-how-to-update-file-in-docker-container-if-you-cant-use-vim-or-nano-828c73447e97" rel="noopener noreferrer"&gt;https://medium.com/devops-dev/docker-advance-part-7-how-to-update-file-in-docker-container-if-you-cant-use-vim-or-nano-828c73447e97&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>docker</category>
    </item>
    <item>
      <title>Want to Learn Docker in Advance Way?</title>
      <dc:creator>Mammad Yahyayev</dc:creator>
      <pubDate>Thu, 02 Jan 2025 11:56:31 +0000</pubDate>
      <link>https://dev.to/mammadyahyayev/want-to-learn-docker-in-advance-way-follow-the-series-4da9</link>
      <guid>https://dev.to/mammadyahyayev/want-to-learn-docker-in-advance-way-follow-the-series-4da9</guid>
      <description>&lt;h2&gt;
  
  
  Docker Advance Series
&lt;/h2&gt;

&lt;p&gt;Link: &lt;a href="https://mammadyahya.medium.com/list/docker-advance-83e513e29130" rel="noopener noreferrer"&gt;https://mammadyahya.medium.com/list/docker-advance-83e513e29130&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker Advance Part 5: Separation of Concern in Docker Compose
&lt;/h2&gt;

&lt;p&gt;Link: &lt;a href="https://mammadyahya.medium.com/docker-advance-part-5-separation-of-concern-in-docker-compose-2716204f5c77" rel="noopener noreferrer"&gt;https://mammadyahya.medium.com/docker-advance-part-5-separation-of-concern-in-docker-compose-2716204f5c77&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>dockercompose</category>
      <category>cleancode</category>
      <category>devops</category>
    </item>
    <item>
      <title>What is the Best Way to Group REST API methods in Swagger UI</title>
      <dc:creator>Mammad Yahyayev</dc:creator>
      <pubDate>Wed, 25 Dec 2024 08:26:44 +0000</pubDate>
      <link>https://dev.to/mammadyahyayev/what-is-the-best-way-to-group-rest-api-methods-in-swagger-ui-78h</link>
      <guid>https://dev.to/mammadyahyayev/what-is-the-best-way-to-group-rest-api-methods-in-swagger-ui-78h</guid>
      <description>&lt;h2&gt;
  
  
  Post Moved Here: &lt;a href="https://mammadyahya.medium.com/how-to-logically-group-your-rest-apis-in-swagger-ui-4a219a96edf7" rel="noopener noreferrer"&gt;https://mammadyahya.medium.com/how-to-logically-group-your-rest-apis-in-swagger-ui-4a219a96edf7&lt;/a&gt;
&lt;/h2&gt;

</description>
      <category>restapi</category>
      <category>swagger</category>
      <category>http</category>
      <category>springboot</category>
    </item>
    <item>
      <title>Docker Advance Part 4: Docker Format Flag Is Too EASY to Understand</title>
      <dc:creator>Mammad Yahyayev</dc:creator>
      <pubDate>Mon, 16 Dec 2024 19:32:14 +0000</pubDate>
      <link>https://dev.to/mammadyahyayev/docker-advance-part-4-docker-format-flag-is-too-easy-to-understand-2ik</link>
      <guid>https://dev.to/mammadyahyayev/docker-advance-part-4-docker-format-flag-is-too-easy-to-understand-2ik</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vh3k04o7j7boyn9hv6y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vh3k04o7j7boyn9hv6y.png" alt="Image description" width="786" height="786"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Post Moved Here: &lt;a href="https://blog.vanillajava.blog/2024/12/tldr-designing-hyper-deterministic-high.html?ref=dailydev" rel="noopener noreferrer"&gt;https://blog.vanillajava.blog/2024/12/tldr-designing-hyper-deterministic-high.html?ref=dailydev&lt;/a&gt;
&lt;/h2&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>go</category>
    </item>
    <item>
      <title>Docker Advance Part 3: Best Way to Define Passwords In Docker Compose File</title>
      <dc:creator>Mammad Yahyayev</dc:creator>
      <pubDate>Mon, 09 Dec 2024 10:38:57 +0000</pubDate>
      <link>https://dev.to/mammadyahyayev/docker-advance-part-3-best-way-to-define-passwords-in-docker-compose-file-3ba4</link>
      <guid>https://dev.to/mammadyahyayev/docker-advance-part-3-best-way-to-define-passwords-in-docker-compose-file-3ba4</guid>
      <description>&lt;h2&gt;
  
  
  Article moved: &lt;a href="https://medium.com/@mammadyahya/docker-advance-part-3-best-way-to-define-passwords-in-docker-compose-file-779d25fae222" rel="noopener noreferrer"&gt;https://medium.com/@mammadyahya/docker-advance-part-3-best-way-to-define-passwords-in-docker-compose-file-779d25fae222&lt;/a&gt;
&lt;/h2&gt;

</description>
      <category>devops</category>
      <category>docker</category>
      <category>security</category>
    </item>
    <item>
      <title>Docker Advance Part 2: Docker Logging</title>
      <dc:creator>Mammad Yahyayev</dc:creator>
      <pubDate>Wed, 13 Nov 2024 06:38:26 +0000</pubDate>
      <link>https://dev.to/mammadyahyayev/docker-advance-part-2-docker-logging-2ghd</link>
      <guid>https://dev.to/mammadyahyayev/docker-advance-part-2-docker-logging-2ghd</guid>
      <description>&lt;h2&gt;
  
  
  Article moved: &lt;a href="https://medium.com/@mammadyahya/docker-advance-part-2-docker-logging-343338713701" rel="noopener noreferrer"&gt;https://medium.com/@mammadyahya/docker-advance-part-2-docker-logging-343338713701&lt;/a&gt;
&lt;/h2&gt;

</description>
      <category>docker</category>
      <category>logging</category>
      <category>dockercompose</category>
      <category>bestpractice</category>
    </item>
    <item>
      <title>Docker Advance Part 1: Monitor Docker Containers with Health Checks</title>
      <dc:creator>Mammad Yahyayev</dc:creator>
      <pubDate>Sat, 02 Nov 2024 06:00:00 +0000</pubDate>
      <link>https://dev.to/mammadyahyayev/docker-advance-part-1-monitor-docker-containers-with-health-checks-4258</link>
      <guid>https://dev.to/mammadyahyayev/docker-advance-part-1-monitor-docker-containers-with-health-checks-4258</guid>
      <description>&lt;h2&gt;
  
  
  Article moved: &lt;a href="https://medium.com/@mammadyahya/docker-advance-part-1-monitor-docker-containers-with-health-checks-f661238003da" rel="noopener noreferrer"&gt;https://medium.com/@mammadyahya/docker-advance-part-1-monitor-docker-containers-with-health-checks-f661238003da&lt;/a&gt;
&lt;/h2&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>containers</category>
    </item>
  </channel>
</rss>
