<?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: Michael Fasani</title>
    <description>The latest articles on DEV Community by Michael Fasani (@fasani).</description>
    <link>https://dev.to/fasani</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%2F404494%2Fee1c746e-8126-477c-9490-3c6bbbb55e49.jpeg</url>
      <title>DEV Community: Michael Fasani</title>
      <link>https://dev.to/fasani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fasani"/>
    <language>en</language>
    <item>
      <title>Useful npm and node commands I use to boost productivity</title>
      <dc:creator>Michael Fasani</dc:creator>
      <pubDate>Sun, 28 May 2023 19:43:56 +0000</pubDate>
      <link>https://dev.to/fasani/useful-npm-and-node-commands-i-use-to-boost-productivity-301h</link>
      <guid>https://dev.to/fasani/useful-npm-and-node-commands-i-use-to-boost-productivity-301h</guid>
      <description>&lt;p&gt;I prefer to use &lt;code&gt;npx&lt;/code&gt; over &lt;code&gt;npm&lt;/code&gt; when possible so the commands can be executed without installing dependencies.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to count the number of lines of code in a git repository?&lt;/li&gt;
&lt;li&gt;How to find CRLF line separators in a git repository?&lt;/li&gt;
&lt;li&gt;How to find a package which contains a specific dependency?&lt;/li&gt;
&lt;li&gt;How to kill a process running on a specific port?&lt;/li&gt;
&lt;li&gt;How to kill a process using part of the starting command?&lt;/li&gt;
&lt;li&gt;How to list the globally installed npm packages?&lt;/li&gt;
&lt;li&gt;How to list all packages installed by homebrew?&lt;/li&gt;
&lt;li&gt;How to upgrade dependencies in the package.json file?&lt;/li&gt;
&lt;li&gt;How to visualize the size of modules from a webpack bundle or selection of JavaScript files?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to count the number of lines of code in a git repository?
&lt;/h2&gt;

&lt;p&gt;In some situations you may need to know how many lines of code exist in a project, you can use 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;git ls-files | xargs wc -l
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to find CRLF line separators in a git repository?
&lt;/h2&gt;

&lt;p&gt;In some situations you may need to locate files which have usually been created on a Windows machine which contain the CRLF character.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git grep -Il \$'\r'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to find a package which contains a specific dependency?
&lt;/h2&gt;

&lt;p&gt;For example, you may find an error during a build process with a specific package/module, but perhaps you can not locate where it exists. Usually, it's a dependency of a dependency. You can search the entire &lt;strong&gt;&lt;em&gt;node_modules&lt;/em&gt;&lt;/strong&gt; folder for a package name (Insert ):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;find ./node_modules/ -name package.json | xargs grep &amp;lt;package_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to kill a process running on a specific port?
&lt;/h2&gt;

&lt;p&gt;For example, you are running a server on port 8000, you could kill that process with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo lsof -t -i tcp:8000 | xargs kill -9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to kill a process using part of the starting command?
&lt;/h2&gt;

&lt;p&gt;For example, you are running webpack-dev-server, you could kill that process with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kill -9 $(ps aux | grep 'webpack' | awk '{print $2}')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to list the globally installed npm packages?
&lt;/h2&gt;

&lt;p&gt;Generate a list of all of the globally installed packages on your machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm list -g --depth 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to list all packages installed by homebrew?
&lt;/h2&gt;

&lt;p&gt;Running &lt;code&gt;brew leaves&lt;/code&gt; shows you all top-level packages and the snippet below also outputs a small description for each package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew leaves | xargs -n1 brew desc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to upgrade dependencies in the package.json file?
&lt;/h2&gt;

