<?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: Matt Ryan</title>
    <description>The latest articles on DEV Community by Matt Ryan (@mattryanmtl).</description>
    <link>https://dev.to/mattryanmtl</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%2F445714%2Fb932cb4e-0094-46d6-bea6-118efa87efce.png</url>
      <title>DEV Community: Matt Ryan</title>
      <link>https://dev.to/mattryanmtl</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mattryanmtl"/>
    <language>en</language>
    <item>
      <title>James Webb Image Gallery</title>
      <dc:creator>Matt Ryan</dc:creator>
      <pubDate>Sun, 12 May 2024 23:59:15 +0000</pubDate>
      <link>https://dev.to/mattryanmtl/james-webb-image-gallery-pc0</link>
      <guid>https://dev.to/mattryanmtl/james-webb-image-gallery-pc0</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;For the Netlify Challenge, I decided to use my limited time to submit a Visual Feast.&lt;/p&gt;

&lt;p&gt;I decided to make a simple gallery with React for some of my favorite images from the James Webb Telescope.&lt;/p&gt;

&lt;p&gt;I acquired the images from the official James Webb &lt;a href="https://www.flickr.com/people/nasawebbtelescope/"&gt;Flickr&lt;/a&gt; page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Here is my demo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://james-webb-gallery.netlify.app/"&gt;https://james-webb-gallery.netlify.app/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>netlifychallenge</category>
      <category>devchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Glam Up My Markup: Earth Day Celebration Landing Page</title>
      <dc:creator>Matt Ryan</dc:creator>
      <pubDate>Sun, 28 Apr 2024 17:19:41 +0000</pubDate>
      <link>https://dev.to/mattryanmtl/glam-up-my-markup-earth-day-celebration-landing-page-eke</link>
      <guid>https://dev.to/mattryanmtl/glam-up-my-markup-earth-day-celebration-landing-page-eke</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;My primary goal was to create an engaging and educational landing page with the theme of Earth Day. To achieve this, I focused on several key enhancements:&lt;/p&gt;

&lt;h3&gt;
  
  
  Interactive Quiz Game
&lt;/h3&gt;

&lt;p&gt;I developed a dynamic quiz game to educate visitors about environmental issues and Earth Day. The quiz included questions on various topics, such as conservation symbols, Earth's surface, and benefits of reducing plastic waste. This feature was designed to engage users interactively, providing immediate feedback on their answers to enhance learning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enhanced Quiz Button
&lt;/h3&gt;

&lt;p&gt;To make the quiz more accessible and visually appealing, I enhanced the quiz button. By adding an icon and styling the button, I ensured it was prominent and inviting, encouraging users to engage with the quiz.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visibility Toggles
&lt;/h3&gt;

&lt;p&gt;Recognizing the need to manage content visibility effectively, I implemented toggles for articles. This not only helped in organizing content better but also allowed for a cleaner and more user-friendly interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interactive Swiper
&lt;/h3&gt;

&lt;p&gt;To showcase tips on environmental conservation effectively, I integrated a swiper mechanism that allowed users to swipe through different tips. This not only added a modern touch to the page but also made the information more digestible and fun to interact with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Functions
&lt;/h2&gt;

&lt;p&gt;I used several functions to achieve these goals. Here's an explanation of what each function does:&lt;/p&gt;

&lt;h3&gt;
  
  
  quizGame()
&lt;/h3&gt;

&lt;p&gt;This function is responsible for setting up a quiz game. It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates a quiz container element and inserts it into the DOM right after a designated link.&lt;/li&gt;
&lt;li&gt;Defines quiz questions and handles the game logic.&lt;/li&gt;
&lt;li&gt;Handles question navigation and scoring.&lt;/li&gt;
&lt;li&gt;Utilizes nested functions like &lt;code&gt;showQuestion()&lt;/code&gt;, &lt;code&gt;selectAnswer()&lt;/code&gt;, &lt;code&gt;nextQuestion()&lt;/code&gt;, and &lt;code&gt;restartQuiz()&lt;/code&gt; to manage quiz interactions, including displaying questions, handling answer selection, and navigating between questions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  setupQuizButton()
&lt;/h3&gt;

&lt;p&gt;This function enhances the appearance and functionality of a quiz-related link by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding a font-awesome icon before the quiz link text.&lt;/li&gt;
&lt;li&gt;Applying CSS styles to make the link more prominent and interactive.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  setupVisibilityToggles()
&lt;/h3&gt;

&lt;p&gt;This function sets up visibility toggles for articles within a section by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assigning unique IDs to the first two articles, allowing for easier manipulation or styling through CSS or JavaScript.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  initializeSwiper()
&lt;/h3&gt;

&lt;p&gt;This function initializes a swiper component, which is a popular library for creating responsive sliders:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It replaces a list within an article with a swiper container that includes multiple slides.&lt;/li&gt;
&lt;li&gt;Each slide represents different environmental tips and is styled with a background image.&lt;/li&gt;
&lt;li&gt;It configures the swiper with various effects, pagination, and autoplay settings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://jsfiddle.net/matt_the_coder/nL3mhe9d/105/" rel="noopener noreferrer"&gt;
      jsfiddle.net
    &lt;/a&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;My journey to enhance an HTML landing page for Earth Day was both challenging and rewarding. Given the constraint of not modifying the existing HTML structure directly, I had to think creatively about how to use JavaScript and CSS to introduce new functionalities and improve the user interface. &lt;/p&gt;

&lt;p&gt;This required a deep dive into the DOM manipulation and dynamic styling to implement the desired features without disrupting the original content structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Image Credits
&lt;/h2&gt;

&lt;p&gt;I used the following images from Pexels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Photo by Johannes Plenio: &lt;a href="https://www.pexels.com/photo/forest-covered-in-white-fog-1423600/"&gt;https://www.pexels.com/photo/forest-covered-in-white-fog-1423600/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Photo by Sebastian Arie Voortman: &lt;a href="https://www.pexels.com/photo/body-of-water-during-golden-hour-189349/"&gt;https://www.pexels.com/photo/body-of-water-during-golden-hour-189349/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Photo by Tom Swinnen: &lt;a href="https://www.pexels.com/photo/orange-flower-1115090/"&gt;https://www.pexels.com/photo/orange-flower-1115090/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Photo by Filip Olsok: &lt;a href="https://www.pexels.com/photo/elephant-on-green-grass-field-4003736/"&gt;https://www.pexels.com/photo/elephant-on-green-grass-field-4003736/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Photo by Thirdman: &lt;a href="https://www.pexels.com/photo/a-man-using-a-net-to-scoop-garbage-from-a-lake-7656994/"&gt;https://www.pexels.com/photo/a-man-using-a-net-to-scoop-garbage-from-a-lake-7656994/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Photo by ready made: &lt;a href="https://www.pexels.com/photo/mobile-phone-with-green-recycling-sign-and-mesh-bag-3850512/"&gt;https://www.pexels.com/photo/mobile-phone-with-green-recycling-sign-and-mesh-bag-3850512/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Photo by Akil  Mazumder: &lt;a href="https://www.pexels.com/photo/person-holding-a-green-plant-1072824/"&gt;https://www.pexels.com/photo/person-holding-a-green-plant-1072824/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>⚽ FootBot</title>
      <dc:creator>Matt Ryan</dc:creator>
      <pubDate>Mon, 22 Apr 2024 01:52:27 +0000</pubDate>
      <link>https://dev.to/mattryanmtl/footbot-4l3b</link>
      <guid>https://dev.to/mattryanmtl/footbot-4l3b</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;FootBot is an AI-driven bot designed to keep football enthusiasts connected with the latest updates and deep insights from the world of football. This bot provides real-time match histories, upcoming game schedules, detailed player stats, and team analyses. &lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Try it out &lt;a href="https://www.coze.com/store/bot/7360425604669571078?bot_id=true" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxprql3wi6czd5fl1d9jk.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%2Fxprql3wi6czd5fl1d9jk.png" alt="Demo 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8tomdevnndd4y9pxv3b.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%2Fx8tomdevnndd4y9pxv3b.png" alt="Demo 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6oyki5z85ko8drlpu452.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%2F6oyki5z85ko8drlpu452.png" alt="Demo 3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuyd8v0r2zvkfrn3y0eck.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%2Fuyd8v0r2zvkfrn3y0eck.png" alt="Demo 4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Configuration
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68tko9s1m6wvvc2lcta7.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%2F68tko9s1m6wvvc2lcta7.png" alt="Config 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwsko9nc48ubw5ctkkrx.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%2Frwsko9nc48ubw5ctkkrx.png" alt="Config 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;As a big football fan, I wanted to see if I could leverage AI to create a football bot. &lt;/p&gt;

