<?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>Forem: Hamza Siddiq</title>
    <description>The latest articles on Forem by Hamza Siddiq (@hamzasiddiq).</description>
    <link>https://forem.com/hamzasiddiq</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%2F669449%2F8241f458-fde7-4e13-8d6a-bde3a4a4b4a1.JPG</url>
      <title>Forem: Hamza Siddiq</title>
      <link>https://forem.com/hamzasiddiq</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hamzasiddiq"/>
    <language>en</language>
    <item>
      <title>SaaS architecture: Monolithic and Microservices</title>
      <dc:creator>Hamza Siddiq</dc:creator>
      <pubDate>Tue, 10 Aug 2021 00:05:36 +0000</pubDate>
      <link>https://forem.com/hamzasiddiq/boy-with-a-beard-explains-web-application-architecture-29go</link>
      <guid>https://forem.com/hamzasiddiq/boy-with-a-beard-explains-web-application-architecture-29go</guid>
      <description>&lt;h3&gt;
  
  
  What is a web application architecture?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Application Architecture:&lt;/strong&gt; &lt;br&gt;
An application architecture is the behavior of how different applications interact with each other. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q17RaLr4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lzg7jpszjc0jhhayegez.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q17RaLr4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lzg7jpszjc0jhhayegez.png" alt="Screen Shot 2021-08-09 at 5.26.06 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Software as a Service Architecture:&lt;/strong&gt; &lt;br&gt;
So with software as a service, it is the behavior of how different web applications interact with each other. &lt;/p&gt;

&lt;p&gt;The architecture here also encompasses, the interaction between applications, middleware systems, and database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i6MTnOoI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/46zdoapfd8veqmi09wly.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i6MTnOoI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/46zdoapfd8veqmi09wly.jpeg" alt="large-3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What are the types of SaaS Architectures?
&lt;/h3&gt;

&lt;p&gt;We want to increase efficiency, and so we want to choose an architecture that ensures all our web applications work well with each other. There are thus two architecture types that we can choose, which we'll go over below. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modules:&lt;/strong&gt;&lt;br&gt;
But before we do that you need to understand that an application has different components or modules that define it. E.g an an Ecommerce application might have a modules that takes an order, another one to check inventory, another to authorize payment and finally a module to ship the order.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z8ggMf4n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qm1xomqduvceikbs50v2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z8ggMf4n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qm1xomqduvceikbs50v2.jpg" alt="modular-web-design-pages"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Monolithic Architecture:&lt;/strong&gt;&lt;br&gt;
In a monolithic architecture, the application modules are build together, and deployed as a single unit. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So in the Ecommerce application example, the developer would build the modules together, and they are linked to each other in such a way, that if we make changes in one part of the application, another part could also change, because of a shared database. So while working on an Ecommerce application, making changes in the module to check inventory would affect the module to authorize payment since they are a single unit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tMYRXHs4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y073jw9m4l823t6uub3e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tMYRXHs4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y073jw9m4l823t6uub3e.jpg" alt="microservices-and-monolithic-architectures"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2. Micoservice Architecture:&lt;/strong&gt;&lt;br&gt;
In a micro-service architecture, the applications modules are built separately, and then connected to each other.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So with the modules that we had discussed before; each of these modules get built separately, and has their own database. Each of these modules then connect to the other modules. In the Ecommerce application, the module to take an order would get built separately, and the module to check inventory would get built separately. They would then be connected to each other. This way we could work on them independently, and not worry about changes in one module of an application affecting changes in another.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_6bacXGj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9oef340219rjq9rbtpw5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_6bacXGj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9oef340219rjq9rbtpw5.jpg" alt="cda4db94-ac16-43ba-82c4-53632154afc7"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Which architecture to choose?
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Why you should choose Monolithic Architecture
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;1. Faster to debug and test:&lt;/strong&gt;&lt;br&gt;
Since a monolithic application is a single application, building and testing it is easier, and faster.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6fWzWWyc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/enbuxzd95voj0pvjtpaa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6fWzWWyc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/enbuxzd95voj0pvjtpaa.png" alt="Screen Shot 2021-08-09 at 5.15.05 PM"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;2.Simple to develop:&lt;/strong&gt;&lt;br&gt;
Monolithic architecture is the older way of developing web applications, and so many developers might feel more comfortable using it.&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pTz9EGUF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/se2rlik3sw7w0a55v8s1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pTz9EGUF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/se2rlik3sw7w0a55v8s1.jpg" alt="Developer"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;3.Simple to deploy:&lt;/strong&gt;&lt;br&gt;
With a monolithic application you don't have to worry about a lot of files, there is usually just one file or directory.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--39c0m6Sg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zz5yarna4j89wp4wd6am.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--39c0m6Sg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zz5yarna4j89wp4wd6am.png" alt="1*HTP6u-llOnFya0VvhQ-pHw"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why you should choose Microservice Architecture&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Work better in groups:&lt;/strong&gt;&lt;br&gt;
The best thing about Microservice architecture are independent modules. You can take a part of the application, and make it a module with an independent database. This way you can work on that module and changes made there would not affect changes in another part of the application. This is great if multiple people are working on different modules, since they would not have to worry about their code affecting that of a different developer.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HbkCsWeT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0pn503qududsd4u4kv6b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HbkCsWeT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0pn503qududsd4u4kv6b.png" alt="0*MJ2qIjrP4q56_2h-"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Flexibility to choose technology:&lt;/strong&gt;&lt;br&gt;
Another great thing about Microservice architecture is that for each module, a different technology can be used, depending upon the comfort of a developer working on a module, and the needs of the project.&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d5BEF2w4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j9lapfxmil1cyn574pss.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d5BEF2w4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j9lapfxmil1cyn574pss.jpg" alt="full_front_back"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Time effective:&lt;/strong&gt;&lt;br&gt;
Since each developer is only worried about their own module, without breaking other parts of an application, development teams can work way faster.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1vHn8zkS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bnmma9lj8dm5er9pnfra.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1vHn8zkS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bnmma9lj8dm5er9pnfra.png" alt="time-management-how-to-create-a-schedule-header@2x"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.Cost effective:&lt;/strong&gt;&lt;br&gt;
Each module can be scaled independently, which could save a lot of money.&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KM3aR-vS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l5enfsmb844j2wmkydww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KM3aR-vS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l5enfsmb844j2wmkydww.png" alt="1*HmFudfdeSdweh7dzeRQnbQ"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here is a video where I explain the concepts above:&lt;br&gt;
&lt;a href="https://youtu.be/QX4GMEvlF4g"&gt;Youtube video&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>architecture</category>
      <category>cloud</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Web components Fundamentals</title>
      <dc:creator>Hamza Siddiq</dc:creator>
      <pubDate>Fri, 06 Aug 2021 00:41:40 +0000</pubDate>
      <link>https://forem.com/hamzasiddiq/boy-with-a-beard-explains-web-components-1jhm</link>
      <guid>https://forem.com/hamzasiddiq/boy-with-a-beard-explains-web-components-1jhm</guid>
      <description>&lt;h3&gt;
  
  
  What are Web Components?