&lt;p&gt;Upgrading &lt;strong&gt;&lt;em&gt;node_modules&lt;/em&gt;&lt;/strong&gt; can be exhausting. These quick commands can help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;npm update&lt;/code&gt; to perform safe dependency upgrades.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm outdated&lt;/code&gt; to discover all of the outdated dependencies.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm install packagename@latest&lt;/code&gt; to upgrade a package to the latest major version.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npx npm-check-updates -u&lt;/code&gt; to update the version numbers in the &lt;strong&gt;&lt;em&gt;package.json&lt;/em&gt;&lt;/strong&gt;
file automatically. After updating the &lt;strong&gt;&lt;em&gt;package.json&lt;/em&gt;&lt;/strong&gt; file run &lt;code&gt;npm install&lt;/code&gt; to upgrade all dependencies to their latest versions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to visualize the size of modules from a webpack bundle or selection of JavaScript files?
&lt;/h2&gt;

&lt;p&gt;Pass a single webpack entry file and output the results as HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx source-map-explorer public/app-57b30d978d142b12cdd0.js --html result.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pass all the JavaScript files in a directory and output the results as HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx source-map-explorer public/*.js --html result.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  That's a Wrap!
&lt;/h2&gt;

&lt;p&gt;I hope you have enjoyed this post and discovered some useful productivity hacks. I love to share and learn from the community if you have a favourite command-line productivity hack post it below!&lt;/p&gt;

</description>
      <category>node</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Creating my first EC2 instance on Amazon Web Services (AWS)</title>
      <dc:creator>Michael Fasani</dc:creator>
      <pubDate>Sat, 27 May 2023 11:40:59 +0000</pubDate>
      <link>https://dev.to/fasani/creating-my-first-ec2-instance-on-amazon-web-services-aws-2k6p</link>
      <guid>https://dev.to/fasani/creating-my-first-ec2-instance-on-amazon-web-services-aws-2k6p</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Today I learned Amazon make their own CPU's and have a version of Linux, both were designed to offer a better cloud experience when working with AWS. I set up my own AWS EC2 instance, and soon, I will install Rust and write my first Rust application. Follow me to learn more as I continue on this journey.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My AWS Plan&lt;/li&gt;
&lt;li&gt;A noob with questions...&lt;/li&gt;
&lt;li&gt;What operating system should I choose, RedHat vs SUSE Linux vs Amazon Linux 2?&lt;/li&gt;
&lt;li&gt;What is the difference between 64-bit (x86) 64-bit (Arm)?&lt;/li&gt;
&lt;li&gt;Can I run Rust on Arm or x86?&lt;/li&gt;
&lt;li&gt;What is the difference between a 32-bit or a 64-bit operating system?&lt;/li&gt;
&lt;li&gt;Setting up my AWS EC2 server&lt;/li&gt;
&lt;li&gt;What's next...&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My AWS Plan
&lt;/h2&gt;

&lt;p&gt;I plan to start working with Rust in the cloud and in the browser using WebAssembley. As a Senior Frontend Developer who spent the last 10 years focusing on JavaScript I know almost nothing about hosting my own servers. I maintained a couple of servers over 15 years ago, which ran Internet Information Services (IIS) on Windows.&lt;/p&gt;

&lt;p&gt;I think having experience with AWS will be a valuable skill to have. With the Amazon free tier, you get 12 months of free AWS products to play with and having a playground of unlimited computing power, and modern infrastructure could be very interesting. That is one of the reasons why I am jumping into AWS and documenting my learning process.&lt;/p&gt;

&lt;h2&gt;
  
  
  A noob with questions...
&lt;/h2&gt;

&lt;p&gt;As I know, almost zero about cloud computing I had to Google a few questions along the way, and below, I have documented my learning process and decisions.&lt;/p&gt;

&lt;p&gt;After signing up to AWS and AWS Training, I watched some videos and signed up to this course on Udemy: &lt;a href="https://www.udemy.com/course/free-aws-certified-cloud-practitioner"&gt;Free AWS Certified Cloud Practitioner 2019&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, I started to set up my own EC2 instance. You have to select software and hardware options, and as I am cloud computing noob, I had some questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What operating system should I choose, RedHat vs SUSE Linux vs Amazon Linux 2?
&lt;/h2&gt;

&lt;p&gt;Turns out Amazon have their own version of Linux, in a nutshell: Amazon Linux 2 includes support for the latest Amazon EC2 instance capabilities and is tuned for enhanced performance. It contains packages that help ease integration with other AWS Services. Sounds good to me! I decided to go with &lt;a href="https://aws.amazon.com/amazon-linux-2"&gt;Amazon Linux 2&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AgOCydCR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3261v4d0t72uoxngchi8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AgOCydCR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3261v4d0t72uoxngchi8.png" alt="Amazon Linux 2" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the difference between 64-bit (x86) 64-bit (Arm)?
&lt;/h2&gt;

&lt;p&gt;Amazon is making its own Arm chips that &lt;a href="https://www.youtube.com/watch?v=KLz8gC235i8"&gt;should provide better performance when using AWS&lt;/a&gt;. I decided to go with an Arm chip, but this was a mistake as it turns out for the free tier option you have to choose x86.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XBVBKPfp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o3r4hp74pn85f1ujmkmw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XBVBKPfp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o3r4hp74pn85f1ujmkmw.png" alt="AWS T2 Micro" width="800" height="38"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I run Rust on Arm or x86?
&lt;/h2&gt;

&lt;p&gt;Here is a list of &lt;a href="https://forge.rust-lang.org/release/platform-support.html"&gt;Tier 1 operating systems which can run Rust&lt;/a&gt;. Based on this list it seems I can run Rust on any Linux OS in either 32-bit or 64-bit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rmpEJq9r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zywl5la559kb30bql114.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rmpEJq9r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zywl5la559kb30bql114.png" alt="Rust Tier 1 platforms" width="800" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the difference between a 32-bit or a 64-bit operating system?
&lt;/h2&gt;

&lt;p&gt;Simply put, a &lt;a href="https://www.digitaltrends.com/computing/32-bit-vs-64-bit-operating-systems/"&gt;64-bit processor is more capable than a 32-bit processor&lt;/a&gt;, because it can handle more data at once. Here's the key difference: 32-bit processors are capable of handling a limited amount of RAM (in Windows, 4GB or less), and 64-bit processors are capable of utilizing much more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up my AWS EC2 server
&lt;/h2&gt;

&lt;p&gt;I followed this video for the most part to setup my AWS EC2 server: &lt;a href="https://www.aws.training/Details/Video?id=16382"&gt;AWS Training - Introduction to EC2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After setup, I was able to login using the AWS online SSH console.&lt;br&gt;
After logging in, I was told there were four security updates and to run &lt;code&gt;sudo yum update&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N0_YFIz_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xopk62iesvpnuzmfzqgc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N0_YFIz_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xopk62iesvpnuzmfzqgc.png" alt="AWS online SSH console" width="800" height="803"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, I tried to use my SSH *.pem key to log in, which was also a success but I just had to CHMOD the key first, but all of this information was in AWS under the connect option.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chmod 400 my-key-pair.pem
ssh -i my-key-pair.pem my-instance-user-name@my-instance-public-dns-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I will need to rewatch some of the information from the free Udemy course above to make sure I have set things up in the correct way, for now, I have terminated the server. I will probably set up another one in the same way once I feel happy with the choices I have made and what I have learned today.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next...
&lt;/h2&gt;

&lt;p&gt;In my next post on my AWS journey, I will try to install Rust and make a small Rust application, then I plan and then talk to my Rust application over HTTP using JavaScript.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>rust</category>
    </item>
    <item>
      <title>Installing Tailwind CSS on top of the Gatsby starter default</title>
      <dc:creator>Michael Fasani</dc:creator>
      <pubDate>Sun, 16 Aug 2020 21:29:13 +0000</pubDate>
      <link>https://dev.to/fasani/installing-tailwind-css-on-top-of-the-gatsby-starter-default-5e78</link>
      <guid>https://dev.to/fasani/installing-tailwind-css-on-top-of-the-gatsby-starter-default-5e78</guid>
      <description>&lt;p&gt;If you are interested in using Tailwind CSS and you have not yet started your Gatsby project, you could potentially save time using the &lt;a href="https://github.com/taylorbryant/gatsby-starter-tailwind"&gt;Gatsby Starter Tailwind&lt;/a&gt;. This post will be more beneficial for people who already have a Gatsby project and want to add Tailwind CSS manually. I recently added TailWindCSS to &lt;a href="https://www.michaelfasani.com/"&gt;my blog&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What is Tailwind?&lt;/li&gt;
&lt;li&gt;Installing new dependencies&lt;/li&gt;
&lt;li&gt;Create a tailwind.config.js file&lt;/li&gt;
&lt;li&gt;Configure Gatsby to use Tailwind CSS&lt;/li&gt;
&lt;li&gt;Include the Tailwind CSS directives&lt;/li&gt;
&lt;li&gt;Testing the Tailwind CSS installation&lt;/li&gt;
&lt;li&gt;Purging unused CSS&lt;/li&gt;
&lt;li&gt;That's a Wrap!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is Tailwind?
&lt;/h2&gt;

&lt;p&gt;If you are reading this post and do not yet know what Tailwind CSS is then I suggest you visit the &lt;a href="https://tailwindcss.com/"&gt;Tailwind CSS site&lt;/a&gt; to learn more. I assume you have arrived here via a google search and you are ready to dive right in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing new dependencies
&lt;/h2&gt;

&lt;p&gt;First, you will need to install two new dependencies into your Gatsby project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/tailwindcss/tailwindcss"&gt;Tailwind CSS&lt;/a&gt; - A utility-first CSS framework for rapidly building custom user interfaces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-postcss"&gt;Gatsby PostCSS plugin&lt;/a&gt; - Tailwind CSS requires the PostCSS plugin, as we are adding Tailwind CSS to a Gatsby project we will use a Gatsby plugin instead of the default PostCSS plugin. If you want to learn more about PostCSS please visit the &lt;a href="https://github.com/postcss/postcss"&gt;Post CSS plugin repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Install both plugins:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;tailwindcss gatsby-plugin-postcss &lt;span class="nt"&gt;--save&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create a tailwind.config.js file
&lt;/h2&gt;

&lt;p&gt;Next, we want to create a &lt;code&gt;tailwind.config.js&lt;/code&gt; file. The file is optional, but we will need it to reduce the size of our CSS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx tailwindcss init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This above command will create a minimal &lt;code&gt;tailwind.config.js&lt;/code&gt; file at the root of our Gatsby project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// tailwind.config.js&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
    &lt;span class="na"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
    &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can learn more about the &lt;a href="https://tailwindcss.com/docs/configuration/"&gt;configuration file&lt;/a&gt; on the Tailwind CSS site.&lt;/p&gt;

&lt;p&gt;As per the &lt;a href="https://tailwindcss.com/docs/installation/"&gt;installation guide&lt;/a&gt; we will add the following Tailwind CSS plugins because we are using PostCSS and they recommend us to do so.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// tailwind.config.js&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tailwindcss&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;autoprefixer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configure Gatsby to use Tailwind CSS
&lt;/h2&gt;

&lt;p&gt;Next, we will include the PostCSS Gatsby plugin and configure it to use Tailwind CSS and tell it where our &lt;code&gt;tailwind.config.js&lt;/code&gt; file is.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// gatsby-config.js&lt;/span&gt;
&lt;span class="nx"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gatsby-plugin-postcss&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nl"&gt;postCssPlugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tailwindcss&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./tailwind.config.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alternatively, you can create a &lt;code&gt;postcss.config.js&lt;/code&gt;, but I prefer the pattern of having all of my Gatsby plugins in the &lt;code&gt;gatsby-config.js&lt;/code&gt; file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Include the Tailwind CSS directives
&lt;/h2&gt;

&lt;p&gt;I am working with a new Gatsby build, so I was able to remove all of the content in the &lt;code&gt;layout.css&lt;/code&gt; file and replace that with the Tailwind CSS import directives.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* src/components/layout.css */&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;utilities&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can learn more about the &lt;a href="https://tailwindcss.com/docs/functions-and-directives/"&gt;Tailwind CSS Directives&lt;/a&gt; on their site.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the Tailwind CSS installation
&lt;/h2&gt;