&lt;p&gt;I have never used Coze before, but it proved quite intuitive and east but also powerful. &lt;/p&gt;

&lt;p&gt;As a next step, I'd like to improve the bot with a custom build plugin, which I would submit for the second part of this challenge. &lt;/p&gt;

</description>
      <category>cozechallenge</category>
      <category>devchallenge</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Dev Easter</title>
      <dc:creator>Matt Ryan</dc:creator>
      <pubDate>Sun, 31 Mar 2024 04:55:32 +0000</pubDate>
      <link>https://dev.to/mattryanmtl/dev-easter-2jad</link>
      <guid>https://dev.to/mattryanmtl/dev-easter-2jad</guid>
      <description>&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;Since the first Dev community challenge ends on Easter, I decided to make my CSS art submission on theme. So I made an Easter egg sitting in an Dev-branded egg cup. It also just so happens that boiled eggs are one of my favorite snacks.&lt;/p&gt;

&lt;p&gt;The egg pattern is based on Pysanky. Pysanky are traditional Ukrainian Easter eggs, decorated i intricate patterns and symbols.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/lt94qn"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;The project began with the simple goal of creating an Easter egg design. I wanted to use CSS properties like &lt;code&gt;border-radius&lt;/code&gt; and pseudo-elements to craft geometric patterns and shapes on the egg.&lt;/p&gt;

&lt;p&gt;Here is what an egg looks like in CSS:&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="nc"&gt;.egg&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;150px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;yellow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="m"&gt;60%&lt;/span&gt; &lt;span class="m"&gt;60%&lt;/span&gt; &lt;span class="m"&gt;40%&lt;/span&gt; &lt;span class="m"&gt;40%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;hidden&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;By manipulating manipulate the &lt;code&gt;::before&lt;/code&gt; and &lt;code&gt;::after&lt;/code&gt; pseudo-elements to add multiple decorative elements and to use gradients to create textures. Positioning each element required a fine balance between absolute and relative positioning, while ensuring the z-index was properly managed to maintain the visual stack order.&lt;/p&gt;

&lt;p&gt;I added two rows of circles by utilizing the &lt;code&gt;flex&lt;/code&gt; and &lt;code&gt;position&lt;/code&gt; properties.&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="nc"&gt;.circle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;green&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.circles-row1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30.8%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.circles-row2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60.5%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&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;I tried using &lt;code&gt;flex&lt;/code&gt; to create the triangles, but ended up using &lt;code&gt;transform&lt;/code&gt; and &lt;code&gt;position&lt;/code&gt;, and created over 30 &lt;code&gt;divs&lt;/code&gt;. Not ideal but it worked.&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="nf"&gt;#triangle1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-75%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;#triangle2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;44%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;180deg&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;One of the more challenging aspects was attempting to create a wave pattern using CSS gradients. Despite the initial attempt not rendering as intended, it taught me the value of iteration and flexibility in design. Subsequently, I chose to create a simpler but more predictable row of half-circles along the top of the egg.&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="nc"&gt;.half-circle-top&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-50%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.half-circle-container-top&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-28px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.half-circle-top&lt;/span&gt;&lt;span class="nd"&gt;:nth-child&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-50%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;83%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.half-circle-top&lt;/span&gt;&lt;span class="nd"&gt;:nth-child&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="err"&gt;2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-50%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;40%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.half-circle-top&lt;/span&gt;&lt;span class="nd"&gt;:nth-child&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="err"&gt;3&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;75%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-50%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;83%&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;Adding the egg cup to the design required careful consideration of the egg's shape and the shadows, which I created using box-shadow to give the cup depth and realism. I added the DEV logo to make it look like the egg cup was bought on the DEV Store. 😉&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="nc"&gt;.egg-cup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;115px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;ivory&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;30px&lt;/span&gt; &lt;span class="m"&gt;30px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.egg-cup&lt;/span&gt;&lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-50%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;ivory&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.egg-cup-logo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-50%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;-50%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;z-index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&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;



</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
    </item>
    <item>
      <title>Glam Up My Markup: Camp Activities</title>
      <dc:creator>Matt Ryan</dc:creator>
      <pubDate>Thu, 28 Mar 2024 01:56:58 +0000</pubDate>
      <link>https://dev.to/mattryanmtl/glam-up-my-markup-camp-activities-22b5</link>
      <guid>https://dev.to/mattryanmtl/glam-up-my-markup-camp-activities-22b5</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I enhanced the provided form with several dynamic and interactive features using JavaScript and styled it with CSS, focusing on user experience and engagement. &lt;/p&gt;

&lt;p&gt;My goal was to make the form not only functional but also engaging and intuitive for the user.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Submit Button Activation&lt;/strong&gt;: Initially, the form's submit button is disabled to prevent premature submission. JavaScript monitors all input fields and activates the button only when all fields are filled out, ensuring that users provide all necessary information before submitting the form.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Character Count for Textareas&lt;/strong&gt;: To help users adhere to input limits while providing detailed information, I implemented a real-time character count for textareas. This feature displays the number of characters typed and the maximum allowed, updating as the user types. For instance, the 'Food Allergies' field updates its character count to reflect how many characters the user has left out of a 300-character limit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conditional Content Display Based on Dropdown Selection&lt;/strong&gt;: Upon selecting an activity from the dropdown menu, a dynamically created div appears below it, displaying a custom message related to the selection. This message includes an emoji and a brief description of the selected activity, providing immediate, visual feedback and enhancing the form's interactivity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  JavaScript Implementation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Form Validation&lt;/strong&gt;: I used JavaScript to check in real-time whether all form fields were filled out. This logic includes disabling the submit button until the form is complete, ensuring users don't submit incomplete forms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Character Count&lt;/strong&gt;: For the textarea fields, JavaScript dynamically updates a character count display. If users exceed the character limit, the script prevents further input, ensuring the content stays within the set boundaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Content Display&lt;/strong&gt;: I utilized JavaScript to listen for changes in the dropdown menu. Based on the user's selection, it displays a corresponding message with an emoji and description right below the dropdown, adding a layer of instant feedback and engagement.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  CSS Styling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Submit Button&lt;/strong&gt;: I styled the submit button to clearly indicate its disabled and enabled states, using color contrasts. When disabled, the button has a gray background, switching to a vibrant color once it's active, guiding users visually through the form completion process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Character Count Display&lt;/strong&gt;: The character count is styled to be unobtrusive yet readable, positioned close to its related textarea. It uses subtle color coding to blend with the form while remaining visible for the user's reference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Activity Description Div&lt;/strong&gt;: The description box that appears based on the dropdown selection is styled for clarity and emphasis. It features a slightly different background color to stand out from the rest of the form, rounded corners for a modern look, and padding for content separation and readability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/plpycn?module=%2Fform-interactions.js"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;The process of enhancing this form has been an enlightening journey, encapsulating the essence of front-end development—transforming static pages into dynamic, interactive experiences.&lt;/p&gt;

&lt;p&gt;I'm particularly proud of creating an intuitive user experience that guides the form filler smoothly from start to submission. The dynamic feedback mechanisms not only make the form more interactive but also prevent user errors, enhancing overall usability.&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>One Byte Explainer: Canvas API</title>
      <dc:creator>Matt Ryan</dc:creator>
      <pubDate>Wed, 27 Mar 2024 10:24:08 +0000</pubDate>
      <link>https://dev.to/mattryanmtl/canvas-api-1784</link>
      <guid>https://dev.to/mattryanmtl/canvas-api-1784</guid>
      <description>&lt;h2&gt;
  
  
  Explainer
&lt;/h2&gt;

