<?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: Niall Maher</title>
    <description>The latest articles on DEV Community by Niall Maher (@nialljoemaher).</description>
    <link>https://dev.to/nialljoemaher</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%2F166066%2Fc547c6b8-e501-4fa8-ad3c-fdc460cad2ec.png</url>
      <title>DEV Community: Niall Maher</title>
      <link>https://dev.to/nialljoemaher</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nialljoemaher"/>
    <language>en</language>
    <item>
      <title>No More Free Tier on PlanetScale, Here Are Free Alternatives</title>
      <dc:creator>Niall Maher</dc:creator>
      <pubDate>Fri, 08 Mar 2024 09:23:17 +0000</pubDate>
      <link>https://dev.to/nialljoemaher/no-more-free-tier-on-planetscale-here-are-free-alternatives-2gbm</link>
      <guid>https://dev.to/nialljoemaher/no-more-free-tier-on-planetscale-here-are-free-alternatives-2gbm</guid>
      <description>&lt;p&gt;PlanetScale decided to remove its free tier. Many developers even call it a "rug pull." As you can imagine, many developers with hobby projects on their free tier are furious.&lt;/p&gt;

&lt;p&gt;You can check out their statement &lt;a href="https://planetscale.com/blog/planetscale-forever"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Rather than getting into the battle of what I think about the whole situation, I wanted to create a list of alternatives so if you are trying something out or want to migrate you have some cheap/free options: &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://supabase.com/"&gt;Supabase&lt;/a&gt; - PostgreSQL
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fantastic free tier!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While you can use Supabase just for the PostgreSQL database, it offers much more. Supabase calls itself an "open-source alternative to Firebase". &lt;/p&gt;

&lt;p&gt;It provides devs with a suite of tools, the core offering being a PostgreSQL database, authentication, real-time subscriptions, and storage. Its free tier offers a generous amount of database usage, making it an excellent choice for developers building all sorts of applications. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://neon.tech/"&gt;Neon&lt;/a&gt; - PostgreSQL
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fantastic free tier!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you got used to branching on PlanetScale, Neon has you covered! &lt;br&gt;
Neon is a fully managed serverless platform with a free tier. By separating storage from computing, Neon introduces autoscaling, branching, and essentially unlimited storage, addressing key challenges in modern application development. &lt;/p&gt;

&lt;p&gt;Designed for efficiency and scalability it'll be hard to go wrong with Neon! &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://turso.tech/"&gt;Turso&lt;/a&gt; - SQLite
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fantastic free tier!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Turso's free tier offers 9 gigabytes of storage! But it excels in another area. The simplicity of SQLite with the flexibility to deploy anywhere in the world, including within your infrastructure. &lt;/p&gt;