&lt;p&gt;We have completed the steps to get Tailwind CSS up and running in our Gatsby project so now we can test if everything was successful. The quickest way to test your Gatsby project is to launch the project using &lt;code&gt;gatsby develop&lt;/code&gt; then open up your browser debugger and add a Tailwind CSS class to a DOM element. If you see a visual change and the styles included, then you know the above steps have worked.&lt;/p&gt;

&lt;p&gt;Below I have added three Tailwind CSS classes to a H1 DOM node.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-black rounded-lg p-6"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Purging unused CSS
&lt;/h2&gt;

&lt;p&gt;When we added the directives above, we included the entire Tailwind CSS framework, after building my site, I noticed that my Gatsby CSS was now a whopping 1.08MB.&lt;/p&gt;

&lt;p&gt;The last step is to reduce the number of classes included to a minimum. We can modify the &lt;code&gt;tailwind.config.js&lt;/code&gt; so that we only add the CSS classes that we are using in our Gatsby components and pages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// tailwind.config.js&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;purge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./src/**/*.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To test this step, you can comment the line above and run &lt;code&gt;gatsby build&lt;/code&gt; and then investigate the size of the CSS file being generated by Gatsby.&lt;/p&gt;

&lt;p&gt;While researching the topic of CSS purging, I found the following plugin &lt;a href="https://www.gatsbyjs.org/packages/gatsby-plugin-purgecss/"&gt;gatsby-plugin-purgecss&lt;/a&gt; but noticed that the above method would do the same but with fewer plugins. I am happier with fewer plugins, so I uninstalled it. Depending on your build, you may prefer to use the additional plugin.&lt;/p&gt;

