<?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: Rishita Shaw</title>
    <description>The latest articles on DEV Community by Rishita Shaw (@rishitashaw).</description>
    <link>https://dev.to/rishitashaw</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%2F634628%2Fc059d737-8cf8-44e8-aa2e-e0b9baefc7b6.jpg</url>
      <title>DEV Community: Rishita Shaw</title>
      <link>https://dev.to/rishitashaw</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rishitashaw"/>
    <language>en</language>
    <item>
      <title>Streamline Your Web Development with Cookie Cutter Django: A Comprehensive Review</title>
      <dc:creator>Rishita Shaw</dc:creator>
      <pubDate>Sat, 22 Apr 2023 15:12:20 +0000</pubDate>
      <link>https://dev.to/rishitashaw/streamline-your-web-development-with-cookie-cutter-django-a-comprehensive-review-3elm</link>
      <guid>https://dev.to/rishitashaw/streamline-your-web-development-with-cookie-cutter-django-a-comprehensive-review-3elm</guid>
      <description>&lt;p&gt;Are you tired of starting every Django project from scratch and spending precious time setting up the same boilerplate code over and over again? If so, you're in luck! In this tech blog, we will introduce you to the powerful tool called Cookie Cutter Django, which allows you to quickly create a custom Django project template with all the common configurations and best practices baked in. We'll provide an in-depth review of this tool, including step-by-step instructions and code blocks, to help you streamline your web development workflow and get your Django projects up and running faster than ever before.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Cookie Cutter Django?
&lt;/h2&gt;

&lt;p&gt;Cookie Cutter Django is a popular open-source project template for Django, a Python web framework. It provides a pre-configured Django project structure with all the necessary files and settings for building modern web applications. The template follows the best practices recommended by the Django community and includes a variety of useful features, such as authentication, database configuration, static file handling, and more. The goal of Cookie Cutter Django is to help developers avoid repetitive setup tasks and start new Django projects with a solid foundation, saving time and effort in the process.&lt;/p&gt;

&lt;h2&gt;
  
  
  System and Software Requirements:
&lt;/h2&gt;

&lt;p&gt;When setting up a Django project using Cookie Cutter Django, it's important to ensure that your system and software meet the requirements for running Django and its associated dependencies. Here are some of the key system and software requirements you should be aware of:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Operating System:
&lt;/h3&gt;

&lt;p&gt;Django is a cross-platform web framework that can run on various operating systems, including Windows, macOS, and Linux. Cookie Cutter Django template is designed to be compatible with these operating systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Python Version:
&lt;/h3&gt;

&lt;p&gt;Django is a Python web framework, so you'll need to have Python installed on your system. The Cookie Cutter Django template is compatible with Python 3.6, 3.7, 3.8, and 3.9, which are the recommended versions for Django 3.x and 4.x.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Python Virtual Environment:
&lt;/h3&gt;

&lt;p&gt;As mentioned earlier, Cookie Cutter Django sets up a virtual environment for your project. To use virtual environments, you'll need to have the &lt;strong&gt;&lt;code&gt;virtualenv&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;venv&lt;/code&gt;&lt;/strong&gt; module installed, which is included in Python 3 by default.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Database:
&lt;/h3&gt;

&lt;p&gt;Django supports several databases, including PostgreSQL, MySQL, SQLite, and Oracle. You'll need to have the appropriate database software installed on your system, along with the relevant Python packages for the database connector that you plan to use in your Django project.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Additional Dependencies:
&lt;/h3&gt;

&lt;p&gt;Django has several dependencies that are required for various features, such as authentication, caching, and form handling. These dependencies are typically installed automatically when you generate a Django project using Cookie Cutter Django, but you may need to manually install some dependencies based on your project requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Text Editor or Integrated Development Environment (IDE):
&lt;/h3&gt;

&lt;p&gt;You'll need a text editor or an IDE to write and edit your Django project code. Some popular options include VSCode, PyCharm, Sublime Text, and Atom, but you can use any text editor or IDE that you are comfortable with.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Version Control System:
&lt;/h3&gt;

&lt;p&gt;It's highly recommended to use a version control system, such as Git, to track changes to your Django project and collaborate with other developers. You'll need to have Git installed on your system and be familiar with basic Git commands for version control.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Web Browser:
&lt;/h3&gt;

&lt;p&gt;A web browser is required to test and view the output of your Django web application. Any modern web browser, such as Chrome, Firefox, Safari, or Edge, can be used for this purpose.&lt;/p&gt;

&lt;p&gt;It's important to carefully review and meet the system and software requirements before setting up a Django project using Cookie Cutter Django. Ensuring that your system and software are compatible with Django and its dependencies will help you avoid potential issues and ensure a smooth development experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with Cookie Cutter Django
&lt;/h2&gt;

&lt;p&gt;Before we dive into the details, let's go through the steps to install and set up Cookie Cutter Django on your local machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install Cookie Cutter
&lt;/h3&gt;

&lt;p&gt;To use Cookie Cutter Django, you'll need to have Python and pip (the Python package manager) installed on your machine. If you don't have them installed already, you can download Python from the official Python website (&lt;strong&gt;&lt;a href="https://www.python.org/"&gt;https://www.python.org/&lt;/a&gt;&lt;/strong&gt;) and pip will be included with it.&lt;/p&gt;

&lt;p&gt;Once you have Python and pip installed, you can install Cookie Cutter by running the following command in your terminal or command prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;pip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cookiecutter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Create a Django Project Using Cookie Cutter Django
&lt;/h3&gt;

&lt;p&gt;Once Cookie Cutter is installed, you can use it to create a new Django project based on the Cookie Cutter Django template. To do this, run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;cookiecutter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://github.com/pydanny/cookiecutter-django&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will clone the Cookie Cutter Django template from GitHub and prompt you to provide some configuration options for your new Django project, such as the project name, database settings, email settings, etc. You can customize these options according to your project requirements.&lt;/p&gt;

&lt;p&gt;Once you've provided all the necessary configuration options, Cookie Cutter will generate a new Django project for you based on the template, with all the common configurations and best practices already set up. You can then navigate into the newly created project directory and start working on your Django project as you normally would.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Cloning&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'cookiecutter-django'&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;remote:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Counting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;objects:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;550&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;done.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;remote:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Compressing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;objects:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;310&lt;/span&gt;&lt;span class="n"&gt;/310&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;remote:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;550&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;283&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reused&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;479&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;222&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Receiving&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;objects:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;550&lt;/span&gt;&lt;span class="n"&gt;/550&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;127.66&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KiB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KiB/s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;done.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Resolving&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;deltas:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;283&lt;/span&gt;&lt;span class="n"&gt;/283&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;project_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;My&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Awesome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Project&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Reddit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Clone&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;project_slug&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;reddit_clone&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;reddit&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Behold&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;My&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Awesome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Project&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;reddit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;clone.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;author_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Daniel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Roy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Greenfeld&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Daniel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Greenfeld&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;domain_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;example.com&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;myreddit.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;daniel&lt;/span&gt;&lt;span class="nt"&gt;-greenfeld&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;example.com&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pydanny&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;gmail.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;0.0.1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;open_source_license:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MIT&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;BSD&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GPLv3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Apache&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Software&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;License&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;source&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Choose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;username_type:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Choose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;UTC&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;America/Los_Angeles&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;windows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;use_pycharm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;use_docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;Select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;postgresql_version:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Choose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cloud_provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AWS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GCP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;None&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Choose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mail_service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mailgun&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Amazon&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SES&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mailjet&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mandrill&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Postmark&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Sendgrid&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SendinBlue&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SparkPost&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Other&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SMTP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Choose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;use_async&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;use_drf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;Select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;frontend_pipeline:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;None&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Django&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Compressor&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gulp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Webpack&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Choose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;use_celery&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;use_mailhog&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;use_sentry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;use_whitenoise&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;use_heroku&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;Select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ci_tool:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;None&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Travis&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gitlab&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Github&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Choose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;keep_local_envs_in_vcs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;debug&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter the project and take a look around:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;reddit/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ls&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you generate a Django project using Cookie Cutter Django, it automatically creates a virtual environment for your project. This virtual environment is a self-contained Python environment that contains its own Python interpreter and allows you to install project-specific dependencies without affecting the system-wide Python installation.&lt;/p&gt;

&lt;p&gt;The virtual environment is created using a tool called &lt;strong&gt;&lt;code&gt;virtualenv&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;venv&lt;/code&gt;&lt;/strong&gt;, which are built-in Python modules that allow you to create and manage virtual environments. Cookie Cutter Django automatically sets up the virtual environment during the project setup process, so you don't have to worry about manually creating it.&lt;/p&gt;

&lt;p&gt;Once the virtual environment is created, you can activate it using the appropriate command based on your operating system. For example, on Linux or macOS, you can activate the virtual environment by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows, the command would be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;venv\Scripts\activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After activating the virtual environment, you can install the project dependencies using &lt;strong&gt;&lt;code&gt;pip&lt;/code&gt;&lt;/strong&gt;, the Python package manager, without worrying about conflicts with other projects or system-wide dependencies. This ensures that your Django project has a clean and isolated environment for its dependencies.&lt;/p&gt;

&lt;h1&gt;
  
  
  Review of Cookie Cutter Django Features
&lt;/h1&gt;

&lt;p&gt;Now that we have a Django project created using Cookie Cutter Django, let's take a closer look at some of the features that make this template so powerful and time-saving.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Project Structure&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cookie Cutter Django follows a well-organized project structure that adheres to the best practices recommended by the Django community. The template includes separate directories for different components of a Django project, such as apps, static files, templates, media files, etc. This makes it easy to organize your code and keep it maintainable as your project grows.&lt;/p&gt;

&lt;p&gt;Here's an overview of the directory structure of a typical Django project created using Cookie Cutter Django:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
my_project/             # Project root directory
|-- apps/                # Directory for Django apps
|   |-- app1/            # Example app directory
|   |-- app2/            # Example app directory
|-- my_project/          # Project settings directory
|   |-- settings/
|   |   |-- base.py      # Base settings for the project
|   |   |-- local.py
|   |   |-- local.py     # Local settings for development
|   |   |-- production.py # Production settings for deployment
|-- static/              # Directory for static files
|-- templates/           # Directory for HTML templates
|-- media/               # Directory for media files
|-- manage.py            # Django project management script
|-- README.md            # Project documentation
|-- requirements.txt     # Project dependencies
|-- Dockerfile           # Docker configuration for containerization

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

&lt;/div&gt;



&lt;p&gt;The project structure is organized, modular, and follows the Django best practices, making it easy to manage and scale your Django projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Built-in Configuration
&lt;/h3&gt;

&lt;p&gt;Cookie Cutter Django includes a variety of built-in configurations that save you time and effort in setting up common Django features. Some of the notable configurations include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication: Cookie Cutter Django includes a pre-configured authentication system with user registration, login, password reset, and other common authentication functionalities already implemented. This saves you from writing repetitive code for user authentication in every Django project.&lt;/li&gt;
&lt;li&gt;Database Configuration: Cookie Cutter Django comes with default database configurations, including support for popular databases such as PostgreSQL, MySQL, and SQLite. The template also includes optional configurations for using Docker containers for development and production, making it easy to set up a containerized Django project.&lt;/li&gt;
&lt;li&gt;Email Configuration: Email functionality is often required in web applications for sending notifications, password resets, etc. Cookie Cutter Django includes pre-configured email settings using popular email service providers such as Gmail or SendGrid, making it easy to set up email functionality in your Django project.&lt;/li&gt;
&lt;li&gt;Static File Handling: Managing static files, such as CSS, JavaScript, and images, can be tedious. Cookie Cutter Django includes a pre-configured static file handling setup that follows the best practices recommended by the Django community. This includes support for automatic file versioning, which ensures that users get the latest version of static files even when they are cached by their browsers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Modular Apps
&lt;/h3&gt;

&lt;p&gt;Cookie Cutter Django encourages a modular approach to building web applications by providing a directory structure that separates different components of a Django project into individual apps. This promotes code reusability, maintainability, and makes it easy to add or remove functionalities to your project without affecting other parts of the codebase.&lt;/p&gt;

&lt;p&gt;For example, you can create a new app using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;manage.py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;startapp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;my_app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create a new app directory under the &lt;strong&gt;&lt;code&gt;apps&lt;/code&gt;&lt;/strong&gt; directory with the name &lt;strong&gt;&lt;code&gt;my_app&lt;/code&gt;&lt;/strong&gt;, and you can then add your app-specific code, models, views, templates, etc. inside this directory. The app can then be easily plugged into the project by adding it to the project's settings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Customization Options
&lt;/h3&gt;

&lt;p&gt;Cookie Cutter Django provides a range of customization options during project creation, allowing you to tailor your Django project to your specific requirements. Some of the notable customization options include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project Name: You can specify a custom name for your Django project during project creation. This makes it easy to create multiple projects with different names without having to manually change the project name in various files and configurations.&lt;/li&gt;
&lt;li&gt;Database Configuration: Cookie Cutter Django allows you to specify the type of database you want to use for your project during project creation. This includes popular databases such as PostgreSQL, MySQL, SQLite, as well as options for using Docker containers for development and production.&lt;/li&gt;
&lt;li&gt;Email Configuration: You can specify the email service provider and other email settings during project creation, making it easy to set up email functionality in your Django project without having to manually update the settings.&lt;/li&gt;
&lt;li&gt;Optional Features: Cookie Cutter Django includes a range of optional features that you can enable or disable during project creation. For example, you can enable features such as social authentication using popular providers like Google or Facebook, API documentation using Swagger or Django REST Swagger, and automatic deployment to popular platforms like Heroku or AWS. These optional features can be easily toggled on or off during project creation, allowing you to customize your Django project based on your specific requirements.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Testing and Continuous Integration
&lt;/h3&gt;

&lt;p&gt;Cookie Cutter Django promotes best practices in testing and continuous integration by including built-in configurations for automated testing and integration with popular continuous integration services such as Travis CI and CircleCI. The template includes a &lt;strong&gt;&lt;code&gt;tests&lt;/code&gt;&lt;/strong&gt; directory where you can write your tests using Django's built-in testing framework, making it easy to implement a comprehensive testing strategy for your project. Additionally, Cookie Cutter Django includes pre-configured settings for continuous integration, allowing you to easily integrate your Django project with popular CI/CD services for automated testing and deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Development Environment
&lt;/h3&gt;

&lt;p&gt;Cookie Cutter Django provides a development environment that is optimized for productivity and ease of use. The template includes a pre-configured development settings file (&lt;strong&gt;&lt;code&gt;local.py&lt;/code&gt;&lt;/strong&gt;) that includes useful settings for development, such as auto-reloading of the server, debugging settings, and more. This makes it easy to start developing your Django project right away without having to spend time on tedious configurations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation and Deployment
&lt;/h3&gt;

&lt;p&gt;Cookie Cutter Django includes documentation templates in the form of README files, which provide comprehensive documentation on how to set up, configure, and deploy your Django project. The template also includes Docker configuration files, making it easy to containerize your Django project for deployment to production environments. Additionally, the template includes optional configurations for deploying your Django project to popular platforms such as Heroku, AWS, or Google Cloud, making it easy to deploy your project to a production environment with just a few configurations.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;In conclusion, Cookie Cutter Django is a powerful tool that simplifies the process of setting up a Django project by providing a well-organized project structure, built-in configurations for common Django features, modular apps, customization options, testing and continuous integration, a productive development environment, and comprehensive documentation. The template saves you time and effort in setting up a Django project from scratch and promotes best practices in Django development, making it a valuable tool for developers who want to quickly start building Django applications. Whether you are a beginner or an experienced Django developer, Cookie Cutter Django can greatly streamline your Django project setup process and help you build robust and scalable web applications with Django. Give it a try and experience the benefits of a cookie-cutter approach to Django project setup!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Dynamic Programming Algorithms Every Programmer Should Know</title>
      <dc:creator>Rishita Shaw</dc:creator>
      <pubDate>Mon, 17 Apr 2023 06:48:59 +0000</pubDate>
      <link>https://dev.to/rishitashaw/dynamic-programming-algorithms-every-programmer-should-know-3915</link>
      <guid>https://dev.to/rishitashaw/dynamic-programming-algorithms-every-programmer-should-know-3915</guid>
      <description>&lt;p&gt;Dynamic programming is a popular technique in computer science and software engineering that plays a crucial role in competitive programming. It is a method for solving complex problems by breaking them down into smaller subproblems and solving each subproblem only once, storing the solutions to subproblems so that they can be reused when needed. In this blog, we will explore the necessary Dynamic Programming algorithms that every competitive programmer should know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fibonacci Numbers
&lt;/h2&gt;

&lt;p&gt;The Fibonacci sequence is a well-known series of numbers that are defined by the recurrence relation &lt;code&gt;F(n) = F(n-1) + F(n-2)&lt;/code&gt;, with the base case &lt;code&gt;F(0) = 0&lt;/code&gt; and &lt;code&gt;F(1) = 1&lt;/code&gt;. A simple recursive algorithm for calculating Fibonacci numbers would be to use the recurrence relation directly, but this would lead to exponential time complexity. Dynamic programming allows us to solve this problem in linear time by using memoization, which is storing the results of already solved subproblems.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def fibonacci(n, memo):
    if n in memo:
        return memo[n]
    if n &amp;lt;= 1:
        memo[n] = n
    else:
        memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)
    return memo[n]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Longest Common Subsequence
&lt;/h2&gt;

&lt;p&gt;The Longest Common Subsequence (LCS) problem is a classic dynamic programming problem that involves finding the longest subsequence that is common to two given strings. A subsequence of a string is a sequence of characters that appears in the same order in the string, but not necessarily consecutively. The LCS problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def lcs(s1, s2):
    m, n = len(s1), len(s2)
    dp = [[0] * (n+1) for _ in range(m+1)]

    for i in range(1, m+1):
        for j in range(1, n+1):
            if s1[i-1] == s2[j-1]:
                dp[i][j] = dp[i-1][j-1] + 1
            else:
                dp[i][j] = max(dp[i-1][j], dp[i][j-1])

    return dp[m][n]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Knapsack Problem
&lt;/h2&gt;

&lt;p&gt;The Knapsack problem is a classic optimization problem that involves finding the optimal subset of items to pack into a knapsack with a finite capacity, so as to maximize the value of the items packed. This problem can also be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def knapsack(W, wt, val, n):
    dp = [[0] * (W+1) for _ in range(n+1)]

    for i in range(1, n+1):
        for w in range(1, W+1):
            if wt[i-1] &amp;lt;= w:
                dp[i][w] = max(val[i-1] + dp[i-1][w-wt[i-1]], dp[i-1][w])
            else:
                dp[i][w] = dp[i-1][w]

    return dp[n][W]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Edit Distance
