<?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: Joshua</title>
    <description>The latest articles on DEV Community by Joshua (@onwuemene).</description>
    <link>https://dev.to/onwuemene</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%2F830259%2F14d6d64c-2d04-42a4-856a-d73ed4d94e7c.jpg</url>
      <title>DEV Community: Joshua</title>
      <link>https://dev.to/onwuemene</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/onwuemene"/>
    <language>en</language>
    <item>
      <title>My first Open Source contribution</title>
      <dc:creator>Joshua</dc:creator>
      <pubDate>Wed, 11 Jun 2025 03:33:55 +0000</pubDate>
      <link>https://dev.to/onwuemene/my-first-open-source-contribution-1iee</link>
      <guid>https://dev.to/onwuemene/my-first-open-source-contribution-1iee</guid>
      <description>&lt;p&gt;Finally, I am writing this article after much procrastination. I have had a lot on my desk, which is why I have been procrastinating.&lt;/p&gt;

&lt;p&gt;As one of the mentors at the &lt;a href="https://technicalwritingmp.com/" rel="noopener noreferrer"&gt;Technical Writing Mentorship Program&lt;/a&gt; (TWMP), I volunteered to be part of the migration team as the program wanted to migrate its documentation from Hugo to Docusaurus. I was excited about this project, hence my willingness to volunteer.&lt;/p&gt;

&lt;p&gt;When the project lead (&lt;a href="https://www.linkedin.com/in/prince-onyeanuna-607352246/" rel="noopener noreferrer"&gt;Prince Onyeanuna&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/joklinztech/" rel="noopener noreferrer"&gt;Wisdom Nwokocha&lt;/a&gt;) at the TWMP brought out the Plan for the migration, I was given a position that I never thought of when I joined.  I was made the team lead for the HomePage redesign. Now, apart from being my first open-source contribution and documentation migration, it was also the first time I led a documentation migration team.&lt;/p&gt;

&lt;p&gt;In my team, I had two fantastic teammates: &lt;a href="https://www.linkedin.com/in/edun-rilwan/" rel="noopener noreferrer"&gt;Edun Rilwan&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/peace-sandy-bb7a691b0/" rel="noopener noreferrer"&gt;Peace Sandy&lt;/a&gt;, and together, we created this beautiful homepage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv551ax2g8sw4947xqt0q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv551ax2g8sw4947xqt0q.jpg" alt="Image description" width="378" height="1080"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Fig 1: TWMP new home page&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How did we do it?
&lt;/h2&gt;

&lt;p&gt;As the team lead, most of the responsibility fell to me, and since it was my first time leading a project like this, it was the perfect opportunity to learn on the job.&lt;/p&gt;

&lt;p&gt;When I was appointed team lead for the home page redesign on April 21, 2025, I had to organise my team, and we held a series of meetings to discuss how to accomplish our tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9hzrao2poubegmuqm7g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9hzrao2poubegmuqm7g.png" alt="Image description" width="800" height="340"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Fig 2: HomePage team members meeting on Google Meet&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Here is how we did it.
&lt;/h2&gt;

&lt;p&gt;1.) We created a Canva Design, which served as a blueprint for building our home page.&lt;/p&gt;

&lt;p&gt;Here is the URL to view the design: &lt;a href="https://twmp.my.canva.site/" rel="noopener noreferrer"&gt;https://twmp.my.canva.site/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.) We divided the page into two sections, one for each person. Peace handled the first two sections (the hero section), I handled the following two sections (“hands-on courses” and “check our blog”) while Edun handled the last two sections (“Testimonial” and the “footer” sections)&lt;/p&gt;

&lt;p&gt;3.) When we're done working, my team members all push their changes to their respective branches. Peace and Edun created their branch where they worked on and pushed their changes to, while I created the team branch, where I worked on and accepted my team member's pull request and merged it to the Homepage branch.&lt;/p&gt;

&lt;p&gt;4.) When my team members were done, I made sure to cross-check everything and that they were working as intended, before I sent a PR to &lt;a href="https://github.com/Aahil13" rel="noopener noreferrer"&gt;Prince Onyeanuna&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The whole process looks simple and easy as I write it, but it wasn’t so simple because we faced many challenges.&lt;/p&gt;

&lt;p&gt;1.) Initially, we planned to use TailwindCSS for the project. However, despite following the documentation carefully, we couldn’t get it to initialize successfully. After multiple attempts, we decided to switch to Vanilla CSS to complete the task.&lt;/p&gt;

&lt;p&gt;2.) As expected with most collaborative development projects, we also encountered merge conflicts—because there’s rarely open source without them. Our major challenge was a dependency conflict involving the &lt;code&gt;yarn.lock&lt;/code&gt; file. Despite several attempts to resolve the issue, nothing worked. Eventually, we deleted the file from the branch and reinstalled all dependencies using NPM. This allowed us to move forward with the project smoothly.&lt;/p&gt;

&lt;p&gt;Despite all the struggles and hurdles, we were able to come up with a good work, and the project leads, &lt;a href="https://github.com/Aahil13" rel="noopener noreferrer"&gt;Prince Onyeanuna&lt;/a&gt; and &lt;a href="https://github.com/wise4rmgod" rel="noopener noreferrer"&gt;Wisdom Nwokocha&lt;/a&gt; commended us for a job well done.&lt;/p&gt;

&lt;p&gt;Here is a pic of the old docs home page and the new docs homepage&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Fig 3: The old docs home page at Hugo&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Fig 4: The new docs home page at Docusaurus&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learnt as the Team lead
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Communication between the team lead and the project lead is as important as communication between the team lead and the team members.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My knowledge about git improves: Been able to manage branches, handle Merge conflicts, and review pull requests made me understand Git more.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Patience and empathy when dealing with your colleague&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deadline management.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's next for me?
&lt;/h2&gt;

&lt;p&gt;We’re in phase 2 of our documentation, which focuses on restoring removed content, enhancing interactivity, and refining the overall documentation experience.&lt;/p&gt;

&lt;p&gt;It has been a learning experience so far, and I am grateful to my team members (&lt;a href="https://github.com/Peacesandy" rel="noopener noreferrer"&gt;Peace&lt;/a&gt; and &lt;a href="https://github.com/Omotunde2005" rel="noopener noreferrer"&gt;Edun&lt;/a&gt;) and the &lt;a href="https://github.com/Technical-writing-mentorship-program" rel="noopener noreferrer"&gt;Technical Writing Mentorship Program&lt;/a&gt; for this experience.&lt;/p&gt;

&lt;p&gt;Thank you for reading this far&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>documentation</category>
      <category>docusaurus</category>
      <category>hugo</category>
    </item>
    <item>
      <title>Integrating OpenAPI With Mintlify</title>
      <dc:creator>Joshua</dc:creator>
      <pubDate>Tue, 04 Mar 2025 09:37:17 +0000</pubDate>
      <link>https://dev.to/onwuemene/integrating-openapi-with-mintlify-204g</link>
      <guid>https://dev.to/onwuemene/integrating-openapi-with-mintlify-204g</guid>
      <description>&lt;p&gt;Can a developer successfully work with an API without a standard API documentation? My answer is as good as yours. This means that API documentation is essential to all developers. A good API documentation is developer-friendly and concise.&lt;/p&gt;

&lt;p&gt;According to the &lt;a href="https://www.openapis.org/" rel="noopener noreferrer"&gt;OpenAPI specification initiative&lt;/a&gt;, OpenAPI is the standard for defining your API. This means that you can migrate your API documentation from one platform to another with the help of this file. For example, you can migrate your API docs from &lt;a href="https://www.postman.com/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt; to &lt;a href="https://readme.com/" rel="noopener noreferrer"&gt;ReadMe&lt;/a&gt; or &lt;a href="https://mintlify.com/" rel="noopener noreferrer"&gt;Mintlify&lt;/a&gt; or vice versa.&lt;/p&gt;

&lt;p&gt;This tutorial will walk you through integrating your OpenAPI spec file into your Mintlify project. By the end of this tutorial, you will have a fully functional API documentation, powered by an OpenAPI spec file. &lt;/p&gt;

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

&lt;p&gt;1.) Mintlify installed: You need &lt;a href="https://mintlify.com/" rel="noopener noreferrer"&gt;Mintlify&lt;/a&gt; installed on your local computer, if you don't have one, we'll cover how to install it.&lt;/p&gt;

&lt;p&gt;2.) Node.js installed: Install Node.js (version 19 or higher) before proceeding. You can download it &lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;3.) Basic knowledge of OpenAPI &lt;/p&gt;

&lt;p&gt;4.) You need to have some endpoints in your openAPI spec file in JSON or YAML format.&lt;/p&gt;

&lt;p&gt;For this tutorial, I will use the &lt;a href="https://raw.githubusercontent.com/onwuemenejoshua/docs/refs/heads/main/api-reference/openapi3.json" rel="noopener noreferrer"&gt;Movie Database OpenAPI spec file&lt;/a&gt;. You can find the complete documentation &lt;a href="https://sirjosh.mintlify.app/api-reference/authentication/create-guest-session" rel="noopener noreferrer"&gt;here&lt;/a&gt;, and you can also clone the project from the &lt;a href="https://github.com/onwuemenejoshua/docs" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; if you want to work with it on your local computer.&lt;/p&gt;

&lt;p&gt;Alright, let’s get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;STEP 1: Set up your Mintlify Project&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;1.) Go to the website &lt;a href="https://mintlify.com/" rel="noopener noreferrer"&gt;Mintlify website&lt;/a&gt; and sign up using Google&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;complete your profile by providing additional details, such as the name of your company (The name of your documentation).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set up your first documentation deployment by following the instructions here&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;It will look like this when done&lt;/p&gt;

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

&lt;p&gt;2.) Go to any Code Editor of your choice, navigate to the project directory, open the terminal, and run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -g mintlify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should use the command to install &lt;a href="https://www.npmjs.com/package/mintlify" rel="noopener noreferrer"&gt;Mintlify CLI&lt;/a&gt; globally.&lt;/p&gt;

&lt;p&gt;3.) After installing Mintlify globally, you enable local preview of your Mintlify documentation with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mintlify dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;STEP 2: Understanding the OpenAPI spec file format&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The OpenAPI spec file, which is mostly edited in the &lt;a href="https://editor-next.swagger.io/" rel="noopener noreferrer"&gt;Swagger Editor&lt;/a&gt;, is stored in JSON or YAML format. You can use any format of your choice, but it is advisable to use the YAML format because it is easier to read and maintain.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftym2woahiduv6l2idnxw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftym2woahiduv6l2idnxw.png" alt="The OpenAPI spec file for the Movie Database API (TMDb)" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;STEP 3: Integrate your OpenAPI spec file into Mintlify&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When you are done documenting your endpoint in the OpenAPI spec file, ensure that you save and download it either as JSON or YAML format to your local device.&lt;/p&gt;