&lt;h2&gt;
  
  
  That's a Wrap!
&lt;/h2&gt;

&lt;p&gt;The next step will be to remove your old CSS and start to build your new Tailwind CSS driven site. If you have not already done so, I would recommend reading the &lt;a href="https://tailwindcss.com/docs/utility-first"&gt;core concepts of Tailwind CSS&lt;/a&gt; before you start building.&lt;/p&gt;

&lt;p&gt;If you found this tutorial to be helpful or for any feedback, leave a comment below.&lt;/p&gt;

</description>
      <category>gatsby</category>
      <category>css</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Twenty years of web development, a change is coming!</title>
      <dc:creator>Michael Fasani</dc:creator>
      <pubDate>Sun, 09 Aug 2020 10:16:40 +0000</pubDate>
      <link>https://dev.to/fasani/twenty-years-of-web-development-a-change-is-coming-37pk</link>
      <guid>https://dev.to/fasani/twenty-years-of-web-development-a-change-is-coming-37pk</guid>
      <description>&lt;p&gt;I have been working in web technology for more than 20 years. I spent the first five years of my career as a full-stack developer. Back then, we used the term &lt;a href="https://en.wikipedia.org/wiki/Webmaster"&gt;webmaster&lt;/a&gt;. I would set up servers (which included e-mail and FTP), order domain names, create databases and order SSL certificates. I would code the backend and the frontend, plus open up Photoshop to do a little bit of design and UX from time to time. I was the scrum master and the business analyst plus I would support customers and project manage their websites. These tasks and job titles were all just part of being a webmaster. You crafted the web by yourself, and it lived in a box in the room next door, occasionally you would have to go in and check on it, maybe even restart it.&lt;/p&gt;

