<?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: Krishna Kumar</title>
    <description>The latest articles on DEV Community by Krishna Kumar (@krishnapro).</description>
    <link>https://dev.to/krishnapro</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%2F596079%2F517aff8c-7060-4041-bf96-5ca6f514d850.png</url>
      <title>DEV Community: Krishna Kumar</title>
      <link>https://dev.to/krishnapro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/krishnapro"/>
    <language>en</language>
    <item>
      <title>A Beginner's Guide to ProcessBuilder in Java</title>
      <dc:creator>Krishna Kumar</dc:creator>
      <pubDate>Sat, 04 Feb 2023 17:09:20 +0000</pubDate>
      <link>https://dev.to/krishnapro/a-beginners-guide-to-processbuilder-in-java-12bh</link>
      <guid>https://dev.to/krishnapro/a-beginners-guide-to-processbuilder-in-java-12bh</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;ProcessBuilder is a class in Java that enables developers to start and manage operating system processes from within their Java applications. This can be useful for executing shell commands, scripts or other applications from your Java code. With the help of the ProcessBuilder class, you can execute a command, redirect its input and output streams, and even wait for its completion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use ProcessBuilder?
&lt;/h2&gt;

&lt;p&gt;The ProcessBuilder class offers an easy way to execute shell commands or scripts from within Java code. It can be especially useful for developers who want to automate tasks or manipulate the operating system from within their Java applications. For instance, you can use ProcessBuilder to execute shell commands that run backups, install packages or perform other tasks that are typically performed in the command line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now let's see how we can create a Process using Java.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To create a new process builder with the specified operating system program and arguments, we can use this convenient constructor&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ProcessBuilder(String... command)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Creating a Process
&lt;/h2&gt;

&lt;p&gt;The ProcessBuilder class provides several methods to create a new process. The most basic method is to use the &lt;code&gt;start()&lt;/code&gt; method, which takes an array of strings as input. This array represents the command that you want to execute, along with any arguments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Here is an example of using the start() method:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ProcessBuilder pb = new ProcessBuilder("java", "-version");
Process process = pb.start();

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the command "java -version" is passed as an array of strings to the ProcessBuilder constructor. The &lt;code&gt;start()&lt;/code&gt; method is then used to start the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Redirecting Standard Input and Output&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;In the real world, we will probably want to capture the results of our running processes inside a log file for further analysis&lt;/strong&gt;. Luckily the &lt;em&gt;ProcessBuilder&lt;/em&gt; API has built-in support for exactly this as we will see in this example&lt;/p&gt;

&lt;p&gt;By default, the input and output streams of a process are connected to the parent process. This means that if you print to the standard output, it will be sent to the parent process, and if you read from the standard input, you will receive data from the parent process.&lt;/p&gt;

&lt;p&gt;Let's return to our original example to print out the version of Java. But this time let's redirect the output to a log file instead of the standard output.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ProcessBuilder processBuilder = new ProcessBuilder("java", "-version");

processBuilder.redirectErrorStream(true);
File log = folder.newFile("java-version.log");
processBuilder.redirectOutput(log);

Process process = processBuilder.start();

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above example, we create a new temporary file called log and tell our &lt;em&gt;ProcessBuilder&lt;/em&gt; to redirect output to this file destination&lt;/p&gt;

&lt;h2&gt;
  
  
  Waiting for Completion
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;start()&lt;/code&gt; method returns immediately, allowing you to continue executing other tasks while the process is running. To wait for the process to complete, you can use the &lt;code&gt;waitFor()&lt;/code&gt; method.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Here is an example of waiting for a process to complete:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ProcessBuilder pb = new ProcessBuilder("java", "-version");
Process process = pb.start();
int exitCode = process.waitFor();

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the &lt;code&gt;waitFor()&lt;/code&gt; method is used to wait for the process to complete. Once the process has been completed, the &lt;code&gt;exitCode&lt;/code&gt; variable will contain the exit code of the process. If the &lt;code&gt;exitCode&lt;/code&gt; will &lt;code&gt;0&lt;/code&gt; then the process successfully completed.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do get the Process ID (PID) of the command
&lt;/h2&gt;

&lt;p&gt;In a Unix-like or Linux operating system, each process is identified by a unique numeric identifier called the Process ID or PID. In some situations, we may need to obtain the PID of a running process programmatically. Here we will explore a different way to get the PID of the command.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using&lt;/strong&gt; &lt;code&gt;pgrep&lt;/code&gt; &lt;strong&gt;command&lt;/strong&gt; only work in linux&lt;/p&gt;