&lt;/h2&gt;

&lt;p&gt;The Edit Distance problem involves finding the minimum number of operations required to transform one string into another. The operations allowed are insertion, deletion, and substitution. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def edit_distance(s1, s2):
    m, n = len(s1), len(s2)
    dp = [[0] * (n+1) for _ in range(m+1)]

    for i in range(m+1):
        for j in range(n+1):
            if i == 0:
                dp[i][j] = j
            elif j == 0:
                dp[i][j] = i
            elif s1[i-1] == s2[j-1]:
                dp[i][j] = dp[i-1][j-1]
            else:
                dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])

    return dp[m][n]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Maximum Subarray
&lt;/h2&gt;

&lt;p&gt;The Maximum Subarray problem involves finding the contiguous subarray within a one-dimensional array of numbers that has the largest sum. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def max_subarray(arr):
    n = len(arr)
    max_sum = float('-inf')
    current_sum = 0

    for i in range(n):
        current_sum += arr[i]
        max_sum = max(max_sum, current_sum)
        current_sum = max(current_sum, 0)

    return max_sum

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Coin Change
&lt;/h2&gt;

&lt;p&gt;The Coin Change problem involves finding the number of ways to make change for a given amount of money using a given set of coin denominations. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def coin_change(coins, amount):
    dp = [float('inf')] * (amount+1)
    dp[0] = 0

    for i in range(1, amount+1):
        for coin in coins:
            if coin &amp;lt;= i:
                dp[i] = min(dp[i], dp[i-coin] + 1)

    return dp[amount] if dp[amount] != float('inf') else -1

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Matrix Chain Multiplication
&lt;/h3&gt;

&lt;p&gt;The Matrix Chain Multiplication problem involves finding the optimal way to multiply a series of matrices together. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once. It is a classic example of dynamic programming and is used in many fields, such as computer graphics, numerical analysis, and scientific computing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def matrix_chain_order(p):
    n = len(p) - 1
    m = [[float('inf')] * n for _ in range(n)]
    s = [[0] * n for _ in range(n)]

    for i in range(n):
        m[i][i] = 0

    for l in range(2, n+1):
        for i in range(n-l+1):
            j = i + l - 1
            for k in range(i, j):
                q = m[i][k] + m[k+1][j] + p[i] * p[k+1] * p[j+1]
                if q &amp;lt; m[i][j]:
                    m[i][j] = q
                    s[i][j] = k

    return m, s

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Longest Increasing Subsequence
&lt;/h3&gt;

&lt;p&gt;The Longest Increasing Subsequence (LIS) problem involves finding the longest subsequence of a given sequence that is strictly increasing. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once. The LIS problem has many real-world applications, such as in data compression, pattern recognition, and bioinformatics.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def lis(arr):
    n = len(arr)
    dp = [1] * n

    for i in range(1, n):
        for j in range(i):
            if arr[i] &amp;gt; arr[j]:
                dp[i] = max(dp[i], dp[j] + 1)

    return max(dp)

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Traveling Salesman Problem
&lt;/h3&gt;

&lt;p&gt;The Traveling Salesman Problem (TSP) involves finding the shortest possible route that visits a given set of cities and returns to the starting city. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once. The TSP is a classic problem in computer science and has many real-world applications, such as in logistics, transportation, and network optimization.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def tsp(graph, start):
    n = len(graph)
    visited = (1 &amp;lt;&amp;lt; n) - 1
    memo = {}

    def dfs(node, visited):
        if visited == 0:
            return graph[node][start]

        if (node, visited) in memo:
            return memo[(node, visited)]

        ans = float('inf')
        for i in range(n):
            if visited &amp;amp; (1 &amp;lt;&amp;lt; i):
                ans = min(ans, graph[node][i] + dfs(i, visited ^ (1 &amp;lt;&amp;lt; i)))

        memo[(node, visited)] = ans
        return ans

    return dfs(start, visited)

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  0-1 Integer Programming
&lt;/h3&gt;

&lt;p&gt;The 0-1 Integer Programming problem involves finding the optimal solution for a set of binary decision variables subject to a set of constraints. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once. The 0-1 Integer Programming problem has many real-world applications, such as in resource allocation, scheduling, and production planning.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def knapsack(W, wt, val, n):
    dp = [[0] * (W+1) for _ in range(n+1)]

    for i in range(1, n+1):
        for w in range(1, W+1):
            if wt[i-1] &amp;lt;= w:
                dp[i][w] = max(val[i-1] + dp[i-1][w-wt[i-1]], dp[i-1][w])
            else:
                dp[i][w] = dp[i-1][w]

    return dp[n][W]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Edit Distance with Allowed Operations
&lt;/h2&gt;

&lt;p&gt;The Edit Distance problem can be extended to allow only a certain set of edit operations, such as insertion, deletion, and substitution. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def edit_distance_with_allowed_ops(s1, s2, allowed_ops):
    m, n = len(s1), len(s2)
    dp = [[0] * (n+1) for _ in range(m+1)]

    for i in range(m+1):
        dp[i][0] = i

    for j in range(n+1):
        dp[0][j] = j

    for i in range(1, m+1):
        for j in range(1, n+1):
            if s1[i-1] == s2[j-1]:
                dp[i][j] = dp[i-1][j-1]
            elif allowed_ops.get((s1[i-1], s2[j-1])):
                op_cost = allowed_ops[(s1[i-1], s2[j-1])]
                dp[i][j] = min(dp[i-1][j] + op_cost[0], dp[i][j-1] + op_cost[1], dp[i-1][j-1] + op_cost[2])
            else:
                dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])

    return dp[m][n]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Longest Palindromic Substring
&lt;/h2&gt;

&lt;p&gt;The Longest Palindromic Substring problem involves finding the longest substring of a given string that is a palindrome. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def longest_palindromic_substring(s):
    n = len(s)
    dp = [[False] * n for _ in range(n)]
    max_len = 1
    start = 0

    for i in range(n):
        dp[i][i] = True

    for l in range(2, n+1):
        for i in range(n-l+1):
            j = i + l - 1

            if l == 2:
                dp[i][j] = s[i] == s[j]
            else:
                dp[i][j] = s[i] == s[j] and dp[i+1][j-1]

            if dp[i][j] and l &amp;gt; max_len:
                max_len = l
                start = i

    return s[start:start+max_len]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Maximum Product Subarray
&lt;/h2&gt;

&lt;p&gt;The Maximum Product Subarray problem involves finding the contiguous subarray within a one-dimensional array of numbers that has the largest product. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def max_product_subarray(nums):
    n = len(nums)
    max_prod = nums[0]
    min_prod = nums[0]
    max_so_far = nums[0]

    for i in range(1, n):
        temp = max_prod
        max_prod = max(nums[i], max(nums[i] * max_prod, nums[i] * min_prod))
        min_prod = min(nums[i], min(nums[i] * temp, nums[i] * min_prod))
        max_so_far = max(max_so_far, max_prod)

    return max_so_far

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Largest Rectangle in a Histogram
&lt;/h2&gt;

&lt;p&gt;The Largest Rectangle in a Histogram problem involves finding the largest rectangle that can be formed in a histogram composed of rectangles with different heights. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def largest_rectangle_area(heights):
    n = len(heights)
    left = [0] * n
    right = [0] * n
    stack = []

    for i in range(n):
        while stack and heights[stack[-1]] &amp;gt;= heights[i]:
            stack.pop()

        left[i] = stack[-1] if stack else -1
        stack.append(i)

    stack = []
    for i in range(n-1, -1, -1):
        while stack and heights[stack[-1]] &amp;gt;= heights[i]:
            stack.pop()

        right[i] = stack[-1] if stack else n
        stack.append(i)

    max_area = 0
    for i in range(n):
        max_area = max(max_area, heights[i] * (right[i] - left[i] - 1))

    return max_area

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Egg Dropping Problem
&lt;/h2&gt;

&lt;p&gt;The Egg Dropping Problem involves finding the minimum number of attempts required to find out the highest floor from which an egg can be dropped without breaking. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def egg_drop(n, k):
    dp = [[0] * (k+1) for _ in range(n+1)]

    for i in range(1, n+1):
        dp[i][1] = 1
        dp[i][0] = 0

    for j in range(1, k+1):
        dp[1][j] = j

    for i in range(2, n+1):
        for j in range(2, k+1):
            dp[i][j] = float('inf')
            for x in range(1, j+1):
                res = 1 + max(dp[i-1][x-1], dp[i][j-x])
                dp[i][j] = min(dp[i][j], res)

    return dp[n][k]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Counting Bits
&lt;/h2&gt;

&lt;p&gt;The Counting Bits problem involves finding the number of 1 bits in the binary representation of each number from 0 to n. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def count_bits(n):
    dp = [0] * (n+1)

    for i in range(1, n+1):
        dp[i] = dp[i &amp;gt;&amp;gt; 1] + (i &amp;amp; 1)

    return dp

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Perfect Squares
&lt;/h2&gt;

&lt;p&gt;The Perfect Squares problem involves finding the minimum number of perfect square numbers that add up to a given number. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def num_squares(n):
    dp = [float('inf')] * (n+1)
    dp[0] = 0

    for i in range(1, n+1):
        j = 1
        while j*j &amp;lt;= i:
            dp[i] = min(dp[i], dp[i-j*j] + 1)
            j += 1

    return dp[n]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Partition Equal Subset Sum
&lt;/h2&gt;

&lt;p&gt;The Partition Equal Subset Sum problem involves finding whether a given set can be partitioned into two subsets such that the sum of elements in both subsets is the same. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def can_partition(nums):
    n = len(nums)
    s = sum(nums)

    if s % 2 != 0:
        return False

    target = s // 2
    dp = [False] * (target+1)
    dp[0] = True

    for i in range(1, n+1):
        for j in range(target, nums[i-1]-1, -1):
            dp[j] |= dp[j-nums[i-1]]

    return dp[target]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Longest Common Substring
&lt;/h2&gt;

&lt;p&gt;The Longest Common Substring problem involves finding the longest substring that is common to two given strings. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def longest_common_substring(s1, s2):
    m, n = len(s1), len(s2)
    dp = [[0] * (n+1) for _ in range(m+1)]
    max_len = 0

    for i in range(1, m+1):
        for j in range(1, n+1):
            if s1[i-1] == s2[j-1]:
                dp[i][j] = dp[i-1][j-1] + 1
                max_len = max(max_len, dp[i][j])

    return max_len

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Unique Paths
&lt;/h2&gt;

&lt;p&gt;The Unique Paths problem involves finding the number of unique paths from the top-left corner to the bottom-right corner of a &lt;code&gt;m x n&lt;/code&gt; grid, where you can only move down or right. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def unique_paths(m, n):
    dp = [[0] * n for _ in range(m)]
    dp[0][0] = 1

    for i in range(m):
        for j in range(n):
            if i &amp;gt; 0:
                dp[i][j] += dp[i-1][j]
            if j &amp;gt; 0:
                dp[i][j] += dp[i][j-1]

    return dp[m-1][n-1]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Edit Distance with Allowed Operations
&lt;/h2&gt;

&lt;p&gt;The Edit Distance problem can be extended to allow only a certain set of edit operations, such as insertion, deletion, and substitution. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def edit_distance_with_allowed_ops(s1, s2, allowed_ops):
    m, n = len(s1), len(s2)
    dp = [[0] * (n+1) for _ in range(m+1)]

    for i in range(m+1):
        dp[i][0] = i

    for j in range(n+1):
        dp[0][j] = j

    for i in range(1, m+1):
        for j in range(1, n+1):
            if s1[i-1] == s2[j-1]:
                dp[i][j] = dp[i-1][j-1]
            elif allowed_ops.get((s1[i-1], s2[j-1])):
                op_cost = allowed_ops[(s1[i-1], s2[j-1])]
                dp[i][j] = min(dp[i-1][j] + op_cost[0], dp[i][j-1] + op_cost[1], dp[i-1][j-1] + op_cost[2])
            else:
                dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])

    return dp[m][n]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Subset Sum Problem
&lt;/h2&gt;

&lt;p&gt;The Subset Sum problem involves finding whether there exists a subset of a given set of integers that adds up to a given sum. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def subset_sum(nums, target):
    n = len(nums)
    dp = [[False] * (target+1) for _ in range(n+1)]

    for i in range(n+1):
        dp[i][0] = True

    for i in range(1, n+1):
        for j in range(1, target+1):
            if nums[i-1] &amp;lt;= j:
                dp[i][j] = dp[i-1][j-nums[i-1]] or dp[i-1][j]
            else:
                dp[i][j] = dp[i-1][j]

    return dp[n][target]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Longest Palindromic Substring
&lt;/h2&gt;

&lt;p&gt;The Longest Palindromic Substring problem involves finding the longest substring of a given string that is a palindrome. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def longest_palindromic_substring(s):
    n = len(s)
    dp = [[False] * n for _ in range(n)]
    max_len = 1
    start = 0

    for i in range(n):
        dp[i][i] = True

    for l in range(2, n+1):
        for i in range(n-l+1):
            j = i + l - 1

            if l == 2:
                dp[i][j] = s[i] == s[j]
            else:
                dp[i][j] = s[i] == s[j] and dp[i+1][j-1]

            if dp[i][j] and l &amp;gt; max_len:
                max_len = l
                start = i

    return s[start:start+max_len]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Longest Palindromic Subsequence
&lt;/h2&gt;

&lt;p&gt;The Longest Palindromic Subsequence problem involves finding the longest subsequence of a given string that is a palindrome. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def longest_palindromic_subsequence(s):
    n = len(s)
    dp = [[0] * n for _ in range(n)]

    for i in range(n):
        dp[i][i] = 1

    for l in range(2, n+1):
        for i in range(n-l+1):
            j = i + l - 1

            if s[i] == s[j]:
                dp[i][j] = dp[i+1][j-1] + 2
            else:
                dp[i][j] = max(dp[i+1][j], dp[i][j-1])

    return dp[0][n-1]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Maximum Product Subarray
&lt;/h2&gt;

&lt;p&gt;The Maximum Product Subarray problem involves finding the contiguous subarray within a one-dimensional array of numbers that has the largest product. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def max_product_subarray(nums):
    n = len(nums)
    max_prod = nums[0]
    min_prod = nums[0]
    max_so_far = nums[0]

    for i in range(1, n):
        temp = max_prod
        max_prod = max(nums[i], max(nums[i] * max_prod, nums[i] * min_prod))
        min_prod = min(nums[i], min(nums[i] * temp, nums[i] * min_prod))
        max_so_far = max(max_so_far, max_prod)

    return max_so_far

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Largest Rectangle in a Histogram
&lt;/h2&gt;

&lt;p&gt;The Largest Rectangle in a Histogram problem involves finding the largest rectangle that can be formed in a histogram composed of rectangles with different heights. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def largest_rectangle_area(heights):
    n = len(heights)
    left = [0] * n
    right = [0] * n
    stack = []

    for i in range(n):
        while stack and heights[stack[-1]] &amp;gt;= heights[i]:
            stack.pop()

        left[i] = stack[-1] if stack else -1
        stack.append(i)

    stack = []
    for i in range(n-1, -1, -1):
        while stack and heights[stack[-1]] &amp;gt;= heights[i]:
            stack.pop()

        right[i] = stack[-1] if stack else n
        stack.append(i)

    max_area = 0
    for i in range(n):
        max_area = max(max_area, heights[i] * (right[i] - left[i] - 1))

    return max_area

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Egg Dropping Problem
&lt;/h2&gt;

&lt;p&gt;The Egg Dropping Problem involves finding the minimum number of attempts required to find out the highest floor from which an egg can be dropped without breaking. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def egg_drop(n, k):
    dp = [[0] * (k+1) for _ in range(n+1)]

    for i in range(1, n+1):
        dp[i][1] = 1
        dp[i][0] = 0

    for j in range(1, k+1):
        dp[1][j] = j

    for i in range(2, n+1):
        for j in range(2, k+1):
            dp[i][j] = float('inf')
            for x in range(1, j+1):
                res = 1 + max(dp[i-1][x-1], dp[i][j-x])
                dp[i][j] = min(dp[i][j], res)

    return dp[n][k]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Counting Bits
&lt;/h2&gt;

&lt;p&gt;The Counting Bits problem involves finding the number of 1 bits in the binary representation of each number from 0 to n. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def count_bits(n):
    dp = [0] * (n+1)

    for i in range(1, n+1):
        dp[i] = dp[i &amp;gt;&amp;gt; 1] + (i &amp;amp; 1)

    return dp

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Perfect Squares
&lt;/h2&gt;

&lt;p&gt;The Perfect Squares problem involves finding the minimum number of perfect square numbers that add up to a given number. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def num_squares(n):
    dp = [float('inf')] * (n+1)
    dp[0] = 0

    for i in range(1, n+1):
        j = 1
        while j*j &amp;lt;= i:
            dp[i] = min(dp[i], dp[i-j*j] + 1)
            j += 1

    return dp[n]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Partition Equal Subset Sum
&lt;/h2&gt;

&lt;p&gt;The Partition Equal Subset Sum problem involves finding whether a given set can be partitioned into two subsets such that the sum of elements in both subsets is the same. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def can_partition(nums):
    n = len(nums)
    s = sum(nums)

    if s % 2 != 0:
        return False

    target = s // 2
    dp = [False] * (target+1)
    dp[0] = True

    for i in range(1, n+1):
        for j in range(target, nums[i-1]-1, -1):
            dp[j] |= dp[j-nums[i-1]]

    return dp[target]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Unique Paths
&lt;/h2&gt;

&lt;p&gt;The Unique Paths problem involves finding the number of unique paths from the top-left corner to the bottom-right corner of a &lt;code&gt;m x n&lt;/code&gt; grid, where you can only move down or right. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def unique_paths(m, n):
    dp = [[0] * n for _ in range(m)]
    dp[0][0] = 1

    for i in range(m):
        for j in range(n):
            if i &amp;gt; 0:
                dp[i][j] += dp[i-1][j]
            if j &amp;gt; 0:
                dp[i][j] += dp[i][j-1]

    return dp[m-1][n-1]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Unique Paths II
&lt;/h2&gt;