&lt;p&gt;Later in my career, I saw an opportunity to specialise. Living and working in London, I saw the increasing need for the expert. Recruiters started to ring me, asking about specialist job titles. I very much enjoyed the visual element of working in the browser and JavaScript was growing in power and clearly here to stay. &lt;a href="https://flowplayer.com/blog/the-rise-and-fall-of-flash"&gt;Macromedia Flash had died&lt;/a&gt;, and &lt;a href="https://www.vice.com/en_us/article/8q8n3k/a-brief-history-of-the-java-applet"&gt;Java applets&lt;/a&gt; were long gone. People were talking about &lt;a href="https://www.dharne.com/why-upgrade-your-website-to-html5/"&gt;HTML5 and making huge promises&lt;/a&gt;. The title JavaScript developer was being thrown around in my world for the first time and with JavaScript being such a strange language there was an obvious need for experts, I decided to bet my career on it.&lt;/p&gt;

&lt;p&gt;Looking back, I was not wrong. I have had a pretty decent career for the past ten years and rarely have I needed a backend skill set. In today's market, you can easily get by being a specialist and JavaScript is all the rage.&lt;/p&gt;

&lt;p&gt;However, recently I find myself somewhat bored of the JavaScript world, keeping up with the latest and greatest frameworks and build tools. It just feels like nothing much is really changing. &lt;a href="https://reactjs.org/"&gt;React&lt;/a&gt; and &lt;a href="https://vuejs.org/"&gt;Vue&lt;/a&gt; are great libraries but I was able to pick up the basics in just a few hours. Frontend for me just no longer feels like the challenge it once was. Nearly all the browsers are running a version of &lt;a href="https://en.wikipedia.org/wiki/Chromium_(web_browser)"&gt;Chromium&lt;/a&gt; and our build tools protect us in terms of backwards compatibility. I no longer need to know the browser quirks and hacks or &lt;a href="https://github.com/denysdovhan/wtfjs"&gt;the strange nuances of JavaScript&lt;/a&gt;. Today we can simply write ES6 or TypeScript and JavaScript just works.&lt;/p&gt;