&lt;p&gt;The Canvas API enables drawing and animating graphics via JavaScript in a browser. It's used for 2D shapes, images, and animations on a &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; element, providing a programmable surface for creative visual content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Context
&lt;/h2&gt;

&lt;p&gt;This was a tricky challenge. I managed to get it as concise as I could, coming in at 217 characters. I choose Canvas API as I use it often.&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Advocating for Gender Equity and Diversity in the Tech Industry</title>
      <dc:creator>Matt Ryan</dc:creator>
      <pubDate>Mon, 18 Mar 2024 12:46:30 +0000</pubDate>
      <link>https://dev.to/mattryanmtl/advocating-for-gender-equity-and-diversity-in-the-tech-industry-4dhe</link>
      <guid>https://dev.to/mattryanmtl/advocating-for-gender-equity-and-diversity-in-the-tech-industry-4dhe</guid>
      <description>&lt;p&gt;In the rapidly evolving tech industry, diversity and gender equity are not just moral imperatives but also critical factors for innovation, creativity, and competitive advantage. &lt;/p&gt;

&lt;p&gt;Despite ongoing efforts, women and various underrepresented groups continue to face significant barriers to entry, progression, and retention in tech roles. &lt;/p&gt;

&lt;p&gt;Addressing these challenges requires deliberate, sustained actions from individuals, organizations, and society. This article explores effective strategies to advocate for gender equity and diversity within the tech industry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Emphasizing the Importance of Representation
&lt;/h2&gt;

&lt;p&gt;Representation matters immensely. It's not just about having a seat at the table; it's about having a voice in the decisions that shape our digital future. &lt;/p&gt;

&lt;p&gt;Advocating for diversity in tech means pushing for more inclusive representation across all levels, from entry-level positions to senior leadership and board members. &lt;/p&gt;

&lt;p&gt;It requires dismantling the stereotypes and biases that often hinder the progression of underrepresented groups in tech.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing Inclusive Hiring Practices
&lt;/h2&gt;

&lt;p&gt;One of the most direct ways to influence diversity in the tech industry is through inclusive hiring practices. &lt;/p&gt;

&lt;p&gt;This includes creating job descriptions that speak to a broad audience, implementing blind recruitment processes to minimize biases, and ensuring that interview panels are diverse. &lt;/p&gt;

&lt;p&gt;Organizations should also broaden their recruitment efforts to include diverse talent pools, such as partnering with organizations that support women and minorities in tech.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cultivating an Inclusive Workplace Culture
&lt;/h2&gt;

&lt;p&gt;An inclusive workplace culture is where every employee feels valued, heard, and empowered to succeed. This involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regular training on unconscious bias and inclusivity: Educating employees on the importance of diversity and how to create an inclusive environment.&lt;/li&gt;
&lt;li&gt;Establishing mentorship and sponsorship programs: Providing support and opportunities for underrepresented groups to advance their careers.&lt;/li&gt;
&lt;li&gt;Creating safe spaces for dialogue: Encouraging open conversations about diversity, equity, and inclusion challenges and successes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Leveraging Technology to Promote Equity
&lt;/h2&gt;

&lt;p&gt;The tech industry is uniquely positioned to use its own innovations to promote gender equity and diversity. &lt;/p&gt;

&lt;p&gt;This includes developing tools that help reduce biases in hiring processes, using data analytics to monitor and report on diversity metrics, and creating platforms that elevate the voices and work of underrepresented groups in tech.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supporting STEM Education and Access
&lt;/h2&gt;

&lt;p&gt;Long-term change requires increasing the pipeline of women and minorities entering the tech field. &lt;/p&gt;

&lt;p&gt;This means supporting STEM education initiatives, especially in underserved communities. Companies can partner with schools, non-profits, and other organizations to provide resources, mentorship, and internship opportunities to students from diverse backgrounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advocacy and Policy Change
&lt;/h2&gt;

&lt;p&gt;Advocating for gender equity and diversity also involves pushing for policy changes at both the organizational and governmental levels. &lt;/p&gt;

&lt;p&gt;This includes advocating for policies that support work-life balance, such as flexible working hours and parental leave, as well as policies that address wage gaps and employment discrimination.&lt;/p&gt;

&lt;h2&gt;
  
  
  Celebrating Successes and Learning from Setbacks
&lt;/h2&gt;

&lt;p&gt;Finally, it's important to recognize and celebrate progress towards gender equity and diversity in the tech industry, while also being open to learning from setbacks. &lt;/p&gt;

&lt;p&gt;Sharing success stories can inspire others and demonstrate the value of diversity in driving innovation. At the same time, understanding and reflecting on the reasons behind setbacks can help refine strategies and approaches.&lt;/p&gt;

</description>
      <category>wecoded</category>
    </item>
    <item>
      <title>Testing in JavaScript: Best Practices and Tools</title>
      <dc:creator>Matt Ryan</dc:creator>
      <pubDate>Mon, 11 Dec 2023 14:06:00 +0000</pubDate>
      <link>https://dev.to/mattryanmtl/testing-in-javascript-best-practices-and-tools-4bkb</link>
      <guid>https://dev.to/mattryanmtl/testing-in-javascript-best-practices-and-tools-4bkb</guid>
      <description>&lt;p&gt;Whether you're a seasoned developer or just starting out, understanding how to test your code effectively is crucial. It’s not just about finding bugs 🐛, it’s about ensuring your code does what it’s supposed to do. So, let's embark on this journey to make our code more reliable and our lives a bit easier!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzvb11n8qfj1f4wx7fm2.gif" 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%2Fxzvb11n8qfj1f4wx7fm2.gif" alt="Testing in JavaScript"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Testing Matters
&lt;/h2&gt;

&lt;p&gt;First things first, why bother testing? Well, imagine you're building a puzzle. You wouldn't wait until you've placed the last piece to realize something's wrong, right? Testing is like checking each puzzle piece beforehand. It ensures each part of your application works independently and together. Plus, it saves time and headaches down the road!&lt;/p&gt;




&lt;h2&gt;
  
  
  Types of Tests in JavaScript
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unit Testing&lt;/strong&gt;: This is the bread and butter of testing. You test individual functions or components in isolation. Think of it as testing each puzzle piece.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration Testing&lt;/strong&gt;: Here, you check if different parts of your application work together harmoniously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;End-to-End (E2E) Testing&lt;/strong&gt;: This is the big picture test. It involves testing your application from start to finish, ensuring the entire flow works as expected.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Unit Testing: The Microscope 🔬
&lt;/h3&gt;

&lt;p&gt;Unit testing is like using a microscope to examine each tiny part of your application. You focus on the smallest testable parts of your code, typically individual functions or components. The goal? To ensure that each unit performs exactly as expected in isolation.&lt;/p&gt;

&lt;h4&gt;
  
  
  Characteristics:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Granular&lt;/strong&gt;: Tests are focused on the smallest parts of the code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolated&lt;/strong&gt;: Each unit is tested independently to avoid interference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick&lt;/strong&gt;: These tests run fast, offering immediate feedback.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Example:
&lt;/h4&gt;

&lt;p&gt;Here, we’re testing the &lt;code&gt;add&lt;/code&gt; function to ensure it correctly adds two numbers.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;add function&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;adds two numbers correctly&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;5&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;h3&gt;
  
  
  Integration Testing: The Puzzle Master 🧩
&lt;/h3&gt;

&lt;p&gt;Integration testing is all about how well different pieces of the puzzle fit together. It focuses on the interaction between units to ensure they operate together seamlessly.&lt;/p&gt;
&lt;h4&gt;
  
  
  Characteristics:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Combinatorial&lt;/strong&gt;: Tests how different units work in tandem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intermediate&lt;/strong&gt;: Sits between unit and end-to-end testing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex&lt;/strong&gt;: Involves testing integration points and data flow.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;

&lt;p&gt;This tests how the registration and login functions integrate in the user flow.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User Registration and Login Flow&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;should register, then login a user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;registerUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;testUser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loginStatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;loginUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;testUser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loginStatus&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Success&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;h3&gt;
  
  
  End-to-End (E2E) Testing: The Big Picture 🎥
&lt;/h3&gt;