&lt;p&gt;The Unique Paths II problem is a variation of the Unique Paths problem where some cells in the grid are blocked and cannot be walked on. The problem involves finding the number of unique paths from the top-left corner to the bottom-right corner of the grid, where you can only move down or right and cannot walk on blocked cells. This problem can be solved using dynamic programming by breaking it down into smaller subproblems and solving each subproblem only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def unique_paths_with_obstacles(obstacle_grid):
    m, n = len(obstacle_grid), len(obstacle_grid[0])
    dp = [[0] * n for _ in range(m)]

    if obstacle_grid[0][0] == 0:
        dp[0][0] = 1

    for i in range(m):
        for j in range(n):
            if obstacle_grid[i][j] == 0:
                if i &amp;gt; 0:
                    dp[i][j] += dp[i-1][j]
                if j &amp;gt; 0:
                    dp[i][j] += dp[i][j-1]

    return dp[m-1][n-1]

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

&lt;/div&gt;



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

&lt;p&gt;Dynamic Programming is a powerful technique that is essential for solving many complex problems in competitive programming. The algorithms discussed in this blog are just a few of the many problems that can be solved using dynamic programming. By mastering these algorithms and understanding the underlying principles, you can become a better competitive programmer and solve more challenging problems.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>learning</category>
      <category>python</category>
    </item>
    <item>
      <title>Docker Unleashed: Mastering Commands, Basics, Learning Resources, and Career Prospects</title>
      <dc:creator>Rishita Shaw</dc:creator>
      <pubDate>Fri, 14 Apr 2023 08:52:29 +0000</pubDate>
      <link>https://dev.to/rishitashaw/docker-unleashed-commands-basics-learning-careers-2gnk</link>
      <guid>https://dev.to/rishitashaw/docker-unleashed-commands-basics-learning-careers-2gnk</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR (Too Long; Didn't Read) summary for the Docker blog:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Docker Unleashed: A Comprehensive Guide to Docker Commands, Basics, Resources, Learning Curve, Career Prospects, and Recommended Learning Resources. Learn about Docker commands, understand Docker basics, explore learning resources, and discover career prospects in the tech industry. Recommended YouTube channels and Udemy courses included.&lt;/p&gt;
&lt;/blockquote&gt;

&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%2Fxtvky7uyful82n5b6t4y.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%2Fxtvky7uyful82n5b6t4y.png" alt="docker logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this blog, we will delve into various aspects of Docker, including Docker commands, basics, resources, learning curve, career prospects, and recommended learning resources. Whether you are new to Docker or already have some experience, this guide aims to provide you with a comprehensive overview of Docker and its key concepts, as well as valuable insights into its practical usage and career prospects in the tech industry.&lt;/p&gt;

&lt;p&gt;We will cover essential Docker commands and their usage, understand the basics of Docker, including images, containers, volumes, and networks, explore key resources for learning Docker, discuss the learning curve and prerequisites for mastering Docker, and explore the career prospects of Docker professionals. Additionally, we will recommend popular YouTube channels and Udemy courses that can help you learn Docker effectively.&lt;/p&gt;

&lt;p&gt;So, if you're curious about Docker and want to learn more, let's dive into the world of Docker and uncover its vast potential for simplifying application development, deployment, and management.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Docker has emerged as one of the most popular containerization platforms for deploying and managing applications in modern software development. Docker provides a way to package applications and their dependencies into lightweight, portable containers that can run consistently across different environments, such as development, testing, and production, without worrying about differences in underlying infrastructure. In this blog, we will provide an overview of Docker, including its commands, basics, and resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Docker Prerequisites:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before diving into learning Docker, it's important to have a solid understanding of some basic prerequisites. These prerequisites will help you grasp the concepts and tools used in Docker effectively. Here are some key prerequisites for learning Docker:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Operating System&lt;/em&gt;&lt;/strong&gt;: Familiarity with command-line interfaces (CLI) and basic system administration concepts is essential for working with Docker. Docker runs on various operating systems, including Linux, Windows, and macOS, but the majority of Docker resources and tutorials are focused on Linux-based systems. Therefore, having some prior experience with a Linux-based operating system, such as Ubuntu, CentOS, or Debian, can be beneficial.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Containerization Concepts&lt;/em&gt;&lt;/strong&gt;: Understanding the concepts of containerization is crucial for learning Docker. Familiarize yourself with containerization technologies and concepts, such as process isolation, namespaces, cgroups, and filesystem layers. Having prior knowledge of other containerization technologies, such as LXC, can provide a good foundation for understanding Docker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Virtualization&lt;/em&gt;&lt;/strong&gt;: Basic knowledge of virtualization concepts can help understand Docker's containerization approach. While Docker uses lightweight containerization, which is different from traditional virtualization, having prior knowledge of virtualization technologies like VMware or VirtualBox can help you understand the differences between containers and virtual machines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Networking&lt;/em&gt;&lt;/strong&gt;: Understanding networking concepts, such as IP addressing, ports, and protocols, is important for Docker. Docker provides its networking capabilities, including creating virtual networks, exposing container ports, and connecting containers to different networks. Having a basic understanding of networking concepts will enable you to effectively manage container networking in Docker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Command-Line Interface (CLI):&lt;/em&gt;&lt;/strong&gt; Docker primarily uses a command-line interface (CLI) for managing containers, images, volumes, and networks. Familiarity with the command-line interface and basic command-line operations is essential for working with Docker. Learning basic Linux commands, such as navigating directories, creating files, and managing permissions, can be helpful.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Scripting and Automation&lt;/em&gt;&lt;/strong&gt;: Docker can be automated using scripts and configuration files, such as Dockerfiles and Docker Compose files. Having experience with scripting and automation tools, such as Bash, Python, or YAML, can help you understand and create Docker configurations more effectively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;DevOps Concepts&lt;/em&gt;&lt;/strong&gt;: Docker is widely used in DevOps practices, where containers are used to create reproducible and portable environments for development, testing, and production deployments. Understanding basic DevOps concepts, such as continuous integration (CI), continuous deployment (CD), and infrastructure as code (IaC), can provide a broader context for learning Docker in the context of modern software development practices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Basic Docker Terminology&lt;/em&gt;&lt;/strong&gt;: Familiarize yourself with basic Docker terminologies, such as images, containers, volumes, networks, Dockerfiles, and Docker Compose. Understanding these terms and their relationships will help you effectively communicate and understand Docker-related concepts and commands.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By having a solid understanding of these prerequisites, you will be better equipped to learn Docker effectively and make the most of its containerization capabilities. While Docker has a relatively easy learning curve, having prior knowledge of these prerequisites can greatly accelerate your learning process and enable you to effectively leverage Docker for modern application development and deployment. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Docker Learning Curve:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Docker has a relatively gentle learning curve, especially if you have experience with containerization concepts and are familiar with command-line interfaces (CLI). Here's an overview of the typical learning curve for Docker:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Understanding Docker Concepts:&lt;/em&gt;&lt;/strong&gt; Docker introduces some new concepts, such as images, containers, volumes, networks, Dockerfiles, and Docker Compose, which may be unfamiliar to beginners. It's essential to understand these concepts and how they relate to each other in the Docker ecosystem. Once you grasp the core concepts, you'll have a solid foundation for working with Docker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Installing Docker:&lt;/em&gt;&lt;/strong&gt; Docker installation is straightforward, but it requires some system-level configurations, such as installing Docker Engine, setting up Docker daemon, and managing Docker user permissions. Familiarize yourself with the installation process for your specific operating system, and ensure Docker is running correctly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Commands:&lt;/em&gt;&lt;/strong&gt; Docker provides a rich set of commands for managing containers, images, volumes, and networks. Learning the basic Docker commands and their usage is critical for working with Docker effectively. Start with commonly used commands, such as &lt;strong&gt;&lt;code&gt;docker run&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;docker build&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;docker pull&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;docker push&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;docker volume&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;docker network&lt;/code&gt;&lt;/strong&gt;, and gradually explore more advanced commands as you become comfortable.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Working with Docker Images and Containers:&lt;/strong&gt;&lt;/em&gt; Docker images are the building blocks of Docker containers. Learn how to create Docker images using Dockerfiles, how to run containers from images, and how to manage container lifecycles, including starting, stopping, restarting, and removing containers. Familiarize yourself with the Docker container lifecycle and various container-related commands, such as &lt;strong&gt;&lt;code&gt;docker create&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;docker start&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;docker stop&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;docker restart&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;docker rm&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;docker logs&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Container Networking and Volumes&lt;/em&gt;&lt;/strong&gt;: Docker provides powerful networking and volume management features. Learn how to create and manage Docker networks for communication between containers, how to expose container ports, and how to use Docker volumes for persistent data storage. Understand the different types of Docker networks, such as bridge, host, and overlay networks, and how to create and manage them using Docker commands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Compose&lt;/em&gt;&lt;/strong&gt;: Docker Compose is a powerful tool for defining and running multi-container applications. Learn how to create Docker Compose files, define services, networks, and volumes in a Compose file, and how use &lt;strong&gt;&lt;code&gt;docker-compose&lt;/code&gt;&lt;/strong&gt; commands for managing multi-container applications. Docker Compose allows you to define complex application architectures in a declarative way, making it easier to manage and scale multi-container applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Security&lt;/em&gt;&lt;/strong&gt;: Understanding Docker security best practices is essential for ensuring the security and isolation of containerized applications. Learn about Docker security features, such as container isolation, user namespaces, Docker image vulnerabilities scanning, and Docker security profiles. Familiarize yourself with Docker security best practices, such as running containers with minimal privileges, securing Docker daemon, and protecting Docker images and containers from potential security threats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Troubleshooting and Debugging:&lt;/em&gt;&lt;/strong&gt; Docker provides various troubleshooting and debugging tools for identifying and resolving issues with containers and images. Learn how to use Docker logs, &lt;strong&gt;&lt;code&gt;docker exec&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;docker inspect&lt;/code&gt;&lt;/strong&gt; commands for troubleshooting and debugging Docker containers. Familiarize yourself with Docker error messages, common issues, and their solutions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Advanced Docker Features:&lt;/em&gt;&lt;/strong&gt; Docker provides advanced features, such as Docker Swarm for creating and managing swarm clusters, Docker secrets for securely managing sensitive data in containers, and Docker image caching for optimizing image building process. Once you have a solid understanding of the basic Docker concepts and commands, you can gradually explore these advanced features as per your requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Ecosystem:&lt;/em&gt;&lt;/strong&gt; Docker has a vast ecosystem with various tools, services, and platforms that complement Docker, such as Docker Hub for sharing and discovering Docker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Orchestration:&lt;/em&gt;&lt;/strong&gt; Docker allows you to manage and scale containerized applications across multiple nodes using Docker Swarm, Kubernetes, or other container orchestration tools. Learning Docker orchestration concepts, such as service discovery, load balancing, rolling updates, and scaling, can help you deploy and manage containerized applications in a production environment effectively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Registry&lt;/em&gt;&lt;/strong&gt;: Docker images are stored in Docker registries, which are like centralized repositories for sharing and distributing Docker images. Docker Hub is the default public Docker registry, but you can also set up private Docker registries for securely storing and sharing Docker images within your organization. Familiarize yourself with Docker registry concepts, such as pushing and pulling Docker images, managing Docker image tags, and securing Docker registries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Filesystem and Storage&lt;/em&gt;&lt;/strong&gt;: Docker uses a layered filesystem to store Docker images and container filesystems. Understanding Docker filesystem and storage concepts, such as image layers, container layers, and copy-on-write, is essential for efficient image building and container storage management. Learn about Docker storage drivers, such as overlayfs, aufs, and devicemapper, and how to configure and manage Docker storage settings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Security Best Practices&lt;/em&gt;&lt;/strong&gt;: Docker security is a critical aspect of containerization. Familiarize yourself with Docker security best practices, such as running containers with minimal privileges, securing Docker daemon, and protecting Docker images and containers from potential security threats. Stay updated with Docker security updates and patches to ensure a secure Docker environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Continuous Integration and Deployment with Docker&lt;/em&gt;&lt;/strong&gt;: Docker is often used in conjunction with continuous integration and deployment (CI/CD) pipelines to automate the building, testing, and deployment of containerized applications. Learn how to integrate Docker into your CI/CD workflows using tools like Jenkins, Travis CI, GitLab CI/CD, or other popular CI/CD tools. Understand how Docker can be used to create reproducible and consistent build environments, speeding up the development and deployment process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;_Troubleshooting and Debugging: _&lt;/strong&gt;Docker containers may encounter issues during runtime, such as networking problems, resource constraints, configuration errors, and other runtime errors. Familiarize yourself with common Docker troubleshooting and debugging techniques, such as using Docker logs, &lt;strong&gt;&lt;code&gt;docker exec&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;docker inspect&lt;/code&gt;&lt;/strong&gt;, and other diagnostic commands. Learn how to diagnose and resolve common Docker issues and errors to keep your containerized applications running smoothly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Community and Resources:&lt;/em&gt;&lt;/strong&gt; Docker has a vibrant and active community of developers, users, and contributors. Take advantage of Docker documentation, online forums, blogs, tutorials, and other resources to expand your Docker knowledge. Participate in Docker communities, attend Docker meetups, and join Docker-related discussions to learn from others, share your knowledge, and stay updated with the latest Docker trends and practices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Practical Experience:&lt;/em&gt;&lt;/strong&gt; Finally, the best way to learn Docker is through practical experience. Experiment with Docker commands, create your Docker images, run containers, and build multi-container applications using Docker Compose. Practice troubleshooting and debugging Docker issues, and work on real-world projects that involve Docker. The more you use Docker in real-world scenarios, the more confident and proficient you'll become in working with Docker.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Docker Commands:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Docker provides a rich set of commands that can be used to interact with containers and manage containerized applications. Here are some commonly used Docker commands:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker run&lt;/code&gt;&lt;/strong&gt;: This command is used to create and start a new container from a Docker image. It allows you to specify various options, such as the name of the container, the image to use, networking settings, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker stop&lt;/code&gt;&lt;/strong&gt;: This command is used to stop a running container. It sends a SIGTERM signal to the container, allowing it to perform a graceful shutdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker start&lt;/code&gt;&lt;/strong&gt;: This command is used to start a stopped container. It resumes the container from the state it was in when it was stopped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker rm&lt;/code&gt;&lt;/strong&gt;: This command is used to remove a stopped container. It can be used with the -f option to forcefully remove a running container.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;docker ps&lt;/code&gt;: This command is used to list all the running containers on a Docker host. It provides information such as the container ID, name, image, status, and more.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;docker images&lt;/code&gt;: This command is used to list all the Docker images that are available on a Docker host. It provides information such as the image ID, name, and size.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker pull&lt;/code&gt;&lt;/strong&gt;: This command is used to download a Docker image from a Docker registry, such as Docker Hub, to the local Docker host.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker push&lt;/code&gt;&lt;/strong&gt;: This command is used to push a Docker image to a Docker registry, making it available for others to download and run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker exec&lt;/code&gt;&lt;/strong&gt;: This command allows you to execute commands inside a running container. You can use this command to launch additional processes inside a container, run shell commands for troubleshooting, or perform administrative tasks within a container. You can specify the container name or ID, the command to be executed, and additional options such as attaching to the container's terminal or running the command in detached mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker network&lt;/code&gt;&lt;/strong&gt;: This command allows you to create and manage Docker networks. Docker networks provide isolation and communication between containers, allowing you to define custom network topologies for your applications. You can use this command to create overlay networks for multi-host communication, attach containers to specific networks, and define network settings such as subnet, gateway, and DNS resolution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker volume&lt;/code&gt;&lt;/strong&gt;: This command enables you to create and manage Docker volumes. Docker volumes are used to persist data generated by containers, ensuring that data remains available even if containers are stopped or removed. You can use this command to create named volumes or bind mounts, manage volume drivers, and inspect volume details such as mount point and usage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker commit&lt;/code&gt;&lt;/strong&gt;: This command allows you to create a new Docker image from a running container. You can use this command to capture the state of a container at a specific point in time, including any changes made to the container's file system, configuration, and installed software. This can be useful for creating custom images for specific application requirements or for sharing container configurations with others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker build&lt;/code&gt;&lt;/strong&gt;: This command allows you to build Docker images from Dockerfiles. Dockerfiles are text files that contain instructions for building Docker images, including the base image, application code, dependencies, and configuration settings. You can use this command to automate the process of building Docker images, ensuring consistent and reproducible image creation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker export&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;docker import&lt;/code&gt;&lt;/strong&gt;: These commands allow you to export and import Docker containers as tarball files. You can use these commands to backup and restore container configurations, including the file system, metadata, and settings. This can be useful for migrating containers to different hosts, sharing container configurations with others, or creating backups of container data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker stats&lt;/code&gt;&lt;/strong&gt;: This command allows you to view real-time resource usage statistics for running containers. You can use this command to monitor container CPU usage, memory consumption, and network I/O, helping you to identify performance bottlenecks, optimize resource allocation, and troubleshoot container performance issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker logs&lt;/code&gt;&lt;/strong&gt;: This command allows you to view the logs generated by a container. You can use this command to inspect container logs for debugging, troubleshooting, or monitoring purposes. You can specify options such as timestamps, log levels, and tailing the logs in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker cp&lt;/code&gt;&lt;/strong&gt;: This command allows you to copy files and directories between the host and containers or between containers. You can use this command to transfer files in and out of containers, create backup copies of container data, or share files between containers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker prune&lt;/code&gt;&lt;/strong&gt;: This command allows you to clean up unused Docker resources such as containers, images, volumes, and networks. You can use this command to reclaim disk space, remove unused resources, and keep your Docker environment tidy and efficient.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are just a few examples of the advanced Docker commands available. Docker provides a rich set of commands that can help you optimize your containerization workflows, manage Docker resources, troubleshoot issues, and gain deeper insights into container performance and behavior. As you gain more experience with Docker, these advanced commands can become powerful tools in your Docker toolbox.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Docker Basics:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Docker is based on the concept of containerization, which allows applications and their dependencies to be packaged into lightweight, portable containers that can run consistently across different environments. Here are some basic concepts in Docker:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Image&lt;/em&gt;&lt;/strong&gt;: A Docker image is a lightweight, portable, and self-sufficient package that contains everything needed to run a piece of software, including the code, runtime, system tools, and libraries. Docker images are created from a set of instructions called a Dockerfile, which defines the base image, software dependencies, configuration settings, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Container&lt;/em&gt;&lt;/strong&gt;: A Docker container is a running instance of a Docker image. It is isolated from the host system and other containers, and it contains all the necessary components to run the software, including the application code, runtime, system tools, and libraries. Docker containers are lightweight, fast, and easy to manage, making them ideal for deploying and scaling applications in a distributed environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Registry&lt;/em&gt;&lt;/strong&gt;: A Docker registry is a centralized repository for Docker images. Docker Hub is the default public registry provided by Docker, which contains thousands of pre-built images that can be easily downloaded and used. You can also create and use your own private Docker registry to store and share custom images within your organization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Dockerfile&lt;/em&gt;&lt;/strong&gt;: A Dockerfile is a text file that contains instructions for building a Docker image. It defines the base image, software dependencies, configuration settings, and more. Dockerfiles are used to automate the process of building Docker images, allowing you to create consistent and reproducible images across different environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Networking&lt;/em&gt;&lt;/strong&gt;: Docker provides built-in networking capabilities that allow containers to communicate with each other and with the host system. Docker creates a virtual network for each container, enabling containers to have their own IP address and network namespace. Docker also supports advanced networking features, such as creating custom networks, connecting containers to multiple networks, and exposing container ports to the host system or to other containers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Volumes&lt;/em&gt;&lt;/strong&gt;: Docker volumes are used to persist data generated by containers or to share data between containers and the host system. Volumes are separate from the container file system and can be managed independently, allowing data to be stored persistently even if the container is stopped or deleted. Docker volumes are ideal for handling data that needs to be preserved across container restarts or for sharing data between containers in a distributed application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Compose&lt;/em&gt;&lt;/strong&gt;: Docker Compose is a tool that allows you to define and run multi-container Docker applications using a single YAML file. It provides a simple way to define the services, networks, volumes, and configurations for a multi-container application, making it easy to manage complex Docker deployments. Docker Compose is commonly used for local development, testing, and staging environments, where multiple containers need to be orchestrated together.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Swarm&lt;/em&gt;&lt;/strong&gt;: Docker Swarm is a native container orchestration solution provided by Docker for creating and managing swarm clusters. A swarm is a group of Docker nodes that work together as a single virtual Docker host, allowing you to deploy and manage services across multiple nodes. Docker Swarm provides features such as service scaling, rolling updates, load balancing, and container placement strategies, making it suitable for production deployments of containerized applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Security&lt;/em&gt;&lt;/strong&gt;: Docker provides various security features to ensure that containerized applications are isolated from the host system and other containers. Docker uses containerization technologies, such as namespaces, cgroups, and seccomp, to provide process isolation and resource constraints for containers. Docker also supports user-defined security profiles and allows you to configure container security settings, such as read-only file systems, restricted capabilities, and network access controls. Additionally, Docker provides features for image signing and verification, allowing you to ensure the integrity and authenticity of Docker images.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Docker Resources:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Docker has a rich ecosystem of resources that can help you learn and master Docker. Here are some popular resources for getting started with Docker:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Documentation&lt;/em&gt;&lt;/strong&gt;: Docker provides comprehensive documentation that covers all aspects of Docker, from installation and configuration to advanced features and best practices. The official Docker documentation is regularly updated and provides tutorials, guides, and references for using Docker in different scenarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Hub&lt;/em&gt;&lt;/strong&gt;: Docker Hub is the default public registry provided by Docker, which contains thousands of pre-built Docker images that can be easily downloaded and used. Docker Hub also provides documentation, tutorials, and examples for using Docker images in different applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Community Forums:&lt;/em&gt;&lt;/strong&gt; Docker has an active community of users and developers who actively participate in the Docker community forums. The forums are a great place to ask questions, seek help, and share knowledge about Docker-related topics. Docker also has a dedicated forum for Docker Swarm, where you can find resources and discuss topics related to Docker Swarm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Blogs and Tutorials&lt;/em&gt;&lt;/strong&gt;: Docker has an official blog that regularly publishes articles, tutorials, and use cases related to Docker. There are also many other blogs, websites, and online platforms that provide tutorials, guides, and examples for learning Docker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Training and Certification&lt;/em&gt;&lt;/strong&gt;: Docker offers official training and certification programs that can help you deepen your understanding of Docker and demonstrate your Docker skills. Docker certifications are recognized in the industry and can boost your career prospects as a Docker professional.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;YouTube Channels:&lt;/em&gt;&lt;/strong&gt;