&lt;p&gt;I feel a change is coming and a big one, words like &lt;a href="https://aws.amazon.com/serverless/"&gt;serverless&lt;/a&gt;, static sites and cloud computing are popping up daily, people are talking about &lt;a href="https://medium.com/@cchaconsartori/introduction-to-webassembly-with-c-part-i-64bcfad7ecb4"&gt;writing C++ in the browser and compiling it to WebAssembley&lt;/a&gt;. We have exciting new browser API's like &lt;a href="https://webkit.org/demos/webgpu/"&gt;WebGPU&lt;/a&gt;, USB, Midi, Web Speech and WebVR. Some exciting things are starting to happen and &lt;a href="https://www.destroyallsoftware.com/talks/the-birth-and-death-of-javascript"&gt;potentially JavaScript will die&lt;/a&gt;, it will be a slow death for sure. But we need to remember that nothing lasts forever.&lt;/p&gt;

&lt;p&gt;Today I hear people say &lt;a href="https://dev.to/vaibhavshah/will-webassembly-replace-javascript-or-will-wasm-make-javascript-more-valuable-in-future-5c6e"&gt;JavaScript won't die&lt;/a&gt; and WebAssembley will just be an extension of JavaScript. But what is that based on? I think they say it just to cling to what they already know.&lt;/p&gt;

&lt;p&gt;It's certainly exciting times for the web and I guess I have a fear that I will be left behind in the JavaScript world. I feel like it's time for me to break free from the chains of JavaScript. It's time to learn something new.&lt;/p&gt;

&lt;p&gt;Where are we headed? I am not sure. I just know that I don't feel like learning yet another JavaScript framework.&lt;/p&gt;

&lt;p&gt;I have decided that I will commit to learn &lt;a href="https://www.rust-lang.org/"&gt;Rust&lt;/a&gt; and dive into &lt;a href="https://webassembly.org/"&gt;WebAssembly&lt;/a&gt;. Rust is a powerful language like C++ yet safer. I can use it in the browser and on the server, plus it will be a challenge for me to switch from JavaScript to a low-level programming language like Rust.&lt;/p&gt;

&lt;p&gt;My current plan is to focus on several interconnected paths. I will dive into Rust, WebAssembley, &lt;a href="https://aws.amazon.com/products/"&gt;Amazon Web Services (AWS)&lt;/a&gt; and of course, Gatsby so I can share my experiences on my personal blog.&lt;/p&gt;