&lt;p&gt;E2E testing is the equivalent of watching your app's movie from start to finish. It simulates real user scenarios to ensure the entire application flows correctly.&lt;/p&gt;
&lt;h4&gt;
  
  
  Characteristics:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Holistic&lt;/strong&gt;: Tests the application in a setup that mimics real-world use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensive&lt;/strong&gt;: Covers user interfaces, databases, networks, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Critical&lt;/strong&gt;: Ensures the product is ready for production.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;

&lt;p&gt;This scenario tests a typical e-commerce shopping flow from browsing items to checking out.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;E-commerce Shopping Flow&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;should allow a user to add items to cart and checkout&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;cy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;visit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/store&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;cy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.item&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;cy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.add-to-cart&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;cy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.checkout&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;cy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;url&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;should&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;include&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;/checkout&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;In JavaScript development, mastering these testing types is like having a superpower. 🦸‍♂️ &lt;/p&gt;

&lt;p&gt;Unit tests keep your functions reliable, integration tests ensure they play well together, and E2E tests validate the user experience from start to finish. &lt;/p&gt;

&lt;p&gt;By incorporating these into your workflow, you're not just coding; you're crafting quality software!&lt;/p&gt;




&lt;h2&gt;
  
  
  Popular Testing Frameworks
&lt;/h2&gt;

&lt;p&gt;Now, let’s talk tools! 🛠️&lt;/p&gt;

&lt;p&gt;Navigating through the world of JavaScript testing frameworks can be like exploring a treasure trove – each tool offers unique features and capabilities. Let's take a closer look at some of the most popular testing frameworks and their distinct advantages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jest: The All-Rounder 🎭
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://jestjs.io/" rel="noopener noreferrer"&gt;Jest&lt;/a&gt;, often associated with React but not limited to it, is known for its simplicity and out-of-the-box functionality. It's a favorite for many developers due to its zero-configuration philosophy.&lt;/p&gt;

&lt;h4&gt;
  
  
  Features:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Snapshot Testing&lt;/strong&gt;: Captures the current state of UI components or JSON data to track changes over time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in Mocking&lt;/strong&gt;: Simplifies testing by mocking functions, modules, or entire libraries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Watch Mode&lt;/strong&gt;: Automatically runs relevant tests as you make changes to the code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mocha/Chai: The Flexible Duo 🤝
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://mochajs.org/" rel="noopener noreferrer"&gt;Mocha&lt;/a&gt;, often paired with &lt;a href="https://www.chaijs.com/" rel="noopener noreferrer"&gt;Chai&lt;/a&gt; for assertions, offers a flexible and feature-rich testing environment. It's not opinionated, allowing developers to choose their own libraries for assertions, mocking, and more.&lt;/p&gt;

&lt;h4&gt;
  
  
  Features:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rich API&lt;/strong&gt;: Provides a wide range of hooks (before, after, beforeEach, afterEach) for setting up conditions for tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chai Assertions&lt;/strong&gt;: Chai offers a variety of assertion styles (expect, should, assert) that can make tests more readable and expressive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeout Control&lt;/strong&gt;: Allows customization of timeouts, which is particularly useful for testing asynchronous operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cypress: The Modern End-to-End Solution 🌐
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.cypress.io/" rel="noopener noreferrer"&gt;Cypress&lt;/a&gt; is a front-runner in the world of modern end-to-end testing frameworks. Its unique architecture allows testing in the same run-loop as the application, offering more consistent results.&lt;/p&gt;

&lt;h4&gt;
  
  
  Features:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Reloads&lt;/strong&gt;: Automatically reloads tests upon code changes, offering immediate feedback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time Travel&lt;/strong&gt;: Records snapshots as tests run, allowing you to step back in time to see exactly what happened at each step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network Traffic Control&lt;/strong&gt;: Easily control, stub, and test edge cases without involving your server.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Jasmine: The Veteran Framework 🌸
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://jasmine.github.io/" rel="noopener noreferrer"&gt;Jasmine&lt;/a&gt; is one of the earliest JavaScript testing frameworks, known for its simplicity and ease of use. It's an independent framework that doesn't rely on any other JavaScript frameworks or libraries.&lt;/p&gt;

&lt;h4&gt;
  
  
  Features:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standalone Framework&lt;/strong&gt;: Comes with everything needed to start writing tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spies&lt;/strong&gt;: Provides 'spies' for implementing test doubles, allowing you to track function calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asynchronous Testing Support&lt;/strong&gt;: Offers straightforward syntax for testing asynchronous code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these frameworks brings something unique to the table. Jest offers a complete package with minimal setup, Mocha/Chai provides flexibility, Cypress excels in end-to-end testing, and Jasmine stands out for its simplicity and independence. &lt;/p&gt;

&lt;p&gt;Choosing the right framework depends on your project's needs and your personal or team's preferences. Remember, the right tool can make your testing journey not just effective but also enjoyable!&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;p&gt;Testing in JavaScript is more than just a task; it's a critical part of building robust and reliable applications. Here are some best practices to help elevate your testing game. &lt;/p&gt;

&lt;h3&gt;
  
  
  1. Write Testable Code: The Foundation of Good Testing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keep It Simple and Modular&lt;/strong&gt;: Break your code into smaller, reusable functions or components. This makes them easier to test and maintain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid Global State&lt;/strong&gt;: Global states can lead to unpredictable behaviors in tests. Stick to local scope as much as possible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency Injection&lt;/strong&gt;: Use dependency injection to make your code more testable. It allows you to replace real dependencies with mocks or stubs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Test Early, Test Often: The Agile Approach
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Integrate Testing into Your Development Process&lt;/strong&gt;: Don’t treat testing as an afterthought. Write tests alongside your code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TDD/BDD Approaches&lt;/strong&gt;: Consider Test-Driven Development (TDD) or Behavior-Driven Development (BDD) methodologies to build your software from the perspective of tests and behaviors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Mock External Services: Simulate the Real World
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use Mocks and Stubs&lt;/strong&gt;: They simulate the behavior of complex, real-world services like APIs or databases, allowing you to test your code in isolation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep Mocks Up-to-Date&lt;/strong&gt;: Ensure that your mocks reflect the current behavior of the external services they represent.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Continuous Integration (CI): Automate Your Testing Process
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Implement CI Tools&lt;/strong&gt;: Tools like Jenkins, Travis CI, or GitHub Actions can automatically run your tests every time you push new code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frequent Commits&lt;/strong&gt;: Make small and frequent commits. This helps in identifying issues early in the development process.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Coverage Reports: Aim for Quality, Not Just Quantity
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Strive for Meaningful Coverage&lt;/strong&gt;: Instead of aiming for 100% code coverage, focus on testing the most critical parts of your code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review Coverage Reports Regularly&lt;/strong&gt;: Use them to identify untested parts of your codebase.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Document Your Tests: Make Them Understandable
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Readable Test Descriptions&lt;/strong&gt;: Write clear and descriptive test names. Anyone looking at the tests should understand their purpose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comment Complex Tests&lt;/strong&gt;: If a test is complex, add comments to explain why certain assertions or mocks are necessary.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. Handle Asynchronous Code Correctly: Embrace the JavaScript Nature
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Properly Handle Promises and Callbacks&lt;/strong&gt;: Ensure that your tests wait for asynchronous operations to complete before asserting results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Async/Await for Cleaner Code&lt;/strong&gt;: This makes your asynchronous tests more readable and manageable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. Consider Edge Cases: Think Beyond the Happy Path
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Test Negative Scenarios&lt;/strong&gt;: Don’t just test for expected outcomes. Check how your application handles errors or unexpected inputs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Fuzz Testing&lt;/strong&gt;: Randomly generate inputs to test how your system handles a wide range of unexpected scenarios.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9. Refactor Tests When Necessary: Keep Tests Up-to-Date
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Refactor Tests Alongside Code&lt;/strong&gt;: When you update your codebase, update your tests accordingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid Fragile Tests&lt;/strong&gt;: Write tests that are resilient to changes in the codebase that don’t affect functionality.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Testing in JavaScript doesn’t have to be a chore. With the right approach and tools, it can be a rewarding part of your development process. Remember, the goal is to build something amazing, and testing is your safety net. So, keep coding and testing! 💻🚀&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>JavaScript Essentials: A Beginner's Guide to Data Structures and Algorithms</title>
      <dc:creator>Matt Ryan</dc:creator>
      <pubDate>Tue, 05 Dec 2023 13:48:51 +0000</pubDate>
      <link>https://dev.to/mattryanmtl/javascript-essentials-a-beginners-guide-to-data-structures-and-algorithms-ap</link>
      <guid>https://dev.to/mattryanmtl/javascript-essentials-a-beginners-guide-to-data-structures-and-algorithms-ap</guid>
      <description>&lt;p&gt;If you're looking to get your JavaScript skills to the next level, you're in the right place. Let's jump right in! 🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Data Structures? 🤔