&lt;ol&gt;
&lt;li&gt;Docker: The official Docker YouTube channel provides a wealth of tutorials, demos, and webinars on various Docker topics, ranging from Docker basics to advanced Docker usage, containerization best practices, and Docker in production.&lt;/li&gt;
&lt;li&gt;TechWorld with Nana: This YouTube channel offers a series of Docker tutorials covering different aspects of Docker, including Docker basics, Docker networking, Docker volumes, Docker Compose, Docker Swarm, and more. The tutorials are well-explained with practical examples and demonstrations.&lt;/li&gt;
&lt;li&gt;Docker Captain's YouTube Channel: This YouTube channel is run by Docker Captains, who are Docker experts recognized by Docker Inc. The channel offers a wide range of Docker-related content, including Docker tutorials, use cases, and real-world scenarios.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;em&gt;Udemy Courses:&lt;/em&gt;&lt;/strong&gt;

&lt;ol&gt;
&lt;li&gt;"Docker Mastery: The Complete Toolset from a Docker Captain" by Bret Fisher: This highly-rated Udemy course covers Docker from the ground up, starting with Docker basics and gradually progressing to advanced topics such as Docker Compose, Docker Swarm, Docker networking, and Docker in production. It also includes practical exercises and real-world examples to reinforce learning.&lt;/li&gt;
&lt;li&gt;"Docker and Kubernetes: The Complete Guide" by Stephen Grider: This comprehensive Udemy course covers both Docker and Kubernetes, starting with Docker basics and then diving into Kubernetes concepts, architecture, and usage. It includes hands-on exercises and projects to help you gain practical experience with both Docker and Kubernetes.&lt;/li&gt;
&lt;li&gt;"Docker for Absolute Beginners: Learn Docker from Scratch!" by Mumshad Mannambeth: This beginner-friendly Udemy course is designed for those who have little to no prior experience with Docker. It covers Docker basics, Docker images, Docker containers, Docker networking, Docker volumes, and Docker Compose, with practical examples and demonstrations.&lt;/li&gt;
&lt;li&gt;"Docker Crash Course for Busy DevOps and Developers" by Troy Hunt: This short and concise Udemy course provides a quick introduction to Docker, covering Docker basics, Docker images, Docker containers, Docker networking, and Docker Compose, with a focus on practical usage for DevOps and developers.&lt;/li&gt;
&lt;li&gt;"Docker Technologies for DevOps and Developers" by Udemy: This course provides a comprehensive overview of Docker technologies, including Docker basics, Docker networking, Docker volumes, Docker Compose, Docker Swarm, and Docker in production. It also covers Docker security, Docker troubleshooting, and best practices for using Docker in a DevOps environment.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;Note: It's always recommended to read the course reviews, check the ratings, and verify the credentials of the instructors before enrolling in any online course to ensure its quality and relevance to your learning goals.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What’s Next?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;After gaining proficiency in Docker, there are several complementary technologies and tools that you can consider learning to expand your containerization and DevOps skillset. Here are some suggestions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Kubernetes (K8s)&lt;/em&gt;&lt;/strong&gt;: Kubernetes is a popular container orchestration platform that automates the deployment, scaling, and management of containerized applications. Docker and Kubernetes are often used together to create scalable and resilient containerized applications. Learning Kubernetes can help you understand advanced concepts such as pods, services, deployments, and volumes, and how they work in conjunction with Docker containers. Kubernetes has become a crucial skill in the DevOps world, and mastering it can open up numerous job opportunities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Swarm&lt;/em&gt;&lt;/strong&gt;: Docker Swarm is Docker's built-in container orchestration solution. It allows you to create and manage a swarm of Docker nodes, forming a Docker swarm cluster for deploying and scaling containerized applications. If you are already familiar with Docker, learning Docker Swarm can be a natural next step to understand how Docker provides native container orchestration capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Continuous Integration and Continuous Deployment (CI/CD)&lt;/em&gt;&lt;/strong&gt;: CI/CD is a set of DevOps practices that involve automatically building, testing, and deploying software changes to production environments. Docker can be used as a fundamental building block in CI/CD pipelines, enabling consistent and reproducible builds of containerized applications. Learning CI/CD tools and practices, such as Jenkins, GitLab CI/CD, or Travis CI, can help you integrate Docker into a complete end-to-end DevOps workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Infrastructure as Code (IaC)&lt;/em&gt;&lt;/strong&gt;: IaC is a practice of defining and provisioning infrastructure resources, such as virtual machines, networks, and storage, using code. Docker containers can be seen as a form of infrastructure, and learning IaC tools like Terraform, AWS CloudFormation, or Azure Resource Manager can complement your Docker skills by allowing you to define and manage Docker infrastructure resources in a programmatic and version-controlled manner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Container Security&lt;/em&gt;&lt;/strong&gt;: Container security is an essential aspect of containerization. Learning about container security best practices, such as image vulnerability scanning, container runtime security, container network security, and container access controls, can help you secure your Docker-based applications and infrastructure. Tools like Docker Bench Security, Clair, and Aqua Security can be valuable additions to your Docker toolkit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Cloud Platforms&lt;/em&gt;&lt;/strong&gt;: Cloud platforms, such as Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP), are widely used for deploying and managing containerized applications. Learning how to deploy Docker containers on cloud platforms can help you understand how Docker fits into a cloud-native architecture and how to leverage cloud-specific features, such as container orchestration services (e.g., Amazon ECS, Azure Kubernetes Service, Google Kubernetes Engine), container registry services (e.g., Amazon ECR, Azure Container Registry, Google Container Registry), and cloud-based networking and storage options.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Monitoring and Logging&lt;/em&gt;&lt;/strong&gt;: Monitoring and logging are crucial for understanding the performance, availability, and behavior of containerized applications. Learning about monitoring and logging tools, such as Prometheus, Grafana, ELK stack (Elasticsearch, Logstash, Kibana), and Docker-specific logging drivers (e.g., Docker logs, Fluentd, Syslog) can help you effectively monitor and troubleshoot Docker containers and applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Docker Enterprise Edition (EE)&lt;/em&gt;&lt;/strong&gt;: Docker Enterprise Edition is the commercial version of Docker that includes additional features, support, and security for enterprise-grade containerization. Learning Docker EE can provide you with an in-depth understanding of Docker's advanced features, such as Docker Trusted Registry, Docker Universal Control Plane, and Docker Security Scanning, which are designed for large-scale and production-grade container deployments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Other Containerization Technologies&lt;/em&gt;&lt;/strong&gt;: While Docker is the most popular containerization technology, there are other containerization platforms and run&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Docker Career Prospects:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Docker has gained significant popularity in the field of software development and DevOps, and it offers promising career prospects for professionals who are skilled in Docker. Here are some career prospects of Docker:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Containerization Specialist&lt;/em&gt;&lt;/strong&gt;: Docker has revolutionized the way applications are packaged, shipped, and deployed. As a containerization specialist, you can leverage your Docker skills to help organizations adopt containerization technologies, design containerization strategies, build Docker images, deploy and manage containerized applications, and optimize containerized workflows. With the increasing adoption of Docker in enterprises, there is a growing demand for containerization specialists who can effectively implement Docker-based solutions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;DevOps Engineer&lt;/em&gt;&lt;/strong&gt;: Docker is a key tool in the DevOps toolkit, enabling organizations to achieve faster and more efficient software development and deployment workflows. DevOps engineers with Docker skills are highly sought after, as they can use Docker to create reproducible and consistent development, testing, and production environments, automate application deployments using Docker images, and streamline the software delivery process. Docker helps DevOps teams to achieve continuous integration, continuous deployment (CI/CD), and infrastructure as code (IaC) practices, making Docker skills highly valuable in the DevOps domain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Cloud Engineer:&lt;/em&gt;&lt;/strong&gt; Docker is often used in conjunction with cloud computing platforms such as AWS, Azure, and Google Cloud to build and deploy containerized applications in the cloud. Cloud engineers with Docker skills can leverage Docker to create containerized applications that are cloud-ready, design and implement scalable and resilient containerized infrastructures, and optimize containerization workflows for cloud environments. Docker skills can be a valuable asset for cloud engineers who work with containerized applications in cloud environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Full Stack Developer&lt;/em&gt;&lt;/strong&gt;: Docker can be used by full stack developers to create consistent and reproducible development environments, simplify application setup, and streamline application deployments across different stages of the development lifecycle. Docker allows full stack developers to package their applications and dependencies into Docker images, which can be easily shared and deployed on different platforms. Full stack developers with Docker skills can create robust, scalable, and portable applications, and they are highly sought after by organizations that are adopting containerization in their development workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;System Administrator&lt;/em&gt;&lt;/strong&gt;: Docker has been widely adopted by system administrators for managing applications and services in a containerized environment. System administrators with Docker skills can effectively manage containerized applications, configure Docker networking, optimize resource utilization, and troubleshoot Docker-related issues. Docker allows system administrators to achieve better resource utilization, isolation, and scalability in managing applications, making Docker skills highly valuable in the system administration domain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Solution Architect&lt;/em&gt;&lt;/strong&gt;: Docker can be used as a foundational technology in designing modern and scalable application architectures. Solution architects with Docker skills can create containerized application architectures that are modular, scalable, and portable across different environments. Docker allows solution architects to design microservices architectures, decouple application components, and achieve better resource utilization and scalability. Docker skills can be a valuable asset for solution architects who design complex application architectures in modern, cloud-native, and microservices-based environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Consultant/Trainer&lt;/em&gt;&lt;/strong&gt;: Docker's popularity has led to a growing demand for consultants and trainers who can help organizations adopt Docker and leverage its capabilities. As a Docker consultant or trainer, you can provide guidance, best practices, and recommendations on using Docker effectively in different use cases, such as containerizing legacy applications, building cloud-native applications, optimizing DevOps workflows, and achieving better resource utilization in production environments. Docker skills can be a valuable asset for consultants and trainers who specialize in containerization technologies.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Docker is a powerful containerization platform that has revolutionized the way applications are deployed, managed, and scaled in modern software development. Docker provides a lightweight, portable, and efficient solution for creating, running, and managing containers, making it a popular choice for building and deploying applications across different environments, from local development to production deployments.&lt;/p&gt;

&lt;p&gt;In this blog, we have provided an overview of Docker, covering its basic concepts, commands, and resources. We started with an introduction to containers and containerization, followed by the installation and setup of Docker. We then explored Docker images, containers, and the Dockerfile, which are fundamental components of Docker. We discussed how Docker allows you to package applications and dependencies into portable images, run them as isolated containers, and automate the building process using Dockerfiles.&lt;/p&gt;

&lt;p&gt;Next, we discussed the learning curve of Docker which is a relatively gentle learning curve, especially if you have prior experience with containerization concepts and command-line interfaces. By understanding Docker concepts, mastering Docker commands, learning Docker security best practices, exploring advanced Docker features, and gaining practical experience, you can become proficient in working with Docker and leverage its power for containerizing and deploying applications in a modern, scalable, and efficient way.&lt;/p&gt;

&lt;p&gt;After that, we covered Docker commands, including basic commands for managing containers, images, volumes, and networks. We also discussed advanced commands for managing Docker resources, such as Docker Compose for defining and running multi-container applications, and Docker Swarm for creating and managing swarm clusters. We also highlighted some of the key security features that Docker provides to ensure the isolation and security of containerized applications.&lt;/p&gt;

&lt;p&gt;Then, we discussed various resources available for learning Docker, including the official Docker documentation, Docker Hub, community forums, blogs, tutorials, and training/certification programs. These resources provide a wealth of information and support for learning Docker and becoming proficient in using it for containerization.&lt;/p&gt;

&lt;p&gt;Finally, we talked about promising career prospects for professionals who are skilled in Docker. With the increasing adoption of containerization technologies in enterprises, Docker skills are highly valuable in the fields of software development, DevOps, cloud computing, system administration, solution architecture, and consulting/training. &lt;/p&gt;

&lt;p&gt;In conclusion, Docker has become a leading containerization platform that has gained widespread adoption in the software development community. It provides a powerful and flexible solution for creating, running, and managing containers, enabling developers to build and deploy applications with ease and efficiency. Whether you are a developer, system administrator, or IT professional, learning Docker can greatly enhance your skills and enable you to efficiently manage and deploy containerized applications in diverse environments. So, dive into the world of Docker, explore its features, and unlock its potential for modern application development and deployment. Happy Dockerizing!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Securely Connecting Your Networks: An Introduction to Site-to-Site VPN</title>
      <dc:creator>Rishita Shaw</dc:creator>
      <pubDate>Sun, 09 Apr 2023 07:08:09 +0000</pubDate>
      <link>https://dev.to/rishitashaw/securely-connecting-your-networks-an-introduction-to-site-to-site-vpn-5d67</link>
      <guid>https://dev.to/rishitashaw/securely-connecting-your-networks-an-introduction-to-site-to-site-vpn-5d67</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Virtual Private Network (VPN) (also known as VCN or Virtual Cloud Network) is a logical, isolated network infrastructure in the cloud that you can use to deploy your compute resources. A VCN can be thought of as a private data center in the cloud that you have complete control over. Site-to-site VCN allows two or more VCNs in different regions or between an on-premises network and a VCN in the cloud to be connected, creating a seamless and secure network environment.&lt;/p&gt;

&lt;p&gt;In this blog post, we will dive deeper into the concept of site-to-site VCN and explore its benefits, how it works, and some use cases for it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Site-to-Site VCN?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Site-to-site VCN is a feature of Oracle Cloud Infrastructure (OCI) that enables the communication between two or more VCNs located in different regions or between an on-premises network and a VCN in the cloud. With site-to-site VCN, you can establish a secure and private connection between two networks that are physically separated from each other.&lt;/p&gt;

&lt;p&gt;Site-to-site VCN provides the ability to connect VCNs together over a secure VPN tunnel. This VPN tunnel can be established between the VCNs using an IPsec VPN connection. The VPN connection is configured with a VPN gateway, which is a virtual router that terminates the VPN tunnel and provides connectivity between the VCNs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits of Site-to-Site VCN&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Security:&lt;/em&gt; Site-to-site VCN provides a secure connection between two networks over the internet using an encrypted VPN tunnel. This ensures that all data transmitted between the two networks is protected from unauthorized access.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Scalability:&lt;/em&gt; Site-to-site VCN is a scalable solution that allows you to connect multiple VCNs together to create a larger, more complex network environment. You can add or remove VCNs as needed to meet your changing business requirements.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Cost-effective:&lt;/em&gt; Site-to-site VCN eliminates the need for expensive leased lines or dedicated circuits to connect your on-premises network with your VCN in the cloud. This can result in significant cost savings for your organization.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Easy to manage:&lt;/em&gt; Site-to-Site VPN can be easily managed using a web-based console or command-line interface, allowing network administrators to configure and monitor the VPN connections.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How Site-to-Site VCN Works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Site-to-site VCN uses IPsec VPN tunnels to establish a secure connection between two VCNs. IPsec is a protocol suite for secure Internet Protocol (IP) communications that provides encryption and authentication of the data transmitted over the VPN tunnel.&lt;/p&gt;