&lt;/h3&gt;

&lt;p&gt;Web component is a term used for four web standards that help us make custom, reusable and encapsulated html tags that can be used in web pages and applications.&lt;br&gt;
&lt;strong&gt;1. &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; elements:&lt;/strong&gt; With the &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; elements, we encapsulate html, and then render it using javascript.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So what happens is that template elements break apart html. Whatever is contained inside the template tag doesn't get rendered at load-time. Instead javascript renders when the function is called. So a page would load very quickly, since we have part of html that doesn't load at load-time. We can also reuse these elements, so we save a lot of time.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fle5f869t7cmrnp9cdx2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fle5f869t7cmrnp9cdx2n.png" alt="Screen Shot 2021-08-04 at 9.33.15 PM"&gt;&lt;/a&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fald27azuinloteo2vfs4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fald27azuinloteo2vfs4.png" alt="Screen Shot 2021-08-04 at 9.33.32 PM"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2. Custom elements:&lt;/strong&gt; With custom elements, we create a javascript class, and then link it to a custom html element.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An html document already ships default html elements. E.g &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;,&lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; etc. An HTMLElement class contains all these elements. Inside a javascript file we define a class and extend the HTMLElement, with this custom class. Next, we define a custom element, and then link it to our class. We can now use this custom element inside html as many times as we like.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmupm6qcksqcilpfcjxpg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmupm6qcksqcilpfcjxpg.png" alt="Screen Shot 2021-08-04 at 3.50.16 PM"&gt;&lt;/a&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3vfq3puj50sefl16u7jb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3vfq3puj50sefl16u7jb.png" alt="Screen Shot 2021-08-04 at 3.50.24 PM"&gt;&lt;/a&gt;&lt;br&gt;
Notice the &lt;code&gt;-&lt;/code&gt; in the custom element; that is important when making custom elements, to differentiate it from default elements.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;3. Shadow DOM:&lt;/strong&gt; &lt;br&gt;
With a Shadow DOM we encapsulate styles, so that we can limit them to a specific area.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A DOM, Document Object Model, is a tree like structure of a documents elements, in our case html's elements. Code and styles contained here affect one another.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;A Shadow DOM on the other hand, is a separate DOM, and the code contained inside the Shadow DOM is separate from the main DOM, so it does not affect the code of the main DOM. We can attach a Shadow DOM to an element, using javascript, and it would only affect that element.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5nhg3vfqmtfvkkzrpcqe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5nhg3vfqmtfvkkzrpcqe.png" alt="Screen Shot 2021-08-05 at 10.06.12 AM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Javascript Modules:&lt;/strong&gt;&lt;br&gt;
We can convert a javascript file to a module by exporting it. This would allow other files to import it, by using it as a dependency. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So a module is a file that exports its own code. Modules usually have their own scope. So we could have a modules with different functionality, that people can then share with others. So we could share a module called &lt;code&gt;mediaplayer&lt;/code&gt;, that could play media; or another one called &lt;code&gt;whattimeisit&lt;/code&gt;, that could display time in different time zones. Npmjs is a popular package manager that people use to share modules.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3oyrws8p20r3hntpzkb3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3oyrws8p20r3hntpzkb3.png" alt="Screen Shot 2021-08-05 at 10.53.42 AM"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Why use Web Components?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Future proof:&lt;/strong&gt;&lt;br&gt;
There have been many frameworks that have had a dramatic rise in popularity, but have been replaced by other newer frameworks. The great thing about web components is that its usage has increased over the years.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdy0wlyj6ilo3qr5zvhr9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdy0wlyj6ilo3qr5zvhr9.png" alt="trends-minor"&gt;&lt;/a&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwrsoo4d3aejvduvwzcix.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwrsoo4d3aejvduvwzcix.jpg" alt="RYVwr119hwQIps5UL0u4 copy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can be run by any browser:&lt;/strong&gt;&lt;br&gt;
Another great thing about Web components is, is that they were added by the World Wide Web Consortium, W3C, as a standard. The W3C defines the standards for browsers to implement. All five major browser have added support for web components. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzh1lkwczfa024tukq8tj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzh1lkwczfa024tukq8tj.png" alt="which-browsers-support-web-components"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can be used with any framework:&lt;/strong&gt;&lt;br&gt;
Since it is a part of code, that can be run by the browser, usage by any framework is not an issue.&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feoi8n68mt358qxy99bev.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feoi8n68mt358qxy99bev.jpeg" alt="1*4cFhtuq6zRDqJ6p4s2pQ6g"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write cleaner code:&lt;/strong&gt;&lt;br&gt;
One of the best things about web components is, is that web components helps us write cleaner, and better code. This would improve performance, increase accessibility, and make it easier to maintain. &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fncyvnkhs2je3sjlclypr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fncyvnkhs2je3sjlclypr.png" alt="1*OW9_FTfEMmSWpMSSQtFhIQ"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improve reusability:&lt;/strong&gt;&lt;br&gt;
You could save a lot of time, by reusing web components. This would also mean that less developer hours are spent, and the productivity would increase a lot. &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxl9kbphxz0hjc2d0r5v1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxl9kbphxz0hjc2d0r5v1.png" alt="Screen Shot 2021-08-05 at 2.42.46 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improve Consistency:&lt;/strong&gt;&lt;br&gt;
When starting a new project, there might be old components that could be reused. So amongst different projects, a consistent look and feel can be created.&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0n41jj3hjyxe1snxo2wl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0n41jj3hjyxe1snxo2wl.png" alt="1*SlAPqCmjtwvRsn0Kszi7oA"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Improve Accessibility:&lt;/strong&gt;&lt;br&gt;
By reusing old components, we make it easier for users to use a specific feature again, in a different part of the project.&lt;/p&gt;