&lt;p&gt;To integrate your OpenAPI spec file with your Mintlify project, follow these steps:&lt;/p&gt;

&lt;p&gt;1.) Put your &lt;code&gt;“openapi.yaml or openapi.json”&lt;/code&gt; file in the same directory as the "api-reference" folder in your Mintlify project.&lt;/p&gt;

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

&lt;p&gt;2.) Go to your &lt;code&gt;docs.json&lt;/code&gt; file and call your OpenAPI using the correct file path.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "tab": "API Reference",
  "groups": [
    {
      "group": "Endpoints",
      "openapi": {
        "source": "/api-reference/openapi3.json",
        "directory": "api-reference"
      }
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;openapi&lt;/code&gt; contains two properties here, “source” and “directory”&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;“source”: “/api-reference/openapi3.json”&lt;/code&gt;: The source specifies the path to your OpenAPI spec file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;"directory": "api-reference"&lt;/code&gt;: This specifies the directory where the OpenAPI spec file is located.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you are done, it is important to validate your OpenAPI spec file before pushing it to your GitHub repository. Use the command &lt;code&gt;“mintlify openapi-check &amp;lt;openapiFilenameOrUrl&amp;gt;”&lt;/code&gt; to check for errors and validate your work. If no errors, it gives the response: &lt;strong&gt;“✅ Your OpenAPI definition is valid”&lt;/strong&gt;. If there is an error, it points to the specific endpoint where the error is and the reason for the error.&lt;/p&gt;

&lt;p&gt;By doing this, all your documentation in the OpenAPI spec file will be appropriately displayed.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  &lt;strong&gt;Additional Resouces&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To deeply understand Mintlify, here are other great resources that you can  use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://mintlify.com/docs/quickstart" rel="noopener noreferrer"&gt;Mintlify Documentation&lt;/a&gt;: A comprehensive guide for understanding MIntlify.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.openapis.org/" rel="noopener noreferrer"&gt;OpenAPI Specification&lt;/a&gt;: Official OpenAPI documentation to understand the standard.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/@GetMintlify" rel="noopener noreferrer"&gt;Mintlify YouTube channel&lt;/a&gt; to watch tutorial videos.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://editor.swagger.io/" rel="noopener noreferrer"&gt;Swagger editor&lt;/a&gt;: Online tools used to write and test your OpenAPI spec file&lt;/li&gt;
&lt;li&gt;You can engage with other developers on &lt;a href="https://dev.to/t/api"&gt;Dev.to API discussions&lt;/a&gt; or explore the &lt;a href="https://github.com/mintlify" rel="noopener noreferrer"&gt;Mintlify GitHub repository&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>apidocumentation</category>
      <category>mintlify</category>
      <category>openapi</category>
    </item>
    <item>
      <title>How progressive Web Apps (PWA) are revolutionizing website performance</title>
      <dc:creator>Joshua</dc:creator>
      <pubDate>Sun, 27 Oct 2024 15:29:14 +0000</pubDate>
      <link>https://dev.to/onwuemene/how-progressive-web-apps-pwa-are-revolutionizing-website-performance-bc1</link>
      <guid>https://dev.to/onwuemene/how-progressive-web-apps-pwa-are-revolutionizing-website-performance-bc1</guid>
      <description>&lt;p&gt;As we develop as a society and technology grows, the need for high-performance websites also grows. There is a need for websites to be fast, reliable, installable and have offline accessibility and that is where progressive web apps or PWA come into play. In this article, we will look at the overview of PWA and how businesses can leverage them for faster app-like web experiences.&lt;/p&gt;

&lt;p&gt;What is a progressive Web App&lt;br&gt;
Characteristics of PWA&lt;br&gt;
Architectural enablers of PWA&lt;br&gt;
Impact of PWA on website performance&lt;br&gt;
How PWA Benefits Businesses&lt;br&gt;
Conclusion&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a progressive Web App?
&lt;/h2&gt;

&lt;p&gt;A progressive web app is a type of web app that can operate as a website and as a mobile application on any device. It is aimed at delivering a high-performance website with an app-like user experience. &lt;/p&gt;

&lt;p&gt;At its core, a PWA helps businesses build web applications that have the look and feel of a native application but use technologies like HTML, CSS and JAVASCRIPT which are the three fundamental web stacks of a website with additional features like service worker and web manifest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Characteristics of PWA
&lt;/h2&gt;

&lt;p&gt;Key characteristics of PWAs include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Discoverable: PWA and their web pages can be found using a search engine i.e. they are SEO-friendly.&lt;/li&gt;
&lt;li&gt;Installable: They can be made available on any device's home screens without needing an app store.&lt;/li&gt;
&lt;li&gt;Offline Capability: PWA can work with poor internet connection and can work offline because it caches resources which enables the users to access when offline.&lt;/li&gt;
&lt;li&gt;They support push notifications which allows for engagement of any new content.&lt;/li&gt;
&lt;li&gt;They are secured. I.e connections between the user, the app and the server are secured against third parties because it uses HTTPS for its communication.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Architectural enablers of PWA
&lt;/h2&gt;

&lt;p&gt;Having known what PWA is, the next question will be, what makes a PWA a PWA? That is, what transforms a traditional website into a PWA.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Service Worker: These are scripts that run in the background or separately from your browser to handle network requests and caching. These help PWA to deal with poor network connectivity,  and increase the performance of an application, it also enables users to work offline and handle push notifications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Manifest File: These Are JSON file that supports how PWA is treated as an installed application or provide metadata about the PWA. It contains the basic behaviour when installed. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;While we may not go deeper into &lt;a href="https://dev.to/onwuemene/building-progressive-web-applications-with-vanilla-javascript-4733"&gt;building Progressive Web Apps&lt;/a&gt; as it is not the scope of this article, understanding what it is, is essential to enable us to understand the impact it has on website performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Impact of PWA on website performance
&lt;/h2&gt;

&lt;p&gt;In our day and age, most traditional websites are beginning to convert to PWA because of its high impact on website performance. Such as&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Increase in load times due to its caching with service workers and minimized network requests.&lt;/li&gt;
&lt;li&gt;Improved resource efficiency: They consumed less data compared to traditional web apps, making them lightweight which makes them more efficient.&lt;/li&gt;
&lt;li&gt;They are universally compatible across devices due to their responsive principles.&lt;/li&gt;
&lt;li&gt;They improved the SEO ranking of a website due to their high performance.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How PWA Benefits Businesses
&lt;/h2&gt;

&lt;p&gt;The benefit that PWA has on business is enormous, some are;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It increases engagement: Its push notifications, offline access and fast loading time help boost user engagement on your website.&lt;/li&gt;
&lt;li&gt;Higher conversion rate: faster load times on your website, leads to higher engagement which leads to more conversion in sales.&lt;/li&gt;
&lt;li&gt;Reduced customer acquisition costs (CAC): since PWA are web web-based, businesses benefit from organic search traffic, unlike native apps that rely on app store marketing.&lt;/li&gt;
&lt;li&gt;Saved development cost: PWA allows businesses to create a web app that works across multiple platforms (Web, Android, iOS) which saves development costs, compared to building native apps separately for each platform.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Progressive Web Applications (PWAs) are changing the way websites work by integrating mobile apps and website features. PWAs help businesses Improve user engagement and conversion rates and provide a fast, reliable offline experience on any device. As PWAs get better, they will have a greater impact on the digital landscape. Giving businesses a cost-effective and efficient way to meet the growing demand for high-performance web experiences.&lt;/p&gt;

</description>
      <category>pwa</category>
      <category>pwabuilder</category>
      <category>webdev</category>
      <category>learning</category>
    </item>
    <item>
      <title>The Role of CDN in Enhancing Website Performance and Reliability.</title>
      <dc:creator>Joshua</dc:creator>
      <pubDate>Wed, 09 Oct 2024 00:08:55 +0000</pubDate>
      <link>https://dev.to/onwuemene/the-role-of-cdn-in-enhancing-website-performance-and-reliability-34b3</link>
      <guid>https://dev.to/onwuemene/the-role-of-cdn-in-enhancing-website-performance-and-reliability-34b3</guid>
      <description>&lt;p&gt;In a fast-growing internet society, where we have users all around the world but don’t have enough servers all around the world, the experience that users have due to this dynamic is different for everyone due to which location is nearest to the server and this affects the speed of the website or the website performance, but with the help of CDN, we can have a better website performance. &lt;/p&gt;

&lt;p&gt;In this article, we will have an understanding of CDN and the role it plays in enhancing website performance.&lt;/p&gt;

&lt;p&gt;What is a CDN&lt;br&gt;
Types of CDN&lt;br&gt;
Choosing the right CDN&lt;br&gt;
The Role of CDN in Improving Website Performance&lt;br&gt;
Conclusion&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a CDN
&lt;/h2&gt;

&lt;p&gt;CDN, which is known as “Content Delivery Network” which was introduced in the late 90’s, accelerates internet content delivery. For example, you have a website and its server is hosted in Washington, and you have users all around the world who make requests to your website every day, the amount of time it will take for the request and response to occur which is measured in milliseconds will be different for each cities or countries. The closer the city is to the server, the quicker the response and the farther the city is from the server, the longer the response which means the website will be slower for certain persons in farther locations from Washington.&lt;/p&gt;

&lt;p&gt;That is where CDN comes into play, by increasing the speed of a website, which is by reducing the distance between the user and the server providing the response or content. These CDN endpoints are placed in as many locations around the world as possible where our users are located. So, when a user outside of Washington tries to access your website, its content is first retrieved by the content delivery network (CDN) and then distributed glocally, resulting in faster delivery which leads to better website performance.&lt;/p&gt;

&lt;p&gt;At a fundamental level, CDN brings content to the user and this improves the performance of a website.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of CDN
&lt;/h2&gt;

&lt;p&gt;There are two main types of CDN:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;CDN Push: This type requires the website owner to push content to a CDN server. For example, a video or image uploaded to a CDN server for quick distribution to users. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CDN Fetch: In this approach, the CDN server fetches the content from the original server when the user requests it. This is useful when content is updated frequently because the CDN server will have the latest version.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other CDN types include traditional CDN, Cloud-based CDN, peer-to-peer CDN and Hybrid CDN.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the right CDN
&lt;/h2&gt;

&lt;p&gt;Choosing the right CDN is important for any business owner who wants to improve their Website performance. Factors to consider in choosing the right CDN for your website include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Knowing Your Needs.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Traffic Size: This is how much traffic your website generates. This is a key aspect to consider because the CDN will help to manage spikes in website traffic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Geographic Regions: Be aware of where your visitors are. A CDN with worldwide servers can reach more international users at greater speeds.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; Security.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;DDoS Mitigation: Choose a CDN with strong DDoS (Distributed denial of service) protection that will effectively block cyber attacks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SSL Support: The CDN should be able to provide secure delivery of content with support for SSL certificates.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; Integration and Compatibility.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Platform Compatibility: Ensure the CDN is compatible with your existing CMS (content management system) among other technologies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ease of Setup: It would be nice if the CDN was easy to set up, and the processes were documented.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; Cost Considerations.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Pricing Model: Ascertain the pricing methodology, which could be pay-as-you-go, or flat rate amongst others, and align it to your budget.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hidden Costs: Be prepared to incur additional costs that will emerge from bandwidth, storage, and other value-added services.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; Support and Reliability.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Customer Support: Evaluate the level of customer support, such as its reachability and response time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uptime Guarantee: Look out for a CDN offering a good uptime guarantee (preferably above 99.9%) to rely on the service.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Role of CDN in Improving Website Performance
&lt;/h2&gt;

&lt;p&gt;CDN helps to improve website performance in the following ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Reduced latency: Since CDN hosts content on multiple servers distributed across different geographical locations when a user calls for a web page, the CDN will serve it from the user's geographical location or close to the user's geographical location. This reduces the travel time for data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Load Balancing: CDN facilitates the distribution of load traffic between different servers. This handles heavy volumes without slowing down the network and keeps it responsive because no server is overwhelmed with incoming requests or traffic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved security: Many of the CDNs provide DDoS protection and securely deliver content. This would prevent any attacks from slowing down or minimizing your website. A CDN manages malicious traffic to maintain performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Caching: The CDN stores content that is static (images, stylesheet, scripts) on their servers, which means subsequent requests for the same content can be served more quickly from the cache rather than from the originating server which reduces its load.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dynamic Content Acceleration: While static content gets frequently cached, several other optimization techniques such as route optimization and dynamic site acceleration have also been enabled in CDNs for performance acceleration of dynamic content. Ensuring that each content loads quicker as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Increased Reliability: With multiple servers, when one server goes down, the other can keep sending content. This improves the reliability and uptime of the website.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;In a modern world like ours which keeps developing every day, the User experience and speed of a website mean a lot to everyone, and the role CDN played in ensuring a great website experience cannot be downplayed. As your business continues to grow and expands its reach, choosing the right CDN becomes an important component toward ensuring a fast, secure and seamless web experience.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>aws</category>
      <category>learning</category>
    </item>
    <item>
      <title>Building Progressive Web Applications with Vanilla JavaScript.</title>
      <dc:creator>Joshua</dc:creator>
      <pubDate>Tue, 13 Jun 2023 06:14:14 +0000</pubDate>
      <link>https://dev.to/onwuemene/building-progressive-web-applications-with-vanilla-javascript-4733</link>
      <guid>https://dev.to/onwuemene/building-progressive-web-applications-with-vanilla-javascript-4733</guid>
      <description>&lt;p&gt;A progressive web application (PWA) is a web application that can be installed on a user’s device and used just like a native app. It gives your website great features that traditional websites cannot do. This increases performance and makes it SEO-friendly and usable across all devices.&lt;/p&gt;

&lt;p&gt;In this article, we will build a Progressive Web Application using HTML, CSS, and Vanilla JavaScript.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is a progressive Web application&lt;/li&gt;
&lt;li&gt;A brief history of PWA&lt;/li&gt;
&lt;li&gt;Benefits of a Progressive Web app&lt;/li&gt;
&lt;li&gt;
Getting Started with PWA

&lt;ul&gt;
&lt;li&gt;    What is a Service Worker
&lt;/li&gt;
&lt;li&gt;    Benefits of Service Worker
&lt;/li&gt;
&lt;li&gt;    Limitation of Service Worker
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;    What is Web App manifest
&lt;/li&gt;

&lt;li&gt;

Building a JavaScript Calculator

&lt;ul&gt;
&lt;li&gt;    Index file
&lt;/li&gt;
&lt;li&gt;    CSS Stylesheet
&lt;/li&gt;
&lt;li&gt;    Creating the js file
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

Transforming our JavaScript Calculator into a PWA Calculator

&lt;ul&gt;
&lt;li&gt;    Create the Service Worker
&lt;/li&gt;
&lt;li&gt;    Registration
&lt;/li&gt;
&lt;li&gt;    Installation
&lt;/li&gt;
&lt;li&gt;    Activation
&lt;/li&gt;
&lt;li&gt;    Fetch our cache asset
&lt;/li&gt;
&lt;li&gt;    Creating the Web App manifest file
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Conclusion&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is a progressive Web application?
&lt;/h2&gt;

&lt;p&gt;A progressive web app (PWA) is an application that offers native app features through web technologies (HTML, CSS, and JavaScript). The web application can easily be published online by developers, who can ensure that it satisfies the minimal installation requirements and that users can add it to their home screens.&lt;/p&gt;

&lt;h2&gt;
  
  
  A brief history of PWA
&lt;/h2&gt;

&lt;p&gt;Progressive web apps, first coined by Frances Berriman and Alex Russell in 2015, gained popularity in 2016 when Google announced it would support PWAs in Chrome. Similar announcements from other major browser organization, such as Mozilla and Microsoft, followed this announcement.&lt;/p&gt;

&lt;p&gt;In 2017, Google launched the Progressive Web App Experimentation Platform, which allowed developers to test PWAs in a broader range of devices and browsers. This platform helped to accelerate the adoption of PWAs by making it easier for developers to build and test PWAs.&lt;/p&gt;

&lt;p&gt;In 2018, Google announced it would add support for PWAs to Android. This announcement allowed developers to build PWAs that could be installed on Android devices and used like native apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of a Progressive Web app
&lt;/h2&gt;

&lt;p&gt;There are many benefits of building a PWA;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installable: PWAs can be installed on the user's device like a native app. This allows users to access the app even when they are offline.&lt;/li&gt;
&lt;li&gt;Offline-capable: PWAs can work offline, even without an internet connection. This is because PWAs cache resources, such as images and JavaScript files. Thus, they can be accessed even when the user is offline.&lt;/li&gt;
&lt;li&gt;App-like: PWAs can look and feel like native apps. PWAs can use the device's native UI elements, such as the notification bar and home screen.&lt;/li&gt;
&lt;li&gt;Fast: PWAs are typically faster than traditional web applications. This is primarily because of their cache resources and the fact that they use the device's native APIs.&lt;/li&gt;
&lt;li&gt;Reliable: PWAs are more reliable than traditional web applications. This is because PWAs can work offline and are not affected by network outages.&lt;/li&gt;
&lt;li&gt;Engaging: PWAs can be more engaging than traditional web applications. This is because PWAs can use push notifications to keep users updated with new content.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started with PWA
&lt;/h2&gt;

&lt;p&gt;PWA is made possible through the help of &lt;strong&gt;service worker&lt;/strong&gt; and &lt;strong&gt;manifest.json&lt;/strong&gt;. Service worker and manifest.json convert our traditional web app to a progressive one.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a &lt;strong&gt;Service Worker&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;service worker&lt;/strong&gt; is a script that runs in the background of your browser and manages network requests for your web application.&lt;br&gt;
They can be used to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cache resources so that they can be accessed even when the user is offline.&lt;/li&gt;
&lt;li&gt;Control offline behavior. One of such situation is determining what happens when the user tries to access a page that is not cached.&lt;/li&gt;
&lt;li&gt;Provide push notifications, which can be used to keep users updated with new content.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Benefits of &lt;strong&gt;Service Worker&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Service worker&lt;/strong&gt; provides multiple benefits in addition to being a powerful tool for enhancing your online application's functionality, dependability, and user experience.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved performance: They can cache resources like images and JavaScript files. This allows these files to be accessed quickly, even when the user is offline. Thus improving the performance of your web application, especially on mobile devices and regions with slow internet connections.&lt;/li&gt;
&lt;li&gt;Improved reliability: Service worker are capable of handling network errors, such as outages. Thus, your web application can continue to function even when the user is offline. This can improve the reliability of your web application, especially for users with unreliable internet connections.&lt;/li&gt;
&lt;li&gt;Improved engagement: Can be used to provide push notifications, which can be used to keep users updated with new content. This can help improve your users' engagement, especially for users who are interested in your content.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Limitation of &lt;strong&gt;Service Worker&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Service worker&lt;/strong&gt; are a powerful tool, but they have some limitations. It is important to understand these limitations before you start using service workers.&lt;br&gt;
Here are some of the things that service workers cannot do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service workers cannot access the DOM (). This means that they cannot directly interact with the user interface of your web application.&lt;/li&gt;
&lt;li&gt;Service workers cannot access the user's data; This means that they cannot access the user's cookies, local storage, or IndexedDB.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  What is Web App manifest
&lt;/h3&gt;

&lt;p&gt;Web App manifest which is the manifest.json is a configuration file used in PWAs to provide metadata and settings about the web application. It is a JSON (JavaScript Object Notation) file that contains key-value pairs defining various properties, such as the app's name, icons, colours, and other characteristics.&lt;br&gt;
The manifest.json file contains the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: The name of your PWA.&lt;/li&gt;
&lt;li&gt;Description: A short description of your PWA. What does it do?&lt;/li&gt;
&lt;li&gt;Start_url: The page URL should be opened when the PWA is launched.&lt;/li&gt;
&lt;li&gt;Icons: A list of graphical symbols used to represent your PWA.&lt;/li&gt;
&lt;li&gt;Theme_colour: The colour that should be used for the UI of your PWA.&lt;/li&gt;
&lt;li&gt;Background_color: The background colour that should be used for the UI of your PWA.&lt;/li&gt;
&lt;li&gt;Display: The display mode that should be used for your PWA.&lt;/li&gt;
&lt;li&gt;Scope: The scope of a Progressive Web App (PWA) is the set of resources that are accessible to the PWA when it is running offline.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Building a JavaScript Calculator
&lt;/h2&gt;

&lt;p&gt;For this article, I will transform our calculator application into a PWA. To do this, I need to start with my Index.html, which containers all the code I will use.&lt;/p&gt;
&lt;h2&gt;
  
  
  Index file
&lt;/h2&gt;

&lt;p&gt;This folder will contain all of our index.html code that will be used in building this project. in our project, we will be building a calculator and making it a progressive web app which means it will have all the benefits of a PWA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Index.html&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;meta name="description" content="building a progressive web app" /&amp;gt;
    &amp;lt;meta name="author" content="Onwumene Joshua" /&amp;gt;
    &amp;lt;title&amp;gt;Progressive Web App CALCULATOR&amp;lt;/title&amp;gt;
    &amp;lt;link rel="stylesheet" href="style.css" /&amp;gt;
    &amp;lt;script src="main.js" defer&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;link rel="manifest" href="manifest.json" /&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="container"&amp;gt;
      &amp;lt;table&amp;gt;
        &amp;lt;tr&amp;gt;
          &amp;lt;th colspan="4"&amp;gt;
            &amp;lt;input
              type="text"
              class="display"
              value=""
              readonly
              placeholder="0"
            /&amp;gt;
          &amp;lt;/th&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="open-par"&amp;gt;(&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="close-par"&amp;gt;)&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="delete"&amp;gt;Del&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="add"&amp;gt;+&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;

        &amp;lt;tr&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="seven"&amp;gt;7&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="eight"&amp;gt;8&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="nine"&amp;gt;9&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="minus"&amp;gt;-&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="four"&amp;gt;4&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="five"&amp;gt;5&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="six"&amp;gt;6&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="multiply"&amp;gt;x&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="one"&amp;gt;1&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="two"&amp;gt;2&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="three"&amp;gt;3&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="divide"&amp;gt;÷&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="dot"&amp;gt;.&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;button class="zero"&amp;gt;0&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td colspan="2"&amp;gt;&amp;lt;button class="equalTo"&amp;gt;=&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
      &amp;lt;/table&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the code above, the calculator was created using html table property for easy arrangement styling, where each table row contains four table data, except the last table row, which contains three table data&lt;/p&gt;

&lt;h2&gt;
  
  
  CSS Stylesheet
&lt;/h2&gt;

&lt;p&gt;The CSS stylesheet attributes the design features to our calculator.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  background-color: rgb(38, 37, 37);
  height: 100vh;
}

table {
  margin: 100px auto;
  border-radius: 10px;
  padding: 25px;
  font-family: "Montserrat", sans-serif;
  background-color: gray;
}

td {
  /* This is about the table data, the space between each data */
  padding: 5px;
  width: 100px;
  height: 100px;
}

.display {
  border: none;
  background-color: #5e666f;
  border-radius: 10px;
  padding: 25px;
  text-align: right;
  font-size: 30px;
  font-family: "Roboto Mono", monospace;
  color: #800f0f;
  margin-bottom: 20px;
}

input {
  border: none;
  outline: none;
}

button {
  width: 100%;
  height: 100%;
  border: none;
  border-radius: 8px;
  font-size: 30px;
  font-weight: bold;
  padding: 10px 8px;
  cursor: pointer;
  font-family: "Poppins", sans-serif;
}

button:hover {
  transition: 1s;
  transform: scale(1.1);
}

.multiply,
.divide,
.minus,
.add,
.equalTo {
  background-color: #7e90a5;
  box-shadow: rgba(50, 50, 93, 0.25) 0px 30px 60px -12px inset,
    rgba(0, 0, 0, 0.3) 0px 18px 36px -18px inset;
}

.delete {
  background-color: #4e2121;
}

.open-par,
.close-par {
  background-color: #65707d;
  box-shadow: rgba(50, 50, 93, 0.25) 0px 30px 60px -12px inset,
    rgba(0, 0, 0, 0.3) 0px 18px 36px -18px inset;
}

.dot,
.zero,
.one,
.two,
.three,
.four,
.five,
.six,
.seven,
.eight,
.nine {
  box-shadow: rgba(0, 0, 0, 0.17) 0px -23px 25px 0px inset,
    rgba(0, 0, 0, 0.15) 0px -36px 30px 0px inset,
    rgba(0, 0, 0, 0.1) 0px -79px 40px 0px inset, rgba(0, 0, 0, 0.06) 0px 2px 1px,
    rgba(0, 0, 0, 0.09) 0px 4px 2px, rgba(0, 0, 0, 0.09) 0px 8px 4px,
    rgba(0, 0, 0, 0.09) 0px 16px 8px, rgba(0, 0, 0, 0.09) 0px 32px 16px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We gave our table; margin: 100px auto; this set our top and bottom margin at 100 pixels and horizontally centers the element within its container by evenly distributing the available space on the left and right sides.&lt;/p&gt;

&lt;p&gt;All the button was given the same styling for proper arrangement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating the js file
&lt;/h2&gt;

&lt;p&gt;The JavaScript file will help give functionality to the calculator. To do this, we select all our buttons using querySelector and give it the “click” event listener so that when the user clicks on it, it will be able to display something, in our case, we are displaying the value being clicked.&lt;/p&gt;

&lt;p&gt;main.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const open = document.querySelector(".open-par");
const close = document.querySelector(".close-par");
const display = document.querySelector(".display");
const del = document.querySelector(".delete");
const divide = document.querySelector(".divide");
const one = document.querySelector(".one");
const two = document.querySelector(".two");
const three = document.querySelector(".three");
const multiply = document.querySelector(".multiply");
const four = document.querySelector(".four");
const five = document.querySelector(".five");
const six = document.querySelector(".six");
const add = document.querySelector(".add");
const seven = document.querySelector(".seven");
const eight = document.querySelector(".eight");
const nine = document.querySelector(".nine");
const minus = document.querySelector(".minus");
const dot = document.querySelector(".dot");
const zero = document.querySelector(".zero");
const equalTo = document.querySelector(".equalTo");
 //display.value tells the web browser to display whatever the value holds while the += means "append". i.e append what we click to our previous value.
open.addEventListener("click", function () {
  display.value += "(";
});
close.addEventListener("click", function () {
  display.value += ")";
});
one.addEventListener("click", function () {
  display.value += "1";
});
two.addEventListener("click", function () {
  display.value += "2";
});
three.addEventListener("click", function () {
  display.value += "3";
});

four.addEventListener("click", function () {
  display.value += "4";
});
five.addEventListener("click", function () {
  display.value += "5";
});
six.addEventListener("click", function () {
  display.value += "6";
});
seven.addEventListener("click", function () {
  display.value += "7";
});
 eight.addEventListener("click", function () {
  display.value += "8";
});
 nine.addEventListener("click", function () {
  display.value += "9";
});
 zero.addEventListener("click", function () {
  display.value += "0";
});
dot.addEventListener("click", function () {
  display.value += ".";
});
 del.addEventListener("click", function () {
   display.value = "";
});
equalTo.addEventListener("click", function () {
 //this means, try(run) this code for us, but if you catch(see) any error in the input, then display this error message "WRONG INPUT"
  try {
    display.value = eval(display.value);
  } catch (err) {
    display.value = "WRONG INPUT";
  }
});
add.addEventListener("click", function () {
  display.value += "+";
});
minus.addEventListener("click", function () {
  display.value += "-";
});
multiply.addEventListener("click", function () {
  display.value += "*";
});
divide.addEventListener("click", function () {
  display.value += "/";
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Transforming our JavaScript Calculator into a PWA Calculator
&lt;/h2&gt;

&lt;p&gt;We’ve successfully built a traditional web app, but not a progressive one. So to convert our traditional web app into a progressive one, we need to add a &lt;strong&gt;service worker&lt;/strong&gt; and &lt;strong&gt;manifest.json&lt;/strong&gt; to our project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create the Service Worker
&lt;/h2&gt;

&lt;p&gt;Knowing what service worker is and their benefits, we will use it to create this progressive app. For this project, we will create a service worker from scratch, not using a framework like &lt;a href="https://developer.chrome.com/docs/workbox/" rel="noopener noreferrer"&gt;workbox&lt;/a&gt;. Workbox will, however, make the work a lot easier and better.&lt;/p&gt;

&lt;p&gt;The service worker has three life cycles or phases&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Registration&lt;/li&gt;
&lt;li&gt;Installation&lt;/li&gt;
&lt;li&gt;Activation&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Registration
&lt;/h3&gt;

&lt;p&gt;In this phase, the service worker script is registered with the browser. This is done by calling the &lt;code&gt;navigator.serviceWorker.register()&lt;/code&gt; method. The &lt;strong&gt;.register()&lt;/strong&gt; method takes a &lt;strong&gt;service worker&lt;/strong&gt; registration options object as its argument. The service worker registration options object specifies the scope of the service worker, the name of the service worker, and the list of events that the service worker should listen for.&lt;/p&gt;

&lt;p&gt;To register the service worker, you go to your main.js file and register it there;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if ("serviceWorker" in navigator) {
  window.addEventListener("load", () =&amp;gt; {
    navigator.serviceWorker
      .register("./sw.js")
      .then((reg) =&amp;gt; console.log("service Worker: registered"))
      .catch((err) =&amp;gt; console.log(`service worker; Error:${err}`));
  });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code above checks to see if the serviceWorker property is present in the navigator object, (that is the browser) If it is, the code registers a service worker with the &lt;strong&gt;./sw.js&lt;/strong&gt; file. The register() method returns a promise, the &lt;strong&gt;.then()&lt;/strong&gt; means if the registration is successful, console.log(service worker: registered). If the registration fails, the &lt;strong&gt;.catch()&lt;/strong&gt; block is executed, and the error message is printed out.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;Here the browser downloads and installs the service worker script. This is done asynchronously. Once the service worker script has been installed, the browser will call the install event handler of the service worker. The install event handler is responsible for initializing the service worker and caching any resources that the service worker will need to access when it is activated. This will be done in our &lt;strong&gt;sw.js&lt;/strong&gt; file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const cacheName = "calculator v1"; //the name of our cache
const cacheAsset = ["index.html", "style.css", "main.js"]; //this is the asset that we want to cache

self.addEventListener("install", (e) =&amp;gt; {
  console.log("service worker installed");

  e.waitUntil(
    caches
      .open(cacheName)
      .then((cache) =&amp;gt; {
        console.log("service worker: caching files");
        cache.addAll(cacheAsset);
      })
      .then(() =&amp;gt; self.skipWaiting())
  );
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Self&lt;/strong&gt; refers to the service worker itself.&lt;/p&gt;

&lt;p&gt;The code above defines a cache name and a list of assets that should be cached (index.html, CSS stylesheet, and main.js). The code then registers a service worker and uses the &lt;strong&gt;install&lt;/strong&gt; event handler to cache the assets. The install event handler is called when the service worker is installed.&lt;/p&gt;

&lt;p&gt;The caches object provides methods for opening and closing caches. The open() method takes a cache name as its argument and returns a promise that resolves with a cache object. The cache object provides methods for adding and removing resources from the cache. The &lt;strong&gt;addAll()&lt;/strong&gt; method takes an array of resource URLs as its argument(our cacheAssets in our example) and adds all of the resources to the cache. The &lt;strong&gt;skipWaiting()&lt;/strong&gt; method tells the browser that the service worker is ready to handle network requests.&lt;/p&gt;

&lt;p&gt;The code in the install event handler first opens a cache with the name calculator v1. The code then adds the assets in the cacheAsset array to the cache. Finally, the code calls the &lt;strong&gt;skipWaiting()&lt;/strong&gt; method to tell the browser that the service worker is ready to handle network requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Activation
&lt;/h3&gt;

&lt;p&gt;The service worker is activated by the browser. This is done when the browser determines that the service worker can provide a better user experience than the original web page. Once the service worker has been activated, the browser will call the activate event handler of the service worker. The activate event handler is responsible for starting the service worker and beginning to intercept network requests.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.addEventListener("activate", (e) =&amp;gt; {
  console.log("service worker activated");

//removing unwanted caches
  e.waitUntil(
    caches.keys().then((cacheName) =&amp;gt; {
      return Promise.all(
        cacheName.map((cache) =&amp;gt; {
          if (cache !== cacheName) {
            console.log("Service worker: clear old caches");
            return caches.delete(cache);
          }
        })
      );
    })
  );
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code above is a service worker that clears old caches when it is activated. The code first gets a list of all of the caches that are associated with the service worker. The code then iterates through the list of caches and deletes any caches that are not the current cache. The code uses the waitUntil method to ensure that all of the caches are deleted before the service worker is activated.&lt;/p&gt;

&lt;p&gt;The caches object provides methods for opening and closing caches. The &lt;strong&gt;keys()&lt;/strong&gt; method returns a promise that resolves with an array of all of the cache names. The &lt;strong&gt;map()&lt;/strong&gt; method iterates through an array and calls a function for each element in the array. The &lt;strong&gt;Promise.all()&lt;/strong&gt; method waits for all of the promises in an array to resolve before it resolves (that is, the promise.all method is used to wait for all of the caches that is not in our cacheName to be deleted before the service worker is activated). The waitUntil method tells the browser that the service worker will not be activated until the promise resolves.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fetch our cache asset
&lt;/h3&gt;

&lt;p&gt;To cache our page, making it available to work offline; we use the fetch event&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.addEventListener("fetch", (e) =&amp;gt; {
  console.log("service worker: fetching");
  //checking if the live site is avaialble and if not, responsd with the cache site
  e.respondWith(fetch(e.request).catch(() =&amp;gt; caches.match(e.request)));
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code in the fetch event handler first makes a network request to the live site. If the network request is successful, the code responds with the response from the network request. If the network request is not successful, the code responds with the cached site.&lt;/p&gt;

&lt;p&gt;Now our calculator project can be cached, and available offline, and we can now have a push notification, basically, it now has all the benefits of service worker. Next, we create the &lt;strong&gt;manifest.json&lt;/strong&gt; file to provide our web application information when the user wants to install its application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating the Web App manifest file
&lt;/h2&gt;

&lt;p&gt;The manifest.json file is just like the regular &lt;strong&gt;JSON (JavaScript Object Notation)&lt;/strong&gt; file used for storing data in web applications. When building a Progressive Web Application, the manifest.json stores necessary data and information about the PWA.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "calculator",
  "short_name": "calculator",
  "theme_color": "#fff",
  "background_color": "#fff",
  "display": "standalone",
  "orientation": "any",
  "scope": "/",
  "start_url": "/index.html",
  "icons": [
    {
      "src": "images/icons/icon-72x72.png",
      "sizes": "72x72",
      "type": "image/png"
    },
    {
      "src": "images/icons/icon-96x96.png",
      "sizes": "96x96",
      "type": "image/png"
    },
    {
      "src": "images/icons/icon-128x128.png",
      "sizes": "128x128",
      "type": "image/png"
    },
    {
      "src": "images/icons/icon-144x144.png",
      "sizes": "144x144",
      "type": "image/png"
    },
    {
      "src": "images/icons/icon-152x152.png",
      "sizes": "152x152",
      "type": "image/png"
    },
    {
      "src": "images/icons/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "images/icons/icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It contains some mandatory properties or optional properties like the name, icon, and scope. &lt;/p&gt;

&lt;p&gt;With these, we have transformed our regular calculator web app into a progressive web app (PWA). To confirm if your web app has been transformed into a progressive web app, the &lt;strong&gt;Google lighthouse tool&lt;/strong&gt; in the developer tool will show you the PWA icons. This shows that your application has been transformed.&lt;/p&gt;

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

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

&lt;p&gt;We’ve now seen how to transform our regular calculator app into a progressive web app with just Service worker and manifest.json. Making your web app a PWA will significantly affect it positively because it contains all the benefits of a traditional app and of a native app.&lt;/p&gt;

&lt;p&gt;Also, using a framework like Workbox can help you create a service worker and free you from the stress of writing it from scratch. However, knowing how to create a Service worker using Vanilla JavaScript will help you better understand PWA and appreciate it.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Google Chrome User Guide For Mobile</title>
      <dc:creator>Joshua</dc:creator>
      <pubDate>Fri, 31 Mar 2023 23:05:48 +0000</pubDate>
      <link>https://dev.to/onwuemene/google-chrome-user-guide-for-mobile-1b65</link>
      <guid>https://dev.to/onwuemene/google-chrome-user-guide-for-mobile-1b65</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Google Chrome is a &lt;a href="https://en.wikipedia.org/wiki/Web_browser" rel="noopener noreferrer"&gt;free web browser&lt;/a&gt;,  developed by Google and released in 2008. &lt;/p&gt;

&lt;p&gt;It was tagged &lt;a href="https://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html" rel="noopener noreferrer"&gt;A fresh take on the browser&lt;/a&gt; because of its innumerable qualities; improved speed and responsiveness across the board, protection from an untrusted site and so on. What makes Chrome special is that it is part of an open-source project named &lt;a href="https://www.chromium.org/chromium-projects/" rel="noopener noreferrer"&gt;Chromium&lt;/a&gt; browser and this sets it apart from other browsers. According to the &lt;a href="https://en.wikipedia.org/wiki/Usage_share_of_web_browsers" rel="noopener noreferrer"&gt;browser market share&lt;/a&gt; Chrome has 67 worldwide usages and this has made them trustworthy by users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table Of Content
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Table Of Content&lt;/li&gt;
&lt;li&gt;What Is Google Chrome&lt;/li&gt;
&lt;li&gt;Why Google Chrome&lt;/li&gt;
&lt;li&gt;Installation&lt;/li&gt;
&lt;li&gt;How to use Google Chrome&lt;/li&gt;
&lt;li&gt;Address bar&lt;/li&gt;
&lt;li&gt;Search bar&lt;/li&gt;
&lt;li&gt;Tabbed browsing&lt;/li&gt;
&lt;li&gt;Bookmarks&lt;/li&gt;
&lt;li&gt;Incognito Mode&lt;/li&gt;
&lt;li&gt;Syncing across all device&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Is Google Chrome
&lt;/h2&gt;

&lt;p&gt;Google Chrome is a cross-platform that can run on Windows, macOS, Linux, Android, and IOS. Google Chrome is known for its clean and user-friendly interface, as well as its fast browsing speeds and advanced features such as tabbed browsing, bookmarks, and incognito mode. It is designed to be simple to use, while also being highly customizable and adaptable to a wide range of users and devices.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Why Google Chrome
&lt;/h2&gt;

&lt;p&gt;Google Chrome set the pace with these features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Speed: Its fast browsing speed and multi-process architecture allows you to run multiple browser tabs at the same time without crashing.&lt;/li&gt;
&lt;li&gt;Great user interface&lt;/li&gt;
&lt;li&gt;Security: Google Chrome has several built-in security features, including automatic updates, phishing, malware protection  and sandboxing of individual tabs &lt;/li&gt;
&lt;li&gt;Integration: Google Chrome easily integrates(syncing) with other Google services, such as Gmail, Google Drive, and Google Calendar. This makes accessing these services easy and syncing data across different devices.&lt;/li&gt;
&lt;li&gt;Developer tools: Google Chrome offers a range of powerful developer tools that allow web developers to debug and optimize their web applications. &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the Google play store on your android device
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2bmj8ul4yf90y3tqp2p.png" alt="Image description" width="480" height="960"&gt;
&lt;/li&gt;
&lt;li&gt;In the search bar at the top, type "Google Chrome" and hit the search button.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkoi4azwrqgozv46qmrh8.png" alt="Image description" width="480" height="960"&gt;
&lt;/li&gt;
&lt;li&gt;Select Google Chrome in the search result
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ces8diejhprgigumvqw.png" alt="Image description" width="480" height="960"&gt;
&lt;/li&gt;
&lt;li&gt;Click on the install button to start the installation process.&lt;/li&gt;
&lt;li&gt;Once the installation is complete, you can open the Google Chrome app
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk43748zacz9a9pppzc4l.png" alt="Image description" width="751" height="591"&gt;
&lt;/li&gt;
&lt;li&gt;You can now successfully enjoy all the wonderful features of Google Chrome.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjhv264vovw4occfy32c.png" alt="Image description" width="480" height="960"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How to use Google Chrome
&lt;/h2&gt;

&lt;p&gt;On the home screen, you can either use the Address bar or the search bar to access the internet&lt;/p&gt;

&lt;h3&gt;
  
  
  Address bar
&lt;/h3&gt;

&lt;p&gt;The address bar at the top of the Chrome screen is where you can enter a URL or search term to navigate to a website. Simply type in the URL or search term and press enter to be taken to the desired site.&lt;/p&gt;

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

&lt;p&gt;For example, if you want to access the appwrite website, just type in &lt;a href="https://appwrite.io/" rel="noopener noreferrer"&gt;appwrite.io&lt;/a&gt; on the address bar and click on enter and you will be taken to its website.&lt;/p&gt;

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

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

&lt;h3&gt;
  
  
  Search bar
&lt;/h3&gt;

&lt;p&gt;If you want to use the search bar, simply tap on the search bar on the home screen, to search for anything of your choice and Chrome will display a list of search results that match the search term.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Tabbed browsing
&lt;/h3&gt;

&lt;p&gt;Google Chrome allows you to have multiple web pages at once and this feature is called tabbed browsing. To create a new tab;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;click on the tab icon at the top of the screen&lt;/li&gt;
&lt;li&gt;click on the &lt;strong&gt;new tab&lt;/strong&gt;.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5uenh4hxdj87qmahfmyd.png" alt="Image description" width="480" height="960"&gt;
&lt;/li&gt;
&lt;li&gt;A new tab will be created.&lt;/li&gt;
&lt;li&gt;You can also click on the 3 dots at the top of the screen, and click on the new tab.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhm4omkkk839h07b1bomw.png" alt="Image description" width="480" height="960"&gt;
&lt;/li&gt;
&lt;li&gt;To close the tab, tap on the “x” icon and the tab you created will be closed
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftfkynjk0zupchfjuzq4q.png" alt="Image description" width="480" height="960"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Bookmarks
&lt;/h3&gt;

&lt;p&gt;This feature in Chrome allows you to save your favourite website or your most visited website for easy access. To access this feature;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;click on the 3 dots in the top right corner when you open your favourite site.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwcih935tvf7r0hywvg2d.png" alt="Image description" width="480" height="960"&gt;
&lt;/li&gt;
&lt;li&gt;click on the star
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fco07u19uyhmillp3sb1d.png" alt="Image description" width="480" height="960"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This will bookmark your favourite site. To access the Bookmarks, click on the 3 dots and you will be able to access the bookmarks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Incognito Mode
&lt;/h3&gt;

&lt;p&gt;incognito tab refers to a private browsing mode that allows you to browse the internet without leaving any trace of your activity on the device you are using. &lt;/p&gt;

&lt;p&gt;IMPORTANT: Google Chrome will not save your browsing history, cookies, site data, or any information you enter into forms whenever; you browse in incognito mode.&lt;/p&gt;

&lt;p&gt;To access the new incognito tab;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on the 3 dots&lt;/li&gt;
&lt;li&gt;click on the new incognito tab&lt;/li&gt;
&lt;li&gt;new tab.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Syncing across all device
&lt;/h3&gt;

&lt;p&gt;This feature allows you to synchronize your bookmarks, browsing history, and other data across all your devices.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;tap on the three dots in the top right corner of the screen and select "Settings". &lt;/li&gt;
&lt;li&gt;tap on "Sync and Google services" and sign in with your Google account. &lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>UNDERSTANDING GRID TEMPLATE COLUMN IN CSS USING SIMPLIFIED EXAMPLE</title>
      <dc:creator>Joshua</dc:creator>
      <pubDate>Mon, 16 Jan 2023 14:05:02 +0000</pubDate>
      <link>https://dev.to/onwuemene/understanding-grid-template-column-in-css-using-simplified-example-17gl</link>
      <guid>https://dev.to/onwuemene/understanding-grid-template-column-in-css-using-simplified-example-17gl</guid>
      <description>&lt;p&gt;The CSS grid property is part of the CSS layout property used to arrange boxes about its viewport. We have several CSS layout properties: flexbox, CSS grid, positioning, float etc. But in this article, we will be talking about CSS grid property.&lt;br&gt;
CSS grid layout is a two-dimensional system that allows us to position items into rows and columns simultaneously.&lt;/p&gt;

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

&lt;p&gt;Fig 1: A typical grid example&lt;br&gt;
But Flexbox which is a very popular CSS layout outside the CSS grid is a one-dimensional layout system that allows us to position items either on rows and columns, but not both.&lt;/p&gt;

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

&lt;p&gt;Fig 2: A typical flex column example (one-dimensional)&lt;/p&gt;

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

&lt;p&gt;Fig 3: A typical flex row example (one-dimensional)&lt;/p&gt;

&lt;p&gt;From the image above flex image, you can see that it can’t be arranged into both rows and columns like the CSS grid.&lt;/p&gt;

&lt;p&gt;Now, that we have an idea of what a CSS grid is, let’s go deeper. To work with CSS grid, you can either use grid template columns or you can use grid-template-areas.&lt;/p&gt;

&lt;p&gt;In this article, we will be dealing with grid-template-columns.&lt;br&gt;
&lt;strong&gt;Grid-template-columns&lt;/strong&gt; is a CSS grid property that specifies the number of columns in a grid layout as well as the width of the columns.&lt;br&gt;
A demo of how you will see CSS grid-template columns.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Grid-template-columns: auto auto auto
grid-template-columns: repeat (5, 1fr)
grid-template-columns: 20% 80%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first example allows us to adjust the width or size of a grid container according to the width of the content and it has 3 columns&lt;/p&gt;

&lt;p&gt;The second example stands for a fractional unit which represents a fraction of the available space in the grid container and repeat() notation which helps us to repeat the 1fr 5 times instead of calling it out into 5 places (1fr 1fr 1fr 1fr 1fr). So since we have the 1fr into 5 places. i.e a total fractional unit of 5, each one is going to split 1/5 of the remaining spaces.&lt;/p&gt;

&lt;p&gt;The third example is creating two columns with the first column occupying 20% of the grid container, and the second column occupying 80% of the grid container.&lt;/p&gt;

&lt;p&gt;Before we look at our first real example, let’s know what &lt;strong&gt;grid line&lt;/strong&gt; mean; grid lines refer to the lines that define the grid columns and rows; In our image below we have 4 columns and 5 rows, but 5 vertical grid lines which determine our columns and 6 horizontal grid lines which determine our rows.&lt;/p&gt;

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

&lt;p&gt;Fig 4: A breakdown of grid.&lt;/p&gt;

&lt;p&gt;We will get a better view of what grid lines means in our example below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;title&amp;gt;Grid template columns&amp;lt;/title&amp;gt;
    &amp;lt;link rel="stylesheet" href="grid.css" /&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div id="content"&amp;gt;
      &amp;lt;div class="one"&amp;gt;1&amp;lt;/div&amp;gt;
      &amp;lt;div class="two"&amp;gt;2&amp;lt;/div&amp;gt;
      &amp;lt;div class="three"&amp;gt;3&amp;lt;/div&amp;gt;
      &amp;lt;div class="four"&amp;gt;4&amp;lt;/div&amp;gt;
      &amp;lt;div class="five"&amp;gt;5&amp;lt;/div&amp;gt;
      &amp;lt;div class="six"&amp;gt;6&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyuio7xfzmqq39f3m6oi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyuio7xfzmqq39f3m6oi.png" alt="Image description" width="709" height="254"&gt;&lt;/a&gt;&lt;br&gt;
Fig 5: output without grid&lt;/p&gt;

&lt;p&gt;The above is the output without the styling, so we can want to arrange this numbers into the horizontal and vertical form like the way a proper website will look like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

#content {
  color: white; //to make the text color white
  margin: 10px; //a margin of 10px around the body
  text-align: center; //to position the text at the center of each background
  display: grid; //to display it in a grid format
  grid-template-columns: repeat(5, 1fr); // to create 5 columns of 1fr and this automatically has 6 grid lines
  grid-auto-rows: minmax(100px, auto); // these specifies the size of an implicit created grid row track or pattern of 100px. But if the size of the row is greater than 100px then use auto

  grid-gap: 10px; //these specifies the gap between each column and row
}

/* what this mean is, make all the even number background blue */
#content div:nth-child(even) {
  background: blue;
}

/*and the ones who are not even number background, give them this color*/
#content div {
  background: rgb(255, 0, 242);
  width: auto;
  padding: 40px;
}

.one {
  grid-column: 1/4;
  grid-row: 1/3;
}
.two {
  grid-column: 4/6;
  grid-row: 1/3;
}
.three {
  grid-column: 1/6;
}
.four {
  grid-column: 1/3;
}
.five {
  grid-column: 3/6;
}
.six {
  grid-column: 1/6;
  grid-row: 5/7;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Fig 6: output in desktop view&lt;/p&gt;

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

&lt;p&gt;Fig 7: output in mobile view&lt;/p&gt;

&lt;p&gt;A breakdown of each line of code from .one to .six&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.one {
  grid-column: 1/4; //this means to take a vertical grid line of 1-4 which is columns 1 to 3
  grid-row: 1/3; //this will take a horizontal grid line of 1-3 which is 2 row
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.two {
  grid-column: 4/6; //it means from grid line 4 to grid line 6. Which is the 2-column
  grid-row: 1/3; this will be occupying horizontal grid lines 1 to 3, which is 2 row
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.three {
  grid-column: 1/6; //occupying from grid line 1 to grid line 6, which will be occupying 5 column
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.four {
  grid-column: 1/3; //occupying grid line 1-3, which is 2 column
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.five {
  grid-column: 3/6; //occupying grid line 3 to 6 which is 3 column
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.six {
  grid-column: 1/6; //occupying from grid line 1 to grid line 6 which is the 5 column
  grid-row: 5/7; //occupying from grid line 5 to grid line 7 which is 2 rows
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a situation where the grid line is not stated like &lt;strong&gt;.three&lt;/strong&gt;, &lt;strong&gt;.four&lt;/strong&gt;, and &lt;strong&gt;.five&lt;/strong&gt;, it takes one row&lt;/p&gt;

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

&lt;p&gt;We talked about what a grid is, and how it is different from flex, we talked about grid-template-columns, and we also talked about grid lines and how They relate to grid columns and rows.  Your grid line is one more than the number of columns and rows. i.e if your column is 5, your grid line is 6, the same if your row is 4, your grid line is 5.&lt;/p&gt;

&lt;p&gt;Please feel free to follow me for more content, post your comment and questions, and follow me on &lt;a href="https://twitter.com/onwuemenejosh" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/joshua-onwuemene/" rel="noopener noreferrer"&gt;Linkedln&lt;/a&gt;&lt;/p&gt;

</description>
      <category>support</category>
      <category>gratitude</category>
    </item>
    <item>
      <title>SCOPE IN JAVASCRIPT</title>
      <dc:creator>Joshua</dc:creator>
      <pubDate>Wed, 04 Jan 2023 12:45:08 +0000</pubDate>
      <link>https://dev.to/onwuemene/scope-in-javascript-ejl</link>
      <guid>https://dev.to/onwuemene/scope-in-javascript-ejl</guid>
      <description>&lt;p&gt;When you visit a government building and you want to use the restroom; there are restrooms that are available (accessible) to everyone (both staff and non-staff), there are some accessible to the staff working in the building, and there are some to senior government officials ONLY. The hierarchy of these officials determines the restroom they have access to.&lt;br&gt;
This basic example, explains how scope works in JavaScript. Basically, Scope is all about visibility and accessibility. It is the idea that where you defined a variable, determine if other pieces of your code, may have or may not have access to that variable.&lt;br&gt;
In JavaScript, we have two types of scope&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Global scope&lt;/li&gt;
&lt;li&gt;Local scope&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;GLOBAL SCOPE&lt;/strong&gt;&lt;br&gt;
In JavaScript, variables that are declared outside of a function or block are global scope. These are variables that are accessible everywhere in our program. Using our restroom example to analyze this; the global scope can be alike to the public restroom that is accessible to everyone in the building.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a = "Global scope";
let b = "JavaScript";
function globalScope() {
  console.log(a);
  console.log(b);
}

globalScope();
//Global scope: accessible everywhere in the program
//JavaScript: accessible everywhere in the program
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;LOCAL SCOPE&lt;/strong&gt;&lt;br&gt;
Every scope outside of the global scope is a local scope and in local scope we have; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Block scope&lt;/li&gt;
&lt;li&gt;Function scope&lt;/li&gt;
&lt;li&gt;Lexical scope&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;BLOCK SCOPE&lt;br&gt;
In JavaScript, any code that is inside two curly braces {} is called a block of code. E.g conditional statement and loop. Any variables that are defined here are visible and accessible to that block of code ONLY. They are not accessible everywhere as the global scope are;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
let a = "Global scope";
let b = "JavaScript";
if (true) {
  let c = "Block scope";
  console.log(a); //Global scope: accessible because of Global scope
  console.log(b); //JavaScript: accessible because of Global scope
  console.log(c); // Block scope: accesible because it is inside the block
}

console.log(a); //Global scope: accessible because of Global scope
console.log(b); //JavaScript: accessible because of Global scope
console.log(c); // Uncaught ReferenceError: c is not defined.

// c is not defined because we are assessing it outside of the block.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using the previous example, let’s declare a variable with let, const and var (the 3 methods for declaring a variable) to check if any difference between them&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (true) {
  let a = 1;
  const b = 2;
  var c = 3;
  console.log(a); //1
  console.log(b); //2
  console.log(c); //3
}

console.log(a); //Uncaught ReferenceError: a is not defined
console.log(b); // Uncaught ReferenceError: b is not defined
console.log(c); //3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;our &lt;strong&gt;c&lt;/strong&gt; was accessible outside of the block scope, why? Because there is an exception when using &lt;strong&gt;var&lt;/strong&gt;. if we use &lt;strong&gt;var&lt;/strong&gt; to declare a variable inside of a block, you can be able to access it outside the block.&lt;br&gt;
&lt;strong&gt;Var&lt;/strong&gt; is not scope to block because you can be able to access it outside the block which is not what you will want in your program.&lt;/p&gt;

&lt;p&gt;FUNCTION SCOPE&lt;br&gt;
When you declare a variable inside of a function. It is called function scope. Let’s check some examples below;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a = "Global scope";
let b = "JavaScript";

function globalScope() {
  let a = "Function scope";
  let b = "local scope";
  var c = 3;
  console.log(a); //Function Scope: this is a function scope, so it will print our value for **a** inside of our funciton
  console.log(b); //local scope: function scope also
  console.log(c); //3 function scope also
}

console.log(a); //Global scope: this is a global scope, accessible, everywhere in our program
console.log(b); //JavaScript: This is also accessible everywhere in our program
console.log(c); //Uncaught ReferenceError: c is not defined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;console.log(c)&lt;/strong&gt; will throw an error, because &lt;strong&gt;var&lt;/strong&gt; is scope to function, but not scope to block ie we can't access our value of &lt;strong&gt;var&lt;/strong&gt; declaration outside of our function.&lt;/p&gt;

&lt;p&gt;Summary of the three variable declaration&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Var&lt;/strong&gt;: scoped to function but not scope to block&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Let&lt;/strong&gt; and &lt;strong&gt;const&lt;/strong&gt;: scoped to both function and block scope.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;LEXICAL SCOPE&lt;br&gt;
Lexical scope refers to the fact that nested functions are bound to the scope of their parent function. This means that we can access a parent variable from the child variable i.e a variable declare in one function is visible to the nested functions within it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function outer() {
  let sport = "football";
  function inner() {
    console.log(sport.toUpperCase());
  }
  inner();
}
outer();

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

&lt;/div&gt;



&lt;p&gt;From the above example, we defined a parent function called outer and declare a variable, still inside the function we declared another function and console.log the value of the variable, making it upper case. It is possible because the inner function is lexically bound to the outer function, which means in a nested function, we can access the outer function from the inner function.&lt;br&gt;
Let’s look at a different example;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function outer() {
  let sport = "football";
  function inner() {
    let sport = "tennis";
    console.log(sport.toUpperCase());
  }
  inner();
}
outer();
//TENNIS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Its output is TENNIS, how is that possible? Because when looking out at the inner function, It checks if there is a sport defined in the inner function, if YES? It prints it out and if NO, it looks out for the sport defined in the outer function. This is what we mean by lexically bound (nested functions are lexically bound to their outer function)&lt;/p&gt;

&lt;p&gt;CONCLUSION&lt;br&gt;
Scope is the idea that where you defined a variable, determine if other pieces of your code, may have or may not have access to that variable. We related it to the restroom in a government building.&lt;/p&gt;

&lt;p&gt;Please feel free to follow me for more content, post your comment, and questions and also follow me on &lt;a href="https://twitter.com/onwuemenejosh" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; and  &lt;a href="https://www.linkedin.com/in/joshua-onwuemene/" rel="noopener noreferrer"&gt;Linkedln&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>datascience</category>
      <category>computervision</category>
    </item>
    <item>
      <title>UNDERSTANDING HOISTING IN JAVASCRIPT</title>
      <dc:creator>Joshua</dc:creator>
      <pubDate>Fri, 30 Dec 2022 00:11:20 +0000</pubDate>
      <link>https://dev.to/onwuemene/understanding-hoisting-in-javascript-43oa</link>
      <guid>https://dev.to/onwuemene/understanding-hoisting-in-javascript-43oa</guid>
      <description>&lt;p&gt;It is not common for developers to call a function or console.log something before it is declared, but JavaScript Hoisting gives us the opportunity to do that, in JavaScript you can use or call a function or variable before its declared and that is called &lt;strong&gt;HOISTING&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console.log(myName)
var myName = “Joshua”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you call a function or variable before it is declared, it is called Hoisting.  This is a term in JavaScript where the JavaScript interpreter knows that the variable myName exists but does not know its value. So its outputs become undefined, which is it exists but has no value.&lt;br&gt;
In JavaScript, when you declare a variable without initializing them, the variable is set to undefined&lt;br&gt;
e.g&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var x
x //undefined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using this knowledge to analyze the example above, what is going on is that the JavaScript interpreter hoists the variable declaration to the top and assigned the value to its variable name i.e it separates the variable name and its assignment&lt;/p&gt;

&lt;p&gt;e.g&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console.log(myName)
var myName = “Joshua”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;after the separation, it becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var myName; //undefined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console.log(myName) //undefined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myName = “Joshua”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log(myName) // Joshua.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a better understanding, let’s look at hoisting into variable and function hoisting&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variable Hoisting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In JavaScript we declare a variable using var, let or const&lt;br&gt;
e.g&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var sport = “Football”
let film = “who am I”
const pi = 3.14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Hoisting using var declaration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When the JavaScript interpreter hoists a variable declared with var it initialized the value to undefined, meaning it knows the variable exists but has no value yet, so it set it to undefined&lt;br&gt;
e.g&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log(sport) //undefined. i.e value not known, but the variable name exists because of var.
var sport = “football” //value assigned
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As earlier said the JavaScript interpreter splits the variable declaration and the assignment. Let’s look at what the JavaScript interpreter does behind the scenes.😇&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; It moves the variable declaration to the top.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var sport //undefined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Console.log the variable sport i.e
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log(sport) //undefined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Assigned the variable name to the value
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sport = “football”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Finally, console.log the variable name “sport”
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console.log(sport)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Hoisting using let and const declaration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We’ve seen that variables declared with var are hoisted, what about let and const?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console.log(sport)
let sport = “football”
 // Uncaught ReferenceError: Cannot access 'sport' before initialization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;what about const?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log(sport)
const sport = “football”
// Uncaught ReferenceError: Cannot access 'sport' before initialization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means that in JavaScript, let and const are not hoisted. This is a good thing because it prevents unwanted errors which may arise from hoisting because as a developer working on a project you will want to declare and assign a value before you use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Function Hoisting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Function declarations are hoisted in JavaScript, this allows us to call a function before it is defined&lt;br&gt;
Example;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sport();
function sport(){
    console.log(“football”)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When it comes to function hoisting, only function declaration is hoisted. Function expression and arrow functions are not hoisted e.g&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sport();
let sport = function(){
    console.log(“football”)
}
// Uncaught ReferenceError: Cannot access 'sport' before initialization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same error also come up when you use const. But what happens when you use var for a function expression?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sport()
var sport = function(){
    console.log(“football”)
}
// Uncaught TypeError: sport is not a function.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We get a different error.&lt;/p&gt;

&lt;p&gt;Remember, let and const are not hoisted so even though we use them in a function expression we still get the Uncaught ReferenceError. But var declaration is hoisted, so if we console.log(sport) it is undefined; which means JavaScript knows the variable exists, but if we console.log(sport()), it shows not a function because the value which is a function expression is not hoisted in JavaScript and it is trying to console.log undefined, which it can’t do. So, the variable is hoisted, but the value is not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION&lt;/strong&gt;&lt;br&gt;
Hoisting is something you might not need or you might now want to use because variable hoisting comes with a lot of issues underneath, so it's better to always declare and assigned your value to a variable when using var before you make use of it and declare your function before calling it.&lt;/p&gt;

&lt;p&gt;You can connect with me on &lt;a href="https://www.linkedin.com/in/joshua-onwuemene/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://twitter.com/onwuemenejosh" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>emptystring</category>
    </item>
    <item>
      <title>Understanding the keyword “this” in JavaScript</title>
      <dc:creator>Joshua</dc:creator>
      <pubDate>Tue, 06 Dec 2022 04:44:39 +0000</pubDate>
      <link>https://dev.to/onwuemene/understanding-the-keyword-this-in-javascript-2c8o</link>
      <guid>https://dev.to/onwuemene/understanding-the-keyword-this-in-javascript-2c8o</guid>
      <description>&lt;p&gt;If you have ever coded on JavaScript, you must have encountered the keyword &lt;strong&gt;“this”&lt;/strong&gt;. this is a point of confusion for most JavaScript developers.&lt;/p&gt;

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

&lt;p&gt;It has no fixed rule, but that does not mean that it cannot be understood right? 😁😁&lt;/p&gt;

&lt;p&gt;Now, let’s go straight to the point, shall we?? &lt;/p&gt;

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

&lt;p&gt;In this article, we shall dive into the keyword &lt;strong&gt;“this”&lt;/strong&gt; in JavaScript simplifying it in a dummy way.&lt;/p&gt;

&lt;p&gt;What is &lt;strong&gt;“this”&lt;/strong&gt;&lt;br&gt;
In the English language “this” means indicating something or someone nearby. this refers to the immediate environment (something nearby)&lt;br&gt;
Example: When am in my house and I say “this book belongs to me” you can see that am referring to a book close by (my house) i.e either on the table or on the shelf - Something on my immediate environment. But if I go to the library and make the same statement “this book belongs to me” this also refers to something close by (the library, not my house)&lt;/p&gt;

&lt;p&gt;From the above example, you can see that &lt;strong&gt;“this”&lt;/strong&gt; depends on the invocation context.&lt;/p&gt;

&lt;p&gt;The same rules apply in JavaScript.&lt;/p&gt;

&lt;p&gt;In JavaScript &lt;strong&gt;“this"&lt;/strong&gt; &lt;strong&gt;refers to a reference in an object and that object represents the current execution scope. By current execution scope;&lt;/strong&gt; the value of &lt;strong&gt;“this”&lt;/strong&gt; depends on the invocation in which you have used it. i.e it depends on where you write it.&lt;/p&gt;

&lt;p&gt;Examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When used alone or inside a regular function (without an object) by default this refers to the window (i.e the global object)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Code &lt;/p&gt;

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

&lt;p&gt;Output&lt;/p&gt;

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

&lt;p&gt;What is the window? the window contains all sorts of different properties we use in JavaScript and when we defined a function. It is added as a property in the window object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In a method **“this”&lt;/strong&gt; refers to the object the method lives in.** i.e &lt;strong&gt;“this”&lt;/strong&gt; references the objects. Before we go further, what is a method? Simply put, “when we add a function to an object, it is called a method”. There are built-in methods in JavaScript like "toUpperCase()", "toLowerCase()" etc. but the method am talking about here, are the method we create by ourselves by adding a function to an object.&lt;/p&gt;

&lt;p&gt;Code&lt;/p&gt;

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

&lt;p&gt;Output&lt;/p&gt;

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

&lt;p&gt;From the code above and Output, we could see that &lt;strong&gt;“this”&lt;/strong&gt; in a method refers to the object the method lives in i.e myInfo object. So when we called the method myInfo.fullName(), the fullName print out “Joshua Onwuemene”, which is a property inside the myInfo object.&lt;/p&gt;

&lt;p&gt;So, here Is a little hack over it.&lt;/p&gt;

&lt;p&gt;If there is something to the left i.e &lt;strong&gt;objectName.functionName&lt;/strong&gt;(this is a method) and you are executing the function &lt;strong&gt;“this”&lt;/strong&gt;, &lt;strong&gt;“this”&lt;/strong&gt; will be set to what is on the left, which is the objectName.  (myInfo.fullName(), here &lt;strong&gt;“this”&lt;/strong&gt; was set to myInfo ) But if there is nothing to the left, this will be set to the global execution scope (i.e the window).&lt;/p&gt;

&lt;p&gt;More example&lt;/p&gt;

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

&lt;p&gt;Output&lt;/p&gt;

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

&lt;p&gt;From the above code we console.log &lt;strong&gt;“this”&lt;/strong&gt; in line 8, to see the output it will give us and we could see that it showed us the myInfo object. This was to prove that &lt;strong&gt;“this”&lt;/strong&gt; is representing the object, and when we called myInfo.fullName() it gave us “Joshua Onwuemene”, look at our next method there; &lt;strong&gt;myInfo.myBio()&lt;/strong&gt;. We could see that &lt;strong&gt;“this”&lt;/strong&gt; is referencing the myInfo object. Check the output at myInfo.myBio() to see what we have.&lt;/p&gt;

&lt;p&gt;const myName = this.fullName() means &lt;strong&gt;“this”&lt;/strong&gt; is making reference to the fullName() function which is inside the myInfo object which means We have access to the data in my fullName() function which is “Joshua Onwuemene” in the myBio() function. and when we (console.log(&lt;code&gt;${myName} is a ${whatIDo}, a technical-writer, a WordPress developer and a lover of a great books&lt;/code&gt;) we got the desired output which is "Joshua Onwuemene is a front-end developer, a technical-writer, a wordpress developer and a lover of great books".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When using Arrow function, “this” won’t work as a method on an object, because it does not refer to the object, it refers to the window.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Code &lt;/p&gt;

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

&lt;p&gt;Output &lt;/p&gt;

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

&lt;p&gt;When we console.log(this) in the college() arrow function, we see that it refers to the window. This is because arrow function does not have its own &lt;strong&gt;“this”&lt;/strong&gt;, it references the window which is why we can’t access the data in myName.&lt;/p&gt;

&lt;p&gt;In some situations, it is better to use. i.e is an advantage when dealing with nested functions and callbacks but not good in defining methods.&lt;/p&gt;

&lt;p&gt;Code&lt;/p&gt;

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

&lt;p&gt;Output&lt;/p&gt;

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

&lt;p&gt;From the result, it is undefined right? Let’s console the value of &lt;strong&gt;“this”&lt;/strong&gt; to see the output. When we console the value of “this” before the callback function it refers to the result object. Let’s console the value of “this” in the callback function&lt;/p&gt;

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

&lt;p&gt;Output&lt;/p&gt;

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

&lt;p&gt;From the output, the value of “this” refers to the global scope (window) but why?  Because it is taking the callback function as a standalone function which refers to the window by default, not as a method. We resolve this by adding an arrow function. The arrow function will take the value of its parent &lt;strong&gt;“this”&lt;/strong&gt;, which in our case is the &lt;strong&gt;“this”&lt;/strong&gt; before the callback function.&lt;/p&gt;

&lt;p&gt;Code&lt;/p&gt;

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

&lt;p&gt;Output&lt;/p&gt;

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

&lt;p&gt;By using an arrow function it has inherited the “this” of the parent container which is showResult(). By doing this we can then access nameOfStudent and assign the scores to Joshua.&lt;br&gt;
Let’s console the value of &lt;strong&gt;“this”&lt;/strong&gt; in the callback function to get a better understanding of what &lt;strong&gt;“this”&lt;/strong&gt; is referencing to now.&lt;/p&gt;

&lt;p&gt;Code&lt;/p&gt;

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

&lt;p&gt;Output&lt;/p&gt;

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

&lt;p&gt;From the output, we can see that it is referencing the object.&lt;/p&gt;

&lt;p&gt;In conclusion, &lt;strong&gt;“this”&lt;/strong&gt; is not set in stone. “&lt;strong&gt;this”&lt;/strong&gt; references the object that is executing the current function. i.e it depends on its invocation context.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>BUILDING CONFIDENCE AS AN INSPIRING DEVELOPER</title>
      <dc:creator>Joshua</dc:creator>
      <pubDate>Sun, 20 Nov 2022 23:17:44 +0000</pubDate>
      <link>https://dev.to/onwuemene/building-confidence-as-an-inspiring-developer-2cik</link>
      <guid>https://dev.to/onwuemene/building-confidence-as-an-inspiring-developer-2cik</guid>
      <description>&lt;p&gt;Confidence is exceptionally imperative and an unquestionable requirement for everybody living in today’s society. Your capacity to manage hardships, tackle issues, and approach people requires confidence.&lt;/p&gt;

&lt;p&gt;Fortunately, confidence is a skill, such as driving a vehicle or playing tennis or basketball, that can be learned and developed with practice.&lt;/p&gt;

&lt;p&gt;First, what is confidence?&lt;/p&gt;

&lt;p&gt;Confidence can mean different things to people, but in this article, I will define confidence in 4 ways.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Confidence is hopeful about the future and the path you are on.&lt;/li&gt;
&lt;li&gt;Confidence is knowing that you have control over that path.&lt;/li&gt;
&lt;li&gt;Confidence is being calm with that information and the feeling of command over your current circumstances.&lt;/li&gt;
&lt;li&gt;Confidence is the fact that knowing your insight, your capacity can endure any task that is at hand.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We have two types of confidence&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The confidence in yourself i.e the energy you project out to the world. i.e your body language.&lt;/li&gt;
&lt;li&gt;The confidence in performing a task.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We will focus on the second type of confidence; &lt;strong&gt;“The confidence in performing a task”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The question now is, how do we build this confidence?&lt;/p&gt;

&lt;p&gt;Confidence comes from &lt;strong&gt;practice&lt;/strong&gt;; As a newbie entering into software development; you might feel inferior and overwhelmed because the field Is too broad, and you might also begin to have low self-esteem when you hear senior developers’ numbers of years of experience; all these feelings are normal and it happens to everyone. But the interesting part is; you can be like Them. BUT HOW?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Niche down: software engineering is broad, so you have to niche down and focus on one at a time. we have different niches in the field e.g front-end engineering, back-end engineering, full stack development, DevOps engineering, security engineering e.t.c&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start from the basics: In secondary school, you can’t jump your regular 1,2,3…. Or indices to calculus. What does that tell you? You must start from stage 1; the same applies to software engineering. For the front-end learn your basic HTML, CSS, and JS before you move to any framework, for the back-end learn your vanilla (without framework) python or JS for DevOps your basic knowledge of scripting, cloud e.t.c. learning the fundamentals and being grounded in it gives you confidence for any new framework that is to come or an existing framework.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Practice every day; According to Woody Allen, he said: &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Showing up is already half the battle.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Spend at least 30 mins coding every day. Make a habit of daily coding, this will help build your brain memory.&lt;/p&gt;

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

&lt;p&gt;Make coding a consistent habit. The world has no use for a temperamental genius. &lt;strong&gt;It’s not about intelligence, it is about consistency and consistency builds up experience and competence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The more you code, the more confidence you build, and the more confidence you build, the more successful you become at programming.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>REGAINING CONFIDENCE AS A PROGRAMMER.</title>
      <dc:creator>Joshua</dc:creator>
      <pubDate>Tue, 20 Sep 2022 19:45:20 +0000</pubDate>
      <link>https://dev.to/onwuemene/regaining-confidence-as-a-programmer-5fkh</link>
      <guid>https://dev.to/onwuemene/regaining-confidence-as-a-programmer-5fkh</guid>
      <description>&lt;p&gt;Recently, I was working on a project that requires knowledge of HTML, CSS, AND JAVASCRIPT. It was an easy project from the beginning, but when I started coding it, it was not as easy as I plan out, especially in the Js part&lt;/p&gt;

&lt;p&gt;I tried all I can to rectify the problem, but it was not as easy as I thought and after hours of trying and no good result, my confidence began to go down. So, I decided to relearn some concepts in Js even though I knew them before. After going through some videos on my laptop, I decided to go over it the next day and was able to solve it.&lt;/p&gt;

&lt;p&gt;Am sure it must have happened to you as a programmer.&lt;/p&gt;

&lt;p&gt;The question is, what do you do when it happens to you? How do I cope? You sleep, wake up and try again right, what about after that and no progress, what next??&lt;/p&gt;

&lt;p&gt;The answer is &lt;strong&gt;PULL BACK AND REGROUP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don’t try to maintain failure at a high-level&lt;/strong&gt;, is going to hurt your confidence badly. &lt;em&gt;Continuing at a level where you are failing is going to hurt you.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let’s say you are working on a project and you could not move past level 7, after hours of trying to resolve level 7 and no progress you pullback and come to level 4 (where you are confident in, or any level you are confident in) and regroup from there, learn some concept again, then from their move on to level 5, 6 and suddenly you will surpass level 7 and move upward. It isn’t a weakness to pull back and regroup, especially when your confidence is involved. As you build again the confidence you will acquire will be much more grounded. The experience of your failure will guide you and help you avoid the pitfall. It will make you wiser. &lt;strong&gt;CONFIDENCE IS DIFFICULT TO GET, SO DON’T LOSE IT THOUGHTLESSLY.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confidence&lt;/strong&gt; - that information that you can pull off and follow through on something difficult, that information in most cases will be your only &lt;em&gt;friend when everything else is gone&lt;/em&gt; and if you treat him right, make him, your best friend.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