&lt;p&gt;Its real appeal is its edge deployments - this unique approach ensures ultra-low latency, potentially down to microseconds, which is ideal for applications requiring immediate data access regardless of location (especially if your app is deployed in edge locations). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; The founder of Turso (&lt;a href="https://twitter.com/glcst"&gt;Glauber Costa&lt;/a&gt; reached out on X to give a discount code for PlanetScale users:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Would appreciate it if you could add the special promotion for planetscale users on the post: &lt;a href="http://turso.tech/turso-forever"&gt;http://turso.tech/turso-forever&lt;/a&gt;"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.cockroachlabs.com/"&gt;CockroachDB&lt;/a&gt; - SQL
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fantastic free tier!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Free for use up to 10 GiB of storage and 50M read units per month. Which should be more than enough for most hobby projects. CockroachDB offers a distributed SQL database solution that emphasizes reliability and scalability for modern applications. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://aws.amazon.com/rds/"&gt;AWS RDS&lt;/a&gt; - Multiple options
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Has 750 hours and 20gb storage on the free tier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS offers 750 hours of Amazon RDS and 20 gigabytes of storage on its free tier (Single-AZ db.t2.micro, db.t3.micro, and db.t4g.micro Instances usage running MySQL, MariaDB, and PostgreSQL). However, AWS also gives founders a lot of credits, so if you plan on scaling but are tight on a budget, AWS can be very founder-friendly. &lt;/p&gt;




&lt;p&gt;What other options are you considering instead of PlanetScale? &lt;/p&gt;

&lt;p&gt;Let me know in the comments below. 💬&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://twitter.com/nialljoemaher"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/nialljoemaher/"&gt;connect on LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚨 Want to make friends and learn from peers?&lt;/strong&gt;&lt;br&gt;
You can join our free web developer community &lt;a href="https://www.codu.co/"&gt;here&lt;/a&gt;. 🎉&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>database</category>
      <category>programming</category>
    </item>
    <item>
      <title>CSS Text Transform: You Don't Need JavaScript to Capitalize Your Text</title>
      <dc:creator>Niall Maher</dc:creator>
      <pubDate>Sun, 16 Apr 2023 15:19:11 +0000</pubDate>
      <link>https://dev.to/nialljoemaher/css-text-transform-you-dont-need-javascript-to-capitalize-your-text-49io</link>
      <guid>https://dev.to/nialljoemaher/css-text-transform-you-dont-need-javascript-to-capitalize-your-text-49io</guid>
      <description>&lt;p&gt;Sometimes we over-engineer things...&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://www.codu.co/articles/uppercase-the-first-letter-in-a-string-with-javascript-2xrydwr_"&gt;this previous article&lt;/a&gt; I showed you how to capitalize a string with JavaScript. &lt;/p&gt;

&lt;p&gt;Here's a snippet from it:&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;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;capitalizedStr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&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;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;capitalizedStr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Hello world"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This might be useful in some cases, but if you are doing it to display a value, there is an easier way. &lt;/p&gt;

&lt;h2&gt;
  
  
  CSS Text Transform Property
&lt;/h2&gt;

&lt;p&gt;The CSS &lt;code&gt;text-transform&lt;/code&gt; property is used to specify text capitalization in an element. This property can be applied to any text-containing element, like paragraphs, headings, lists, etc. The text-transform property accepts the following values:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;none&lt;/code&gt; - Leaves the value unchanged &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;capitalize&lt;/code&gt; - Capitalize the value&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;uppercase&lt;/code&gt; - Uppercase the value&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lowercase&lt;/code&gt; - Lowercase the value&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So to capitalize our paragraphs, it would be as simple as applying the following in our 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="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;capitalize&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;The CSS text-transform property is a powerful tool for manipulating text styles on a web page, making them convenient to know. 🦾 &lt;/p&gt;




&lt;p&gt;Follow me on &lt;a href="https://twitter.com/nialljoemaher"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/nialljoemaher/"&gt;connect on LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚨 Want to make friends and learn from peers?&lt;/strong&gt;&lt;br&gt;
You can join our free web developer community &lt;a href="https://www.codu.co/"&gt;here&lt;/a&gt;. 🎉&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>codenewbie</category>
      <category>beginners</category>
    </item>
    <item>
      <title>The Page Visibility API: Improve User Experience and Performance</title>
      <dc:creator>Niall Maher</dc:creator>
      <pubDate>Thu, 06 Apr 2023 10:02:26 +0000</pubDate>
      <link>https://dev.to/nialljoemaher/the-page-visibility-api-improve-user-experience-and-performance-451</link>
      <guid>https://dev.to/nialljoemaher/the-page-visibility-api-improve-user-experience-and-performance-451</guid>
      <description>&lt;p&gt;I am always excited to share insights about lesser-known yet powerful APIs in the modern web ecosystem. &lt;/p&gt;

&lt;p&gt;Today, we'll dive into the Page Visibility API. This invaluable tool helps developers optimize their web applications by detecting when users are actively viewing or interacting with a page. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is the Page Visibility API?
&lt;/h2&gt;

&lt;p&gt;The Page Visibility API allows developers to determine whether a web page is visible to users, partially visible, or hidden. &lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with the Page Visibility API
&lt;/h2&gt;

&lt;p&gt;Let's explore the two main components of the Page Visibility API: the &lt;code&gt;document.hidden&lt;/code&gt; property and the &lt;code&gt;visibilitychange&lt;/code&gt; event.&lt;/p&gt;

&lt;h3&gt;
  
  
  document.hidden property
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;document.hidden&lt;/code&gt; property is a boolean value that indicates whether the page is currently hidden or visible. If the page is hidden, the property returns true; if visible, it returns false.&lt;br&gt;
Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (document.hidden) {
  console.log("The page is hidden");
} else {
  console.log("The page is visible");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  visibilitychange event
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;visibilitychange&lt;/code&gt; event is fired when the visibility state of the document changes. Adding an event listener to the &lt;code&gt;visibilitychange&lt;/code&gt; event allows you to execute specific functions or actions when the visibility state changes.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;document.addEventListener("visibilitychange", function() {
  if (document.hidden) {
    console.log("The page is hidden");
  } else {
    console.log("The page is visible");
  }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A Practical Example
&lt;/h2&gt;

&lt;p&gt;Here's an example of a video that auto-plays and pauses if you change tabs from this article. &lt;/p&gt;

&lt;p&gt;Check out the timer and watch how it "magically" stops when you go to a different tab.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/niall-codes/embed/XWxWNxp?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codepen.io/niall-codes/pen/XWxWNxp"&gt;Dive into the CodePen to explore the code.&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  When to use the Page Visibility API
&lt;/h2&gt;

&lt;p&gt;The Page Visibility API should be used when you need to optimize the performance, user experience, or resource usage of your web application based on its visibility status. &lt;/p&gt;

&lt;p&gt;Here are some common use cases when you should consider using the Page Visibility API:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Media playback: If your web application plays videos or audio, you can use the Page Visibility API to pause playback when the user switches to another tab or minimizes the browser and resume playback when they return. This reduces bandwidth usage and avoids unnecessary consumption of the user's battery or system resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Animations: When a page contains resource-intensive animations, you can use the API to pause or reduce the quality of the animations when the page is not visible and resume or restore the rate when the user returns to the page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-time data updates: If your application displays real-time data (e.g., stock prices, weather updates), you can use the Page Visibility API to adjust the polling frequency or temporarily stop fetching data when the user is not actively viewing the page. This reduces server load and network traffic, improving performance and saving resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Auto-saving drafts: In a text editor or content management system, you can use the Page Visibility API to trigger an auto-save when the user leaves the page or moves to a different tab, ensuring that the user's work is saved without manual intervention.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Web analytics: By tracking the visibility status of your pages, you can collect more accurate analytics data about user engagement and session duration. This helps you make better-informed decisions about your web application's design and performance.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Follow me on &lt;a href="https://twitter.com/nialljoemaher"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/nialljoemaher/"&gt;connect on LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚨 Want to make friends and learn from peers?&lt;/strong&gt;&lt;br&gt;
You can join our free web developer community &lt;a href="https://www.codu.co/"&gt;here&lt;/a&gt;. 🎉&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Alias Essentials: A Step-by-Step Guide to Creating Terminal Shortcuts</title>
      <dc:creator>Niall Maher</dc:creator>
      <pubDate>Wed, 05 Apr 2023 06:26:30 +0000</pubDate>
      <link>https://dev.to/nialljoemaher/alias-essentials-a-step-by-step-guide-to-creating-terminal-shortcuts-57h6</link>
      <guid>https://dev.to/nialljoemaher/alias-essentials-a-step-by-step-guide-to-creating-terminal-shortcuts-57h6</guid>
      <description>&lt;p&gt;As a web developer, we are no strangers to playing in the terminal. Whether running scripts, managing files, or installing packages, you rely on terminal commands to streamline your workflow.&lt;/p&gt;

&lt;p&gt;However, long and complex command sequences can slow you down and hinder productivity. That's where creating custom alias commands come in handy. &lt;/p&gt;

&lt;p&gt;This article will guide you through creating alias commands in the terminal, allowing you to work more efficiently and effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Alias Commands?
&lt;/h2&gt;

&lt;p&gt;Alias commands are shorthand versions of longer commands that you frequently use. &lt;/p&gt;

&lt;p&gt;They can be easily created and customized to suit your specific needs. &lt;/p&gt;

&lt;p&gt;Creating an alias command allows you to execute a long command sequence by typing just a few characters, saving time and minimizing the chances of making errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's jump into creating aliases. 👇&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Temporary Aliases
&lt;/h2&gt;

&lt;p&gt;Creating a temporary alias is a simple process. In your terminal, type the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;alias short_command="your_long_command"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, if you frequently list the contents of a directory with the &lt;code&gt;-l&lt;/code&gt; flag to view them in a detailed format, you can create an alias for this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;alias ll="ls -l"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, whenever you type &lt;code&gt;ll&lt;/code&gt; in the terminal, it will execute &lt;code&gt;ls -l&lt;/code&gt; instead. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Remember that temporary aliases will only last for your current terminal session.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Persistent Aliases
&lt;/h2&gt;

&lt;p&gt;You'll need to add the alias to your shell's configuration file to create a persistent alias that remains available across different terminal sessions and system restarts. &lt;/p&gt;

&lt;h2&gt;
  
  
  For Bash users
&lt;/h2&gt;

&lt;p&gt;Open your &lt;code&gt;.bashrc&lt;/code&gt; file in your favorite text editor, for ease I'm using nano:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nano ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add your alias to the bottom of the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;alias short_command="your_long_command"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the changes and exit the text editor.&lt;br&gt;
Either restart your terminal so the aliases are available or else to apply the changes immediately, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  For Zsh users
&lt;/h2&gt;

&lt;p&gt;The process is similar, but you'll need to edit the &lt;code&gt;.zshrc&lt;/code&gt; file instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then restart your terminal to apply the changes.&lt;/p&gt;




&lt;p&gt;If you are not using Bash or Zsh, a quick search on the internet will help you find the config file name so you can find it and modify it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices for Creating Aliases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Choose concise and descriptive names for your aliases that are easy to remember.&lt;/li&gt;
&lt;li&gt;Group related aliases together in your shell's configuration file for better organization.&lt;/li&gt;
&lt;li&gt;Add comments to your configuration file to explain the purpose of each alias.&lt;/li&gt;
&lt;li&gt;Regularly review and update your aliases to ensure they remain relevant to your workflow.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Leave a comment below with your favorite one. 👇&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://twitter.com/nialljoemaher"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/nialljoemaher/"&gt;connect on LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚨 Want to make friends and learn from peers?&lt;/strong&gt;&lt;br&gt;
You can join our free web developer community &lt;a href="https://www.codu.co/"&gt;here&lt;/a&gt;. 🎉&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>productivity</category>
      <category>linux</category>
    </item>
    <item>
      <title>Transform Your CSS Game: Bookmark These 10 CSS Generators</title>
      <dc:creator>Niall Maher</dc:creator>
      <pubDate>Tue, 04 Apr 2023 07:45:02 +0000</pubDate>
      <link>https://dev.to/nialljoemaher/transform-your-css-game-bookmark-these-10-css-generators-2030</link>
      <guid>https://dev.to/nialljoemaher/transform-your-css-game-bookmark-these-10-css-generators-2030</guid>
      <description>&lt;p&gt;Designing and developing modern, responsive websites can be a challenging task. However, with the right tools, you can easily streamline your workflow and create stunning web designs. In this article, we will introduce you to 10 CSS generators every web designer and frontend developer should have in their toolkit.&lt;/p&gt;

&lt;h2&gt;
  
  
  CSS Grid Generator
&lt;/h2&gt;

&lt;p&gt;Build complex CSS Grid layouts with ease using the CSS Grid Generator. Add and remove columns and rows, adjust gaps, and align content with this powerful and intuitive grid-based layout tool.&lt;br&gt;
&lt;a href="https://cssgrid-generator.netlify.app/"&gt;https://cssgrid-generator.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Flexbox Generator
&lt;/h2&gt;

&lt;p&gt;Creating responsive and fluid flexbox layouts has never been more intuitive. The Flexbox Generator allows you to adjust alignment, direction, wrapping, and other properties, all while viewing the changes in real-time.&lt;br&gt;
&lt;a href="https://the-echoplex.net/flexyboxes/"&gt;https://the-echoplex.net/flexyboxes/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CSS Animation Generator (Animesta)
&lt;/h2&gt;

&lt;p&gt;The CSS Animation Generator offers a comprehensive library of pre-built animations that you can customize to fit your needs. Choose from various animations, and tweak the duration, delay, and other settings to create the perfect effect.&lt;br&gt;
&lt;a href="https://animista.net/"&gt;https://animista.net/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CSS3 Patterns Gallery
&lt;/h2&gt;

&lt;p&gt;A collection of visually appealing CSS patterns that you can use as backgrounds in your projects. Browse the gallery, customize the patterns, and copy the generated code.&lt;br&gt;
&lt;a href="https://leaverou.github.io/css3patterns/"&gt;https://leaverou.github.io/css3patterns/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fancy Border Radius Generator
&lt;/h2&gt;

&lt;p&gt;Design unique and complex border-radius shapes with the Fancy Border Radius Generator. Create elliptical and irregular shapes by adjusting values and previewing the result, then simply copy the CSS code.&lt;br&gt;
&lt;a href="https://9elements.github.io/fancy-border-radius/"&gt;https://9elements.github.io/fancy-border-radius/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Filters Generator
&lt;/h2&gt;

&lt;p&gt;Achieve stunning visual effects by generating CSS filters such as blur, brightness, contrast, grayscale, and more. Customize filter values to create the perfect effect and copy the generated code for your project.&lt;br&gt;
&lt;a href="https://www.cssfiltergenerator.com/"&gt;https://www.cssfiltergenerator.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CSS Arrow Please
&lt;/h2&gt;

&lt;p&gt;A simple CSS arrow generator that allows you to create tooltip-like arrows with customizable properties such as size, color, and position. Preview your design and then copy the generated code. &lt;br&gt;
&lt;a href="https://cssarrowplease.com/"&gt;https://cssarrowplease.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Box Shadow Generator
&lt;/h2&gt;

&lt;p&gt;Craft the perfect shadow for your elements with the Box Shadow Generator. Customize the shadow's color, blur, spread, and position to create a professional and polished look.&lt;br&gt;
&lt;a href="https://html-css-js.com/css/generator/box-shadow/"&gt;https://html-css-js.com/css/generator/box-shadow/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  SpinKit
&lt;/h2&gt;

&lt;p&gt;A collection of simple, elegant loading spinners created using CSS animations. Browse the gallery, select a spinner, and copy the code to add a stylish loader to your web project.&lt;br&gt;
&lt;a href="https://tobiasahlin.com/spinkit/"&gt;https://tobiasahlin.com/spinkit/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Clippy
&lt;/h2&gt;

&lt;p&gt;Not Microsofts Clippy (although there is a JS library for that).&lt;br&gt;
A fun and easy-to-use tool for generating CSS clip-path shapes. Select a predefined shape or create your own by adjusting points on the canvas, then copy the generated code to your project.&lt;br&gt;
&lt;a href="https://bennettfeely.com/clippy/"&gt;https://bennettfeely.com/clippy/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Leave a comment below with your favorite one. 👇&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://twitter.com/nialljoemaher"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/nialljoemaher/"&gt;connect on LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚨 Want to make friends and learn from peers?&lt;/strong&gt;&lt;br&gt;
You can join our free web developer community &lt;a href="https://www.codu.co/"&gt;here&lt;/a&gt;. 🎉&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>css</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>An Introduction to Semantic Versioning</title>
      <dc:creator>Niall Maher</dc:creator>
      <pubDate>Mon, 23 Aug 2021 11:01:04 +0000</pubDate>
      <link>https://dev.to/nialljoemaher/an-introduction-to-semantic-versioning-26n9</link>
      <guid>https://dev.to/nialljoemaher/an-introduction-to-semantic-versioning-26n9</guid>
      <description>&lt;p&gt;Semantic versioning is a system to help developers, project managers, and consumers have a universal way of understanding the release process. Semantic versioning is some guidelines so that we can understand what is happening in a release.&lt;/p&gt;

&lt;p&gt;More importantly for us coders, semantic versioning will let us know if a change will break our code.&lt;/p&gt;

&lt;p&gt;You will find most of the major projects in the wild on GitHub that use Semantic Versioning.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Major Version&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There are two times to increment this version when there is a new&lt;/p&gt;

&lt;p&gt;When we increment this version, it means that there are backwards-incompatible changes in this release. The API has changed and may contain breaking changes for users of the API.&lt;/p&gt;

&lt;p&gt;Reset both minor and patch versions after the major number has been incremented.&lt;/p&gt;

&lt;p&gt;If we were making a major release for &lt;code&gt;1.23.11&lt;/code&gt; it would become &lt;code&gt;2.0.0&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Minor version&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We increment the minor version when adding new features or functionality that do not break or change the existing API. When you increase the minor version, reset the patch version to zero.&lt;/p&gt;

&lt;p&gt;Use this when you are making non-breaking changes that are not a bug fix.&lt;/p&gt;

&lt;p&gt;If we were making a minor release for &lt;code&gt;1.23.11&lt;/code&gt;, it would become &lt;code&gt;1.24.0&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Patch version&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Patch versions are used for bug fixes. This is when there are no functionality changes in the updates. There is no limit to these numbers, and we do not need to reset any other numbers.&lt;/p&gt;

&lt;p&gt;If we were making a patch release for &lt;code&gt;1.23.11&lt;/code&gt;, it would become &lt;code&gt;1.23.12&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Pre-releases and build&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We won't dive deeply into this syntax as there are many different ways to use it and warrant an article of its own, but I do want you to be aware of how to read pre-releases. But mainly, this is used when we wish to release software informally to some users for testing purposes. These are called pre-releases.&lt;/p&gt;

&lt;p&gt;Pre-releases may not be stable or compatible with the previous major, minor and patch versions that they imply.&lt;/p&gt;

&lt;p&gt;As an example, &lt;code&gt;1.23.11-beta.1&lt;/code&gt;, our pre-release identifier has two parts. The tag "beta" and a version "1". You might also see some build data also appended, such as the commit from which the build came from, eg. &lt;code&gt;1.23.11-beta.1+nialljoemaher-2bf235&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For a deeper dive, I have added a couple of links below to some fantastic articles that helped me understand the pre-release tagging. &lt;/p&gt;




&lt;p&gt;For the official Semantic Versioning guide - &lt;a href="https://semver.org/"&gt;https://semver.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A more detailed guide and awesome article - &lt;a href="https://developerexperience.io/practices/semantic-versioning"&gt;https://developerexperience.io/practices/semantic-versioning&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another one I liked while doing some research - &lt;a href="https://devopedia.org/semantic-versioning"&gt;https://devopedia.org/semantic-versioning&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy coding! 💜&lt;/p&gt;




&lt;p&gt;&lt;a href="https://twitter.com/nialljoemaher"&gt;Follow me on Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe on &lt;a href="https://www.youtube.com/c/Cod%C3%BACommunity"&gt;Codú Community&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>opensource</category>
    </item>
    <item>
      <title>5 npm Tips/Tricks You (Probably) Don't Know 🚀</title>
      <dc:creator>Niall Maher</dc:creator>
      <pubDate>Sun, 17 Jan 2021 09:21:39 +0000</pubDate>
      <link>https://dev.to/nialljoemaher/5-npm-tips-tricks-you-probably-don-t-know-1he</link>
      <guid>https://dev.to/nialljoemaher/5-npm-tips-tricks-you-probably-don-t-know-1he</guid>
      <description>&lt;p&gt;Well, this article might boost your productivity but at the very least it will impress some of your colleagues with your new skills. People will now perceive you as smarter and potentially more attractive &lt;em&gt;- this may be slight dramatics to gain a few more clicks&lt;/em&gt;. 🙈&lt;/p&gt;

&lt;p&gt;If you want the video version check it out below, if you are happy reading scroll on my friend... 📚&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/EVT39ggmoM8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  1. List available scripts
&lt;/h2&gt;

&lt;p&gt;To easily check all the available scripts in a project just run:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This gives you a lovely output showing you the commands like this:&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%2Fi.imgur.com%2FHMIzHx7.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%2Fi.imgur.com%2FHMIzHx7.png" alt="npm run output"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. List installed packages
&lt;/h2&gt;



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

&lt;/div&gt;



&lt;p&gt;This shows us probably too much because we see the dependencies of our dependencies…&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FaxrlVAi.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%2Fi.imgur.com%2FaxrlVAi.png" alt="npm list output"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the &lt;code&gt;--depth&lt;/code&gt; to limit the depth of your search&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;As you can see the output when you limit the depth:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FoS5z6Lw.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%2Fi.imgur.com%2FoS5z6Lw.png" alt="npm list --depth=0 output"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Open a package's homepage or repo
&lt;/h2&gt;

&lt;p&gt;I really like this feature because you can quickly get the documentation for the packages.&lt;/p&gt;

&lt;p&gt;To automatically open the packages homepage you can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm home PACKAGE_NAME 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To open the repository you can just run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm repo PACKAGE_NAME 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is super handy so you don't have to go Googling looking for the docs or npm pages and can quickly access the information you need on packages you don't know.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Show all the available versions for a package
&lt;/h2&gt;

&lt;p&gt;To get the latest version of a package we can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm v react version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fi.imgur.com%2FUsPEWEl.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%2Fi.imgur.com%2FUsPEWEl.png" alt="npm v react version output"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or for all the versions we just have to make "version" plural.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm v react versions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We then get a lovely output of all the available versions which is super handy if you want to check what's new/old or if there are any alpha releases to try out. &lt;/p&gt;

&lt;p&gt;Here's a piece of the output from running &lt;code&gt;npm v react versions&lt;/code&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FbFY7uNf.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%2Fi.imgur.com%2FbFY7uNf.png" alt="npm v react versions output"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  5. Look for outdated packages
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;outdated&lt;/code&gt; command will check the npm registry to see if any of your packages are outdated. It will print out a little table in your command line showing the current version, the wanted version, and the latest version.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;If you see the packages in red like in my sample it means there are some major vulnerabilities and they should be updated. As you can see in this 4-year-old project it's all a nice healthy red...&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%2Fi.imgur.com%2FuwZUxfO.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FuwZUxfO.jpg" alt="npm outdated output on an old project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have wanted versions different than your current version you can actually run &lt;code&gt;npm update&lt;/code&gt; to safely update these packages. &lt;/p&gt;

&lt;p&gt;I think a better way for updating and checking for outdated stuff is actually running the &lt;code&gt;npm audit&lt;/code&gt; command, this gives a lot more detail. I didn't include it as a tip because it's always screaming at us to run it in the console when we install dependencies. &lt;/p&gt;

&lt;h2&gt;
  
  
  Visual Studio Code Bonus Tip! 🏆
&lt;/h2&gt;

&lt;p&gt;A lot of people don't know this but you can actually run your scripts directly from inside Visual Studio Code with their lovely interface. &lt;/p&gt;

&lt;p&gt;Look for the "NPM Scripts" on the bottom left of your panel.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FTiTJeqh.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%2Fi.imgur.com%2FTiTJeqh.png" alt="Showing the npm scripts tab in Visual Studio Code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can open your scripts from here and just press the play icon to kick it off. I like this because it's a clear and easy way to do things for people that might not be too familiar with &lt;em&gt;npm&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;If you can't see this make sure it's active in your settings. 💜&lt;/p&gt;

&lt;p&gt;Any other cool tricks you like to use to speed up your workflow? &lt;/p&gt;




&lt;p&gt;&lt;a href="https://twitter.com/nialljoemaher" rel="noopener noreferrer"&gt;Follow me on Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe on &lt;a href="https://www.youtube.com/c/Cod%C3%BACommunity" rel="noopener noreferrer"&gt;Codú Community&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>🔎 Easy Autocomplete / Suggestions for Inputs with just HTML5 | datalist tag</title>
      <dc:creator>Niall Maher</dc:creator>
      <pubDate>Tue, 12 Jan 2021 08:22:59 +0000</pubDate>
      <link>https://dev.to/nialljoemaher/easy-autocomplete-suggestions-for-inputs-with-just-html5-datalist-tag-32j1</link>
      <guid>https://dev.to/nialljoemaher/easy-autocomplete-suggestions-for-inputs-with-just-html5-datalist-tag-32j1</guid>
      <description>&lt;p&gt;Sometimes you would like to suggest some options to a user as they type something into an input. Maybe there are popular search categories or tags that people are looking for. You could, of course, implement an API driven feature, or if you want to get a quick way for it to be up and running why not just use the &lt;code&gt;datalist&lt;/code&gt; tag?&lt;/p&gt;




&lt;p&gt;In case you want to watch me mess around with the &lt;code&gt;datalist&lt;/code&gt; tag you can watch it here or else keep scrolling to read.&lt;/p&gt;

&lt;p&gt;Video showing &lt;code&gt;datalist&lt;/code&gt; in action.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/foWm6fWk-II"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;The HTML &lt;code&gt;&amp;lt;datalist&amp;gt;&lt;/code&gt; element contains a set of &lt;code&gt;&amp;lt;option&amp;gt;&lt;/code&gt; elements that represent the permissible or recommended options available to choose from within other controls. — MDN&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Datalist acts as a hybrid between a normal input and a select field where it allows users to either choose a suggested option, see suggestions as you type, or add in their own option.&lt;/p&gt;

&lt;p&gt;So how does it work?&lt;/p&gt;

&lt;p&gt;Let’s show you how to add the &lt;code&gt;datalist&lt;/code&gt; tag to a regular old &lt;code&gt;&amp;lt;input type="text"&amp;gt;&lt;/code&gt; as a simple example (and probably the most common one you will use).&lt;br&gt;
&lt;code&gt;datalist&lt;/code&gt; will work nearly identically to a select tag taking inner options.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"programming_language"&lt;/span&gt; &lt;span class="na"&gt;list=&lt;/span&gt;&lt;span class="s"&gt;"languages"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;datalist&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"languages"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"JavaScript"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Python"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Java"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"HTML"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Stop being a troll&lt;span class="nt"&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/datalist&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important thing you will see here is that our input takes a list as an option that directs to the id of the &lt;code&gt;datalist&lt;/code&gt; you want to use to populate the input.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/1Mr3zQeIbj3sD1iVaR/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/1Mr3zQeIbj3sD1iVaR/giphy.gif" alt="Looking at datalist in action." width="480" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also add in some inner notes so in this example you will see if someone starts typing “Html” as their favorite programming language, we can show a little note telling them to stop trolling us…&lt;/p&gt;

&lt;p&gt;The other really cool thing about &lt;code&gt;datalist&lt;/code&gt; is that it isn’t just strictly for inputs with a type of text. You can use it to add some suggestions to pretty much any tags including date and color tags.&lt;/p&gt;

&lt;p&gt;Here’s an example of it in use with a color picker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"pick_color"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Pick a color&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"color"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"pick_color"&lt;/span&gt; &lt;span class="na"&gt;list=&lt;/span&gt;&lt;span class="s"&gt;"colors"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;datalist&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"colors"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"#155AF0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"#F107BA"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"#2B2B2B"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/datalist&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://i.giphy.com/media/leAjwjKSyE9SigQbYy/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/leAjwjKSyE9SigQbYy/giphy.gif" alt="Looking at a datalist being used for input using a type of color" width="472" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m a big fan of learning by hacking so jump straight into this CodePen to try it out for yourself:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/codu/embed/mdrxrBw?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Example of the datalist tags in action&lt;br&gt;
When to use this? Since this will add DOM elements, I would suggest using this when you don’t have a whole database worth of suggestions (maybe less than 50 or so is a good rule of thumb for me).&lt;/p&gt;

&lt;p&gt;Until the next one, happy coding! ❤&lt;/p&gt;




&lt;p&gt;Follow me on  &lt;a href="https://twitter.com/nialljoemaher"&gt;Twitter&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Subscribe on  &lt;a href="https://www.youtube.com/channel/UCvI5azOD4eDumpshr00EfIw"&gt;Codú Community&lt;/a&gt; &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>html</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Video Chat 📹 | What's New in Vue 3 and How to Learn Vue js in 2021 with Chris Dixon</title>
      <dc:creator>Niall Maher</dc:creator>
      <pubDate>Tue, 08 Dec 2020 17:10:54 +0000</pubDate>
      <link>https://dev.to/nialljoemaher/video-chat-what-s-new-in-vue-3-and-how-to-learn-vue-js-in-2021-with-chris-dixon-3ee5</link>
      <guid>https://dev.to/nialljoemaher/video-chat-what-s-new-in-vue-3-and-how-to-learn-vue-js-in-2021-with-chris-dixon-3ee5</guid>
      <description>&lt;p&gt;I get bullied by Vue-ers all the time about not writing Vue so Chris is here to educate me! &lt;/p&gt;

&lt;p&gt;In this episode, I talk to Chris Dixon from &lt;a href="https://chrisdixon.dev/"&gt;https://chrisdixon.dev/&lt;/a&gt; all about learning Vue, what's new in Vue 3 and his brand new Vue 3 course.&lt;/p&gt;

&lt;p&gt;Vue.js is an approachable, flexible, maintainable, and testable JavaScript framework. If you have an existing application you can use Vue without rewriting your entire application. &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/FOXlcTd6Itk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Check out Chris's course here:&lt;br&gt;
🔗  &lt;a href="https://chrisdixon.dev/courses/vue-3/"&gt;https://chrisdixon.dev/courses/vue-3/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Free JavaScript Projects by Chris:&lt;br&gt;
🔗  &lt;a href="https://fun-javascript-projects.com/"&gt;https://fun-javascript-projects.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow Chris on Twitter:&lt;br&gt;
🔗  &lt;a href="https://twitter.com/chrisdixon161"&gt;https://twitter.com/chrisdixon161&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join the Codú Community Discord:&lt;br&gt;
🔗   &lt;a href="https://discord.gg/FvunZdr"&gt;https://discord.gg/FvunZdr&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://twitter.com/nialljoemaher"&gt;Follow me on Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe on &lt;a href="https://www.youtube.com/c/Cod%C3%BACommunity"&gt;Codú Community&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Chrome Extensions You Should Install Today</title>
      <dc:creator>Niall Maher</dc:creator>
      <pubDate>Wed, 11 Nov 2020 10:35:06 +0000</pubDate>
      <link>https://dev.to/nialljoemaher/chrome-extensions-you-should-install-today-41ch</link>
      <guid>https://dev.to/nialljoemaher/chrome-extensions-you-should-install-today-41ch</guid>
      <description>&lt;p&gt;In this article, we will look at five of my favourite Chrome Extensions that I use nearly every day.&lt;/p&gt;

&lt;p&gt;I recently went through my Chrome extensions to clean out all of the ones I hadn't used recently (over a dozen it turns out). During this time, I took a little time to think which ones I had used over the past week or at least most weeks, and that's what inspired this article.&lt;/p&gt;




&lt;p&gt;I chat about all of these in the video version of this article:&lt;/p&gt;

&lt;p&gt;My Next.js video version of this article 📹&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/73JBUrVxYvE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;a href="https://developers.google.com/web/tools/lighthouse" rel="noopener noreferrer"&gt;Lighthouse&lt;/a&gt;
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Lighthouse is an &lt;a href="https://github.com/GoogleChrome/lighthouse" rel="noopener noreferrer"&gt;open-source&lt;/a&gt;, automated tool for improving the quality of web pages. You can run it against any web page, public or requiring authentication. It has audits for performance, accessibility, progressive web apps, SEO and more.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This tool is probably my most used extension, to generate easy to use reports with tips to optimise my projects or give prospects some fast advice on their applications. Here's an example of the quick overview:&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%2Fmiro.medium.com%2Fmax%2F1750%2F1%2AqxFHWGWJRzfXJj-PjrMvpw.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%2Fmiro.medium.com%2Fmax%2F1750%2F1%2AqxFHWGWJRzfXJj-PjrMvpw.png" alt="Lighthouse report summary from Twitter Mobile"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you scroll down the page, you will see actions you can do to increase your performance in all of these areas. Having a detailed report like this is an awesome action plan when you are not sure how to get a better performing website or app.&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%2Fmiro.medium.com%2Fmax%2F1768%2F1%2AABFWdTypUnaSj2Ke0gyblg.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%2Fmiro.medium.com%2Fmax%2F1768%2F1%2AABFWdTypUnaSj2Ke0gyblg.png" alt="Showing a performance breakdown from a Lighthouse report"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd" rel="noopener noreferrer"&gt;axe by Deque&lt;/a&gt;
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Accessibility checker for WCAG 2 and Section 508 accessibility. Find accessibility defects on your website or web application by using the axe Chrome extension. Drop the axe on your accessibility defects!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are ever on Twitter, you will notice a lot of shouting about accessibility, and rightly so as the web should be an inclusive place. No matter how healthy we are just one bad day away from needing an accessible website ourselves. Be compassionate, and with this tool, you can easily identify the fixes needed to create a fully WCAG compliant website.&lt;/p&gt;

&lt;p&gt;You get a little extra tab in your Chrome developer tools that will tell you how you are doing:&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%2Fmiro.medium.com%2Fmax%2F576%2F1%2A5qpefMZu7bWJi4gEdLIrcw.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%2Fmiro.medium.com%2Fmax%2F576%2F1%2A5qpefMZu7bWJi4gEdLIrcw.png" alt="axe report from Medium.com from Chrome DevTools"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://chrome.google.com/webstore/detail/wappalyzer/gppongmhjkpfnbhagpmjfkannfbllamg?hl=en" rel="noopener noreferrer"&gt;Wappalyzer&lt;/a&gt;
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Wappalyzer is more than a CMS detector or framework detector: it uncovers more than a thousand technologies in dozens of categories such as programming languages, analytics, marketing tools, payment processors, CRM, CDN and others.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a pretty fun extension for the curious developer. The extension can give you a full overview of the tech stack on a site. If we take an example of looking at a popular site like &lt;a href="https://dev.to/"&gt;dev.to&lt;/a&gt; we get an awesome little breakdown of the site:&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%2Fmiro.medium.com%2Fmax%2F576%2F1%2A4ns6SXKqkl5JvZ57GQljeA.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%2Fmiro.medium.com%2Fmax%2F576%2F1%2A4ns6SXKqkl5JvZ57GQljeA.png" alt="Wappalyzer report from dev.to"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I really like seeing what my favourite sites are made of and I am sure you will too. I've also found a few new technology treasures from being nosey on sites with this plugin too.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://chrome.google.com/webstore/detail/gofullpage-full-page-scre/fdpohaocaechififmbbbbbknoalclacl" rel="noopener noreferrer"&gt;GoFullPage&lt;/a&gt;
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;The best Chrome extension for taking a screenshot of an entire webpage&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now more than ever, especially as remote working is climbing, being able to share a full-page screenshot is a handy trick to have access to. With just a click the extension hijacks your page starts scrolling taking screenshots and stitching together a seamless full-page screenshot. You can then choose to download the photo in PNG, JPG or PDF. Here is an example I took from my own YouTube channel:&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%2Fmiro.medium.com%2Fmax%2F576%2F1%2AxvisJV5BUuCprnEbw_hllQ.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%2Fmiro.medium.com%2Fmax%2F576%2F1%2AxvisJV5BUuCprnEbw_hllQ.png" alt="Codú Community full-screen capture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I love being able to grab a large screenshot like this and sketching notes onto it with my tablet to share with people.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://chrome.google.com/webstore/detail/grammarly-for-chrome/kbfnbcaeplbcioakkpcpgfkobkghlhen?hl=en" rel="noopener noreferrer"&gt;Grammarly&lt;/a&gt;
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;From grammar and spelling to style and tone, Grammarly helps you eliminate writing errors and find the perfect words to express yourself. You'll get real-time feedback from Grammarly on Gmail, Google Docs, Twitter, LinkedIn, and nearly everywhere else you find yourself writing. Grammarly is a writing assistant that offers you specific suggestions to help you improve your writing&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Okay so this one isn't really targeting developers specifically, but this one really helps me give the illusion of professionalism and sound slightly less incompetent or dumb in my emails. This little plugin can quickly scan most text inputs and let you know if you are making some spelling mistakes, grammar errors and even help you with your tone. Honestly, I think Grammarly is my most used tool. It's getting used and abused a lot more lately by me since I started writing more content too. That's the reason I couldn't eave it out of my "Awesome Extensions List".&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%2Fmiro.medium.com%2Fmax%2F466%2F1%2A1NgPphEdtU7FQWrM0k5NSQ.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%2Fmiro.medium.com%2Fmax%2F466%2F1%2A1NgPphEdtU7FQWrM0k5NSQ.png" alt="Image for post"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An example of a suggestion whilst writing the last section&lt;/p&gt;

&lt;p&gt;Thanks, Grammarly, for making me spell gooder...&lt;/p&gt;




&lt;p&gt;Do you have any suggestions I missed that you would be lost without?&lt;/p&gt;




&lt;p&gt;&lt;a href="https://twitter.com/nialljoemaher" rel="noopener noreferrer"&gt;Follow me on Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe on &lt;a href="https://www.youtube.com/c/Cod%C3%BACommunity" rel="noopener noreferrer"&gt;Codú Community&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>NextJS V10 | 📝 Highlighting the good, great and awesome updates</title>
      <dc:creator>Niall Maher</dc:creator>
      <pubDate>Wed, 04 Nov 2020 20:49:18 +0000</pubDate>
      <link>https://dev.to/nialljoemaher/nextjs-v10-highlighting-the-good-great-and-awesome-updates-2b0e</link>
      <guid>https://dev.to/nialljoemaher/nextjs-v10-highlighting-the-good-great-and-awesome-updates-2b0e</guid>
      <description>&lt;p&gt;Over 20 updates were packed into the new NextJS version 10 update, and in this article, I will go over what are, in my opinion, the big ones. If you are looking for the official word, head over to &lt;a href="https://nextjs.org/blog/next-10" rel="noopener noreferrer"&gt;NextJS's official blog post&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We introduced over &lt;strong&gt;20 new features&lt;/strong&gt; that improve performance and developer experience. At the same time, the JavaScript size of the Next.js core has been &lt;strong&gt;reduced by 16%&lt;/strong&gt;. - &lt;a href="https://nextjs.org/blog/next-10" rel="noopener noreferrer"&gt;Nextjs.org blog&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;I chat about all of these features a little more in this video:&lt;/p&gt;

&lt;p&gt;My Next.js video version of this article 📹&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/yItB3icYHIY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;h4&gt;
  
  
  React 17
&lt;/h4&gt;

&lt;p&gt;We can now safely update to &lt;em&gt;React 17&lt;/em&gt; with the newest update. When you upgrade to NextJS 10 or start a new project, you will get the fantastic new JSX transform by default. &lt;/p&gt;

&lt;p&gt;If you don't know what that is you should check out Jesse's (&lt;em&gt;codeSTACKr&lt;/em&gt;) video giving a detailed breakdown:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/8D-rWP3c088"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;New Image Component&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;I think most people will think this is the MVP of this release.&lt;/p&gt;

&lt;p&gt;This is the number one reason I would have picked Gatsby over Next.js because of the awesome &lt;a href="https://www.gatsbyjs.com/plugins/gatsby-image/" rel="noopener noreferrer"&gt;gatsby-image&lt;/a&gt; component, which made it still optimal for generating static sites with lots of images. &lt;/p&gt;

&lt;p&gt;The NextJS team worked with the Google Chrome team to offer super image optimisations by default. It's basically a drop-in replacement for a normal &lt;code&gt;img&lt;/code&gt; tag.&lt;br&gt;
&lt;br&gt;
 &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Before&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/avatar.jpg"&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"400"&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"400"&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Avatar"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// After&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/image&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&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;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/avatar.jpg"&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"400"&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"400"&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Avatar"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;


&lt;p&gt;I won't go into too much detail here, but basically, we get lazy loading by default when we use this new &lt;code&gt;Img&lt;/code&gt;tag and then we can mark images that are in the initial viewport to preload them. &lt;/p&gt;

&lt;p&gt;I am excited to replace all my images with this tag now.&lt;/p&gt;
&lt;h4&gt;
  
  
  Fast Refresh for MDX
&lt;/h4&gt;

&lt;p&gt;A small detail that didn't frustrate me too much but a nice improvement. &lt;code&gt;@next/mdx&lt;/code&gt; will now leverage &lt;em&gt;Fast Refresh&lt;/em&gt;, making sure the browser does not have to reload the page while you are editing and developing. &lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/vercel/next.js/tree/canary/packages/next-mdx" rel="noopener noreferrer"&gt;@next/mdx documentation&lt;/a&gt; guides you through how to set up MDX with Next.js.&lt;/p&gt;
&lt;h4&gt;
  
  
  CSS from node_modules
&lt;/h4&gt;

&lt;p&gt;More optimisations! Instead of having to load all your libraries CSS straight into &lt;code&gt;_app.js&lt;/code&gt;, now we can import them in the required components. This might seem like a small thing but now we can lazy load CSS as required which depending on the library you are using (and where you are using it), this could be some big improvements to your initial load speed.&lt;/p&gt;
&lt;h4&gt;
  
  
  Easy Internationalization
&lt;/h4&gt;

&lt;p&gt;With domain routing, subpath routing and language detection, setting up internationalization has never been easier. &lt;/p&gt;

&lt;p&gt;If you have the locales set up, you will automatically be routed based on your &lt;code&gt;Accept-Language&lt;/code&gt; header (which is easily disabled in case you didn't want this). &lt;/p&gt;

&lt;p&gt;You can then grab the locals from &lt;code&gt;next/router&lt;/code&gt; and you will now see your locales in the &lt;code&gt;router&lt;/code&gt; object:&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%2Fcdn-images-1.medium.com%2Fmax%2F720%2F1%2AygYEwS--WVXj_QNHwq8o7A.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%2Fcdn-images-1.medium.com%2Fmax%2F720%2F1%2AygYEwS--WVXj_QNHwq8o7A.png" alt="Sample router object"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example of router object when we navigate to our Spanish domain&lt;/p&gt;
&lt;h4&gt;
  
  
  Automatic Resolving of &lt;code&gt;href&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;One thing that I always felt was frustrating when I was using &lt;code&gt;Link&lt;/code&gt; tags was remembering what to put in &lt;code&gt;as&lt;/code&gt; versus &lt;code&gt;href&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now you can stop using &lt;code&gt;as&lt;/code&gt; and it will automatically resolve under the hood for you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// before v10&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Link&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/blog/[slug]"&lt;/span&gt; &lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/blog/posts"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// after v10&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Link&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/blog/[slug]"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Next.js Analytics
&lt;/h4&gt;

&lt;p&gt;NextJS Analytics isn't your usual benchmark tester. With NextJS Analytics, it analyses your actual user's performance so that you can really see how your users perceive your site rather than the one size fits all approach. &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%2Fcdn-images-1.medium.com%2Fmax%2F720%2F1%2AtSaLcDrqmy47rCdzP8Uz2Q.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%2Fcdn-images-1.medium.com%2Fmax%2F720%2F1%2AtSaLcDrqmy47rCdzP8Uz2Q.png" alt="Screenshot of the analytics"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NextJS Analytics &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Next.js Analytics is about focusing on the entire picture, deeply understanding your audience, and how your application performs for your users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm rebuilding my business site with NextJS, so I am excited to give this a test run the moment I push it to production. &lt;/p&gt;

&lt;h4&gt;
  
  
  NextJS Commerce
&lt;/h4&gt;

&lt;p&gt;Ever needed to build an eCommerce solution and not know where to start? &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%2Fcdn-images-1.medium.com%2Fmax%2F720%2F1%2AiebOUD0U--A_5twXP97C_Q.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%2Fcdn-images-1.medium.com%2Fmax%2F720%2F1%2AiebOUD0U--A_5twXP97C_Q.png" alt="Sampel of e-commerce site"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Screenshot of NextJS Commerce site&lt;/p&gt;

&lt;p&gt;As someone who has launched a handful of shops on Shopify because it was the easiest solution, I am super happy to see this. NextJS Commerce offers a boilerplate optimised eCommerce store. Get super speeds to boost your SEO and customer experience. Currently, it has an out of the box integration with BigCommerce, but they said they are working on solutions for other vendors like Shopify too (which is when I will probably dive headfirst in then and move one of my stores over).&lt;/p&gt;

&lt;p&gt;Check it out here: &lt;a href="https://nextjs.org/commerce" rel="noopener noreferrer"&gt;https://nextjs.org/commerce&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;I'm currently rebuilding my business site with NextJS since this update dropped and I am excited to see how my website performs when it's all done. &lt;/p&gt;

&lt;p&gt;What's your favourite feature that dropped?&lt;/p&gt;




&lt;p&gt;&lt;a href="https://twitter.com/nialljoemaher" rel="noopener noreferrer"&gt;Follow me on Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe on &lt;a href="https://www.youtube.com/c/Cod%C3%BACommunity" rel="noopener noreferrer"&gt;Codú Community&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>opensource</category>
    </item>
    <item>
      <title>My Biggest Mistake When I Started Earning Six figures</title>
      <dc:creator>Niall Maher</dc:creator>
      <pubDate>Tue, 27 Oct 2020 10:40:29 +0000</pubDate>
      <link>https://dev.to/nialljoemaher/my-biggest-mistake-when-i-started-earning-six-figures-g21</link>
      <guid>https://dev.to/nialljoemaher/my-biggest-mistake-when-i-started-earning-six-figures-g21</guid>
      <description>

&lt;h1&gt;
  
  
  A Tale of Caution to Avoid My mistakes
&lt;/h1&gt;

&lt;h3&gt;
  
  
  I talk more about this whole situation here or keep scrolling to read. 💻
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/DwZcIXjbC_Y"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h4&gt;
  
  
  A Little Bit of Background
&lt;/h4&gt;

&lt;p&gt;Just 12 months before I started earning over €100,000 a year, I was working selling fine wines in a small shop and building some websites between customers for people. I was earning €400 (before tax) a week or just over €20,000 per year, so I forgive myself a little for the huge mistake I made (from excitement) when my income was over the space of twelve months, literally multiplied. I had started earning €40,000 a year as my first "real" software development job and honestly still struggled a little from all of the debt and overdrafts I had accumulated over the years of working for little money and paying for rent, bills and food.&lt;/p&gt;

&lt;h4&gt;
  
  
  Fast Forward to Getting My First 6 Figure job
&lt;/h4&gt;

&lt;p&gt;9 months into my first major web development role (which was a baptism by fire and a story for another day on how I ascended so fast) I got a call from a now good friend of mine about an interview for a "Senior" developer role. I of course, like most newer developers, coveted and wanted that "Senior" title. I wanted that title so much that I decided "f*ck it, I might not be ready, but I might as well see what kinda stuff they ask in those interviews". I went and to my own surprise actually nailed the interview, thus receiving an offer I wasn't expecting. &lt;/p&gt;

&lt;p&gt;The position was a contractor role with Bank of America which was going to pay me €475 per day on a 6-month contract(€75 more than I was making in a whole week 9 months previous). As you can imagine, I got very excited and decided I had to take the offer and become a contractor. &lt;/p&gt;

&lt;p&gt;5 months flew by, and I was ecstatic when I got a call to say they wanted to extend my contract by 12 months, this is when I stopped being cautious and assumed I would now and forever be showered in cash...&lt;/p&gt;

&lt;p&gt;Over the weekend after getting this call, I went to a showroom and put a deposit on a brand new &lt;em&gt;Mazda MX-5&lt;/em&gt;, a small sports car I always wanted. I was so proud of my achievements and so excited about at least 12 months more of this income I really did feel invincible. I even picked up the recruiter who got me the job in the first place in the car to celebrate over lunch. &lt;/p&gt;

&lt;p&gt;Two days into my new contract I then received an unexpected call...&lt;/p&gt;

&lt;p&gt;"Hi Niall, there have been some budget cuts in the bank, and unfortunately they have decided to give you your notice of 30 days."&lt;/p&gt;

&lt;p&gt;My heart sank into my stomach a little; I like the idiot I was, had spent every penny of my savings on buying that car, living beyond my means even with what I was earning and now had just lost my job. I had spent the money I had not yet actually earned and as a result, had left myself in a terrible situation. &lt;/p&gt;

&lt;h4&gt;
  
  
  My Advice to My Younger Self Or You...
&lt;/h4&gt;

&lt;p&gt;Don't spend money you haven't earned yet!&lt;/p&gt;

&lt;p&gt;Stop trying to impress people with material things and look after your future self...&lt;/p&gt;

&lt;p&gt;No matter how secure you feel, make sure you have a rainy day fund before anything else to cover yourself if you end up in a place where you lose your job. If you are getting something like a car loan or a mortgage at the very least wait longer than I did (at least a year or two) to make sure the change in fortune wasn't just a fluke and that you will be able to keep up with payments. Worrying about money is stressful, the high of feeling like a superstar is a lot less than the low of worrying about your next paycheque.&lt;/p&gt;

&lt;p&gt;This may sound obvious, but trust me is much more difficult than it sounds when you are sitting in your dream car and have enough in your bank account to cover it. Things like the "&lt;a href="https://www.investopedia.com/terms/g/gamblersfallacy.asp#:~:text=What%20is%20the%20Gambler%27s%20Fallacy,or%20a%20series%20of%20events." rel="noopener noreferrer"&gt;Gamblers Fallacy&lt;/a&gt;" can kick in where we can think we have a lucky streak or that the odds are in our favour even though mathematically speaking nothing has changed. I after my fortunate year thought that it was now going to be a lucky streak. &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%2Fimgur.com%2FKfqXvpS.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%2Fimgur.com%2FKfqXvpS.png" alt="I missed 5 times in a row! I must be on a lucky streak"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  I Landed on my Feet
&lt;/h4&gt;

&lt;p&gt;Thankfully, my friend who had gotten me that job lined me up a new one within a couple of weeks of that news which paid pretty much the same, so I survived that blow. I didn't spend a single day unemployed thankfully so I recovered (and still have that Mazda). &lt;/p&gt;

&lt;p&gt;I now invest money, have a rainy day fund (which still is being built) and try every month to see how I can improve my finances. This is a slow and tough mindset change, but it's something I know I need to work on so I don't ever want to have that sinking feeling again or the pain of growing more and more in debt every month. &lt;/p&gt;

&lt;p&gt;When you are not used to having money, it is a tough thing to learn how to respect money.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is for informational purposes only. It should not be considered Financial or Legal Advice. Not all information will be accurate. Consult a financial professional before making any major financial decisions.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://twitter.com/nialljoemaher" rel="noopener noreferrer"&gt;Follow me on Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe on &lt;a href="https://www.youtube.com/c/Cod%C3%BACommunity" rel="noopener noreferrer"&gt;Codú Community&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
      <category>interview</category>
      <category>tips</category>
    </item>
  </channel>
</rss>