&lt;p&gt;Any accessibility features that have already been implemented can also be reused by us, or made available to use by others. E.g a simple search of accessibility on npmjs gives us more than 1350 packages to work with.&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcya69qucx07lgb4xjqs4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcya69qucx07lgb4xjqs4.png" alt="Screen Shot 2021-08-05 at 2.31.53 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Who uses Web Components?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Github:&lt;/strong&gt;&lt;br&gt;
Github makes use of web components. As discussed before, an element with a &lt;code&gt;-&lt;/code&gt; in between means that it is a custom element. The &lt;code&gt;include-frameworks&lt;/code&gt; in Github's homepage after login, is an example.&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frjt2l10stns0q5h5hruw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frjt2l10stns0q5h5hruw.png" alt="Screen Shot 2021-08-05 at 3.02.52 PM"&gt;&lt;/a&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm0r20mdkf8s5aw38u15z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm0r20mdkf8s5aw38u15z.png" alt="Screen Shot 2021-08-05 at 3.40.23 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Salesforce:&lt;/strong&gt;&lt;br&gt;
Salesforce also makes use of web components. An example of a custom element is &lt;code&gt;dx-instrumentation&lt;/code&gt; in Salesforce's developer page.&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2y0nz488sb820yp9kb0p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2y0nz488sb820yp9kb0p.png" alt="Screen Shot 2021-08-05 at 3.17.27 PM"&gt;&lt;/a&gt; &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ln8jebdt2c6ep00bj3i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ln8jebdt2c6ep00bj3i.png" alt="Screen Shot 2021-08-05 at 3.41.04 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EA:&lt;/strong&gt;&lt;br&gt;
EA uses web components. Here is an example of the sims website using web components. It makes use of the iron-a11y-announcer custom element, that adds a11y to features that require on-demand announcement from screen readers.&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmccyzhz62txzsh4pxg1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmccyzhz62txzsh4pxg1.png" alt="Screen Shot 2021-08-05 at 3.35.28 PM"&gt;&lt;/a&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9c74knsqha6rd19ia21g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9c74knsqha6rd19ia21g.png" alt="Screen Shot 2021-08-05 at 3.41.32 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Links to learn more:
&lt;/h3&gt;