&lt;p&gt;I hope you will join me on this journey as we explore some of these new technologies together.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>5 tips for getting involved in open-source projects on GitHub</title>
      <dc:creator>Michael Fasani</dc:creator>
      <pubDate>Wed, 24 Jun 2020 14:22:26 +0000</pubDate>
      <link>https://dev.to/fasani/5-tips-for-getting-involved-in-open-source-projects-on-github-1bh8</link>
      <guid>https://dev.to/fasani/5-tips-for-getting-involved-in-open-source-projects-on-github-1bh8</guid>
      <description>&lt;p&gt;I joined GitHub in October 2010, most of those years since were spent working on private repositories but recently I have become more and more active in open-source projects on GitHub and in the past month I have made 107 commits into 8 repositories.&lt;/p&gt;

&lt;p&gt;I currently help maintain the &lt;a href="https://github.com/react-spring"&gt;react-spring&lt;/a&gt; organisation and I am a moderator for the &lt;a href="https://threejs.org"&gt;three.js&lt;/a&gt; slack community. I have been writing software since I was 7 years old and professionally for more than 20 years. I have spent many hours interacting with people and projects on GitHub and I absolutely love developing software.&lt;/p&gt;

&lt;p&gt;I believe that being part of an open-source project can really help you professionally in a multitude of ways and together I think we are the ones who change the world, we are the ones who bring passion and commitment to the projects which help literally thousands of developers and companies deliver great software.&lt;/p&gt;

&lt;p&gt;Recently I saw a comment on slack and another post here on this website which led me to write these following tips.&lt;/p&gt;

&lt;h2&gt;
  
  
  1) Dogfooding
&lt;/h2&gt;

&lt;p&gt;A funny term which simply means “use your own product”. Many of us use hundreds of libraries in our projects and any one of those can be a great candidate to get involved with. When you use a piece of software you better understand it’s purpose and your commitment to making it better is going to reward you as well as the other people using that piece of software.&lt;/p&gt;

&lt;p&gt;Being involved in a piece of software you actually use is much easier than picking a random piece of software. Maybe you are not using the software today but you plan to use it in the future, that is also fine. Working on a project you enjoy using will just make contributing much easier.&lt;/p&gt;

&lt;p&gt;A normal path into open-source is fixing a bug you have found or at least reporting it. After reporting a bug, take a look at other open issues and perhaps the maintainers are looking for help, maybe you can pick up a task or even fix the bug you discovered.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Eating your own dog food or dogfooding is the practice of an organization using its own product. This can be a way for an organization to test its products in real-world usage. Hence dogfooding can act as quality control, and eventually a kind of testimonial advertising.” - Wikipedia&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  2) Code reviews, testing and debugging
&lt;/h2&gt;

&lt;p&gt;In my opinion, the goal of being part of a community is to simply improve the software for everybody who uses it. That does not always mean writing code.&lt;/p&gt;

&lt;p&gt;Other ways to contribute, check out open pull requests and see if you can contribute to those. Take an open branch and test it, include screenshots and examples of any bugs you find (I even use video sometimes to explain complex issues when needed). Feeding back on pull requests helps build trust and helps you understand the software better before attempting to change it.&lt;/p&gt;

&lt;p&gt;When helping people, if I don’t know the answer I will be honest. I state that I am not 100% sure and maybe they could try XYZ with an example. Format your response well, check your spelling and remove ambiguity. A poorly formatted comment or opinion can lead to time wasted by all maintainers and consumers, remember why you are trying to help so be helpful.&lt;/p&gt;

&lt;p&gt;If you find an interesting repository, simply star it, watch it and then start interacting with that community. Join the conversation and bring value to the people who are already contributing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JiPTVqoV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/6xvwfxrqym4gfj9qspo8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JiPTVqoV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/6xvwfxrqym4gfj9qspo8.png" alt="GitHub - Watch and star repositories" width="800" height="48"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3) Start small, build trust
&lt;/h2&gt;