&lt;p&gt;One way to get the PID of a command is by using the &lt;code&gt;pgrep&lt;/code&gt; command. This command returns the PID of the processes matching a pattern. We can use the &lt;code&gt;-f&lt;/code&gt; option to search for a process by its command name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String command = "some command";
String processcmd = "pgrep -f " + command; // pass command with pgrep -f
String processId = "";

ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", processcmd);
Process result = processBuilder.start(); //start() will run the command
BufferedReader reader = new BufferedReader(new InputStreamReader(result.getInputStream())); // reading the output of the command
List&amp;lt;String&amp;gt; pid = reader.lines().collect(Collectors.toList()); // collect the line in list
if (!pid.isEmpty()) {
    processId = pid.get(0); // get the pid at first position
    System.out.println(String.format("Process ID for command '%s' is %s", command, processId));
    } else {
        System.out.println(String.format("No process found for command '%s'", command));
        }
    }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;pgrep -f&lt;/code&gt; command searches for a process by its command name. The output of the &lt;code&gt;pgrep&lt;/code&gt; command is captured using the &lt;code&gt;java.io.BufferedReader&lt;/code&gt; method of the &lt;code&gt;String&lt;/code&gt; class, which returns the output of the command as a &lt;code&gt;String&lt;/code&gt; and &lt;code&gt;java.util.stream.Collectors&lt;/code&gt; has been used for reading the input stream and collecting line respectely in List variable &lt;code&gt;pid&lt;/code&gt;. PID at the first position will be the pid of the command.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;The ProcessBuilder class provides a convenient way to execute shell commands and manage operating system processes from within Java code. With the help of this class, you can redirect input and output streams, wait for completion, and even manipulate the environment of a process. Whether you are automating tasks or integrating with other applications, the ProcessBuilder class can help you get the job done.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Key Concepts in Database Management: A Beginner's Guide</title>
      <dc:creator>Krishna Kumar</dc:creator>
      <pubDate>Sun, 25 Dec 2022 18:53:42 +0000</pubDate>
      <link>https://dev.to/krishnapro/key-concepts-in-database-management-a-beginners-guide-5ecd</link>
      <guid>https://dev.to/krishnapro/key-concepts-in-database-management-a-beginners-guide-5ecd</guid>
      <description>&lt;h3&gt;
  
  
  what is key in DBMS?
&lt;/h3&gt;

&lt;p&gt;A Key is a field or set of fields used to uniquely identify any record or row of data from a table and establish a relationship between tables. There are several types of keys that can be used in DBMS including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Primary Key&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Foreign Key&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Composite key&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Candidate key&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Alternate key&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Surrogate key&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Primary key
&lt;/h3&gt;

&lt;p&gt;A primary key is an attribute or column that can uniquely identify each row or record of a table. It can not contain a null value, and there can be only one primary key per table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Nr35wbjv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1671985886109/8b0c3203-8a8d-4d4d-8a40-b1f7e46ee542.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Nr35wbjv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1671985886109/8b0c3203-8a8d-4d4d-8a40-b1f7e46ee542.png" alt="" width="500" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Foreign Key
&lt;/h3&gt;

&lt;p&gt;A foreign key is a field or attribute in one table that refers to a primary key in another table. It is used to establish the relationship between two tables and can be used to enforce data integrity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZSkUD6DP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1671991339362/ad5a23e9-b19f-4395-8239-bdc3694032bd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZSkUD6DP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1671991339362/ad5a23e9-b19f-4395-8239-bdc3694032bd.png" alt="" width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Composite key
&lt;/h3&gt;

&lt;p&gt;A composite key made by more than one attribute or column that can uniquely identify a row in a table. It is used when no single column can identify a row in the table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NIXdmYbi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1671992200717/288f952d-47d9-49ae-ad6e-b8c38d2c965c.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NIXdmYbi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1671992200717/288f952d-47d9-49ae-ad6e-b8c38d2c965c.jpeg" alt="" width="408" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Candidate key
&lt;/h3&gt;

&lt;p&gt;A candidate key is an attribute or set of attributes that could be used as a primary key. A table can have multiple candidate keys, but only one of them can be chosen as a primary key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5XNcpT6R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1671992859435/f90e1c4c-e1b5-49ec-bdd3-a32d1b880d52.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5XNcpT6R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1671992859435/f90e1c4c-e1b5-49ec-bdd3-a32d1b880d52.jpeg" alt="" width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternate key or Secondary key
&lt;/h3&gt;