&lt;p&gt;Here are some links that you can use to learn more about Web components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_templates_and_slots" rel="noopener noreferrer"&gt;Templates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements" rel="noopener noreferrer"&gt;Custom Elements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM" rel="noopener noreferrer"&gt;Shadow DOM&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Video:
&lt;/h3&gt;

&lt;p&gt;And here is a video where I explain web components:&lt;br&gt;
&lt;a href="https://youtu.be/0UvDjhO8j94" rel="noopener noreferrer"&gt;Youtube&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>html</category>
      <category>webcomponents</category>
    </item>
    <item>
      <title>Git and Github</title>
      <dc:creator>Hamza Siddiq</dc:creator>
      <pubDate>Sun, 25 Jul 2021 18:25:52 +0000</pubDate>
      <link>https://forem.com/hamzasiddiq/boy-with-a-beard-explains-git-and-github-4h3n</link>
      <guid>https://forem.com/hamzasiddiq/boy-with-a-beard-explains-git-and-github-4h3n</guid>
      <description>&lt;p&gt;Github launched in 2008, and became very popular because of its saas (software as a service ), providing a cloud based hosting service. But it is in fact git, that powers it. Below I'll explain Git and  Github.&lt;/p&gt;

&lt;h3&gt;
  
  
  Git:
&lt;/h3&gt;

&lt;p&gt;Git is a version control system. What that means is that it tracks and manages changes to the software code.&lt;/p&gt;

&lt;h4&gt;
  
  
  Git is newer:
&lt;/h4&gt;

&lt;p&gt;There are a few version control systems out there, and an advantage that git has over them is that it is a newer, more modern implementation of version control. It is fast, because it is lightweight, so it runs quick.&lt;/p&gt;

&lt;h4&gt;
  
  
  Git provides team development, and a history of content changes:
&lt;/h4&gt;

&lt;p&gt;Another advantage that git has is that it provides a history of content changes that happen, and it allows for team based collaborative development to take place. So all the people collaborating have access to not only the code that is being shared, but a history of changes that have been made, or will be made.&lt;/p&gt;

&lt;h4&gt;
  
  
  How collaborative development takes place:
&lt;/h4&gt;

&lt;p&gt;The way in which git helps collaborative development is by taking a trunk based approach to development. So what happens is that a developer gets a copy of code, makes changes, and then merges it back into the main file. I'll explain this while defining terms below:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; Your project folder. This would contain all your project files.&lt;br&gt;
&lt;strong&gt;Branch:&lt;/strong&gt; A version of the repository that diverges from the main project repository.&lt;br&gt;
&lt;strong&gt;Clone:&lt;/strong&gt; Make a copy of the repository.&lt;br&gt;
&lt;strong&gt;Fork:&lt;/strong&gt; Make a copy of the repository on Github.&lt;br&gt;
&lt;strong&gt;Commit:&lt;/strong&gt; We open code from our copy of the repository, and if we like changes to our code, we commit the changes to our copy of the repository.&lt;br&gt;
&lt;strong&gt;Push:&lt;/strong&gt; Transfer code from our copy of the repository to the original project folder.&lt;br&gt;
&lt;strong&gt;Pull and merge:&lt;/strong&gt;  Since multiple users are working on the repository, another user might have pushed code into the main repository, and the code might have updated in the main repository. So once a developer completes their changes, they get the code or pull it from the main project repository, and merges it with their own code.&lt;br&gt;
&lt;strong&gt;Merge conflict:&lt;/strong&gt; The developer has modified the same code as another developer who has already pushed their code into the main repository. So the developer works with the code, and makes changes accordingly.&lt;br&gt;
&lt;strong&gt;Pull request&lt;/strong&gt;: Once conflicts are resolved. The developer puts a pull request that notifies every member that changes need to be reviewed.&lt;br&gt;
&lt;strong&gt;Approve pull request:&lt;/strong&gt; The main repository owner approves the pull request.&lt;br&gt;
&lt;strong&gt;Merge:&lt;/strong&gt; The main repository owner now merges the code into the main branch.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So a developer clones the main repository. A branch gets created where the developer works on their copy of the repository. Edits are made by the developer and they commit the changes to their copy of the repository. They pull, and merge the code from the main repository to their own repository. If there is a merge conflict, these are resolved. A pull request is sent to notify members that changes need to be reviewed. Once everything looks good. These changes are approved and merged with the original project folder.&lt;/p&gt;

&lt;h3&gt;
  
  
  Github:
&lt;/h3&gt;

&lt;p&gt;While using git, the main repository files of a project are stored on a local or a cloud network, and files are accessed and modified using command line on a computer.&lt;/p&gt;

&lt;p&gt;Github took this implementation of git, and provided a cloud service, where the files were stored, and the files could be accessed and modified. This would mean that people could see, access and make changes to files using GitHub. Since command line is not required, this also made it very easy for people not that familiar with coding to have access to the progress of a project. GitHub provides open source projects, which also made people have access to a huge directory of projects to clone or as GitHub calls it fork them.&lt;/p&gt;

&lt;p&gt;The following actions can be done in GitHub to create, clone, commit, pull, merge, and push a repository:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Below we used the account boywithabeard(the one in dark theme) to create the main repository, and bigdig to clone the repository (the one in light theme).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  Create a repository:
&lt;/h5&gt;

&lt;p&gt;Go to the home page, and then click on the green new button on the top left side:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CaHsBYd9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bg7rmx69kha6s5dn88dv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CaHsBYd9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bg7rmx69kha6s5dn88dv.png" alt="Screen Shot 2021-07-25 at 12.56.42 PM"&gt;&lt;/a&gt;&lt;br&gt;
Enter a repository name, in this tutorial we have named it: Tutorial, and then click on create repository:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v66SfFB_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dbyq53373mk4pooj5ufx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v66SfFB_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dbyq53373mk4pooj5ufx.png" alt="Screen Shot 2021-07-25 at 12.58.25 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Clone(Fork) a repository:
&lt;/h4&gt;

&lt;p&gt;Go to a repository. On the top left side you would find the word fork. Click on it, and you would get your own copy:!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mNKQ760Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fhfxmzaugr2nrz8kc4rz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mNKQ760Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fhfxmzaugr2nrz8kc4rz.png" alt="Screen Shot 2021-07-25 at 1.27.21 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Commit:
&lt;/h4&gt;

&lt;p&gt;Open any file, in this example we opened the file named .gitignore, in our copy of the repository:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aJt9WO9K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1izipu3njlfkhyua9ksp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aJt9WO9K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1izipu3njlfkhyua9ksp.png" alt="Screen Shot 2021-07-25 at 1.33.00 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the file is open, click on the edit pen icon:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kQQ-8grS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/78cy7fidw7y8q2frppst.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kQQ-8grS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/78cy7fidw7y8q2frppst.png" alt="Screen Shot 2021-07-25 at 1.33.24 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make some changes, in this example we added the line, &lt;code&gt;just for a tutorial&lt;/code&gt;:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xSop-Sma--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1rmw3dsb8o2c4npla2ky.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xSop-Sma--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1rmw3dsb8o2c4npla2ky.png" alt="Screen Shot 2021-07-25 at 1.36.21 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add details about the changes you made, and press on commit changes:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1FYSrtiw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/20ri8lcdzr3ddbtcqn1x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1FYSrtiw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/20ri8lcdzr3ddbtcqn1x.png" alt="Screen Shot 2021-07-25 at 1.34.44 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Pull request:
&lt;/h4&gt;

&lt;p&gt;Go to your repository, and click on the tab pull request, then click on new pull request:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4XxxYcun--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aj6ju8wplxtggri5czlt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4XxxYcun--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aj6ju8wplxtggri5czlt.png" alt="Screen Shot 2021-07-25 at 1.35.12 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now click on create pull request:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3hR964YN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ngesci53mih7jemuesw3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3hR964YN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ngesci53mih7jemuesw3.png" alt="Screen Shot 2021-07-25 at 1.36.21 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add details about the changes you made, and press on create pull request:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dIT2NpDN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kog3fa78by0i3gteb8hk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dIT2NpDN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kog3fa78by0i3gteb8hk.png" alt="Screen Shot 2021-07-25 at 1.35.42 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can click on your pull request in your repository. Now you and the main repository owner, can add comments and discuss the issue:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7rS8e_Xc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fqit7eg91ij8z85zqgu8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7rS8e_Xc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fqit7eg91ij8z85zqgu8.png" alt="Screen Shot 2021-07-25 at 1.42.05 PM"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qsuPqiHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f5jj0l031df2u5h8bcvo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qsuPqiHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f5jj0l031df2u5h8bcvo.png" alt="Screen Shot 2021-07-25 at 1.40.14 PM"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xWWyMvFO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h7mrqp1vwnud6dfvedvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xWWyMvFO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h7mrqp1vwnud6dfvedvx.png" alt="Screen Shot 2021-07-25 at 1.40.49 PM"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r7VOOBH1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0l86ht52dqa9wf0kerok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r7VOOBH1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0l86ht52dqa9wf0kerok.png" alt="Screen Shot 2021-07-25 at 1.41.19 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Pull and merge::
&lt;/h4&gt;