&lt;p&gt;When I first start contributing to people’s projects I focus on low hanging fruits. Tidying up documentation and spell checks are nearly always accepted. Usually, the projects I contribute to are projects I use. This means I am a consumer of the documentation and when I come across missing information I simply add it in. This can include adding a &lt;code&gt;Table of Contents&lt;/code&gt;, expanding on an example, adding additional links to other documentation pages, spell checking, adding missing parameters to methods or adding a README.md to an example folder which simply explains how to run the project locally. As a consumer of the documentation, you can easily spot shortcomings and this is a great place to start contributing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BQPVqsyM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/z0z2y5rrjwgr0alfnlrr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BQPVqsyM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/z0z2y5rrjwgr0alfnlrr.png" alt="Fixing simple spelling mistakes" width="800" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4) Avoid huge rewrites
&lt;/h2&gt;

&lt;p&gt;I think some people can become easily offended and code can be personal on smaller repositories. Imagine you head out to do some grocery shopping and you come home to find someone has removed your driveway and placed a pond in the middle of the garden. The pond may be extremely beautiful but it was unexpected and not requested. Until you are a trusted member of the community doing large changes may cause feelings of discomfort, stick to smaller open issues and avoid huge rewrites. Huge rewrites can create huge bugs and additional work for maintainers. If it’s not broken don't fix it. If you plan to make a larger change then it saves time to start a discussion first, then you can gather requirements and not waste time writing a change which will never be accepted.&lt;/p&gt;

&lt;p&gt;Open very clean, small commits, separate concerns with different commits. Look for open issues and start talking to the repository owners before making big changes. You need to build trust and show you are professional. Ideally, you use the library personally so that you can help maintain it over time.&lt;/p&gt;

&lt;p&gt;Spend extra time on writing a decent pull request message. Explain why you think the change is needed and what problem you are solving. Include images and video if need be. A seemingly random code change may be misunderstood by the maintainers and ignored.&lt;/p&gt;

&lt;p&gt;Double-check everything, adding bad code to a project may mean future endeavours will be ignored, take responsibility for your changes and think about possible side effects. It can be quite awkward if you unintentionally break things.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e8GsEwrq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/lgorq781fbn3y5ysh7kk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e8GsEwrq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/lgorq781fbn3y5ysh7kk.png" alt="Example of a complex change on GitHub which will be less likely to be accepted" width="800" height="42"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5) Be a decent human being
&lt;/h2&gt;

&lt;p&gt;This one should be obvious but when commenting and interacting with the community double-check how your mood is, are you frustrated and being angry towards the person you are replying to? Remember the person behind the screen may be having a really bad day, frustrated by an issue they believe is connected to your software.&lt;/p&gt;

&lt;p&gt;Just because someone is being hard work doesn't mean you should respond negatively to them. Try harder to come across as friendly and try to remember the person you are talking to may only have 1 week of coding experience behind them.&lt;/p&gt;

&lt;p&gt;Somedays if I notice I am writing a response with a bad tone or being a little annoyed I often just stop replying and I revisit the topic the next day when I am in a better more helpful mood. Often someone else has responded and the issue resolved with an apology from the original poster. Remember you do not have to get involved in every single topic that is being discussed. &lt;/p&gt;

&lt;h6&gt;
  
  
  &lt;em&gt;Proudly sharing my GitHub contributions for the past year, private and public... Visualised by this awesome open-source project on GitHub &lt;a href="https://github.com/jasonlong/isometric-contributions"&gt;Isometric contributions plugin&lt;/a&gt;&lt;/em&gt;
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--voz0QXnK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/25ldxxqz70rd9dgzo4s4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--voz0QXnK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/25ldxxqz70rd9dgzo4s4.png" alt="My GitHub contributions for the past year" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The final word
&lt;/h2&gt;

&lt;p&gt;I hope this post has given you some ideas on how you can become part of an open-source community. If you liked my post please give me some love and if you have any questions please drop a comment below. If you are already contributing, let me know any other ideas or tips you have, plus if you are looking for contributors to help maintain your projects please feel free to shout out the project below.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>github</category>
      <category>webdev</category>
      <category>contributorswanted</category>
    </item>
  </channel>
</rss>