&lt;p&gt;To set up a site-to-site VCN connection, you need to create a VPN gateway in each VCN that you want to connect. The VPN gateway acts as a termination point for the VPN tunnel and provides connectivity between the two VCNs.&lt;/p&gt;

&lt;p&gt;Once the VPN gateways are set up, you need to configure the VPN connection between the two gateways. This involves specifying the IP addresses of the two gateways, configuring the encryption and authentication settings, and defining the routes that will be used to direct traffic between the VCNs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases for Site-to-Site VCN&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Disaster Recovery:&lt;/em&gt; Site-to-site VCN can be used to create a disaster recovery environment that provides redundancy for your critical applications and data. You can replicate your on-premises environment in the cloud and use site-to-site VCN to connect the two environments. This ensures that your applications and data are always available, even in the event of a disaster.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Multi-Region Connectivity:&lt;/em&gt; Site-to-site VCN can be used to connect VCNs in different regions, allowing you to create a global network environment that spans multiple geographic locations. This can be useful for organizations that have a global presence and need to provide connectivity to their employees and customers around the world.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Cloud Migration:&lt;/em&gt; Site-to-site VCN can be used to migrate your on-premises applications and data to the cloud. You can replicate your on-premises environment in the cloud and use site-to-site VCN to connect the two environments, allowing you to gradually migrate your applications and data to the cloud.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Hybrid Cloud:&lt;/em&gt; Site-to-site VCN can be used to create a hybrid cloud environment that combines the resources of both your on-premises data center and the cloud. You can use site-to-site VCN to connect your on-premises network to your VCN in the cloud, providing seamless connectivity between the two environments.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Remote Access:&lt;/em&gt; Site-to-site VCN can be used to provide remote access to your applications and data in the cloud. You can use site-to-site VCN to connect your on-premises network to your VCN in the cloud, allowing remote workers to securely access your applications and data from anywhere in the world.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this section, we'll dive a bit deeper into some of the key features and considerations when setting up a Site-to-Site VCN.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features of Site-to-Site VCN&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Encrypted communication:&lt;/em&gt; As mentioned earlier, Site-to-Site VCN uses encryption protocols to secure communication between networks. This ensures that data is protected from interception and unauthorized access.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Static or dynamic routing:&lt;/em&gt; Site-to-Site VCN can use static or dynamic routing to determine the best path for data to travel between networks. Static routing is configured manually, while dynamic routing automatically selects the best path based on network conditions.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Scalability:&lt;/em&gt; Site-to-Site VCN is highly scalable, meaning that it can be easily expanded to accommodate more users, devices, or networks. This makes it ideal for organizations that need to quickly expand their network infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Compatibility with cloud providers:&lt;/em&gt; Site-to-Site VCN is compatible with most major cloud providers, including Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP). This allows organizations to seamlessly integrate their on-premises networks with cloud resources.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Considerations when Setting up Site-to-Site VPN&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Bandwidth requirements:&lt;/em&gt; Site-to-Site VCN can be bandwidth-intensive, particularly when transferring large amounts of data between networks. It's important to ensure that the VCN connection has sufficient bandwidth to meet the needs of the organization.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Latency:&lt;/em&gt; Site-to-Site VCN can introduce additional latency into network communication, which can be particularly problematic for applications that require low latency, such as video conferencing or real-time data processing.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Security:&lt;/em&gt; While Site-to-Site VPN is designed to be secure, it's important to ensure that the VPN gateway is properly configured and that appropriate security protocols are in place. This may include implementing two-factor authentication, configuring firewall rules, and monitoring VPN traffic for anomalies.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Cost:&lt;/em&gt; Site-to-Site VPN can be cost-effective compared to other networking solutions, but it's important to consider the total cost of ownership, including hardware, software, and ongoing maintenance and support.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Site-to-Site VPN is a powerful networking solution that enables organizations to securely connect their on-premises networks with cloud resources. With features such as encrypted communication, scalability, and compatibility with major cloud providers, Site-to-Site VPN can be an effective way to extend network infrastructure and meet the demands of a modern organization. However, it's important to carefully consider bandwidth requirements, latency, security, and cost when setting up a Site-to-Site VPN.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>beginners</category>
      <category>devops</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>A beginner's guide to Termius: the ultimate terminal</title>
      <dc:creator>Rishita Shaw</dc:creator>
      <pubDate>Sat, 08 Apr 2023 12:28:19 +0000</pubDate>
      <link>https://dev.to/rishitashaw/a-beginners-guide-to-termius-the-ultimate-terminal-555i</link>
      <guid>https://dev.to/rishitashaw/a-beginners-guide-to-termius-the-ultimate-terminal-555i</guid>
      <description>&lt;p&gt;If you're a new developer, you may be unfamiliar with command-line interfaces and consoles. In this article, we'll provide an introduction to Terminal Emulators and the Termius client terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terminal Emulators&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Terminal emulators are software programs that allow users to access their computer's operating system through commands. These commands can be used to open and edit files, move files around, launch applications, and more. Terminal emulators are frequently used by businesses to access data or programs on remote devices or servers.&lt;/p&gt;

&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%2Fi7wjq7tbl3uj8b8bceo7.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%2Fi7wjq7tbl3uj8b8bceo7.png" alt="terminal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is &lt;a href="https://termius.com/" rel="noopener noreferrer"&gt;Termius&lt;/a&gt;?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Termius is a client terminal with built-in Telnet and SSH support. It allows users to launch multiple concurrent Telnet sessions with SSH support and manage Mosh connections securely. It also provides full emulation of the Emacs editor, Vim text editor, and many other CLI tools, exactly how you would expect them to work on your computer. Termius is available for Linux, Windows, Mac, iOS, and Android platforms.&lt;/p&gt;

&lt;p&gt;Termius features powerful tools such as group hosting, tagging for easy search, rich previews of data items, and secure sync AES-256. Hosts, Port Forwarding rules, Snippets, and Keys are all client-side encrypted. Other helpful features include autocompleting saved sessions and quick connection to previously connected hosts' snippets history.&lt;/p&gt;

&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%2F7br7ypdbsrwz9t8s9mv7.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%2F7br7ypdbsrwz9t8s9mv7.png" alt="Terminus logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What sets Termius apart?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Termius is the ultimate solution for managing UNIX and Linux systems. Whether it's a local machine, remote service, Docker Container, VM, Raspberry Pi, or an AWS instance, Termius has got you covered. It is essentially Putty for Android, but with a sleek and modern design.&lt;/p&gt;

&lt;p&gt;Let's take a closer look at Termius on three fundamental bases.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1. Security:&lt;/em&gt; Termius has end-to-end encryption that was a part of the sync from day one. The first version was released about eight years ago with crypto algorithms that were designed at the same time. Since then, Termius has kept up with the changing crypto space by using known experts and conventional algorithms for its encryption. Termius uses libsodium and Botan for all crypto-related operations, and more details about the implementation can be found in the official documentation. Termius also offers the ability to time your update, ensuring an easy process for the end user. Plus, SSH to a server with Face ID or Touch ID allows for added security, using keys that can't be stolen from your device.&lt;/p&gt;

&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%2F5wvcohqouwzao2fom4il.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%2F5wvcohqouwzao2fom4il.png" alt="security in termius"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2. Ease of use:&lt;/em&gt; Termius makes managing infrastructure and credentials easy and logically structured. Operational teams can keep information about the current configuration of infrastructure up to date by using tools like group hosting, tagging, and rich previews of data items. The app's autocompleting saved sessions and quick connection to previously connected hosts' snippets history make accessing the information you need fast and efficient.&lt;/p&gt;

&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%2Fugcadly0jqk7esgn3m33.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%2Fugcadly0jqk7esgn3m33.png" alt="ease of use termius"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3. Flexibility:&lt;/em&gt; With support for Linux, Windows, Mac, iOS, and Android platforms, Termius is incredibly flexible. Users can launch multiple concurrent Telnet sessions with SSH support and manage Mosh connections securely. Termius also provides full emulation of the Emacs editor, Vim text editor, and many other CLI tools, making it the ultimate solution for managing UNIX and Linux systems.&lt;/p&gt;

&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%2Fbmynp2r3blleemof5rfd.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%2Fbmynp2r3blleemof5rfd.png" alt="Flexibility termius"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In conclusion, Termius is an essential tool for any developer looking to manage infrastructure and credentials with ease and security. Its intuitive interface, powerful features, and flexibility make it the ultimate client terminal for beginners and experienced developers alike.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>cloud</category>
      <category>security</category>
      <category>performance</category>
    </item>
    <item>
      <title>All You Need to Know About FIDO2 &amp; Passwordless Authentication</title>
      <dc:creator>Rishita Shaw</dc:creator>
      <pubDate>Tue, 13 Dec 2022 15:54:59 +0000</pubDate>
      <link>https://dev.to/rishitashaw/all-you-need-to-know-fido2-passwordless-authentication-329a</link>
      <guid>https://dev.to/rishitashaw/all-you-need-to-know-fido2-passwordless-authentication-329a</guid>
      <description>&lt;p&gt;In this Blog, I'm gonna tell you all about Passwords, current authentication models, and what is wrong with them, along with RSA encryption, trusted computing, and finally FIDO2.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication models and Passwords
&lt;/h2&gt;

&lt;p&gt;🐰 &lt;strong&gt;Fun fact&lt;/strong&gt;: The concept of Password was invented by Fernando Corbató in 1960 at MIT. It was first used on an IBM Mainframe to keep individual files private to a user. It paved the way for Personal Identification Numbers (PIN) based authentication in the 1980s.&lt;/p&gt;

&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%2Fx2croqhpvq9z0jl8z843.jpg" 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%2Fx2croqhpvq9z0jl8z843.jpg" alt="Fernando Corbató"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope you agree with me that Passwords are very Vulnerable to Brute force, Password Guessing, and Phishing attacks. According to SplashData, the top two passwords used from 2011 to 2018 were “password” and “123456”. &lt;/p&gt;

&lt;p&gt;Current authentication models use one (single-factor) or multiple (multi-factor authentication) of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Something the user knows. (PIN, Passwords.) 🧠&lt;/li&gt;
&lt;li&gt;Something the user has. (ATM card, Phones, security keys) 💳&lt;/li&gt;
&lt;li&gt;Something the user is. (Biometrics) 👆&lt;/li&gt;
&lt;li&gt;Something the user produces. (Speech recognition, Signature) 🎙️&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is to be noted that most of them have one or the other vulnerability.&lt;/p&gt;

&lt;p&gt;This diagram shows how authentications are done. It is pretty self-explanatory &lt;/p&gt;

&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%2F37a1k7ds8j68p3ae9429.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%2F37a1k7ds8j68p3ae9429.png" alt="Cloud Auth"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Drawbacks of authentication models:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Something the user knows&lt;/em&gt;: Can be extracted by social engineering like phishing.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Something the user has&lt;/em&gt;: OTPs fall into something the user knows before it is typed. ATM cards can be skimmed.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Something the user is&lt;/em&gt;: Biometrics can be cloned. For example, fingerprints can be regenerated by even high-resolution pictures. Deepfakes can be used to trick facial recognition.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Something the user produces&lt;/em&gt;: Vulnerable to replay attacks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Things are never 100% secure, so focus on adequate security.&lt;br&gt;
Focus on the scalable attacks first.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Passwordless Authentication:
&lt;/h2&gt;

&lt;p&gt;Here comes the hero of the story: &lt;em&gt;Passwordless Authentication&lt;/em&gt;. It generally comes down to the authentication model of ‘Something the user has’ and/or ‘Something the user is’&lt;br&gt;
A few examples are push-notification login and security keys.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In push notification login, no matter what device you are logging in from, you will get a notification on your smartphone which you have to approve.&lt;/li&gt;
&lt;li&gt;In security keys, you need to carry a device like a smart card which you need to connect to the machine you are logging in from for logging in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now if you are like me you must be thinking how does it work? For that, we need to understand a few concepts like RSA and Trusted Computing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Basic concepts of RSA
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Public Key Cryptosystem (PKC)&lt;/strong&gt;: There are two keys (known as a key pair): Public key and Private key. If one key is used to encrypt a piece of data, the other can be used to decrypt it. 🔑🗝️ &lt;br&gt;
Losing the private key compromises the key pair. The public key can be shared easily.&lt;br&gt;
Works on the principle that computers cannot efficiently prime factorize a number. (Unless using Shor’s algorithm but we are not going into quantum computing now so keeping that aside.)&lt;br&gt;
RSA Cryptosystem has been proven to be a strong cryptosystem. Now it is up to us keep the keys secure and use them well.&lt;/p&gt;

&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%2Futug83wd11j20ye42vbl.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%2Futug83wd11j20ye42vbl.png" alt="RSA"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are 3 steps basically:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Key pair generation:&lt;/strong&gt;&lt;br&gt;
Choose two very large prime numbers p and q. Each over 1024 bits and a multiple of 256 bits in size.&lt;br&gt;
n=p*q&lt;br&gt;
∅(n)=(p-1)*(q-1) (It is to be noted that n cannot be prime factorized easily, so n cannot be deduced from ∅(n))&lt;br&gt;
Select a number e where 1&amp;lt;e&amp;lt;∅(n), e co-prime to ∅(n).&lt;br&gt;
Calculate d such that d=e-1 mod ∅(n)&lt;br&gt;
Announce public key kpub={ n, e}🗝️&lt;br&gt;
Keep private key secret kpr={ n, d}🔑&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Encryption for authentication:&lt;/strong&gt;&lt;br&gt;
If we have a plaintext number P🔓 and Kpr= { n, d},🔑&lt;br&gt;
C=P^d mod N&lt;br&gt;
Here C is the cipher text. 🔒&lt;br&gt;
(For the exponentiation, we use Fast Exponentiation algorithm)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Decryption for authentication:&lt;/strong&gt;&lt;br&gt;
If we have a ciphertext number C🔒 and Kpub= { n, e},🗝️&lt;br&gt;
P=C^e mod N&lt;br&gt;
Here P is the plain text.🔓&lt;br&gt;
(For the exponentiation, we use Fast Exponentiation algorithm)&lt;br&gt;
To understand RSA better check out the resources section of the blog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trusted Computing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Trusted Platforms&lt;/strong&gt; are devices embedded on the motherboard or in the CPU. It is used for cryptographic applications. When used for RSA, the private keys never leave the hardware, making it secure.&lt;/p&gt;

&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%2F1edzfbk35uu2b2kqm7zv.jpg" 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%2F1edzfbk35uu2b2kqm7zv.jpg" alt="TPM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some popular ones are Samsung Knox, Apple Secure Enclave, Google Titan, Windows Hello etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Physical Security Key&lt;/strong&gt; on the other hand is like a Trusted Computing Platform but lightweight and portable. It needs to be connected to the device while logging in. Some smartwatches can also be used as security keys. Can be usually connected via USB, BLE, or NFC.&lt;/p&gt;

&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%2F8hanuqb4w2xpu1oj2e6p.jpg" 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%2F8hanuqb4w2xpu1oj2e6p.jpg" alt="Physical Security Key"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ㊙️FIDO2
&lt;/h2&gt;

&lt;p&gt;FIDO2 is the best option for passage identification. To understand it better lets go through some of its components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Client browser:&lt;/strong&gt; The web browser we are using&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authenticator attachment&lt;/strong&gt;: Physical security key or internal trusted computing module. It is of two types: Platform: Internal authenticator, Cross-platform: External security key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relying Party (RP) Server&lt;/strong&gt;: The website we are logging in to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RP ID&lt;/strong&gt;: The URL of the RP Server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Challenge&lt;/strong&gt;: A small text which can be encrypted and decrypted to check whether the keypair is valid.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Specifications used in FIDO2:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;W3C WebAuthn&lt;/strong&gt;: It is the set of protocols that define how the server interact with the web browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client To Authenticator Protocol (CTAP)&lt;/strong&gt;: It is the set of protocols that define how the web browser interact with the authenticator attachment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before a key can used for passwordless authentication, it needs to be registered on the fido server.&lt;/p&gt;

&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%2Feycoek86hrsra5e2xprf.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%2Feycoek86hrsra5e2xprf.png" alt="Key Reg"&gt;&lt;/a&gt;&lt;/p&gt;

&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%2F5mjim8jm09l0chg3xz8h.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%2F5mjim8jm09l0chg3xz8h.png" alt="Key reg dia"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Authentication with FIDO2 follows a similar procedure&lt;/p&gt;