&lt;p&gt;The parent, boywithabeard, creates a merge pull request, to notify everyone about the changes:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zWXClYgv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/epvxvpaq71cif3tyr04e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zWXClYgv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/epvxvpaq71cif3tyr04e.png" alt="Screen Shot 2021-07-25 at 1.43.19 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Merge:
&lt;/h4&gt;

&lt;p&gt;If there are no disagreements, he or she then merges the code:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qn9Tx4m6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c74mjnwui61uamcuf7am.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qn9Tx4m6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c74mjnwui61uamcuf7am.png" alt="Screen Shot 2021-07-25 at 1.43.27 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check out the video where I go over the concepts mentioned above: &lt;br&gt;
&lt;a href="https://youtu.be/FgqvBUkWMVw"&gt;Youtube Video&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>git</category>
      <category>github</category>
    </item>
    <item>
      <title>Web accessibility auditing</title>
      <dc:creator>Hamza Siddiq</dc:creator>
      <pubDate>Fri, 23 Jul 2021 20:07:43 +0000</pubDate>
      <link>https://forem.com/hamzasiddiq/accessibility-auditing-38jl</link>
      <guid>https://forem.com/hamzasiddiq/accessibility-auditing-38jl</guid>
      <description>&lt;p&gt;Accessibility is very important for web developers. It helps websites reach a broader audience, by making sure that people with disabilities can have access to a website.  The cdc states that 26% of adults in the United States have some form of disability, so by designing for disability, which is a huge portion of the population that websites could be accessible to if they kept these users in mind. However, there is more to access accessibility. By designing to keep in mind people who need accessibility, websites also improve the experience for existing users. For examples, a text magnifier on a website would not only help the visually impaired, but also help existing users, who might have difficulty reading a particular portion of the website.&lt;/p&gt;

&lt;p&gt;There are three tools discussed below that help with accessibility. Of the three, lighthouse and web.dev are similar tools, so they have been explained together. The third tool is wave, which also helps with accessibility.&lt;/p&gt;

&lt;h4&gt;
  
  
  Lighthouse and web.dev:
&lt;/h4&gt;

&lt;p&gt;Lighthouse and web.dev are two tools that are interlinked. To help audit a website, you would go to web.dev and click the test my site button. &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hhZTb94w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vdazmvvqhk0lc7z3nhu6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hhZTb94w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vdazmvvqhk0lc7z3nhu6.png" alt="Screen Shot 2021-07-23 at 4.08.56 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After clicking on the button you would be taken to the page below where you need to paste in the name of the website, and run the audit. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1rgY_EWk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g3nf1hh4avzw68solqdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1rgY_EWk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g3nf1hh4avzw68solqdg.png" alt="Screen Shot 2021-07-23 at 4.12.16 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Upon running the audit we get the following results:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gsH8m5mE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p3fqzxr1l0q0saxl18d5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gsH8m5mE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p3fqzxr1l0q0saxl18d5.png" alt="web.dev.1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So we get a lot of metrics and ways on how to improve the accessibility issues with our website. Similarly, if we click on view report, we get taken to the Lighthouse report, which gives us a more detailed guide on improving our website:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3AttT59I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fvx1w8zmt9fr55q66eul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3AttT59I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fvx1w8zmt9fr55q66eul.png" alt="Screen Shot 2021-07-23 at 4.38.51 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can use the guides, and then apply them to our website to improve the accessibility.&lt;/p&gt;

&lt;p&gt;Below are some accessibility issues that I have analyzed.&lt;/p&gt;

&lt;p&gt;For this analysis, I used both lighthouse, and web.dev.&lt;/p&gt;

&lt;h5&gt;
  
  
  Eliminate render-blocking resources:
&lt;/h5&gt;

&lt;p&gt;First paint is the point at which the first pixel renders on a screen, when a user navigates to a webpage. There are going to be several url’s that blocks the first paint of the page. In our report in lighthouse, the opportunities tab lists all the suggestions that would render block our website. In our analysis of lighthouse, the opportunities presented are listed below, which if implemented would allow us to save a lot of time:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MeTyyBlH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/te6old3y5g6jybjsv39i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MeTyyBlH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/te6old3y5g6jybjsv39i.png" alt="Screen Shot 2021-07-23 at 6.55.05 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is however important that we only defer or eliminate the resources that we need less and prioritize the ones that we need the most. So we identify the critical resources by going to chrome DevTools. The styles in css files and code in javascript would be marked in two colors:&lt;br&gt;
Green: Critical&lt;br&gt;
Red: non-critical&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uhH6kUeC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v4l7zc38jjirkkxoocxf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uhH6kUeC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v4l7zc38jjirkkxoocxf.png" alt="IzpB7injykyaq8PRDVwF"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Script not being used should be removed. Non-critical code should be deferred using the deferred attribute, or asynched using the async attribute. The script should now be moved to an inline script tag in the html page.&lt;/p&gt;