&lt;p&gt;An alternate key or secondary key is a candidate key that is not used as a primary key, but that can still use to uniquely identify a row in a table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OKjeujfF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1671993240662/47f284d3-1ce7-4d23-a8d3-6d3e16b3d1e1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OKjeujfF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1671993240662/47f284d3-1ce7-4d23-a8d3-6d3e16b3d1e1.png" alt="" width="604" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Surrogate key
&lt;/h3&gt;

&lt;p&gt;A surrogate key is a synthetic primary key that is used to uniquely identify a row in a table. it is typically an auto-incrementing integer or random alphanumeric string. And it is used when the natural primary key is not able to identify a row in a table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YShD3P7P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1671993956781/1c874122-fff8-4ebf-b87f-3e994eb7481e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YShD3P7P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1671993956781/1c874122-fff8-4ebf-b87f-3e994eb7481e.png" alt="" width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>dbms</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Selenium- How to Automate web browser</title>
      <dc:creator>Krishna Kumar</dc:creator>
      <pubDate>Mon, 28 Nov 2022 16:59:52 +0000</pubDate>
      <link>https://dev.to/krishnapro/selenium-how-to-automate-web-browser-3n7g</link>
      <guid>https://dev.to/krishnapro/selenium-how-to-automate-web-browser-3n7g</guid>
      <description>&lt;h2&gt;
  
  
  What is selenium?
&lt;/h2&gt;

&lt;p&gt;Selenium is an open source tool that automates browsers. Selenium webdriver is one of the top web automation testing tool. it provides a single interface that let you write test scripts in programming languages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Main features of selenium web drivers are:-
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open source&lt;/li&gt;
&lt;li&gt;Cross-platform &lt;/li&gt;
&lt;li&gt;Automates all major browsers like Chrome, Internet explorer, Microsoft edge, Firefox, Safari, Opera&lt;/li&gt;
&lt;li&gt;We can write the tests in various languages like Java, Python, Node.js, PHP, Ruby, Perl, C# and many more&lt;/li&gt;
&lt;li&gt;Runs on JSON webdriver protocols over HTTP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SJ1POJPR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1669651162910/Rx-N-MSTB.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SJ1POJPR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1669651162910/Rx-N-MSTB.png" alt="selenium-web-driver-mc-slide1.png" width="720" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing Selenium Weebdriver Package for Node.js
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;First install Node.js from the official website&lt;/li&gt;
&lt;li&gt;Install selenium webdriver for node.js&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Writing and running the first script in node.js
&lt;/h3&gt;

&lt;h3&gt;
  
  
  write the sample selenium code as shown in the below example and save it with first.js
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  const webdriver = require("selenium-webdriver");

    // Declare driver and open web browser
  var driver = new webdriver.Builder().forBrowser('chrome').build();

  // it will open the URL which is passed as an argument
  driver.get('https://www.softpost.org');
  // here driver will stop and close the browser window
  driver.quit();

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  After that you can run the above node.js code using the below command
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      node first.js

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Thank you for reading feel free to give feedback! 🙂&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Getting Started with Portainer- The best GUI for Docker and Kubernetes.</title>
      <dc:creator>Krishna Kumar</dc:creator>
      <pubDate>Sun, 15 May 2022 17:49:37 +0000</pubDate>
      <link>https://dev.to/krishnapro/getting-started-with-portainer-the-best-gui-for-docker-and-kubernetes-12oa</link>
      <guid>https://dev.to/krishnapro/getting-started-with-portainer-the-best-gui-for-docker-and-kubernetes-12oa</guid>
      <description>&lt;h2&gt;
  
  
  1. What is Portainer?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Portainer&lt;/strong&gt; is a universal and lightweight container management system or tool for Kubernetes, Docker/Swarm, and Nomad that simplified container operations so you can deliver software to more places faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Why Portainer?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Portainer&lt;/strong&gt; is a centralized multi-cluster management platform. which is designed for an organization that does not have access to container management expertise, but wants to explore the power of containers today.&lt;/p&gt;

&lt;p&gt;with an intuitive GUI codified best practice and cloud-native design templates Portainer reduces the operational complexity of multi-cluster container management. which speeds up adoption and reduces errors It addresses critical skill shortages by making the technology safely accessible to everyone inside the organization It simplifies the setting-up of 'safe' security configurations within Docker and Kubernetes through centralized IAM.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Portainer Architechture
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Overview of Portainer architecture:&lt;/strong&gt; Portainer consists of two elements: the Portainer Server and the Portainer Agent. Both run as lightweight containers on your existing containerized infrastructure. The Portainer Agent should be deployed to each node in your cluster and configured to report back to the Portainer Server container. A single Portainer Server will accept connections from any number of Portainer Agents, providing the ability to manage multiple clusters from one centralized interface. To do this, the Portainer Server container requires data persistence. The Portainer Agents are stateless, with data being shipped back to the Portainer Server container.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fxYhExOw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1652636283180/oEtkADX8K.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fxYhExOw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1652636283180/oEtkADX8K.png" alt="portainer-architecture-detailed.png" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Portainer features
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Application Development:&lt;/strong&gt; At its heart, Portainer helps developers deploy cloud-native applications into containers simply, quickly, and securely.&lt;/p&gt;