&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%2Fq9rrislntespdo6f68d7.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%2Fq9rrislntespdo6f68d7.png" alt="fido2 auth"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❤️‍🔥What makes FIDO2 strong?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use of public key cryptosystem.&lt;/li&gt;
&lt;li&gt;Use of trusted computing where the private keys never leave the user’s device/security key.&lt;/li&gt;
&lt;li&gt;RP ID is verified at every step to stop Man In The Middle (MITM) attacks.&lt;/li&gt;
&lt;li&gt;Cannot be phished as the client is verified by RP.&lt;/li&gt;
&lt;li&gt;User does not have to know any information to be able to log in.&lt;/li&gt;
&lt;li&gt;Follows zero-trust model.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  👻Resources to work on FIDO2
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://fidoalliance.org" rel="noopener noreferrer"&gt;https://fidoalliance.org&lt;/a&gt; &lt;br&gt;
&lt;a href="https://loginwithfido.com" rel="noopener noreferrer"&gt;https://loginwithfido.com&lt;/a&gt; &lt;br&gt;
&lt;a href="https://w3.org/TR/webauthn-2/" rel="noopener noreferrer"&gt;https://w3.org/TR/webauthn-2/ &lt;/a&gt;&lt;br&gt;
&lt;a href="https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html" rel="noopener noreferrer"&gt;https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/yubico/Python-Fido2" rel="noopener noreferrer"&gt;https://github.com/yubico/Python-Fido2&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/yubico/libfido2" rel="noopener noreferrer"&gt;https://github.com/yubico/libfido2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;🌈🧢HOPEFULLY, YOU CAN WORK USING FIDO2 NOW&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>security</category>
      <category>architecture</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Interview Experience: Google SWE Internship Bangalore Or Hyderabad Jul 2023</title>
      <dc:creator>Rishita Shaw</dc:creator>
      <pubDate>Tue, 13 Dec 2022 14:48:11 +0000</pubDate>
      <link>https://dev.to/rishitashaw/interview-experience-google-swe-internship-bangalore-or-hyderabad-jul-2023-3mhi</link>
      <guid>https://dev.to/rishitashaw/interview-experience-google-swe-internship-bangalore-or-hyderabad-jul-2023-3mhi</guid>
      <description>&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;: Microsoft Imagine Cup 2022 India Runner-up | Azure Women Hackathon 2022 Finalist | Azure certified | NIT DGP'24 EE | solved 400+ problems on GeeksForGeeks&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Experience&lt;/strong&gt;: Full-stack Web Developer Internship in 3 startups and 2 Academic Research publications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application process:&lt;/strong&gt; I applied off-campus without any referral. After around a month or so I received a test link for online assessment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Online Assessment:&lt;/strong&gt; I received the HackerEarth test link. ****There were two coding questions to be attempted within a 60-minute time limit. The timed challenge will automatically record your submission at the 60-minute mark. I am not allowed to share the exact question but I will similar question.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Question 1(Medium-Hard): DP-based question. It was really similar to this question. &lt;a href="https://www.geeksforgeeks.org/next-word-that-does-not-contain-a-palindrome-and-has-characters-from-first-kfind-lexicographically-next-word-contains-first-k-letters-english-alphabet-not-contain-palindrome-substring-length-one/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Question 2(Medium-Hard): Bit-masking-based question. Given three numbers suppose A, B, C. find the smallest number X such that it holds the relation ((A|X)&amp;amp;(B|X))==C.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I was able to solve both questions in around 40 mins. I received an interview call around 2 weeks after the OA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interview 1 Technical screening(45 mins):&lt;/strong&gt; The interviewer gave me a graph question. Implementation of the graph algorithm BFS with some obstacles. It was fairly easy but I was nervous and had a few mess-ups. However, I received another interview call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interview 2 Technical screening(45 mins):&lt;/strong&gt; this round went very smoothly and went for about an hour. The interview gave me a simple string question which I solved in around 15-20 mins with pseudocode and call. The question was similar to this &lt;a href="https://www.geeksforgeeks.org/string-matching-with-that-matches-with-any-in-any-of-the-two-strings/" rel="noopener noreferrer"&gt;one&lt;/a&gt;. He went on to ask me basic DSA fundamental questions like map vs unordered_map, time complexities of various data structures like BST, hash maps, etc. After this, I showed him my project and he seemed impressed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Result: A week after my Round 2 I came to know that Google have frozen their hiring and hence they won’t be considering my candidacy further.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>welcome</category>
      <category>career</category>
      <category>devops</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>Detecting intrusion in DevOps environments with AWS canary tokens</title>
      <dc:creator>Rishita Shaw</dc:creator>
      <pubDate>Sun, 07 Aug 2022 09:40:00 +0000</pubDate>
      <link>https://dev.to/rishitashaw/detecting-intrusion-in-devops-environments-with-aws-canary-tokens-5a30</link>
      <guid>https://dev.to/rishitashaw/detecting-intrusion-in-devops-environments-with-aws-canary-tokens-5a30</guid>
      <description>&lt;p&gt;On 27th July, Mackenzie Jackson and Eric Fourrier hosted a live webinar on Intrusion detection in DevOps environments with AWS canary tokens. They also talked about the launch of ggcanary, or the GitGuardian Canary Tokens, and an awesome demo. It was inspiring to hear about their journey and what they do, so I decided to sum up what I learned over the course of the seminar.&lt;/p&gt;

&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%2F0jirwe1q60vst318dzez.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%2F0jirwe1q60vst318dzez.png" alt="poster"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are some of the important links that you might need to understand things clearly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.crowdcast.io/c/detecting-intrusion-aws-canary-tokens" rel="noopener noreferrer"&gt;Webinar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/2FRsVnQwCY4" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.gitguardian.com/from-vulnerability-to-advantage-turn-exposed-secrets-into-your-best-allies-to-detect-intrusion/" rel="noopener noreferrer"&gt;Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/GitGuardian/ggcanary" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every stage of the DevOps pipeline is now an attractive target for attackers. Starting from Planning (Jira, slack, Figma, etc.) to code (vs code, JetBrains, etc.), testing (Jenkins, GitLab etc.), package (Docker hub, nexus etc.), security (synk, vercode, etc) to deployment (chef, ansible, etc) and monitoring (grafna, datadog, etc). To understand thing in detail you need to know what supply chain attack is&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supply chain attacks:&lt;/strong&gt; A supply chain attack, also called a value-chain or third-party attack, occurs when someone infiltrates your system through an outside partner or provider with access to your systems and data. This has dramatically changed the attack surface of the typical enterprise in the past few years, with more suppliers and service providers touching sensitive data than ever before.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example of supply chain attack:&lt;/strong&gt; &lt;strong&gt;Codecov breach&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Codecov customers' environment variables were sent to a remote server by sophisticated attackers who exploited a mistake with the way Codecov builds docker images. According to other disclosures, the attackers were able to access private git repositories using the git credentials in the CI environment, and then exploit the secrets and data contained there. You can read more about it here: &lt;a href="https://blog.gitguardian.com/codecov-supply-chain-breach/" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detecting intrusion in the supply chain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It can be done in several ways. Most popular ones are&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;network-based: A network-based intrusion detection system (NIDS) detects malicious traffic on a network. NIDS usually requires promiscuous network access in order to analyze all traffic, including all unicast traffic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;host-based: A host-based intrusion detection system is an intrusion detection system that is capable of monitoring and analyzing the internals of a computing system as well as the network packets on its network interfaces, similar to the way a network-based intrusion detection system operates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;canary (or honey) token based: A canary token is a file, URL, API key, or other resources that are monitored for access. Once the resource has been accessed, an alert is triggered notifying the object owner of said access. Typically, canary tokens are used within an environment to help defenders identify a compromised system or a resource that should not be accessed. At the point of file access, an e-mail or some other type of notification can be triggered to notify the system owner, and then appropriate responses can occur.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How to detect compromised developer and DevOps environments with canary tokens?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Canary tokens can be created and deployed in your code repositories, CI/CD pipelines, project management, and ticketing systems like Jira or even instant messaging tools like Slack. When triggered, canary tokens can help alert you of an intrusion in your developer environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ggcanary tokens&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS credentials are used as honey tokens in ggcanary, an intrusion detection system by GitGuardian. Today's software factories are complex and there are a lot of DevOps tools that make it difficult to detect compromises. With ggcanary, we believe security and detection engineers can increase their chances of catching intrusion in this part of their organization by deliberately exposing AWS credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;key features of ggcanary tokens&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use terraform to manage canary token infrastructure&lt;/li&gt;
&lt;li&gt;deploy up to 5000 canary tokens&lt;/li&gt;
&lt;li&gt;track every action on AWS CloudTrail logs&lt;/li&gt;
&lt;li&gt;get real-time email alerts if tokens are triggered&lt;/li&gt;
&lt;li&gt;ggcanary leverages current techs like Terraform and AWS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why use aws secrets as canary tokens?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS secret keys are among the top most leaked secrets&lt;/li&gt;
&lt;li&gt;popular opensource secret scanner support AWS keys&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How does it work under the hood?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This simple architectural diagram explains the data flow. &lt;a href="https://github.com/GitGuardian/ggcanary" rel="noopener noreferrer"&gt;Visit the GitHub repo&lt;/a&gt;&lt;br&gt;
 for a deeper dive into the code.&lt;/p&gt;

&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%2Fswl5munwc9m9a80cky7k.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%2Fswl5munwc9m9a80cky7k.png" alt="dia"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ggcanary is the easiest solution for security teams to create and manage AWS honey tokens on a large scale. It is an innovative and brilliant approach to securing &lt;strong&gt;software supply chains&lt;/strong&gt; like Source Control Management (SCM) systems, Continuous Integration and Continuous Deployment (CI/CD) pipelines, and software artifact registries as entry points.&lt;/p&gt;

&lt;p&gt;Overall the webinar was an extremely informative event that will undoubtedly influence my view on development from now on. The speaker was very articulate and knowledgeable while remaining interesting throughout which maintained the audience’s attention. Time well spent!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>github</category>
      <category>security</category>
      <category>terraform</category>
    </item>
    <item>
      <title>NIC Bonding and Everything you need to know using RHEL 9</title>
      <dc:creator>Rishita Shaw</dc:creator>
      <pubDate>Thu, 04 Aug 2022 04:57:09 +0000</pubDate>
      <link>https://dev.to/rishitashaw/nic-bonding-and-everything-you-need-to-know-using-rhel-9-3f3g</link>
      <guid>https://dev.to/rishitashaw/nic-bonding-and-everything-you-need-to-know-using-rhel-9-3f3g</guid>
      <description>&lt;p&gt;&lt;strong&gt;NIC&lt;/strong&gt;&lt;br&gt;
Network interface cards (NICs) enable computers to connect to a network by installing hardware components, usually circuit boards or chips. In addition to supporting I/O interrupts, direct memory access (DMA) interfaces, data transmission, network traffic engineering, and partitioning, modern NICs also provide computers with a number of other functions.&lt;/p&gt;

&lt;p&gt;To find info about your NIC use the command and sign in as the root user.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ethtool &amp;lt;INTERFACE_NAME&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, to know your NIC name use the command ifconfig. There are several NICs like lo, virbr0, etc. but we want to take the first one that comes on. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;ifconfig | more&lt;/code&gt;&lt;/p&gt;

&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%2F7nh3vwmwdl7o9j3k081r.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%2F7nh3vwmwdl7o9j3k081r.png" alt="ifconfig"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here our NIC is enp0s3, Now use the command &lt;code&gt;ethtool enp0s3&lt;/code&gt;&lt;/p&gt;

&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%2Fvtnu69unbouhmw8jg8yo.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%2Fvtnu69unbouhmw8jg8yo.png" alt="ethtool"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;now that you have the network information, you should see a few of the things mentioned like link modes, speed, duplex, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NIC Bonding&lt;/strong&gt;&lt;br&gt;
Now that you know what NIC is, let’s dive into NIC bonding also known as network bonding. It can be defined as the aggregation and combination of multiple NICs into a single bond interface. Its main purpose is to provide high availability and redundancy. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to do NIC Bonding?&lt;/strong&gt;&lt;br&gt;
Make sure you've enabled two or more network adapters from Virtual Box settings&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a new NIC if it does not exist&lt;/li&gt;
&lt;li&gt;Install bonding driver = modprobe bonding&lt;/li&gt;
&lt;li&gt;To list the bonding module info = modinfo bonding
_You will see the driver version as seen below if the driver is installed and loaded
_&lt;/li&gt;
&lt;/ul&gt;

&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%2F3lwgzv1n8enzh2k31kew.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%2F3lwgzv1n8enzh2k31kew.png" alt="driver"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create Bond Interface File&lt;/em&gt;&lt;br&gt;
&lt;code&gt;vi /etc/sysconfig/network-scripts/ifcfg-bond0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Add the following parameters&lt;/em&gt;&lt;br&gt;
&lt;code&gt;DEVICE=bond0&lt;br&gt;
TYPE=Bond&lt;br&gt;
NAME=bond0&lt;br&gt;
BONDING_MASTER=yes&lt;br&gt;
BOOTPROTO=none&lt;br&gt;
ONBOOT=yes&lt;br&gt;
IPADDR=192.168.1.80&lt;br&gt;
NETMASK=255.255.255.0&lt;br&gt;
GATEWAY=192.168.1.1&lt;br&gt;
BONDING_OPTS=”mode=5 miimon=100”&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Save and exit the file&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The bonding options details are can be found on the following table&lt;/p&gt;

&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%2Fp9mpl0omp4jeo25sw0g7.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%2Fp9mpl0omp4jeo25sw0g7.png" alt="NIC Bonding options"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;miimon&lt;/strong&gt; &lt;br&gt;
Specifies the MII link monitoring frequency in milliseconds. This determines how often the link state of each slave is inspected for link failures&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Edit the First NIC File (enp0s3)&lt;/em&gt;&lt;br&gt;
&lt;code&gt;vi /etc/sysconfig/network-scripts/ifcfg-enp0s3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Delete the entire content&lt;br&gt;
Add the following parameters&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;TYPE=Ethernet&lt;br&gt;
BOOTPROTO=none&lt;br&gt;
DEVICE=enp0s3&lt;br&gt;
ONBOOT=yes&lt;br&gt;
HWADDR=”MAC from the ifconfig command”&lt;br&gt;
MASTER=bond0&lt;br&gt;
SLAVE=yes&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Save and exit the file&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create the Second NIC File (enp0s8) or Copy enp0s3&lt;/em&gt;&lt;br&gt;
&lt;code&gt;vi /etc/sysconfig/network-scripts/ifcfg-enp0s8&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Add the following parameters&lt;/em&gt;&lt;br&gt;
&lt;code&gt;TYPE=Ethernet&lt;br&gt;
BOOTPROTO=none&lt;br&gt;
DEVICE=enp0s8&lt;br&gt;
ONBOOT=yes&lt;br&gt;
HWADDR=”MAC from the ifconfig command”&lt;br&gt;
MASTER=bond0&lt;br&gt;
SLAVE=yes&lt;/code&gt;&lt;br&gt;
&lt;em&gt;Save and exit the file&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Restart the Network Service&lt;/em&gt;&lt;br&gt;
&lt;code&gt;systemctl restart network&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Test and verify the configuration&lt;/em&gt;&lt;br&gt;
&lt;code&gt;ifconfig&lt;/code&gt;     or  &lt;code&gt;ifconfig | more&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;_Use following command to view bond interface settings like bonding mode &amp;amp; slave interface&lt;br&gt;
_&lt;br&gt;
&lt;code&gt;cat /proc/net/bonding/bond0&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That NIC Bonding complete overview on Red Hat Enterprise Linux operating system 9. If you like it do give a follow!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>beginners</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>CIDR: a brief overview &amp; subnet calculation</title>
      <dc:creator>Rishita Shaw</dc:creator>
      <pubDate>Thu, 28 Jul 2022 19:49:21 +0000</pubDate>
      <link>https://dev.to/rishitashaw/cidr-a-brief-overview-subnet-calculation-pfc</link>
      <guid>https://dev.to/rishitashaw/cidr-a-brief-overview-subnet-calculation-pfc</guid>
      <description>&lt;p&gt;Learn what IPv4, CIDR, CIDR Block, Subnetting and and how to calculate it...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overview of IPv4&lt;/strong&gt;&lt;br&gt;
You must have heard about IP address, which stands for Internet Protocol. One popular version of IP is v4. IP version four addresses are 32-bit integers which will be expressed in decimal notation.&lt;br&gt;
Example- 192.0.2.126 could be an IPv4 address. Now, IPv4 addresses come from a finite pool of numbers, which exactly contains 4,294,967,296 IPv4 addresses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why CIDR?&lt;/strong&gt;&lt;br&gt;
This may seem like a lot(and is a lot) but given the rapid exhaustion of IPv4 addresses, its efficiency was greatly reduced. Hence, in 1993 CIDR was invented.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Is Subnetting?&lt;/strong&gt;&lt;br&gt;
You can think of Subnetting as the process of stealing bits from the HOST part of an IP address in order to divide the larger network into smaller sub-networks called subnets. After subnetting, we end up with NETWORK SUBNET HOST fields. We always reserve an IP address to identify the subnet and another one to identify the broadcast subnet address.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is CIDR?&lt;/strong&gt;&lt;br&gt;
CIDR(Classless Inter-Domain Routing) also known as subnetting, was designed to improve the efficiency of address distribution. CIDR is based on variable-length subnet masking (VLSM), which enables network engineers to divide an IP address space into a hierarchy of subnets of different sizes, making it possible to create subnetworks with different host counts without wasting large numbers of addresses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CIDR Notation&lt;/strong&gt;&lt;br&gt;
CIDR notation compactly indicates the network mask for an address and adds on the total number of bits in the entire address using slash notation. For example, 192.168.129.23/17 indicates a 17-bit network mask.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is CIDR Block?&lt;/strong&gt;&lt;br&gt;
You may have come across this term in cloud services. To brief CIDR blocks are groups of addresses that share the same prefix and contain the same number of bits. Now if we put together multiple CIDR blocks together to make a network with a common prefix we call it supernetting. If a router knows routes for different parts of the same supernet, then it will use the most specific one -- or the one with the longest network address.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Subset a Class C Address?&lt;/strong&gt;&lt;br&gt;
Now let's see how to subnet the same Class C address. Let's use the IP address 192.168.10.44 with subnet mask 255.255.255.248 (/29).&lt;/p&gt;

&lt;p&gt;The steps to perform this task are the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The total number of subnets: Using the subnet mask 255.255.255.248, number value 248 (11111000) indicates that 5 bits are used to identify the subnet. To find the total number of subnets available simply raise 2 to the power of 5 (2^5) and you will find that the result is 32 subnets. Note that if subnet all-zeros is not used then we are left with 31 subnets and if also all-ones subnet is not used then we finally have 30 subnets.&lt;/li&gt;
&lt;li&gt;Hosts per subnet: 3 bits are left to identify the host therefore the total number of hosts per subnet is 2 to the power of 3 minus 2 (1 address for the subnet address and another one for the broadcast address)(2^3-2) which equals to 6 hosts per subnet.&lt;/li&gt;
&lt;li&gt;Subnets, hosts, and broadcast addresses per subnet: To find the valid subnets for this specific subnet mask you have to subtract 248 from the value 256 (256-248=8), which is the first available subnet address. Actually, the first available one is the subnet-zero which we explicitly note. The next subnet address is 8+8=16, the next one is 16+8=24 and this goes on until we reach value 248.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The following table provides all the subnet cal information. Note that our IP address (192.168.10.44) lies in subnet 192.168.10.40.&lt;/p&gt;

&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%2Fy8iaewpq3g150l1azyfk.jpg" 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%2Fy8iaewpq3g150l1azyfk.jpg" alt="table"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks to Stelios for the awesome blog on subnet calculation: &lt;a href="https://www.pluralsight.com/blog/it-ops/simplify-routing-how-to-organize-your-network-into-smaller-subnets" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>computerscience</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
    <item>
      <title>AWS Cloud Practitioner Certification Cheat Sheet (Part 2/2)☁️⛅</title>
      <dc:creator>Rishita Shaw</dc:creator>
      <pubDate>Wed, 23 Mar 2022 09:54:40 +0000</pubDate>
      <link>https://dev.to/rishitashaw/aws-cloud-practitioner-certification-cheat-sheet-part-23-489e</link>
      <guid>https://dev.to/rishitashaw/aws-cloud-practitioner-certification-cheat-sheet-part-23-489e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This is a cheat sheet for AWS Cloud Practitioner Certification Exam.&lt;br&gt;