&lt;p&gt;Similarly, for a render blocking stylesheet, inline the critical styles to the style block in the head of the html tag, and load the rest asynchronously using the preload tag.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W5EP4Jje--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/69mphakwis5vr4q31fy8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W5EP4Jje--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/69mphakwis5vr4q31fy8.png" alt="Screen Shot 2021-07-23 at 7.21.50 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Defer offscreen images:
&lt;/h5&gt;

&lt;p&gt;There were several off-screen images that were found in the website, and the web.dev recommends to differ off screen images. The best approach here is to lazy load images that are off screen. The following script is added: . And class lazy load is added to images that need to be lazy loaded. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cdYlZXuo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/un5e69rjvspwu8f10b1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cdYlZXuo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/un5e69rjvspwu8f10b1n.png" alt="Screen Shot 2021-07-23 at 7.20.49 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Remove unused JavaScript:
&lt;/h5&gt;

&lt;p&gt;This was explained in eliminating render blocking resources.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q5ROPWue--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/enzs5q9kj5cn0uo7spw5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q5ROPWue--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/enzs5q9kj5cn0uo7spw5.png" alt="Screen Shot 2021-07-23 at 7.19.37 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Serve images in next-gen formats:
&lt;/h5&gt;

&lt;p&gt;Lighthouse lists the images in old formats, and the savings that would happen if they are in new formats. It is thus best to use AVIF and WebP which have better compression and quality characteristics compared to their older JPEG and PNG counterparts, and would make the website load faster.&lt;br&gt;
 &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r4CIaTsD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4vwiul5jrb1ofvnj2wxi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r4CIaTsD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4vwiul5jrb1ofvnj2wxi.png" alt="Screen Shot 2021-07-23 at 7.18.56 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Preload Largest Contentful Paint image:
&lt;/h5&gt;

&lt;p&gt;If a particular resource is very important,  should be used to load it sooner. In our website, we had a large important image, which is best to be preloaded.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CkM7P5KG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7x60ovn7obw3c31wixcv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CkM7P5KG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7x60ovn7obw3c31wixcv.png" alt="Screen Shot 2021-07-23 at 7.22.48 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Wave:
&lt;/h4&gt;

&lt;p&gt;Wave, which stands for web accessibility evaluation tool, is another tool that we can use to improve accessibility. It is a browser extension that is currently available on Firefox and Chrome. For this example we would be using the Chrome extension.&lt;/p&gt;

&lt;p&gt;To get started, go to chrome and open the website &lt;a href="https://wave.webaim.org/extension/"&gt;https://wave.webaim.org/extension/&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dSMZuCIz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c8lmi89j49qajmggaf86.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dSMZuCIz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c8lmi89j49qajmggaf86.png" alt="Screen Shot 2021-07-23 at 4.47.27 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on add to chrome extension, and then add it to chrome. &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jobegBOP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rwkqse263nrnx231ewm4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jobegBOP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rwkqse263nrnx231ewm4.png" alt="Screen Shot 2021-07-23 at 4.48.13 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once added navigate to the website, and then click on the browser extension on the top right hand side of the browser, and you would see a report like the one below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vevJPaIR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i5uxxtb7mni3dke0r1yv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vevJPaIR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i5uxxtb7mni3dke0r1yv.png" alt="Screen Shot 2021-07-23 at 4.49.16 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the details tab and you would get detailed icons with all the errors:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pKP6cdMx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vw67ax63far82afj1edx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pKP6cdMx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vw67ax63far82afj1edx.png" alt="Screen Shot 2021-07-23 at 4.51.39 PM copy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can now click on each error, and the web page would jump to that portion of the website. You can also click on the "i" next to the error on the extension details page, and you would get directed to the reference page, that explains how to fix the error:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Oy5MD_hC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kdyu4iqelfjtxhvlgkk7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Oy5MD_hC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kdyu4iqelfjtxhvlgkk7.png" alt="Screen Shot 2021-07-23 at 4.54.09 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below is a video that explains Lighthouse, web.dev and the Wave plugin: &lt;br&gt;
&lt;a href="https://youtu.be/5-LCaK3dAUc"&gt;https://youtu.be/5-LCaK3dAUc&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>a11y</category>
    </item>
    <item>
      <title>Metamask on Desktop</title>
      <dc:creator>Hamza Siddiq</dc:creator>
      <pubDate>Mon, 19 Jul 2021 21:06:12 +0000</pubDate>
      <link>https://forem.com/hamzasiddiq/boy-with-a-beard-explains-installing-metamask-on-desktop-4c30</link>
      <guid>https://forem.com/hamzasiddiq/boy-with-a-beard-explains-installing-metamask-on-desktop-4c30</guid>
      <description>&lt;h4&gt;
  
  
  About Me
&lt;/h4&gt;

&lt;p&gt;Hi people! This is boy with a beard. My name is Hamza Siddiq, and the aim of my blog posts is to explain some amazing technologies that exist today. I am a senior studying Information Science and Technology at the Pennsylvania State University.&lt;/p&gt;