&lt;/h2&gt;

&lt;p&gt;Data structures are like the different types of containers in a kitchen. Just like how you use a glass for liquids and a plate for sandwiches, in programming, different types of data are stored in different structures. These structures help in organizing and managing data efficiently. Think arrays, objects, stacks, and more!&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Algorithms? 🤔
&lt;/h2&gt;

&lt;p&gt;Algorithms are like recipes. They are step-by-step instructions to perform a task or solve a problem. In programming, these are essential for data manipulation, calculations, and more.&lt;/p&gt;




&lt;h2&gt;
  
  
  Exploring Common Data Structures in JavaScript 🌐
&lt;/h2&gt;

&lt;p&gt;Let's take a look at some of the most common data structures used in JavaScript, with handy code examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Arrays: The All-Rounder
&lt;/h3&gt;

&lt;p&gt;Arrays in JavaScript are like Swiss army knives - super versatile!&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;fruits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;apple&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="s2"&gt;banana&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="s2"&gt;cherry&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: apple&lt;/span&gt;
&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;date&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: ["apple", "banana", "cherry", "date"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Objects: The Organizers
&lt;/h3&gt;

&lt;p&gt;Objects help you store data in a key-value pair, making it easy to find what you need.&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;car&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;make&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Toyota&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Corolla&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;year&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2021&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;car&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: Corolla&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Stacks: The Last-In-First-Out (LIFO)
&lt;/h3&gt;

&lt;p&gt;Stacks are like a stack of plates; the last one you put on top is the first one you take off.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Stack&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&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="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Underflow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;peek&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;peek&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: 20&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: 20&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;peek&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: 10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Queues: The First-In-First-Out (FIFO)
&lt;/h3&gt;

&lt;p&gt;Queues are like a line at a store; the first person in line is the first to get served.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Queue&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&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="nf"&gt;enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;dequeue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Underflow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;front&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;No elements in Queue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Queue&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;front&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: 10&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dequeue&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: 10&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;front&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: 20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Linked Lists: The Flexible Connectors
&lt;/h3&gt;

&lt;p&gt;Linked Lists consist of nodes where each node contains a value and a pointer to the next node in the list.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LinkedList&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;head&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&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="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;ll&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;LinkedList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;ll&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;ll&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ll&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Outputs the LinkedList with 10 and 20 as elements&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Trees: The Hierarchical Organizers
&lt;/h3&gt;

&lt;p&gt;Trees are non-linear data structures used for storing hierarchical data like folders in a computer.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TreeNode&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&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="nf"&gt;addChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TreeNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TreeNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;child1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;child2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Outputs the tree structure with root, child1, and child2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Exploring Common Algorithms in JavaScript 🚀
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Sorting: Getting Things in Order
&lt;/h3&gt;

&lt;p&gt;Let's look at a basic sorting algorithm, the Bubble Sort. Imagine you have a line of balloons, each with a number on it, and you want to arrange them in order from smallest to largest.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;bubbleSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;len&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&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="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;len&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;temp&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="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;bubbleSort&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;
&lt;span class="c1"&gt;// Outputs: [-1, 0, 1, 2, 3, 4, 5]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Searching: Finding the Needle in the Haystack
&lt;/h3&gt;

&lt;p&gt;Let's say you've lost your key in a row of boxes and you need to find it. Linear search is like searching for this key. Here's how you implement a simple linear search.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;linearSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;linearSearch&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Binary Search: The Fast Seeker
&lt;/h3&gt;

&lt;p&gt;Binary Search is like playing the 'hot and cold' game to find a number. It divides and conquers, cutting the search area in half each time.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;binarySearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;mid&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;mid&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;binarySearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: 2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Merge Sort: The Efficient Organizer
&lt;/h3&gt;

&lt;p&gt;Merge Sort is like sorting your music playlist into the perfect order. It divides the list into halves, sorts each half, and then merges them back together.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
    &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;mergeSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;half&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;splice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;half&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;mergeSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nf"&gt;mergeSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;mergeSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: [1, 2, 3, 4, 7, 8, 11]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Quick Sort: The Speedy Separator
&lt;/h3&gt;

&lt;p&gt;Quick Sort is like organizing a library, where you pick a book and put all smaller books to the left and bigger ones to the right, then repeat the process.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;quickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;pivot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;pivot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nf"&gt;quickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;pivot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;quickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;quickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: [-1, 0, 1, 2, 3, 4, 5]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Recursive Algorithms: The Loop Breakers
&lt;/h3&gt;

&lt;p&gt;Recursion is a method where the solution to a problem depends on solutions to smaller instances of the same problem.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;factorial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;factorial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;factorial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: 120&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;That's a wrap on our intro to data structures and algorithms in JavaScript! We've just scratched the surface, but you're well on your way.&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀👩‍💻👨‍💻&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Getting Started with Docker: Containerization Made Easy 🐳</title>
      <dc:creator>Matt Ryan</dc:creator>
      <pubDate>Wed, 29 Nov 2023 14:39:32 +0000</pubDate>
      <link>https://dev.to/mattryanmtl/getting-started-with-docker-containerization-made-easy-2p28</link>
      <guid>https://dev.to/mattryanmtl/getting-started-with-docker-containerization-made-easy-2p28</guid>
      <description>&lt;p&gt;Welcome to the world of Docker! If you've heard the buzz about containerization and are wondering what it's all about, you're in the right place. &lt;/p&gt;

&lt;p&gt;Docker is a fantastic tool that makes it super easy to create, deploy, and run applications by using containers. &lt;/p&gt;

&lt;p&gt;We'll be using &lt;a href="https://nodejs.org/en/"&gt;Node.js&lt;/a&gt;, a popular and versatile JavaScript runtime, to demonstrate how Docker can simplify your development process, streamline deployment, and ensure consistency across environments.&lt;/p&gt;

&lt;p&gt;While this guide focuses on Node.js to illustrate Docker's capabilities, it's important to note that Docker's versatility extends far beyond any single technology or programming language. Docker provides a consistent and isolated environment for virtually any application, regardless of the stack or framework. &lt;/p&gt;

&lt;p&gt;Whether you're working with Python, Ruby, Java, .NET, or even complex database systems and microservices architectures, Docker's containerization technology ensures that your applications run seamlessly in any environment.&lt;/p&gt;

&lt;p&gt;So let's dive in! 🏊‍♂️&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Docker? 🤔
&lt;/h2&gt;

&lt;p&gt;Docker is a platform for developing, shipping, and running applications in containers. Containers allow you to package up an application with all of its parts, such as libraries and other dependencies, and ship it as one package. Think of it like a shipping container for code – consistent, isolated, and easy to move around! 📦&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use Docker? 🚀
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Consistency&lt;/strong&gt;: Docker ensures that your application works the same in different environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolation&lt;/strong&gt;: Containers are isolated from each other and the host system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microservices&lt;/strong&gt;: Docker is ideal for microservice architectures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portability&lt;/strong&gt;: Move your containers from your local machine to production without a hitch.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installing Docker 🛠️
&lt;/h2&gt;

&lt;p&gt;To get started, you need to install Docker. It's available for Windows, macOS, and Linux. Visit the &lt;a href="https://www.docker.com/get-started"&gt;Docker website&lt;/a&gt; and download the appropriate version for your OS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your First Docker Container 🌟
&lt;/h2&gt;

&lt;p&gt;Let's run our first container!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open your terminal&lt;/strong&gt; and type:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command downloads a test image and runs it in a container. When the container runs, it prints an informational message and exits. &lt;/p&gt;

&lt;p&gt;Congratulations! 🎉 You've just run your first Docker container.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Your First Docker Image 📦
&lt;/h2&gt;

&lt;p&gt;Create a directory for your project and move into it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;mynodeapp
&lt;span class="nb"&gt;cd &lt;/span&gt;mynodeapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a &lt;a href="https://docs.docker.com/engine/reference/builder/"&gt;Dockerfile&lt;/a&gt;. This file will define what goes on in the environment inside your container. &lt;/p&gt;

&lt;p&gt;Let's create a simple example of a Dockerfile for a Node.js application. This example assumes you have a basic Node.js application with a package.json file. Here's how you can set up your Docker environment:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create a Node.js Application
&lt;/h3&gt;

&lt;p&gt;If you already have a Node.js app, you can skip this step. Otherwise, create a simple "Hello World" app:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Initialize a new Node.js project:&lt;/strong&gt; Initialize a Node.js project in the &lt;code&gt;mynodeapp&lt;/code&gt; directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Install Express:&lt;/strong&gt; Since this app uses &lt;a href="https://expressjs.com/"&gt;Express.js&lt;/a&gt;, install it as a dependency.&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;express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Create an index.js file:&lt;/strong&gt; This will be your main application file. For a simple "Hello World" app, you can add the following content:&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;// index.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&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;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&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="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello World!&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="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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;h3&gt;
  
  
  Step 2: Create a Dockerfile
&lt;/h3&gt;

&lt;p&gt;Now, create a Dockerfile in the same directory as your Node.js application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create the Dockerfile:&lt;/strong&gt; Without any extension, just named Dockerfile.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;Dockerfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Edit the Dockerfile:&lt;/strong&gt; Open the Dockerfile in nano or vim and add the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Use an official Node runtime as a parent image
FROM node:14

# Set the working directory in the container
WORKDIR /usr/src/app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install any needed packages
RUN npm install

# Bundle app source
COPY . .

# Make port 3000 available to the world outside this container
EXPOSE 3000

# Define environment variable
ENV NAME World

# Run app when the container launches
CMD ["node", "index.js"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Building and Running Your Docker Container
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Build your Docker image:&lt;/strong&gt; To build your Docker image, use the &lt;code&gt;docker build&lt;/code&gt; command followed by options and the path to your Dockerfile. The &lt;code&gt;-t&lt;/code&gt; option allows you to tag your image so you can easily reference it later. &lt;/p&gt;

&lt;p&gt;In this example, the image is tagged as &lt;code&gt;mynodeapp&lt;/code&gt;. The &lt;code&gt;.&lt;/code&gt; at the end of the command tells Docker to look for the Dockerfile in the current directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; mynodeapp &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Run your Docker container:&lt;/strong&gt; After building your Docker image, you can run it as a container using the &lt;code&gt;docker run&lt;/code&gt; command. The &lt;code&gt;-p&lt;/code&gt; option maps a port on your host machine to a port in the container. In this command, &lt;code&gt;49160:3000&lt;/code&gt; maps port 3000 inside the container (where your Node.js app is listening) to port 49160 on your host machine. &lt;/p&gt;

&lt;p&gt;The &lt;code&gt;-d&lt;/code&gt; option runs the container in detached mode, meaning the container runs in the background. The &lt;code&gt;mynodeapp&lt;/code&gt; at the end of the command specifies the name of the image to use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 49160:3000 &lt;span class="nt"&gt;-d&lt;/span&gt; mynodeapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will start a new container instance from the &lt;code&gt;mynodeapp&lt;/code&gt; image, making your Node.js application accessible via &lt;code&gt;http://localhost:49160&lt;/code&gt; on your local machine.&lt;/p&gt;

&lt;p&gt;This basic example demonstrates how to containerize a simple Node.js application using Docker. You can modify the application logic and Dockerfile as needed for more complex applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker Compose for Multi-container Applications 📊
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.docker.com/compose/"&gt;Docker Compose&lt;/a&gt; is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services, networks, and volumes.&lt;/p&gt;

&lt;p&gt;In this example, we'll use Docker Compose to run our Node.js application along with a &lt;a href="https://redis.io/"&gt;Redis&lt;/a&gt; service.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create a docker-compose.yml File
&lt;/h3&gt;

&lt;p&gt;In your Node.js application directory, create a file named &lt;code&gt;docker-compose.yml&lt;/code&gt;. This file will define two services: your Node.js app and a Redis server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3.8'&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;.&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;49160:3000"&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;redis&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;REDIS_HOST=redis&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;REDIS_PORT=6379&lt;/span&gt;

  &lt;span class="na"&gt;redis&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;redis:alpine"&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;6379:6379"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This configuration does the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;version:&lt;/strong&gt; Specifies the version of the Docker Compose file format. &lt;code&gt;3.8&lt;/code&gt; is a version that supports most recent features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;services:&lt;/strong&gt; This section defines the different containers (services) that make up your application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;app:&lt;/strong&gt; This is the name of your Node.js service. You can choose any name that makes sense for your application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;build:&lt;/strong&gt; This directive tells Docker Compose to build an image from the Dockerfile located in the current directory (.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ports:&lt;/strong&gt; Maps the port on your host machine to the port in the container. In this case, port &lt;code&gt;3000&lt;/code&gt; inside the container (where the Node.js app runs) is mapped to port &lt;code&gt;49160&lt;/code&gt; on your host.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;depends_on:&lt;/strong&gt; Specifies that the &lt;code&gt;app&lt;/code&gt; service depends on the &lt;code&gt;redis&lt;/code&gt; service. This ensures that the &lt;code&gt;redis&lt;/code&gt; service starts before the &lt;code&gt;app&lt;/code&gt; service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;environment:&lt;/strong&gt; Sets environment variables inside the container. Here, it's defining the host and port for the Redis server, which your Node.js application can use to connect to Redis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;redis:&lt;/strong&gt; This is the name of the Redis service in your application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;image:&lt;/strong&gt; Specifies the Docker image to use for the Redis service. In this case, it's using the &lt;code&gt;redis&lt;/code&gt; image with the &lt;code&gt;alpine&lt;/code&gt; tag, which is a lightweight version of Redis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ports (for Redis):&lt;/strong&gt; Similar to the &lt;code&gt;app&lt;/code&gt; service, this maps the Redis port inside the container (&lt;code&gt;6379&lt;/code&gt;) to the same port on the host machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This &lt;code&gt;docker-compose.yml&lt;/code&gt; file creates a simple yet effective setup for a Node.js application with a Redis server, providing a solid example of how Docker Compose can manage multi-container environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Update Your Node.js Application to Use Redis
&lt;/h3&gt;

&lt;p&gt;Modify your Node.js application to interact with Redis. For example, you might want to use Redis for caching. Make sure to install any necessary Redis client libraries for Node.js, such as redis.&lt;/p&gt;

&lt;p&gt;First, ensure you have the Redis client installed in your Node.js project:&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;redis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, update your &lt;code&gt;index.js&lt;/code&gt; file as follows:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&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;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;redis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&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;redis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Connect to Redis&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;redisClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;redis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// This matches the service name in docker-compose&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6379&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;redisClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;error&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="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Redis Client Error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cacheKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;homepage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Check if data is in Redis&lt;/span&gt;
  &lt;span class="nx"&gt;redisClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cacheKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cachedData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cachedData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cache hit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Hello World from cache!`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cache miss&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="c1"&gt;// Set data in Redis with an expiry (e.g., 3600 seconds)&lt;/span&gt;
      &lt;span class="nx"&gt;redisClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cacheKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello World!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello World set in cache!&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;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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;In this updated &lt;code&gt;index.js&lt;/code&gt;, your Node.js application now uses Redis to cache the string "&lt;code&gt;Hello World!&lt;/code&gt;". When a request is made to the root route (&lt;code&gt;/&lt;/code&gt;), the application first checks if the data is available in the Redis cache. If it's a cache hit, it retrieves the data from Redis. If it's a cache miss, it sets the data in Redis and returns the response.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Run Docker Compose
&lt;/h3&gt;

&lt;p&gt;In the directory containing your &lt;code&gt;docker-compose.yml&lt;/code&gt; file, start your services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will build the images for your Node.js app and the Redis service and then start the containers as defined in your Docker Compose file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Access Your Application
&lt;/h3&gt;

&lt;p&gt;Your Node.js application should now be accessible at &lt;code&gt;http://localhost:49160&lt;/code&gt;, and it will be able to interact with the Redis service.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Managing Services
&lt;/h3&gt;

&lt;p&gt;To stop your services, use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose down
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To rebuild and start the services after making changes, use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You've now successfully set up a multi-container application using Docker Compose, featuring your Node.js application and a Redis server. This setup is ideal for developing applications that rely on external services like databases, caches, or other microservices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Essential Docker Commands 📇
&lt;/h2&gt;

&lt;p&gt;Docker is a powerful platform for building, running, and managing containers. Mastering its commands is key to effectively managing your containerized applications. &lt;/p&gt;

&lt;p&gt;Below are some essential Docker commands divided into basic and advanced categories, providing a comprehensive toolkit for Docker users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic Commands
&lt;/h3&gt;

&lt;p&gt;The basic Docker commands are the foundation for container management. They cover everyday tasks such as running containers, managing container lifecycles, and handling images.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;docker run&lt;/strong&gt;: Creates and starts a container from an image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] IMAGE &lt;span class="o"&gt;[&lt;/span&gt;COMMAND] &lt;span class="o"&gt;[&lt;/span&gt;ARG...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker ps:&lt;/strong&gt; Lists running containers. Use docker ps -a to show all containers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker stop:&lt;/strong&gt; Stops one or more running containers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker stop &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] CONTAINER &lt;span class="o"&gt;[&lt;/span&gt;CONTAINER...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker rm:&lt;/strong&gt; Removes one or more containers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] CONTAINER &lt;span class="o"&gt;[&lt;/span&gt;CONTAINER...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker images:&lt;/strong&gt; Lists the images available locally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker images &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] &lt;span class="o"&gt;[&lt;/span&gt;REPOSITORY[:TAG]]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker rmi:&lt;/strong&gt; Removes one or more images.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker rmi &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] IMAGE &lt;span class="o"&gt;[&lt;/span&gt;IMAGE...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker pull:&lt;/strong&gt; Pulls an image or a repository from a registry.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] NAME[:TAG|@DIGEST]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker exec:&lt;/strong&gt; Runs a command in a running container.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] CONTAINER COMMAND &lt;span class="o"&gt;[&lt;/span&gt;ARG...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Advanced Commands
&lt;/h3&gt;

&lt;p&gt;Advanced Docker commands offer more complex functionalities for managing networks, volumes, and detailed container and image inspections, catering to more specific and complex container management requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;docker build:&lt;/strong&gt; Builds an image from a Dockerfile.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] PATH | URL | -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker logs:&lt;/strong&gt; Fetches the logs of a container.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] CONTAINER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker network:&lt;/strong&gt; Manages networks. You can create, list, inspect, remove, etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker network &lt;span class="o"&gt;[&lt;/span&gt;COMMAND]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker volume:&lt;/strong&gt; Manages volumes. Similar to network commands, it can create, list, remove, etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker volume &lt;span class="o"&gt;[&lt;/span&gt;COMMAND]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker compose:&lt;/strong&gt; Manages multi-container Docker applications (requires Docker Compose).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="o"&gt;[&lt;/span&gt;COMMAND]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker inspect:&lt;/strong&gt; Returns detailed information on Docker objects (containers, images, etc.).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker inspect &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] NAME|ID &lt;span class="o"&gt;[&lt;/span&gt;NAME|ID...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker stats:&lt;/strong&gt; Displays a live stream of container(s) resource usage statistics.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker stats &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] &lt;span class="o"&gt;[&lt;/span&gt;CONTAINER...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker cp:&lt;/strong&gt; Copies files/folders between a container and the local filesystem.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Congratulations! You've just scratched the surface of Docker. There's so much more to explore. Dive into the &lt;a href="https://docs.docker.com/"&gt;Docker documentation&lt;/a&gt; for more in-depth knowledge. &lt;/p&gt;

&lt;p&gt;Happy Dockerizing! 🐳&lt;/p&gt;

</description>
      <category>docker</category>
      <category>node</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🚀 35 Must-Have Visual Studio Code Plugins for Developers</title>
      <dc:creator>Matt Ryan</dc:creator>
      <pubDate>Fri, 10 Nov 2023 16:36:34 +0000</pubDate>
      <link>https://dev.to/mattryanmtl/35-must-have-visual-studio-code-plugins-for-developers-56i8</link>
      <guid>https://dev.to/mattryanmtl/35-must-have-visual-studio-code-plugins-for-developers-56i8</guid>
      <description>&lt;p&gt;Visual Studio Code (VS Code) is a powerful, extensible code editor used by millions of developers. Enhancing your development experience is all about choosing the right plugins. &lt;/p&gt;

&lt;p&gt;Here are the top 35 plugins that can supercharge your coding workflow in VS Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Prettier - Code Formatter 🌈
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; It makes your code look pretty and consistent. Say goodbye to messy code!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Prettier is an opinionated code formatter that supports many languages and integrates with most editors. It formats code consistently and enforces a style guide. It is essential for maintaining consistent code style, especially in team projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode"&gt;Prettier Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. GitLens — Git supercharged 🔍
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Shows who wrote what in your code with Git annotations. Like a code detective!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; GitLens supercharges Git within VS Code. It helps you visualize code authorship at a glance via Git blame annotations and logs. It is invaluable for teams working on shared codebases to track changes and understand code history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens"&gt;GitLens Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. ESLint ✅
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Keeps your JavaScript on point and error-free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Integrates ESLint JavaScript into VS Code. It helps in identifying and reporting on patterns found in ECMAScript/JavaScript code. It is crucial for maintaining code quality and adhering to coding standards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint"&gt;ESLint Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Live Share 👥
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Code together in real-time with friends or colleagues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Enables real-time collaborative development with teammates. You can share your codebase and collaborate on code edits and debugging. Great for pair programming and real-time code collaboration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare"&gt;Live Share Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Bracket Pair Colorizer 2 🌈
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Adds colors to your brackets for better readability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; This extension allows matching brackets to be identified with colors. The user can define which characters to match, and which colors to use. Helps in quickly identifying matching brackets, improving code readability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2"&gt;Bracket Pair Colorizer 2&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Python 🐍
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; All you need for Python coding - IntelliSense, linting, debugging, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Provides comprehensive Python language support with features like IntelliSense, linting, debugging, and more. A must-have for Python developers for efficient coding and debugging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-python.python"&gt;Python Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Docker 🐳
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Makes working with Docker a breeze.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Makes it easy to create, manage, and debug containerized applications using Docker. Streamlines the workflow for developers using Docker in their development process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker"&gt;Docker Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Bookmarks 📚
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Mark your spot in code like you would in a good book! Jump around files with ease, never losing track of those key code snippets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; The Bookmarks plugin allows users to mark specific places in a code file and quickly navigate between them. Enhances navigation within files, making it easier to jump to and remember important or frequently modified sections of code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=alefragnani.Bookmarks"&gt;Bookmarks Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  9. IntelliCode 🧠
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; AI-powered IntelliSense for smarter coding suggestions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Offers AI-assisted IntelliSense by providing suggestions based on patterns found in your code and others'. Enhances coding efficiency with smarter auto-completion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode"&gt;IntelliCode Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Path Intellisense 🛣️
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Autocompletes file paths. No more typing long file names!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Autocompletes filenames in your code, making it easier to reference files. Saves time when dealing with large projects with many files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense"&gt;Path Intellisense&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Vetur 🌟
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; The perfect buddy for Vue.js development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Tailored for Vue.js development, Vetur offers syntax highlighting, snippets, Emmet, and other essential features for Vue. Ideal for developers working with Vue.js frameworks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=octref.vetur"&gt;Vetur Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Debugger for Chrome 🐛
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Debug your JavaScript right in Chrome.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Allows you to debug your JavaScript code in the Google Chrome browser, or any other target that supports the Chrome Debugger protocol. Critical for JavaScript development and debugging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome"&gt;Debugger for Chrome&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  13. Settings Sync ☁️
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Sync your VS Code settings across machines using GitHub Gist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Synchronizes settings, snippets, themes, file icons, launch, keybindings, workspaces and extensions across multiple machines using GitHub Gist. Perfect for maintaining a consistent development environment across different machines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync"&gt;Settings Sync Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  14. REST Client 🌐
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Test APIs right from your editor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Allows you to send HTTP requests and view the response directly within VS Code. An excellent tool for testing APIs without leaving your editor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=humao.rest-client"&gt;REST Client Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  15. SQL Server (mssql) 💾
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Directly work with SQL databases in VS Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Enables you to connect to SQL Server, Azure SQL Database, and SQL Data Warehouses, and run queries. A must-have for developers working with Microsoft's SQL databases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-mssql.mssql"&gt;SQL Server Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  16. C# 🔷
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Everything for C# development - debugging, IntelliSense, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Provides C# editing support, including Syntax Highlighting, Debugging, IntelliSense, CodeLens, and more. Essential for developers working on C# projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp"&gt;C# Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  17. Terraform 🌍
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Ace your infrastructure coding with Terraform support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Offers syntax highlighting and other IntelliSense features for HashiCorp's Terraform. Beneficial for those working with infrastructure as code, particularly Terraform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=HashiCorp.terraform"&gt;Terraform Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  18. Babel JavaScript 🔄
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Ups your JavaScript game with Babel syntax highlighting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Enhances JavaScript coding in VS Code with Babel syntax highlighting. Ideal for modern JavaScript development using ES6 and beyond.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=mgmcdermott.vscode-language-babel"&gt;Babel JavaScript Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  19. Auto Rename Tag 🏷️
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Auto-updates HTML/XML tags for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Automatically renames paired HTML/XML tag, same as Visual Studio IDE does. Simplifies editing HTML and XML, making it less error-prone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag"&gt;Auto Rename Tag Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  20. Remote - SSH 🔗
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Work on remote projects via SSH like they're local.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Allows you to use any remote machine with a SSH server as your development environment. Extremely useful for developers who need to access and edit code on remote servers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh"&gt;Remote - SSH Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  21. vscode-icons 🌟
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Instantly jazz up your VS Code with eye-catching icons for all file types and folders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Enhances VS Code by adding icons for files and folders, making navigation more visually intuitive. Provides an easy and efficient way to identify file types and directories at a glance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons"&gt;vscode-icons Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  22. Lorem Ipsum Generator ✍️
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Need placeholder text? This plugin generates 'Lorem Ipsum' dummy text in a snap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Generates 'Lorem Ipsum' placeholder text directly within VS Code. Ideal for quickly inserting dummy text while designing or testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=Tyriar.lorem-ipsum"&gt;Lorem Ipsum Generator Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  23. Duplicate Action 🔄
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; This nifty tool lets you duplicate lines or sections of code with a simple shortcut.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Allows for easy duplication of lines or sections of code, enhancing productivity. Saves significant time when needing to replicate code blocks, improving workflow efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=mrmlnc.vscode-duplicate"&gt;Duplicate Action Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  24. Color Highlight 🎨
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Highlights color codes (like HEX, RGB) in your code with their actual color.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Highlights and visualizes colors in your code, represented by color codes like HEX, RGB. Assists in quickly identifying and managing colors directly within code files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight"&gt;Color Highlight Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  25. Change Case 🔡
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; A simple extension to change the case of text - uppercase, lowercase, camelcase, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; A simple utility for changing the case of text in your code, including uppercase, lowercase, camelcase, and more. Facilitates text formatting and manipulation, saving time on manual text editing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=wmaurer.change-case"&gt;Change Case Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  26. JavaScript (ES6) Code Snippets 💥
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Supercharge your JavaScript coding with handy ES6 snippets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Offers a collection of ES6 snippets for JavaScript, streamlining the coding process. Enhances efficiency in writing modern JavaScript by providing quick insertable code pieces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=xabikos.JavaScriptSnippets"&gt;JavaScript (ES6) Code Snippets Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  27. Polacode 📸
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Create beautiful snapshots of your code for sharing. It's like Instagram for your code!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Allows creating snapshots of your code for sharing, with a focus on aesthetics. Useful for documenting code or sharing it on social media with a visually appealing format.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=pnp.polacode"&gt;Polacode Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  28. Better Comments 💬
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Enhance your code comments with different colors and styles, making them more readable and meaningful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Improves the functionality of code comments by enabling color-coding and other styling options. Enhances the readability and manageability of comments within code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments"&gt;Better Comments Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  29. Peacock 🦚
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Change the color of your VS Code workspace. Ideal for distinguishing between different projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Allows you to change the color of your VS Code workspace, useful for distinguishing between different projects. Assists in managing and differentiating multiple project environments visually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-peacock"&gt;Peacock Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  30. Quokka 🐨
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; A live scratchpad for JavaScript and TypeScript with real-time feedback. Code experiments made easy!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; A rapid prototyping playground for JavaScript and TypeScript with live feedback. Excellent for testing, learning, and experimenting with code, providing immediate output and debugging capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=WallabyJs.quokka-vscode"&gt;Quokka Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  31. Regex Previewer 🔍
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Test and visualize Regular Expressions (Regex) right inside your editor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Provides real-time visual feedback for Regular Expressions, enhancing understanding and efficiency. Invaluable for debugging and composing Regular Expressions directly within the editor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=chrmarti.regex"&gt;Regex Previewer Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  32. CSS Peek 👀
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Peek at CSS definitions from your HTML files like magic!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Allows inspection of CSS definitions from HTML files directly in VS Code. Streamlines the workflow by enabling quick reference to CSS properties without switching files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=pranaygp.vscode-css-peek"&gt;CSS Peek Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  33. Icon Fonts 🎨
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Easily insert icons from popular font icon sets directly into your HTML or CSS files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Simplifies the insertion of icons from popular font icon libraries into HTML or CSS files. Enhances web projects by providing an easy way to include a variety of icons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=idleberg.icon-fonts"&gt;Icon Fonts Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  34. Indent-Rainbow 🌈
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Colorizes the indentation in front of your text with a lovely rainbow effect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Colorizes the indentation levels of code, making them visually distinct and easier to navigate. Aids in quickly identifying code structure and potential indentation issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow"&gt;Indent-Rainbow Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  35. TODO Highlight 📝
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's Cool:&lt;/strong&gt; Highlights TODOs, FIXMEs, and any keywords in your code, making them stand out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt; Never miss a TODO again! Ensures important comments and tasks stand out, making them easier to manage and address.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check It Out:&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight"&gt;TODO Highlight Plugin&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;That's your power-packed list of 35 VS Code plugins! Whether you're coding up a storm in JavaScript, Python, Vue, or working with databases and APIs, these plugins will make your life way easier (and fun!). &lt;/p&gt;

&lt;p&gt;Happy coding! 🚀💻🎉&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>vscode</category>
    </item>
    <item>
      <title>Hacktober23 Contributions</title>
      <dc:creator>Matt Ryan</dc:creator>
      <pubDate>Thu, 19 Oct 2023 12:56:31 +0000</pubDate>
      <link>https://dev.to/mattryanmtl/hacktober23-contributions-1hlo</link>
      <guid>https://dev.to/mattryanmtl/hacktober23-contributions-1hlo</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;This is my 5th Hacktoberfest. This year I kept it simple, contributing to some people's small projects. This was due to an incredible increase at work so I couldn't focus on working on bigger open source projects like I wanted to.&lt;/p&gt;

&lt;p&gt;My PR's for this year that were accepted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/dimswart/javascript/pull/2"&gt;https://github.com/dimswart/javascript/pull/2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/monte-cook/Lessons/pull/2"&gt;https://github.com/monte-cook/Lessons/pull/2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/regis87/DragonCodex/pull/4"&gt;https://github.com/regis87/DragonCodex/pull/4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/monte-cook/Lessons/pull/3"&gt;https://github.com/monte-cook/Lessons/pull/3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/regis87/DragonCodex/pull/5"&gt;https://github.com/regis87/DragonCodex/pull/5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hack23contributor</category>
      <category>hacktoberfest23</category>
    </item>
  </channel>
</rss>