If you haven't read the first part please refer to the &lt;a href="https://dev.to/theseregrets/aws-cloud-practitioner-certification-cheat-sheet-part-13-1k81"&gt;link&lt;/a&gt;.&lt;br&gt;
This is not enough for preparation but it's enough for revision.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Instance stores and Amazon Elastic Block Store (Amazon EBS)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;When you launch an EC2 instance, depending on the type of the EC2 instance you launched, it might provide you with local storage called instance store volumes.&lt;/li&gt;
&lt;li&gt;An instance store provides temporary block-level storage for an Amazon EC2 instance. An instance store is disk storage that is physically attached to the host computer for an EC2 instance and therefore has the same lifespan as the instance. When the instance is terminated, you lose any data in the instance store.&lt;/li&gt;
&lt;li&gt;Amazon Elastic Block Store (Amazon EBS) is a service that provides block-level storage volumes that you can use with Amazon EC2 instances. If you stop or terminate an Amazon EC2 instance, all the data on the attached EBS volume remains available.&lt;/li&gt;
&lt;/ul&gt;

&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%2Fhjbjdg0rgcpmtjxr1pls.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%2Fhjbjdg0rgcpmtjxr1pls.png" alt="ebs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An EBS snapshot is an incremental backup. This means that the first backup taken of a volume copies all the data. Only the blocks of data that have changed since the most recent snapshot are saved for subsequent backups. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon Simple Storage Service (Amazon S3)
&lt;/h2&gt;

&lt;p&gt;Each object consists of data, metadata, and a key in object storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Simple Storage Service (Amazon S3)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Simple Storage Service (Amazon S3) is a service that provides object-level storage. Amazon S3 stores data as objects in buckets.&lt;/li&gt;
&lt;li&gt;S3 Standard provides high availability for objects. This makes it a good choice for a wide range of use cases, such as websites, content distribution, and data analytics. S3 Standard has a higher cost than other storage classes intended for infrequently accessed data and archival storage.&lt;/li&gt;
&lt;li&gt;S3 Standard-IA is ideal for data infrequently accessed but requires high availability when needed. Both S3 Standard and S3 Standard-IA store data in a minimum of three Availability Zones.
Compared to S3 Standard and S3 Standard-IA, which store data in a minimum of three Availability Zones, S3 One Zone-IA stores data in a single Availability Zone. &lt;/li&gt;
&lt;li&gt;In the S3 Intelligent-Tiering storage class, Amazon S3 monitors objects’ access patterns. If you haven’t accessed an object for 30 consecutive days, Amazon S3 automatically moves it to the infrequent access tier, S3 Standard-IA. 
S3 Glacier is a low-cost storage class that is ideal for data archiving&lt;/li&gt;
&lt;li&gt;You can retrieve objects stored in the S3 Glacier storage class within a few minutes to a few hours. By comparison, you can retrieve objects stored in the S3 Glacier Deep Archive storage class within 12 hours.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon Elastic File System (Amazon EFS)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Compared to block storage and object storage, file storage is ideal for use cases in which a large number of services and resources need to access the same data at the same time.&lt;/li&gt;
&lt;li&gt;Amazon Elastic File System (Amazon EFS) is a scalable file system used with AWS Cloud services and on-premises resources. As you add and remove files, Amazon EFS grows and shrinks automatically. It can scale on demand to petabytes without disrupting applications. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon Relational Database Service (Amazon RDS)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Relational databases use structured query language (SQL) to store and query data. This approach allows data to be stored in an easily understandable, consistent, and scalable way. &lt;/li&gt;
&lt;li&gt;Amazon RDS is a managed service that automates tasks such as hardware provisioning, database setup, patching, and backups. &lt;/li&gt;
&lt;li&gt;Many Amazon RDS database engines offer encryption at rest (protecting data while it is stored) and encryption in transit (protecting data while it is being sent and received).&lt;/li&gt;
&lt;li&gt;Amazon Aurora is an enterprise-class relational database. It is compatible with MySQL and PostgreSQL relational databases. It is up to five times faster than standard MySQL databases and up to three times faster than standard PostgreSQL databases.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon DynamoDB
&lt;/h2&gt;

&lt;p&gt;Nonrelational databases are sometimes referred to as “NoSQL databases” because they use structures other than rows and columns to organize data. One type of structural approach for nonrelational databases is key-value pairs. &lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Redshift
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Redshift is a data warehousing service that you can use for big data analytics. It offers the ability to collect data from many sources and helps you to understand relationships and trends across your data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS Database Migration Service (AWS DMS)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AWS Database Migration Service (AWS DMS) enables you to migrate relational databases, nonrelational databases, and other types of data stores.&lt;/li&gt;
&lt;li&gt;Amazon DocumentDB is a document database service that supports MongoDB workloads. (MongoDB is a document database program.)
Amazon Neptune is a graph database service. &lt;/li&gt;
&lt;li&gt;You can use Amazon Neptune to build and run applications that work with highly connected datasets, such as recommendation engines, fraud detection, and knowledge graphs.&lt;/li&gt;
&lt;li&gt;Amazon Quantum Ledger Database (Amazon QLDB) is a ledger database service. &lt;/li&gt;
&lt;li&gt;You can use Amazon QLDB to review a complete history of all the changes that have been made to your application data.&lt;/li&gt;
&lt;li&gt;Amazon ElastiCache is a service that adds caching layers on top of your databases to help improve the read times of common requests. &lt;/li&gt;
&lt;li&gt;Amazon DynamoDB Accelerator (DAX) is an in-memory cache for DynamoDB. &lt;/li&gt;
&lt;li&gt;It helps improve response times from single-digit milliseconds to microseconds.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The AWS shared responsibility model
&lt;/h2&gt;

&lt;p&gt;you treat the environment as a collection of parts that build upon each other. AWS is responsible for some parts of your environment and you (the customer) are responsible for other parts. This concept is known as the shared responsibility model.&lt;/p&gt;

&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%2Fcowjhft7khfp0k7jzrvr.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%2Fcowjhft7khfp0k7jzrvr.png" alt="AWS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you treat the environment as a collection of parts that build upon each other. AWS is responsible for some parts of your environment and you (the customer) are responsible for other parts. This concept is known as the shared responsibility model.&lt;/li&gt;
&lt;li&gt;AWS operates, manages, and controls the components at all layers of the infrastructure. This includes areas such as the host operating system, the virtualization layer, and even the physical security of the data centers from which services operate. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  User permissions and access
&lt;/h2&gt;

&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%2Frgym878hs3fylfuosd73.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%2Frgym878hs3fylfuosd73.png" alt="IAM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  IAM users
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;when you create a new IAM user in AWS, it has no permissions associated with it. To allow the IAM user to perform specific actions in AWS, such as launching an Amazon EC2 instance or creating an Amazon S3 bucket, you must grant the IAM user the necessary permissions&lt;/li&gt;
&lt;li&gt;IAM policies enable you to customize users’ levels of access to resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  IAM groups
&lt;/h2&gt;

&lt;p&gt;An IAM group is a collection of IAM users. When you assign an IAM policy to a group, all users in the group are granted permissions specified by the policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-factor authentication
&lt;/h2&gt;

&lt;p&gt;In IAM, multi-factor authentication (MFA) provides an extra layer of security for your AWS account.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Organizations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;When you create an organization, AWS Organizations automatically creates a root, which is the parent container for all the accounts in your organization.&lt;/li&gt;
&lt;li&gt;In AWS Organizations, you can centrally control permissions for the accounts in your organization by using service control policies (SCPs). SCPs enable you to place restrictions on the AWS services, resources, and individual API actions that users and roles in each account can access.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Organizational units
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In AWS Organizations, you can group accounts into organizational units (OUs) to make it easier to manage accounts with similar business or security requirements. When you apply a policy to an OU, all the accounts in the OU automatically inherit the permissions specified in the policy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS Artifact
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;AWS Artifact is a service that provides on-demand access to AWS security and compliance reports and select online agreements. AWS Artifact consists of two main sections: AWS Artifact Agreements and AWS Artifact Reports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In AWS Artifact Agreements, you can review, accept, and manage agreements for an individual account and all your accounts in AWS Organizations. Different types of agreements are offered to address the needs of customers who are subject to specific regulations, such as the Health Insurance Portability and Accountability Act (HIPAA).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS Artifact Reports provide compliance reports from third-party auditors. These auditors have tested and verified that AWS is compliant with a variety of global, regional, and industry-specific security standards and regulations. AWS Artifact Reports remain up to date with the latest reports released. You can provide the AWS audit artifacts to your auditors or regulators as evidence of AWS security controls. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Customer Compliance Center
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In the Customer Compliance Center, you can read customer compliance stories to discover how companies in regulated industries have solved various compliance, governance, and audit challenges.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  DDOS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A denial-of-service (DoS) attack is a deliberate attempt to make a website or application unavailable to users.&lt;/li&gt;
&lt;li&gt;In a distributed denial-of-service (DDoS) attack, multiple sources are used to start an attack that aims to make a website or application unavailable. This can come from a group of attackers or even a single attacker. The single attacker can use multiple infected computers (also known as “bots”) to send excessive traffic to a website or application.&lt;/li&gt;
&lt;li&gt;AWS Shield Standard automatically protects all AWS customers at no cost. It protects your AWS resources from the most common, frequently occurring types of DDoS attacks. &lt;/li&gt;
&lt;li&gt;AWS Shield Advanced is a paid service that provides detailed attack diagnostics and the ability to detect and mitigate sophisticated DDoS attacks. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS Key Management Service (AWS KMS)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;applications’ data is secure while in storage (encryption at rest) and while it is transmitted, known as encryption in transit.&lt;/li&gt;
&lt;li&gt;AWS Key Management Service (AWS KMS) enables you to perform encryption operations through the use of cryptographic keys. A cryptographic key is a random string of digits used for locking (encrypting) and unlocking (decrypting) data. You can use AWS KMS to create, manage, and use cryptographic keys.&lt;/li&gt;
&lt;li&gt;AWS WAF is a web application firewall that lets you monitor network requests that come into your web applications. &lt;/li&gt;
&lt;li&gt;AWS WAF works together with Amazon CloudFront and an Application Load Balancer.&lt;/li&gt;
&lt;li&gt;Amazon Inspector helps to improve the security and compliance of applications by running automated security assessments. It checks applications for security vulnerabilities and deviations from security best practices, such as open access to Amazon EC2 instances and installations of vulnerable software versions.&lt;/li&gt;
&lt;/ul&gt;

&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%2Flj7a5i3hzfjkrv6mltu7.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%2Flj7a5i3hzfjkrv6mltu7.png" alt="AWS WAF"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon CloudWatch
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Amazon CloudWatch is a web service that enables you to monitor and manage various metrics and configure alarm actions based on data from those metrics.&lt;/li&gt;
&lt;li&gt;CloudWatch uses metrics to represent the data points for your resources. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  CloudWatch alarms
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;With CloudWatch, you can create alarms that automatically perform actions if the value of your metric has gone above or below a predefined threshold. &lt;/li&gt;
&lt;li&gt;The CloudWatch dashboard feature enables you to access all the metrics for your resources from a single location. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS CloudTrail
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AWS CloudTrail records API calls for your account. The recorded information includes the identity of the API caller, the time of the API call, the source IP address of the API caller, and more. - You can think of CloudTrail as a “trail” of breadcrumbs (or a log of actions) that someone has left behind them.&lt;/li&gt;
&lt;li&gt;Within CloudTrail, you can also enable CloudTrail Insights. This optional feature allows CloudTrail to automatically detect unusual API activities in your AWS account. &lt;/li&gt;
&lt;/ul&gt;

&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%2Fqswoqufpf0mni74ou7ab.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%2Fqswoqufpf0mni74ou7ab.png" alt="CLOUD TRAIL"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Trusted Advisor&lt;br&gt;
AWS Trusted Advisor is a web service that inspects your AWS environment and provides real-time recommendations by AWS best practices.&lt;br&gt;
Trusted Advisor compares its findings to AWS best practices in five categories: cost optimization, performance, security, fault tolerance, and service limits. &lt;/p&gt;

&lt;h2&gt;
  
  
  AWS pricing concepts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;For each service, you pay for exactly the amount of resources that you use, without requiring long-term contracts or complex licensing. &lt;/li&gt;
&lt;li&gt;Some services offer reservation options that provide a significant discount compared to On-Demand Instance pricing.
Some services offer tiered pricing, so the per-unit cost is incrementally lower with increased usage.&lt;/li&gt;
&lt;li&gt;For AWS Lambda, you are charged based on the number of requests for your functions and the time that it takes for them to run.&lt;/li&gt;
&lt;li&gt;AWS Lambda allows 1 million free requests and up to 3.2 million seconds of computing time per month.&lt;/li&gt;
&lt;li&gt;Aws consolidate: consolidates bills under an org&lt;/li&gt;
&lt;li&gt;In AWS Budgets, you can create budgets to plan your service usage, service costs, and instance reservations.&lt;/li&gt;
&lt;li&gt;AWS Cost Explorer is a tool that enables you to visualize, understand, and manage your AWS costs and usage over time.&lt;/li&gt;
&lt;li&gt;AWS offers four different Support plans to help you troubleshoot issues, lower costs, and efficiently use AWS services. &lt;/li&gt;
&lt;li&gt;AWS Marketplace is a digital catalog that includes thousands of software listings from independent software vendors. You can use AWS Marketplace to find, test, and buy software that runs on AWS. &lt;/li&gt;
&lt;/ul&gt;

&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%2Fdys2kvllcosiemo2xvs4.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%2Fdys2kvllcosiemo2xvs4.png" alt="AWS MARKETPLACE"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Cloud Adoption Framework (AWS CAF)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;At the highest level, the AWS Cloud Adoption Framework (AWS CAF) organizes guidance into six areas of focus, called Perspectives. Each Perspective addresses distinct responsibilities. The planning process helps the right people across the organization prepare for the changes ahead.
In general, the Business, People, and Governance Perspectives focus on business capabilities, whereas the Platform, Security, and Operations Perspectives focus on technical capabilities.&lt;/li&gt;
&lt;li&gt;The Business Perspective ensures that IT aligns with business needs and that IT investments link to key business results.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Common roles in the Business Perspective include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business managers&lt;/li&gt;
&lt;li&gt;Finance managers&lt;/li&gt;
&lt;li&gt;Budget owners&lt;/li&gt;
&lt;li&gt;Strategy stakeholders&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;The People Perspective supports the development of an organization-wide change management strategy for successful cloud adoption.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Human resources&lt;/li&gt;
&lt;li&gt;Staffing&lt;/li&gt;
&lt;li&gt;People managers&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The Governance Perspective focuses on the skills and processes to align IT strategy with business strategy. This ensures that you maximize the business value and minimize risks.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Common roles in the Governance Perspective include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chief Information Officer (CIO)&lt;/li&gt;
&lt;li&gt;Program managers&lt;/li&gt;
&lt;li&gt;Enterprise architects&lt;/li&gt;
&lt;li&gt;Business analysts&lt;/li&gt;
&lt;li&gt;Portfolio managers&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The Platform Perspective includes principles and patterns for implementing new solutions on the cloud and migrating on-premises workloads to the cloud.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Common roles in the Platform Perspective include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chief Technology Officer (CTO)&lt;/li&gt;
&lt;li&gt;IT managers&lt;/li&gt;
&lt;li&gt;Solutions architects&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The Security Perspective ensures that the organization meets security objectives for visibility, audibility, control, and agility. &lt;/p&gt;&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Common roles in the Security Perspective include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chief Information Security Officer (CISO)&lt;/li&gt;
&lt;li&gt;IT security managers&lt;/li&gt;
&lt;li&gt;IT security analysts&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;The Operations Perspective helps you to enable, run, use, operate, and recover IT workloads to the level agreed upon with your business stakeholders.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common roles in the Operations Perspective include: &lt;/li&gt;
&lt;li&gt;IT operations managers&lt;/li&gt;
&lt;li&gt;IT support managers&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  6 strategies for migration
&lt;/h2&gt;

&lt;p&gt;When migrating applications to the cloud, six of the most common migration strategies that you can implement are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rehosting: also known as “lift-and-shift” involves moving applications without changes. &lt;/li&gt;
&lt;li&gt;Replatforming: also known as “lift, tinker, and shift,” involves making a few cloud optimizations to realize a tangible benefit. &lt;/li&gt;
&lt;li&gt;Refactoring/re-architecting: involves reimagining how an application is architected and developed by using cloud-native features. Refactoring is driven by a strong business need to add features, scale, or performance that would otherwise be difficult to achieve in the application’s existing environment.&lt;/li&gt;
&lt;li&gt;Repurchasing: involves moving from a traditional license to a software-as-a-service model. &lt;/li&gt;
&lt;li&gt;Retaining: consists of keeping applications that are critical for the business in the source environment&lt;/li&gt;
&lt;li&gt;Retiring: the process of removing applications that are no longer needed&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS Snow Family members
&lt;/h2&gt;

&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%2Fdk2mj48ijv5f68u1bw40.jpg" 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%2Fdk2mj48ijv5f68u1bw40.jpg" alt="SNOW FAMILY"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Snowcone is a small, rugged, and secure edge computing and data transfer device&lt;/li&gt;
&lt;li&gt;Snowball Edge Storage Optimized devices are well suited for large-scale data migrations and recurring transfer workflows, in addition to local computing with higher capacity needs. &lt;/li&gt;
&lt;li&gt;AWS Snowmobile is an exabyte-scale data transfer service used to move large amounts of data to AWS. &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If you like my content do like share and give a follow&lt;/p&gt;

&lt;p&gt;&lt;a href="https://linkedin.com/in/theseregrets" rel="noopener noreferrer"&gt;Rishita Shaw&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&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%2F6o9tfpdd113dl7o7v6ee.jpg" 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%2F6o9tfpdd113dl7o7v6ee.jpg" alt="byee"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>webdev</category>
      <category>cloud</category>
    </item>
    <item>
      <title>AWS Cloud Practitioner Certification Cheat Sheet (Part 1/2)☁️⛅</title>
      <dc:creator>Rishita Shaw</dc:creator>
      <pubDate>Thu, 17 Mar 2022 10:21:37 +0000</pubDate>
      <link>https://dev.to/rishitashaw/aws-cloud-practitioner-certification-cheat-sheet-part-13-1k81</link>
      <guid>https://dev.to/rishitashaw/aws-cloud-practitioner-certification-cheat-sheet-part-13-1k81</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This is a cheat sheet for AWS Cloud Practitioner Certification Exam.&lt;br&gt;
If you have already read the first part please refer to the part 2 &lt;a href="https://dev.to/theseregrets/aws-cloud-practitioner-certification-cheat-sheet-part-23-489e"&gt;link&lt;/a&gt;.&lt;br&gt;
This is not enough for preparation but it's enough for revision.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Client-server model
&lt;/h2&gt;