&lt;h4&gt;
  
  
  How to set up Metamask on Desktop:
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;I would highly recommend installing metamask using the chrome extension. The phone app doesn't work half the time and is just a pain. I'll explain the iPhone app in the future, and how to get around those bugs, but for now let's just stick to the chrome plugin since it's your first time using metamask.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  Step 1:
&lt;/h5&gt;

&lt;p&gt;Go to metamask's website at &lt;a href="https://metamask.io/index.html"&gt;https://metamask.io/index.html&lt;/a&gt;&lt;br&gt;
and click on download now.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D7F2xPBU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bjq6ryu01bj8rjxm50wp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D7F2xPBU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bjq6ryu01bj8rjxm50wp.png" alt="Screen Shot 2021-07-19 at 4.42.03 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 2:
&lt;/h5&gt;

&lt;p&gt;Click on install metamask for chrome.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eogyAV9U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/69xzvmxan58rhjdnfgi3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eogyAV9U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/69xzvmxan58rhjdnfgi3.png" alt="Screen Shot 2021-07-19 at 4.46.03 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 3:
&lt;/h5&gt;

&lt;p&gt;Click on add to chrome&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bYphOvuG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xoc0odqxaf2zied9v3u0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bYphOvuG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xoc0odqxaf2zied9v3u0.png" alt="Screen Shot 2021-07-19 at 4.47.00 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 4:
&lt;/h5&gt;

&lt;p&gt;A new browser tab is going to open up upon installation of the browser extension, welcoming you to metamask. Click on get started.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DmUuldKv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pa30wfwbfgb05ccn97w8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DmUuldKv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pa30wfwbfgb05ccn97w8.png" alt="Screen Shot 2021-07-19 at 4.47.50 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 5:
&lt;/h5&gt;

&lt;p&gt;Click on Create a Wallet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UgbvCWDP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5w7pa6412a5e7an39345.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UgbvCWDP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5w7pa6412a5e7an39345.png" alt="Screen Shot 2021-07-19 at 4.47.56 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 6:
&lt;/h5&gt;

&lt;p&gt;Agree if you would like to share your usage data with metamask, or disagree if you would not&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OLvPp1Uv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g1rligs9pnjjt3mvftet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OLvPp1Uv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g1rligs9pnjjt3mvftet.png" alt="Screen Shot 2021-07-19 at 4.48.01 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 7:
&lt;/h5&gt;

&lt;p&gt;Create a password. This is the password you would use every time you open metamask using your browser&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A-3BXlnL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9rkj64bzn25b5scafebd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A-3BXlnL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9rkj64bzn25b5scafebd.png" alt="Screen Shot 2021-07-19 at 4.48.15 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 8:
&lt;/h5&gt;

&lt;p&gt;The recovery phrase is a phrase you use if you lose access to your metamask, or login using a different device. Make sure to keep if somewhere safe, which is not digital, to be safe from a data breach. I recommend storing your seed phrase on a piece of paper, and making multiple copies of it, storing them in different places.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mCdKYXmn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4bxq459e46qff6phj7z3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mCdKYXmn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4bxq459e46qff6phj7z3.png" alt="Screen Shot 2021-07-19 at 4.48.22 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 9:
&lt;/h5&gt;

&lt;p&gt;Here is your secret recovery phrase. Copy your recovery phrase on a piece of paper.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pgtcCjto--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/plfoz4dym0cr0tdafzs5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pgtcCjto--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/plfoz4dym0cr0tdafzs5.png" alt="Screen Shot 2021-07-19 at 4.48.35 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 10:
&lt;/h5&gt;

&lt;p&gt;Confirm your recovery phrase that you copied. This is the same process you would do when you lose access to your account or are accessing it from a different device.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E_YFpCsq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w541o039pphrtxy4jjxd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E_YFpCsq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w541o039pphrtxy4jjxd.png" alt="Screen Shot 2021-07-19 at 4.49.29 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 11:
&lt;/h5&gt;

&lt;p&gt;Congrats. You're all set.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TADMTozC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vqect2l4p5y8042sn60a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TADMTozC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vqect2l4p5y8042sn60a.png" alt="Screen Shot 2021-07-19 at 4.49.34 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 12:
&lt;/h5&gt;

&lt;p&gt;Welcome to your metamask wallet! You can now transfer crypto from different wallets, or purchase crypto using your new metamask wallet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Enwh0VU3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pwlhhl8zx0vtlmaxecuv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Enwh0VU3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pwlhhl8zx0vtlmaxecuv.png" alt="Screen Shot 2021-07-19 at 4.49.41 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Video:&lt;/strong&gt; &lt;a href="https://youtu.be/exqpd1tFEcs"&gt;https://youtu.be/exqpd1tFEcs&lt;/a&gt; &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>metamask</category>
      <category>crypto</category>
    </item>
  </channel>
</rss>