&lt;p&gt;Portainer has its own simplified GUI, which makes it easy for users to get started. For advanced users, Portainer incorporates an API that allows it to connect to CI/CD tools or third-party dashboards/deployment tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Manual deployment options&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For users with limited to zero knowledge of containers Portainers custom Application Templates are the ultimate click to deploy bootstrap for getting commonly used applications up and running fast. The Custom Templates can also be used by developers to rapidly prototype and test against a disposable system, or for repetitive use cases such as QA. To use an Application Template, a user simply needs to deploy an application, tune/configure it as they wish, and then select the option to save as template. This application's configuration will now be available to single-click deploy any subsequent time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OX87pxsL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1652636763404/jOYc56MqK.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OX87pxsL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1652636763404/jOYc56MqK.webp" alt="mutualdevelopment.webp" width="582" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Portainers support for HELM charts is limited to Kubernetes clusters, and provides users with the ability to deploy any application that is made available via the Bitnami HELM repo; alternatively, the Portainer administrator can connect Portainer to an internal repository, thereby restricting user deployments from only this trusted repo. Helm charts can be adjusted inside Portainer through our values editor, which lets you set whatever options are made available by the publisher of the HELM chart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Automated deployment options&lt;/strong&gt; Portainer is more than just a UI, Portainer can also act as a Continuous Deployment (CD) system. DevOps professionals are able to connect Portainer to their Git repos, and Portainer will automatically deploy any application defined in that repo, and ensure any changes that are made in Git are propagated to the running application. These redeploy can either be manual (where organizational policies require so), automated through webhooks (so the CI system can notify Portainer), or automated through our poller which checks for changes on a regular schedule.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>First Hacktoberfest and open source contribution</title>
      <dc:creator>Krishna Kumar</dc:creator>
      <pubDate>Fri, 22 Oct 2021 20:02:49 +0000</pubDate>
      <link>https://dev.to/krishnapro/first-hacktoberfest-and-open-source-contribution-1mpc</link>
      <guid>https://dev.to/krishnapro/first-hacktoberfest-and-open-source-contribution-1mpc</guid>
      <description>&lt;p&gt;&lt;a href="https://media.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%2Fuoejfil4tnv63q95wtgv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fuoejfil4tnv63q95wtgv.png" alt="comtribution shot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;Hey! I am Krishna from India final year student of Mater of Computer Applications and skilled in web development, Machine learning and cyber security enthusiastic. And also passionate about open source.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I started open source
&lt;/h2&gt;

&lt;p&gt;This is started 3 months ago when I was watching a video on YouTube by Kunal Kushwaha and Eddie Jaoude They talked about open source and how a college student start contributing to open source. After the video I have join &lt;a href="https://www.eddiehub.org/" rel="noopener noreferrer"&gt;EddieHub&lt;/a&gt; and other community.&lt;/p&gt;

&lt;p&gt;If you are beginner and want to start contribute to open source then you have to join &lt;strong&gt;EddieHub&lt;/strong&gt; organization. There you will get step by step guidance about how to get started.&lt;/p&gt;

&lt;p&gt;First time start contribution in EddieHub organization repository after that some day I listen about &lt;strong&gt;hacktoberfest&lt;/strong&gt; before this I don't have any idea about Hacktoberfest then I starts asking question in community and search on google about this.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Hacktoberfest is a month-long celebration of open-source software by DigitalOcean that encourages participation in giving back to the open-source community. Developers get involved by completing pull requests, participating in events, and donating to open source projects. During this event, anyone can support open source by contributing changes and earn limited-edition swag&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This is the beginner friendly so any can participate no matter you are a coder pro level coder or a newbie even you can start by contributing in documentation.&lt;/p&gt;

&lt;p&gt;If you like this connect with me &lt;br&gt;
&lt;a href="https://twitter.com/krishnapro_" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; &lt;a href="https://github.com/Krishnapro" rel="noopener noreferrer"&gt;github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>webdev</category>
      <category>hacktoberfest</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