&lt;p&gt;the client can be a web browser or desktop application that a person interacts with to make requests to computer servers. A server can be services such as Amazon Elastic Compute Cloud (Amazon EC2), a type of virtual server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud computing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Cloud computing is the on-demand delivery of IT resources over the Internet with pay-as-you-go pricing. Instead of buying, owning, and maintaining physical data centers and servers, you can access technology services, such as computing power, storage, and databases, on an as-needed basis from a cloud provider like Amazon Web Services (AWS).&lt;/li&gt;
&lt;li&gt;Undifferentiated heavy lifting of IT: the repetitive common tasks that are time-consuming, apparently the ones AWS helps you with&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Types of models for Cloud computing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cloud-based deployment: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run all parts of the application in the cloud.&lt;/li&gt;
&lt;li&gt;Migrate existing applications to the cloud.&lt;/li&gt;
&lt;li&gt;Design and build new applications in the cloud.&lt;/li&gt;
&lt;li&gt;Flexible with the complexity of architecture.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;On-premise aka private cloud deployment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy resources by using virtualization and resource management tools.&lt;/li&gt;
&lt;li&gt;Increase resource utilization by using application management and virtualization technologies.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Hybrid Deployment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect cloud-based resources to on-premises infrastructure.&lt;/li&gt;
&lt;li&gt;Integrate cloud-based resources with legacy IT applications.&lt;/li&gt;
&lt;li&gt;enables to keep the legacy applications on-premises while benefiting from the data and analytics services that run in the cloud.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Benefits of cloud computing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Trade upfront expense for variable expense and overall reduced cost&lt;/li&gt;
&lt;li&gt;scale in or scale-out in response to demand&lt;/li&gt;
&lt;li&gt;you can achieve a lower variable cost than you can get on your own.&lt;/li&gt;
&lt;li&gt;Increase speed and agility&lt;/li&gt;
&lt;li&gt;the global footprint of the AWS Cloud enables you to deploy applications to customers around the world quickly while providing them with low latency. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Intro to Amazon EC2
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;highly flexible, cost-effective, and quick when you compare it to running your own servers on-premises in a data center that you own.&lt;/li&gt;
&lt;li&gt;EC2 runs on top of physical host machines managed by AWS using virtualization technology&lt;/li&gt;
&lt;li&gt;you are sharing the host with multiple other instances, otherwise known as virtual machines. And a hypervisor running on the host machine is responsible for sharing the underlying physical resources between the virtual machines. This idea of sharing underlying hardware is called &lt;strong&gt;multitenancy&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;EC2 instances are secure and separate from each other.  Even though they may be sharing resources, one EC2 instance is not aware of any other EC2 instances also on that host. 
control the networking aspect of EC2 as well as the type of OS (windows or Linux). you also configure what software you want running on the instance&lt;/li&gt;
&lt;/ul&gt;

&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%2F6er6p42aymfl419vpnrq.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%2F6er6p42aymfl419vpnrq.png" alt="Intro to Amazon EC2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon EC2 instance types
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Each instance type is grouped under an instance family and is optimized for certain types of tasks&lt;/li&gt;
&lt;li&gt;Instance types offer varying combinations of CPU, memory, storage, and networking capacity, and give you the flexibility to choose the appropriate mix of resources for your applications.&lt;/li&gt;
&lt;li&gt;The different instance families in EC2 are general purpose, compute optimized, memory optimized, accelerated computing, and storage optimized. &lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;General purpose instances:&lt;/strong&gt; provide a good balance of compute, memory, and networking resources, and can be used for a variety of diverse workloads like web service or code repositories. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compute-optimized instances:&lt;/strong&gt; compute-intensive tasks like gaming servers, high-performance computing or HPC, and even scientific modeling. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;memory-optimized instances:&lt;/strong&gt;  good for memory-intensive tasks. Accelerated computing is good for floating-point number calculations, graphics processing, or data pattern matching, as they use hardware accelerators.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;storage optimized:&lt;/strong&gt; Workloads that require high performance for locally stored data. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;input/output operations per second (IOPS)&lt;/strong&gt; is a metric that measures the performance of a storage device. It indicates how many different input or output operations a device can perform in one second. Storage optimized instances are designed to deliver tens of thousands of low-latency, random IOPS to applications. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon EC2 pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;On-Demand Instances are ideal for short-term, irregular workloads that cannot be interrupted. No upfront costs or minimum contracts apply. The instances run continuously until you stop them, and you pay for only the compute time you use.&lt;/li&gt;
&lt;li&gt;Amazon EC2 Savings Plans enable you to reduce your compute costs by committing to a consistent amount of computing usage for a 1-year or 3-year term.&lt;/li&gt;
&lt;li&gt;Reserved Instances are a billing discount applied to the use of On-Demand Instances in your account. You can purchase Standard Reserved and Convertible Reserved Instances for a 1-year or 3-year term, and Scheduled Reserved Instances for a 1-year term. You realize greater cost savings with the 3-year option.&lt;/li&gt;
&lt;li&gt;Spot Instances are ideal for workloads with flexible start and end times, or that can withstand interruptions. Spot Instances use unused Amazon EC2 computing capacity and offer you cost savings at up to 90% off of On-Demand prices.&lt;/li&gt;
&lt;li&gt;Dedicated Hosts are physical servers with Amazon EC2 instance capacity that is fully dedicated to your use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon EC2 pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;On-Demand Instances are ideal for short-term, irregular workloads that cannot be interrupted. No upfront costs or minimum contracts apply. The instances run continuously until you stop them, and you pay for only the compute time you use.&lt;/li&gt;
&lt;li&gt;Amazon EC2 Savings Plans enable you to reduce your compute costs by committing to a consistent amount of computing usage for a 1-year or 3-year term.&lt;/li&gt;
&lt;li&gt;Reserved Instances are a billing discount applied to the use of &lt;/li&gt;
&lt;li&gt;On-Demand Instances in your account. You can purchase Standard Reserved and Convertible Reserved Instances for a 1-year or 3-year term, and Scheduled Reserved Instances for a 1-year term. You realize greater cost savings with the 3-year option.&lt;/li&gt;
&lt;li&gt;Spot Instances are ideal for workloads with flexible start and end times, or that can withstand interruptions. Spot Instances use unused Amazon EC2 computing capacity and offer you cost savings at up to 90% off of On-Demand prices.&lt;/li&gt;
&lt;li&gt;Dedicated Hosts are physical servers with Amazon EC2 instance capacity that is fully dedicated to your use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scaling Amazon EC2
&lt;/h2&gt;

&lt;p&gt;Scalability involves beginning with only the resources you need and designing your architecture to automatically respond to changing demand by scaling out or in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon EC2 Auto Scaling
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;enables you to automatically add or remove Amazon EC2 instances in response to changing application demand. &lt;/li&gt;
&lt;li&gt;Types of scaling

&lt;ul&gt;
&lt;li&gt;Dynamic scaling responds to changing demand. &lt;/li&gt;
&lt;li&gt;Predictive scaling automatically schedules the right number of &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&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%2Fyrs0y1mwin6z90718zy1.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%2Fyrs0y1mwin6z90718zy1.png" alt="auto scaling"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon EC2 instances based on predicted demand.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;When configuring the size of your Auto Scaling group, you might set the minimum number of Amazon EC2 instances at one. This means that at all times, there must be at least one Amazon EC2 instance running.&lt;/li&gt;
&lt;li&gt;The minimum capacity is the number of Amazon EC2 instances that launch immediately after you have created the Auto Scaling group&lt;/li&gt;
&lt;li&gt;you can set the desired capacity at two Amazon EC2 instances even though your application needs a minimum of a single Amazon EC2 instance to run.&lt;/li&gt;
&lt;li&gt;you can set in an Auto Scaling group is the maximum capacity
Directing traffic with Elastic Load Balancing&lt;/li&gt;
&lt;li&gt;A load balancer is an application that takes in requests and routes them to the instances to be processed. &lt;/li&gt;
&lt;li&gt;ELB is automatically scalable. As your traffic grows, ELB is designed to handle the additional throughput with no change to the hourly cost. When your EC2 fleet auto-scales out, as each instance comes online, the auto-scaling service just lets the  Elastic Load Balancing service know that it's ready to handle the traffic, and off it goes. Once the fleet scales in, ELB first stops all new traffic, and waits for the existing requests to complete, to drain out. Once they do that, then the auto-scaling engine can terminate the instances without disruption to existing customers. &lt;/li&gt;
&lt;/ul&gt;

&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%2Fdw39xj91rcfqr62ts2w5.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%2Fdw39xj91rcfqr62ts2w5.png" alt="load"&gt;&lt;/a&gt;&lt;/p&gt;

&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%2Fwk01e91yck6tus0ib1u3.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%2Fwk01e91yck6tus0ib1u3.png" alt="loader"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the idea of placing messages into a buffer is called messaging and queuing&lt;/li&gt;
&lt;li&gt;A hallmark trait of a tightly coupled architecture is where if a single component fails or changes, it causes issues for other components or even the whole system.&lt;/li&gt;
&lt;li&gt;loosely coupled is an architecture where if one component fails, it is isolated and therefore won't cause cascading failures throughout the whole system.&lt;/li&gt;
&lt;li&gt;Amazon SQS allows you to send, store, and receive messages between software components at any volume. This is without losing messages or requiring other services to be available.&lt;/li&gt;
&lt;li&gt;The data contained within a message is called a payload, and it's protected until delivery. SQS queues are where messages are placed until they are processed.&lt;/li&gt;
&lt;li&gt;Amazon SNS is similar in that it is used to send out messages to services, but it can also send out notifications to end users. It does this in a different way called a publish/subscribe or pub/sub model. This means that you can create something called an SNS topic which is just a channel for messages to be delivered. &lt;/li&gt;
&lt;li&gt;For decoupled applications and microservices, Amazon SQS enables you to send, store, and retrieve messages between components. This decoupled approach enables the separate components to work more efficiently and independently. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS Lamda
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lambda is one serverless compute option. Lambda's a service that allows you to upload your code into what's called a Lambda function. Configure a trigger and from there, the service waits for the trigger. &lt;/li&gt;
&lt;li&gt;it is automatically scalable, highly available and all of the maintenance in the environment itself is done by AWS.&lt;/li&gt;
&lt;li&gt;Fargate is a serverless compute platform for ECS or EKS.&lt;/li&gt;
&lt;li&gt;If you are trying to host traditional applications and want full access to the underlying operating system like Linux or Windows, you are going to want to use EC2. If you are looking to host short-running functions, service-oriented, or event-driven applications and you don't want to manage the underlying environment at all, look into the serverless AWS Lambda. If you are looking to run Docker container-based workloads on AWS, you first need to choose your orchestration tool. &lt;/li&gt;
&lt;li&gt;The term “serverless” means that your code runs on servers, but you do not need to provision or manage these servers.&lt;/li&gt;
&lt;/ul&gt;

&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%2Flxnsrsxeh0mb31t2zszp.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%2Flxnsrsxeh0mb31t2zszp.png" alt="lamda function"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Containers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;provide you with a standard way to package your application's code and dependencies into a single object. You can also use containers for processes and workflows in which there are essential requirements for security, reliability, and scalability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon Elastic Container Service (Amazon ECS)
&lt;/h2&gt;

&lt;p&gt;highly scalable, high-performance container management system that enables you to run and scale containerized applications on AWS. &lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Elastic Kubernetes Service (Amazon EKS)
&lt;/h2&gt;

&lt;p&gt;fully managed service that you can use to run Kubernetes on AWS.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Global infrastructure
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Inside each Region, we have multiple data centers that have all the compute, storage and other services you need to run your applications. Each Region can be connected to each other Region through a high-speed fiber network, controlled by AWS, a truly global operation from corner to corner if you need it to be. Now before we get into the architecture of how each Region is built, it's important to know that you, the business decision-maker, get to choose which Region you want to run out of.&lt;/li&gt;
&lt;li&gt;Factors affecting region choices

&lt;ul&gt;
&lt;li&gt;Compliance with data governance and legal requirements&lt;/li&gt;
&lt;li&gt;Proximity to your customers&lt;/li&gt;
&lt;li&gt;Available services within a Region&lt;/li&gt;
&lt;li&gt;Pricing&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Availability Zones
&lt;/h2&gt;

&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%2F2lc70d67i30nmqxjnk5s.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%2F2lc70d67i30nmqxjnk5s.png" alt="Availability Zones"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An Availability Zone is a single data center or a group of data centers within a Region. Availability Zones are located tens of miles apart from each other. This is close enough to have low latency (the time between when content requested and received) between Availability Zones. However, if a disaster occurs in one part of the Region, they are distant enough to reduce the chance that multiple Availability Zones are affected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Edge locations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CDNs are commonly used, and on AWS, we call our CDN Amazon CloudFront. Amazon CloudFront is a service that helps deliver data, video, applications, and APIs to customers around the world with low latency and high transfer speeds. Amazon CloudFront uses what are called Edge locations, all around the world, to help accelerate communication with users, no matter where they are. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Provision AWS resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The AWS Management Console is a web-based interface for accessing and managing AWS services. You can quickly access recently used services and search for other services by name, keyword, or acronym. &lt;/li&gt;
&lt;li&gt;AWS CLI enables you to control multiple AWS services directly from the command line within one tool. AWS CLI is available for users on Windows, macOS, and Linux. &lt;/li&gt;
&lt;li&gt;SDKs enable you to use AWS services with your existing applications or create entirely new applications that will run on AWS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS Elastic Beanstalk
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;you provide code and configuration settings, and Elastic Beanstalk deploys the resources necessary to perform the following tasks:

&lt;ul&gt;
&lt;li&gt;Adjust capacity&lt;/li&gt;
&lt;li&gt;Load balancing&lt;/li&gt;
&lt;li&gt;Automatic scaling&lt;/li&gt;
&lt;li&gt;Application health monitoring&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS CloudFormation
&lt;/h2&gt;

&lt;p&gt;With AWS CloudFormation, you can treat your infrastructure as code. This means that you can build an environment by writing lines of code instead of using the AWS Management Console to individually provision resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Virtual Private Cloud (Amazon VPC)
&lt;/h2&gt;

&lt;p&gt;Amazon VPC enables you to provision an isolated section of the AWS Cloud. In this isolated section, you can launch resources in a virtual network that you define. Within a virtual private cloud (VPC), you can organize your resources into subnets. A subnet is a section of a VPC that can contain resources such as Amazon EC2 instances.&lt;/p&gt;

&lt;h2&gt;
  
  
  Internet gateway
&lt;/h2&gt;

&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%2Fh8bonujokce9ebmqe6b9.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%2Fh8bonujokce9ebmqe6b9.png" alt="gateway"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Virtual private gateway
&lt;/h2&gt;

&lt;p&gt;The virtual private gateway is the component that allows protected internet traffic to enter into the VPC.&lt;/p&gt;

&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%2Fdzd88h6rwfeszporwjiq.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%2Fdzd88h6rwfeszporwjiq.png" alt="VPN"&gt;&lt;/a&gt;&lt;br&gt;
A virtual private gateway enables you to establish a virtual private network (VPN) connection between your VPC and a private network, such as an on-premises data center or internal corporate network.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Direct Connect
&lt;/h2&gt;

&lt;p&gt;AWS Direct Connect is a service that enables you to establish a dedicated private connection between your data center and a VPC. &lt;/p&gt;

&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%2Flr2gh1oha14jbnpxdcwt.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%2Flr2gh1oha14jbnpxdcwt.png" alt="AWS Direct Connect"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Subnets and network access control lists
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A subnet is a section of a VPC in which you can group resources based on security or operational needs. Subnets can be public or private. &lt;/li&gt;
&lt;li&gt;Public subnets contain resources that need to be accessible by the public, such as an online store’s website.&lt;/li&gt;
&lt;li&gt;Private subnets contain resources that should be accessible only through your private network, such as a database that contains customers’ personal information and order histories. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Network traffic in a VPC
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A packet is a unit of data sent over the internet or a network. 
Before a packet can enter into a subnet or exit from a subnet, it checks for permissions. These permissions indicate who sent the packet and how the packet is trying to communicate with the resources in a subnet.&lt;/li&gt;
&lt;li&gt;The VPC component that checks packet permissions for subnets is a network access control list (ACL).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Network access control lists (ACLs)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A network access control list (ACL) is a virtual firewall that controls inbound and outbound traffic at the subnet level.
By default, your account’s default network ACL allows all inbound and outbound traffic, but you can modify it by adding your own rules. For custom network ACLs, all inbound and outbound traffic is denied until you add rules to specify which traffic to allow. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stateless packet filtering
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Network ACLs perform stateless packet filtering. They remember nothing and check packets that cross the subnet border each way: inbound and outbound. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security groups
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A security group is a virtual firewall that controls inbound and outbound traffic for an Amazon EC2 instance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stateful packet filtering
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Security groups perform stateful packet filtering. They remember previous decisions made for incoming packets.&lt;/li&gt;
&lt;li&gt;When a packet response for that request returns to the instance, the security group remembers your previous request. The security group allows the response to proceed, regardless of inbound security group rules.&lt;/li&gt;
&lt;/ul&gt;

&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%2Fc8iubfzj10wgpi4s42uj.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%2Fc8iubfzj10wgpi4s42uj.png" alt="Stateful packet filtering"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Domain Name System (DNS)
&lt;/h2&gt;

&lt;p&gt;You can think of DNS as being the phone book of the internet. DNS resolution is the process of translating a domain name to an IP address. &lt;/p&gt;

&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%2Fggje2s73v2zlatxpetig.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%2Fggje2s73v2zlatxpetig.png" alt="DNS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Route 53
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Route 53 is a DNS web service. It gives developers and businesses a reliable way to route end users to internet applications hosted in AWS. &lt;/li&gt;
&lt;li&gt;Amazon Route 53 connects user requests to infrastructure running in AWS (such as Amazon EC2 instances and load balancers). - It can route users to infrastructure outside of AWS&lt;/li&gt;
&lt;/ul&gt;

&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%2Fsxdwsx20fgdhr1cwzzfb.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%2Fsxdwsx20fgdhr1cwzzfb.png" alt="Amazon Route 53"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;h2&gt;
  
  
  part 2 is out!! &lt;a href="https://dev.to/theseregrets/aws-cloud-practitioner-certification-cheat-sheet-part-23-489e"&gt;Click here&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;If you like my content do like share and give a follow&lt;/p&gt;

&lt;p&gt;&lt;a href="https://linkedin.com/in/theseregrets" rel="noopener noreferrer"&gt;Rishita Shaw&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&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%2Fam02tk9g61fsei80xfrw.jpg" 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%2Fam02tk9g61fsei80xfrw.jpg" alt="learning"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
