<?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: Ido Shamun</title>
    <description>The latest articles on DEV Community by Ido Shamun (@idoshamun).</description>
    <link>https://dev.to/idoshamun</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%2F88534%2Fdcb9e522-dd0a-4bdb-9ee8-9344a30c99a6.jpg</url>
      <title>DEV Community: Ido Shamun</title>
      <link>https://dev.to/idoshamun</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/idoshamun"/>
    <language>en</language>
    <item>
      <title>🔥 What's Hot in Web Development? — Weekly Picks #162</title>
      <dc:creator>Ido Shamun</dc:creator>
      <pubDate>Wed, 13 Jan 2021 13:26:16 +0000</pubDate>
      <link>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-162-5bj</link>
      <guid>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-162-5bj</guid>
      <description>&lt;p&gt;Every week we gather the best articles on &lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt;.&lt;br&gt;
This week is highly focused on React but not only. You can find in this list awesome cheatsheets. Are you looking for a new job? We got you covered with a post about the current hiring trends. And much more. Shout out to all the authors. 👏&lt;/p&gt;

&lt;p&gt;So, let's get it started.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Learn React in 2021: The 7 Skills You Need To Know
&lt;/h2&gt;

&lt;p&gt;⚛️ An opinionated list of steps towards learning react. It focuses mainly on learning the fundamentals of both the browser and react.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/JIS2qUh9T" rel="noopener noreferrer"&gt;How to Learn React in 2021: The 7 Skills You Need To Know&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FlexBox Cheat Sheets in 2021 || CSS 2021
&lt;/h2&gt;

&lt;p&gt;🧘‍♀️ A CSS flexbox guide with all the different properties explained with beautiful cartoons.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/aBGPtqLxt" rel="noopener noreferrer"&gt;FlexBox Cheat Sheets in 2021 || CSS 2021&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Guide to the 8 Best Dev Tools in 2021
&lt;/h2&gt;

&lt;p&gt;👨‍💻 A list of dev-tools grouped by categories that include frontend, business logic, data, and source control.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/T-XGoNe2J" rel="noopener noreferrer"&gt;My Guide to the 8 Best Dev Tools in 2021&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Smart Developers Don't Code
&lt;/h2&gt;

&lt;p&gt;🐫 A well-written introduction to Apache Camel and CamelK. They will help you build quickly enterprise integrations on top of Kubernetes and JVM.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/jmQhe3ALU" rel="noopener noreferrer"&gt;Smart Developers Don't Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Coolest 25+ Web Design Trends In 2021, that'll rock the world
&lt;/h2&gt;

&lt;p&gt;🔥 If you are into web design, check out this comprehensive list of design trends. You might find it useful.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/fgG-MTeM6" rel="noopener noreferrer"&gt;Coolest 25+ Web Design Trends In 2021, that'll rock the world&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&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%2Fi%2Fb996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The React Cheatsheet for 2021 (+ Real-World Examples)
&lt;/h2&gt;

&lt;p&gt;📝 A handbook for react beginners with all the relevant information divided into categories.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/T5kMqsd4q" rel="noopener noreferrer"&gt;The React Cheatsheet for 2021 (+ Real-World Examples)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5 JavaScript Tools to Look Out For in 2021
&lt;/h2&gt;

&lt;p&gt;👀 Although it sounds clickbaity, I found this list very useful. It includes Rollup.js, Snowpack, Rome, esbuild, Waypoint, and some bonus tools.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/5RKuRiaI6" rel="noopener noreferrer"&gt;5 JavaScript Tools to Look Out For in 2021&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Intro to React Server Side Rendering
&lt;/h2&gt;

&lt;p&gt;🤖 Usually, when we want to develop a react SSR application we will use Next.js. But have you wondered how to build an SSR application from scratch? Check out this excellent article.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/qNIqtZWFO" rel="noopener noreferrer"&gt;Intro to React Server Side Rendering&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The most valuable software developer skills to get hired now
&lt;/h2&gt;

&lt;p&gt;👨‍💼 A review of the current trends in hiring. It covers the request and demand for different skills and programming languages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/L4JSn_oOA" rel="noopener noreferrer"&gt;The most valuable software developer skills to get hired now&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5 reasons to start using TailwindCSS
&lt;/h2&gt;

&lt;p&gt;🎨 If you're searching for a new CSS framework, read this article. It will surely motivate you to try out TailwindCSS.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/f5dKLFnMh" rel="noopener noreferrer"&gt;5 reasons to start using TailwindCSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Wrap Up!
&lt;/h2&gt;

&lt;p&gt;That was all for this week. We will come back with another list of interesting development posts next week.&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>css</category>
      <category>design</category>
    </item>
    <item>
      <title>🔥 What's Hot in Web Development? — Weekly Picks #161</title>
      <dc:creator>Ido Shamun</dc:creator>
      <pubDate>Wed, 06 Jan 2021 13:25:46 +0000</pubDate>
      <link>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-161-oon</link>
      <guid>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-161-oon</guid>
      <description>&lt;p&gt;🌟 This week we have many excellent walkthroughs. Short articles that aim to give you enough knowledge to solve a specific task. But that's not all, check out this awesome list.&lt;br&gt;
As always, all posts were ranked by &lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; community. Shout out to all the authors. 👏&lt;/p&gt;

&lt;p&gt;So, let's get it started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design v18
&lt;/h2&gt;

&lt;p&gt;😱 CSS-Tricks features a new design! Chris shares the story of the redesign including all the nitty-gritty.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/9VMYxcu9S" rel="noopener noreferrer"&gt;Design v18&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Design a Web Application - A Guideline on Software Architecture
&lt;/h2&gt;

&lt;p&gt;👷‍♂️ A comprehensive review of software architecture patterns and when to use them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/a2w8fy5Wt" rel="noopener noreferrer"&gt;How to Design a Web Application - A Guideline on Software Architecture&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I built my own productivity app
&lt;/h2&gt;

&lt;p&gt;🚀 The author explains what it takes to build your own product at a high level. It's a short article.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/xoYPTEpJV" rel="noopener noreferrer"&gt;How I built my own productivity app&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A list of actually useful Nocode tools and I am not talking about site builders
&lt;/h2&gt;

&lt;p&gt;🙅‍♀️ No-code or low-code platforms can be very useful even for developers. Usually, you will have to sacrifice flexibility for agility. Here's a curated list of brilliant tools.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/rAVGmRscc" rel="noopener noreferrer"&gt;A list of actually useful Nocode tools and I am not talking about site builders&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Creating Browser Notification in JavaScript
&lt;/h2&gt;

&lt;p&gt;💬 Here's a quick walkthrough for implementing browser notifications. It covers not only displaying the notifications but other aspects such as asking for permissions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/GUmbswnlN" rel="noopener noreferrer"&gt;Creating Browser Notification in JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&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%2Fi%2Fb996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Make Your Own Tools
&lt;/h2&gt;

&lt;p&gt;⚙️ It's Chris's second article this week! Chris motivates us to spend some time on building internal tooling. He also gives some examples.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/USNB3f_Vk" rel="noopener noreferrer"&gt;Make Your Own Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Rules of Micro-Frontends
&lt;/h2&gt;

&lt;p&gt;👮‍♂️ An opinionated list of guidelines to build micro-frontends. The list covers aspects such as deployment, testing, code management, and more.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/9hTsyZY_u" rel="noopener noreferrer"&gt;Rules of Micro-Frontends&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Make a Side Navigation Bar in ReactJS
&lt;/h2&gt;

&lt;p&gt;🧭 A tutorial for creating a sidebar using React from scratch! This includes even the create-react-app step. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/FkMhWKqUj" rel="noopener noreferrer"&gt;How to Make a Side Navigation Bar in ReactJS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Practical Introduction To Dependency Injection
&lt;/h2&gt;

&lt;p&gt;💉 The first part of a series that provides a practical introduction to Dependency Injection.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/5iWObjxCP" rel="noopener noreferrer"&gt;A Practical Introduction To Dependency Injection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Verify Users in Express.js
&lt;/h2&gt;

&lt;p&gt;🤖 Email verification is a necessary step in almost every login system. This article walks you through implementing an email verification system using Node.js and MongoDB.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/_x8YxDBGv" rel="noopener noreferrer"&gt;How to Verify Users in Express.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Wrap Up!
&lt;/h2&gt;

&lt;p&gt;That was all for this week. We will come back with another list of interesting development posts next week.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>javascript</category>
      <category>node</category>
    </item>
    <item>
      <title>Web Vitals Optimizations: Advanced Dynamic Import Patterns</title>
      <dc:creator>Ido Shamun</dc:creator>
      <pubDate>Tue, 05 Jan 2021 15:36:00 +0000</pubDate>
      <link>https://dev.to/dailydotdev/web-vitals-optimizations-advanced-dynamic-import-patterns-1hg5</link>
      <guid>https://dev.to/dailydotdev/web-vitals-optimizations-advanced-dynamic-import-patterns-1hg5</guid>
      <description>&lt;p&gt;Web performance is a crucial part of the user experience of our web application. It has a direct impact on the conversion rate. Walmart found that for every 1-second improvement in page load time, conversions increased by 2% (&lt;a href="https://www.cloudflare.com/learning/performance/more/website-performance-conversion-rates/" rel="noopener noreferrer"&gt;see source&lt;/a&gt;). And if that's not enough, search engines favor fast websites. They rank them higher than slow websites. So improving your web application's performance can increase both the conversion rate and the organic customer acquisition rate. &lt;/p&gt;

&lt;h1&gt;
  
  
  Web Vitals
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://web.dev/learn-web-vitals/" rel="noopener noreferrer"&gt;Web Vitals&lt;/a&gt; (coined by the Chrome team) are a set of metrics to measure the performance of a website. Optimizing for these metrics ensures your visitors will enjoy a much better experience.&lt;br&gt;
Core Web Vitals are a subset of the aforementioned Web Vitals that is relevant to any web page. The subset focuses on three performance aspects, loading, interactivity, and visual stability. In this article, we will focus on improving two of them, loading and interactivity. They're represented by these two metrics, Largest Contentful Paint (LCP) and First Input Delay (FID). There are many strategies to improve these metrics, but we'll focus on reducing the bundle size. &lt;/p&gt;
&lt;h1&gt;
  
  
  Bundle size
&lt;/h1&gt;

&lt;p&gt;The page bundle size significantly affects both LCP and FID. Both server-side-rendered applications and single-page-applications can end-up with bloated JavaScript bundles. The bigger the bundle, the more time it takes to download the bundle, parse the code into actionable machine commands, and eventually evaluate it. As long as the main thread is focused on any of these, it cannot do anything else, which increases LCP and FID. Addy Osmani wrote an extensive article about &lt;a href="https://v8.dev/blog/cost-of-javascript-2019" rel="noopener noreferrer"&gt;the cost of JavaScript&lt;/a&gt; if you fancy going deeper.&lt;br&gt;
Even if we apply best practices such as tree shaking and code splitting in our project, the bundle can become huge. So what should we do? Dynamic import and loading prioritization!&lt;/p&gt;
&lt;h1&gt;
  
  
  Dynamic import
&lt;/h1&gt;

&lt;p&gt;Not many know, but there are two forms of import we can use, static and dynamic. A static import is a well-known form and is our default choice. It looks like &lt;code&gt;import defaultExport from "module-name";&lt;/code&gt; and it tells the bundler (e.g., Webpack) that this module is mandatory to run our code. The bundler will bundle the module code with our code into a single JavaScript file. The more modules we statically import, the bigger the bundle will be. But obviously, not all imports are the same. Some are required to run our code immediately, and some can be lazy-loaded until a certain event occurs. So why do we have to load all this JavaScript at once? We don't. We can use dynamic import. Dynamic import looks like a regular function call and returns a promise that resolves to the imported module, &lt;code&gt;import("module-name").then((module) =&amp;gt; ...);&lt;/code&gt;. Using dynamic import, we tell the bundler to create a separate bundle for this module and load it in runtime. This makes sure the imported module will not be bundled in our main bundle, keeping the main bundle small and efficient. &lt;a href="https://reactjs.org/docs/code-splitting.html" rel="noopener noreferrer"&gt;React lazy&lt;/a&gt; and &lt;a href="https://nextjs.org/docs/advanced-features/dynamic-import" rel="noopener noreferrer"&gt;Next.js dynamic&lt;/a&gt; utilize dynamic import to lazy-load React components easily. They are both a function that receives a function as an argument and returns a React component. The function argument must return a promise that resolves into a React component by itself. Here's an example: &lt;code&gt;const DynamicComponent = dynamic(() =&amp;gt; import('./component'))&lt;/code&gt;. Of course, both React lazy and Next.js dynamic provide you a way to handle errors and show a fallback element while the component is loading (out of scope). So now we have two levels of import. The first is a static import, which bundles the module into our bundle. The second is a dynamic import, which imports the module as soon as requested as a separate bundle. This should boost our performance, but we can take it even further and load some JavaScript bundles only after the page is completely loaded.&lt;/p&gt;
&lt;h1&gt;
  
  
  Import after page load
&lt;/h1&gt;

&lt;p&gt;In this section, we will see how we can use React lazy and Next.js dynamic to create a new function that imports a component only after the page is loaded. For simplicity's sake, I'll show how to implement it with Next.js, but the same concept can be easily applied to React lazy or even other frameworks such as Vue.&lt;/p&gt;

&lt;p&gt;Let's first create a function that returns a promise that resolves once the page is loaded. A page loading process consists of three phases, loading, interactive, and completed. The function receives an argument that states at what phase we should load the resource. We use the &lt;code&gt;readystatechange&lt;/code&gt; event to listen to changes in the loading process.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&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="nf"&gt;onPageLoad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;readyState&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DocumentReadyState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;interactive&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="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&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;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&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="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
      &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;complete&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="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;resolve&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;callback&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ProgressEvent&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Document&lt;/span&gt;&lt;span class="o"&gt;&amp;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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
        &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;complete&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="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;readystatechange&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;callback&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;resolve&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="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;readystatechange&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;callback&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;Our &lt;code&gt;onPageLoad&lt;/code&gt; function first returns a promise as planned. In the promise, we check for the current ready state of the document. It's an important edge case that we have to deal with; otherwise, the promise might never resolve. If the page is already loaded, we resolve the promise. Second, we create a callback function for the event listener and subscribe to the &lt;code&gt;readystatechange&lt;/code&gt; event. In the callback, we check the new ready state of the document. If it equals the requested state or if the document is completely loaded, we can resolve the promise and unsubscribe.&lt;/p&gt;

&lt;p&gt;This was the heavy lifting, and now the only thing that remained to do is to create our new dynamic function that will load the component on page load.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;dynamic&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/dynamic&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;onPageLoad&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;./onPageLoad&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&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="nf"&gt;dynamicPageLoad&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;P&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;loader&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="nx"&gt;LoaderComponent&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;P&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;readyState&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DocumentReadyState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;interactive&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;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ComponentType&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;P&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;return&lt;/span&gt; &lt;span class="nx"&gt;dynamic&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;P&lt;/span&gt;&lt;span class="o"&gt;&amp;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="nf"&gt;onPageLoad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loader&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;ssr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&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;Like Next.js dynamic function, we receive a loader function that returns a promise with a React component and an optional ready state to prioritize the loading. In the function, we use the good-old dynamic function, but before providing the loader function, we chain it to the &lt;code&gt;onPageLoad&lt;/code&gt; function that we created earlier. This makes sure the import statement will not be called before the page is loaded. The second parameter to the dynamic function disabled evaluating this expression in the server. This is required because we use the document object, which is available only to the client.&lt;/p&gt;

&lt;p&gt;We can use our function to make sure our components will be imported after the page load as follows:&lt;br&gt;
&lt;code&gt;const DynamicComponent = dynamicPageLoad(() =&amp;gt; import('./component'))&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now, a lot of JavaScript code can be downloaded, parsed, and evaluated only after our page is loaded. It makes sure the main thread will have more time for critical resources, thus improving our LCP and FID metrics.&lt;/p&gt;

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

&lt;p&gt;Good web performance can improve our conversion rate and SEO. One of the ways to improve performance is to reduce the initial bundle size. By utilizing dynamic import, we can lazy-load JavaScript modules, which shrinks the initial bundle size. We also learned how to prioritize dynamic imports by loading some of the modules only after the page is loaded using our custom dynamic function.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&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%2Fi%2Fb996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>webdev</category>
      <category>react</category>
      <category>performance</category>
    </item>
    <item>
      <title>🔥 What's Hot in Web Development? — Weekly Picks #160</title>
      <dc:creator>Ido Shamun</dc:creator>
      <pubDate>Wed, 30 Dec 2020 13:00:00 +0000</pubDate>
      <link>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-160-2kik</link>
      <guid>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-160-2kik</guid>
      <description>&lt;p&gt;Every week we publish the top 10 popular posts on &lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Shout out to all the authors 👏&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanos.js Tutorial – Restore Balance to your Project
&lt;/h2&gt;

&lt;p&gt;🧤 Would you like to randomly delete half of your files? If so, give Thanos.js a go.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/HRW98nFO8" rel="noopener noreferrer"&gt;Thanos.js Tutorial – Restore Balance to your Project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  We rendered a million web pages to find out what makes the web slow
&lt;/h2&gt;

&lt;p&gt;🤯 The author rendered 1M pages and tracked every possible metric and information such as errors, protocols, libraries, and performance metrics. He crunched the numbers and share the insights in this article. By the way, it's also available on Kaggle.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/aoJaLoVOi" rel="noopener noreferrer"&gt;We rendered a million web pages to find out what makes the web slow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  React Server Components
&lt;/h2&gt;

&lt;p&gt;🔥 The React team has recently previewed a new concept called React Server Components. Everyone seems super excited about it. Read Addy Osmani's introduction.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/Jd-UX_FA4" rel="noopener noreferrer"&gt;React Server Components&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Public APIs - Find a public API for your next project
&lt;/h2&gt;

&lt;p&gt;🕵️‍♀️ The title already says it all. If you look for an API this is the place.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/Q8dp2d1F9" rel="noopener noreferrer"&gt;Public APIs - Find a public API for your next project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2 months of Learning React.js and The project I worked on
&lt;/h2&gt;

&lt;p&gt;👨‍🎓 The author shares his takeaways from learning React. He did some online courses and went over freeCodeCamp. Check out what he has to say.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/A4HmYW7Hb" rel="noopener noreferrer"&gt;2 months of Learning React.js and The project I worked on&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&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%2Fi%2Fb996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  My Advice to New Programmers After Coding for the Last 3 Years
&lt;/h2&gt;

&lt;p&gt;🐣 This is a guest post on our blog that got a lot of attention from the community. Fahad shares some insights for codenewbies.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/l8vEE_3lV" rel="noopener noreferrer"&gt;My Advice to New Programmers After Coding for the Last 3 Years&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  HTML tags every frontend developer should know
&lt;/h2&gt;

&lt;p&gt;🤓 Semantic HTML is important for the accessibility and readability of your code. Knowing as many HTML elements as possible, otherwise, we will fall back to our default choice div.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/qIsvggf4P" rel="noopener noreferrer"&gt;HTML tags every frontend developer should know&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Continuous Performance Analysis with Lighthouse CI and GitHub Actions
&lt;/h2&gt;

&lt;p&gt;🚀 An excellent walkthrough to set up a performance analysis for every commit. This makes it so much easier to find performance bottlenecks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/wDy12l5xb" rel="noopener noreferrer"&gt;Continuous Performance Analysis with Lighthouse CI and GitHub Actions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  React Best Practices with Kent Dodds (Repeat)
&lt;/h2&gt;

&lt;p&gt;🥇 Kent shares his React best practices in a podcast. There's also a transcript for those of you, like me, who don't like podcasts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/C5ksxFOrr" rel="noopener noreferrer"&gt;React Best Practices with Kent Dodds (Repeat)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Build a Chat Room With Node.js and Socket.io
&lt;/h2&gt;

&lt;p&gt;💬 Learn about WebSocket and how to build a real-time application that includes a server and a client.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/7FKYoWbSc" rel="noopener noreferrer"&gt;Build a Chat Room With Node.js and Socket.io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Wrap Up!
&lt;/h2&gt;

&lt;p&gt;That was all for this week. We will come back with another list of interesting development posts next week.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>codenewbie</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>🔥 What's Hot in Web Development? — Weekly Picks #159</title>
      <dc:creator>Ido Shamun</dc:creator>
      <pubDate>Wed, 23 Dec 2020 13:06:55 +0000</pubDate>
      <link>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-159-57b9</link>
      <guid>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-159-57b9</guid>
      <description>&lt;p&gt;Every week we publish the top 10 popular posts on &lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Shout out to all the authors 👏&lt;/p&gt;

&lt;h2&gt;
  
  
  Develop a Food Delivery Application: (It’s Features, Cost, and Functionality)
&lt;/h2&gt;

&lt;p&gt;🍔 This is not a technical article but rather explains what it takes to develop a food delivery application and also shows a comprehensive market analysis.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/WwiTRvAez" rel="noopener noreferrer"&gt;Develop a Food Delivery Application: (It’s Features, Cost, and Functionality)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  100 Days of Code – A Complete Guide For Beginners and Experienced
&lt;/h2&gt;

&lt;p&gt;🐣 When they say "complete" they really mean it. This article presents two roadmaps. One for beginners and the other for experienced. It's very focused and includes all the references you need to get it going.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/xVj_PkJhBa" rel="noopener noreferrer"&gt;100 Days of Code – A Complete Guide For Beginners and Experienced&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Typescript Mistakes To Avoid
&lt;/h2&gt;

&lt;p&gt;🚫 This is a fine list of TypeScript patterns to avoid. Even if you're an experienced developer, I recommend checking out this article.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/Nx66Fcc6P" rel="noopener noreferrer"&gt;Typescript Mistakes To Avoid&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Use the Locomotive Scroll for all Kinds of Scrolling Effects
&lt;/h2&gt;

&lt;p&gt;🤪 Unique scrolling effects can create unforgettable user experiences. This article will get you started with Locomotive Scroll and teach you how to create these unique experiences. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/e1SCuzMxp" rel="noopener noreferrer"&gt;How to Use the Locomotive Scroll for all Kinds of Scrolling Effects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Easily Code For 8+ Hours Without Feeling Tired (My Productivity System)
&lt;/h2&gt;

&lt;p&gt;🥱 Coding for a long time can be tiresome. Nick developed a method to stay sharp during the long days.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/tMKYZcJzm" rel="noopener noreferrer"&gt;How I Easily Code For 8+ Hours Without Feeling Tired (My Productivity System)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&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%2Fi%2Fb996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Cyberpunk 2077 Inspired Menu in CSS only! Video Tutorial!
&lt;/h2&gt;

&lt;p&gt;👨‍🎤 Cyberpunk 2077 is so hyped right now. This hype made its way to web development with this awesome menu implementation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/b3KecmDKa" rel="noopener noreferrer"&gt;Cyberpunk 2077 Inspired Menu in CSS only! Video Tutorial!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Centering in CSS
&lt;/h2&gt;

&lt;p&gt;🖼 There are so many ways to center elements using CSS. This article compares them according to five criteria. It's like a stress test for centering techniques.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/9vMkgXn28" rel="noopener noreferrer"&gt;Centering in CSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Python in Visual Studio Code – December 2020 Release
&lt;/h2&gt;

&lt;p&gt;🐍 A new release to VS Code Python support! They closed 13 issues and explain them in detail in this post.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/dObBbF9vs" rel="noopener noreferrer"&gt;Python in Visual Studio Code – December 2020 Release&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5 Common Mistakes Developers Do that Affect Page Load Time
&lt;/h2&gt;

&lt;p&gt;🚀 Delivering your application fast improves the user experience and conversion rate. These 5 tips will give you a kickstart to what you should optimize.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/gD9nq40ot" rel="noopener noreferrer"&gt;5 Common Mistakes Developers Do that Affect Page Load Time&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5 Big Lies Junior Programmers Are Told
&lt;/h2&gt;

&lt;p&gt;💬 The tech industry is full of myths. This article busts five of them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/h27Pf8llR" rel="noopener noreferrer"&gt;5 Big Lies Junior Programmers Are Told&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Wrap Up!
&lt;/h2&gt;

&lt;p&gt;That was all for this week. We will come back with another list of interesting development posts next week.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>codenewbie</category>
      <category>typescript</category>
      <category>css</category>
    </item>
    <item>
      <title>Server-Side-Rendering Renaissance</title>
      <dc:creator>Ido Shamun</dc:creator>
      <pubDate>Thu, 17 Dec 2020 13:53:34 +0000</pubDate>
      <link>https://dev.to/dailydotdev/server-side-rendering-renaissance-4h8p</link>
      <guid>https://dev.to/dailydotdev/server-side-rendering-renaissance-4h8p</guid>
      <description>&lt;p&gt;In the early days of the internet, web development was very straightforward. There was no JavaScript, which means no React or Vue, no endless debates. The only tool at our disposal for creating websites was HTML.&lt;br&gt;
To create dynamic websites, we had to generate the HTML dynamically in the server. This technique is called server-side-rendering (SSR). For example, upon a user request for a page, the server had to query the database and generate an HTML file and serve it to the client based on the results. Whenever the user navigates to a new page, the page is fully reloaded with the new HTML file. SSR as mentioned was the only way to build websites at the time.&lt;br&gt;
As the internet evolved, the need to create more complex websites increased. This led to introducing CSS and JavaScript. Together they were used to create dynamic websites that can react to user interactions.&lt;br&gt;
A singular point that changed web development forever is the invention of AJAX by Microsoft. AJAX provided a way to modify the DOM on the client-side and dispatch asynchronous HTTP requests back to the server. This opened the door to improve the performance of websites drastically. We no longer need to do a full reload to the page. We can dispatch a request and, based on the response, modify on the client-side the page. Today, AJAX requests are very popular, but at the time, this was innovative and revolutionary.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Birth of Single Page Applications
&lt;/h1&gt;

&lt;p&gt;In the search for improving the performance of the web, developers started to wonder if SSR can be replaced with a new technique that will be more performant. SSR's problem is that it delays the rendering of the whole page until all the required data is resolved. This means that the first paint might take a lot of time. Thanks to AJAX, we no longer need to load the page as a whole. We can load parts of it. With the essence of this concept and the frameworks at the time, such as Backbone, Ember, and Angular 1, the Single Page Application (SPA) was born. &lt;br&gt;
SPA takes care of everything on the client-side, this includes even routing. We can store all our assets in a CDN and deliver them to our users, with no need to dynamically generate a single HTML file. No matter what page the user requests, they will always get the same index.html file as a response.&lt;br&gt;
To provide data dynamically for the SPA, Web API was introduced. Web API consists of HTTP endpoints that only delivers data, usually in JSON format. Some modern implementation of Web API might follow the REST API convention or GraphQL. The SPA can send a request to any of these endpoints to receive the data it needs and modify the DOM accordingly.&lt;/p&gt;

&lt;h1&gt;
  
  
  Server-Side-Rendering 2.0
&lt;/h1&gt;

&lt;p&gt;Although single-page-applications seemed very promising, they sacrificed an important aspect of the web, which is SEO. Suddenly, search engines could not index the different pages of a SPA correctly. At the time, the search engine bots heavily relied on the meta tags in the HTML's head. And now, with SPA, the meta tags can only be set in the client because there's no server. Unfortunately, the bots didn't execute JavaScript, so the meta tags cannot be updated. Thus it caused the bots to misbehave on these sites. By now, the bots have evolved and some of them do execute JavaScript but it still not bullet-proof. It's worth noting that SEO is essential for the growth of many products, such as Stackoverflow and GitHub.&lt;br&gt;
This calls for a new solution that will combine the pros of both worlds of SSR and SPA. The hybrid model, or as I love to call it, SSR 2.0, delivers different HTML for every page but does not necessarily render everything on the server-side. You render only the bare minimum required for SEO and then let the client-side do the rest incrementally.&lt;br&gt;
Next.js is one of the frameworks that push server-side-rendering to the front line and keep innovating in this domain. Next.js made it more user-friendly to build a server-side-rendering application that follows the best practices of performance and includes a modern framework (React) inside.&lt;br&gt;
One of their latest inventions is called Incremental Static Generation (ISG). With ISG, you can render the page on the server and then cache it in the CDN so the following visitors will get it almost instantly. Of course, you could have done it before, but Next.js made it all so simple. Cache invalidation is one of the hardest problems to solve for a developer, and they do it for you. You can also set a cache policy. For example, refresh the page every 1 minute.&lt;br&gt;
When I migrated daily.dev from SSR to ISG, it dramatically increased the Lighthouse score. And it was super easy to do.&lt;br&gt;
ISG is an important step to make SSR applications much more performant and I believe it will be embraced by more SSR frameworks.&lt;/p&gt;

&lt;h1&gt;
  
  
  What's Next?
&lt;/h1&gt;

&lt;p&gt;The growing popularity of web development will not stop any time soon, which means new frameworks and techniques will emerge. If I read the map correctly, we're about to do a full cycle. We started with SSR, one application for both back-end and front-end. Followed by SPA, one application for the front-end, and another one for the Web API. And the next trend is going to be Zero-API, with no need for a dedicated application for Web API. This is what Ruby on Rails and Elixir Phoenix are all about. For some reason, this idea didn't penetrate the JavaScript community. But now it seems that it does, have a look at RedwoodJS and Blitz.js that would like to achieve exactly this.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&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%2Fi%2Fb996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>🔥 What's Hot in Web Development? — Weekly Picks #158</title>
      <dc:creator>Ido Shamun</dc:creator>
      <pubDate>Wed, 16 Dec 2020 11:55:34 +0000</pubDate>
      <link>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-158-2pij</link>
      <guid>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-158-2pij</guid>
      <description>&lt;p&gt;Every week we publish the top 10 popular posts on &lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This week's articles will help you move your development environment to the cloud, become a web developer, and learn cool new libraries.&lt;/p&gt;

&lt;p&gt;Shout out to all the authors 👏&lt;/p&gt;

&lt;h2&gt;
  
  
  10 Clean Coding Practices
&lt;/h2&gt;

&lt;p&gt;🏅 Clean Coding is all about readability. Help others or even your future-self to maintain this code you just wrote. Here 10 guidelines for you to follow.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/BKdmSXYnn" rel="noopener noreferrer"&gt;10 Clean Coding Practices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5 Things I Didn’t Know About JavaScript Operators
&lt;/h2&gt;

&lt;p&gt;📝 Mainly basic facts about operators but there are also some cool easter-eggs that you probably didn't know about some operators.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/UVgM9ieV1" rel="noopener noreferrer"&gt;5 Things I Didn’t Know About JavaScript Operators&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Create a crazy input interaction with lax.js. 🤪
&lt;/h2&gt;

&lt;p&gt;🤯 A walk-through with code-snippets to lax.js. A super cool library if you ask me.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/J05jJSYVU" rel="noopener noreferrer"&gt;Create a crazy input interaction with lax.js. 🤪&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Smaller, Faster, and Cheaper Coding Laptops via AWS
&lt;/h2&gt;

&lt;p&gt;☁️ A cost-efficient method to migrate your development environment to the cloud.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/pELZOJifW" rel="noopener noreferrer"&gt;Smaller, Faster, and Cheaper Coding Laptops via AWS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Don’t Choose Your Main Programming Language Before Reading This
&lt;/h2&gt;

&lt;p&gt;🤔 Overcoming the clickbait title, this article extracts some information from the StackOverflow's survey. The data is laid out nicely, not sure if this will help you to choose your next language.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/woSuHtQmd" rel="noopener noreferrer"&gt;Don’t Choose Your Main Programming Language Before Reading This&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why is Go overtaking Node.js?
&lt;/h2&gt;

&lt;p&gt;🆚 A slightly biased comparison of Go and Nodejs. It includes some aspects such as performance and development tools.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/eH6FYzecl" rel="noopener noreferrer"&gt;Why is Go overtaking Node.js?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Learned to Code and Built a Real Software Product in 6 Months
&lt;/h2&gt;

&lt;p&gt;🧙‍♂️ The journey of a 30-years-old guy that never wrote a line of code for building his first product. This post includes useful resources, courses, and tools.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/eG2quyzWV" rel="noopener noreferrer"&gt;How I Learned to Code and Built a Real Software Product in 6 Months&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Learn Web Development in 2021 - a Web Developer Roadmap
&lt;/h2&gt;

&lt;p&gt;🛣 A comprehensive roadmap for becoming a web developer. It includes 3 parts tools, languages, and libraries. Every step has a reference for a course or tutorial to learn from.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/GZHdeA7CJ" rel="noopener noreferrer"&gt;How to Learn Web Development in 2021 - a Web Developer Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Announcing Squoosh v2
&lt;/h2&gt;

&lt;p&gt;🗜 Squoosh is an image compression tool. The Chrome team just launched a new version with great new features and perks. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/Md8Q0t3CT" rel="noopener noreferrer"&gt;Announcing Squoosh v2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  GitHub Dark Mode is too Dark
&lt;/h2&gt;

&lt;p&gt;🌑 GitHub recently launched a dark mode but could it be too dark? Apparently, yes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/84fytGbH7f" rel="noopener noreferrer"&gt;GitHub Dark Mode is too Dark&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Wrap Up!
&lt;/h2&gt;

&lt;p&gt;That was all for this week. We will come back with another list of interesting development posts next week.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&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%2Fi%2Fb996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>🔥 What's Hot in Web Development? — Weekly Picks #157</title>
      <dc:creator>Ido Shamun</dc:creator>
      <pubDate>Wed, 09 Dec 2020 08:00:15 +0000</pubDate>
      <link>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-157-23gb</link>
      <guid>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-157-23gb</guid>
      <description>&lt;p&gt;Every week we publish the top 10 popular posts on &lt;a href="https://api.daily.dev/get?r=devto"&gt;daily.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This week we have articles about making money, optimizing our development environment, react tips and tricks, and many more.&lt;/p&gt;

&lt;p&gt;Shout out to all the authors 👏&lt;/p&gt;

&lt;h2&gt;
  
  
  A Better Way to Structure React Projects
&lt;/h2&gt;

&lt;p&gt;📦 The author proposes a new project structure that is based on a concept called Atomic Design. The new structure should be cleaner, scalable, and unified.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/pa5-ekMUs"&gt;A Better Way to Structure React Projects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A terminal-based workflow for research, writing, and programming
&lt;/h2&gt;

&lt;p&gt;🗒 Many devs never leave their terminal. They can accomplish any task using this tool solely. Jacob shares his tools and plugins to make your terminal experience so much better.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/hc3GUE6vZ"&gt;A terminal-based workflow for research, writing, and programming&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8 ways to make money as a developer
&lt;/h2&gt;

&lt;p&gt;💰 A YouTube video by Emma Bostian that covers ways to make money. Blogs, ebooks, YouTube, GitHub, courses, podcasts, conferences, and freelancing, she shares tips on all of them&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/xcAEnzna8"&gt;8 ways to make money as a developer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  UI Design Trend of 2021
&lt;/h2&gt;

&lt;p&gt;👩‍🎤 This is actually a guide to Glassmorphism and how to design it using Figma&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/grCyTo33H"&gt;UI Design Trend of 2021&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Mac setup for work 👩‍💻
&lt;/h2&gt;

&lt;p&gt;🖥 We always look for new tools to improve our computer setup. Maybe you can find here some.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/h8o3Rf9lSz"&gt;My Mac setup for work 👩‍💻&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Learn Dynamic Programming to Solve Coding Challenges
&lt;/h2&gt;

&lt;p&gt;👨‍🎓 freeCodeCamp released a new course and it's all about dynamic programming. Understanding dynamic programming can help you solve problems faster.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/cIwJZ3Hm-"&gt;Learn Dynamic Programming to Solve Coding Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dark Mode Is Not Enough! Here Is an Alternative…
&lt;/h2&gt;

&lt;p&gt;🎨 Learn to build multiple themes support for your React app. Because why do we have to settle on light and dark modes only? &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/-5Z2CLh6t"&gt;Dark Mode Is Not Enough! Here Is an Alternative…&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Build Beautiful Documentation Websites with Docusaurus
&lt;/h2&gt;

&lt;p&gt;📒 Docusaurus is an open-source tool by Facebook that generates documentation sites powered by React. Victoria guides you through your first steps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/GpUoKmI9N"&gt;Build Beautiful Documentation Websites with Docusaurus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  12 Best Alternatives To Angular, React and Vue
&lt;/h2&gt;

&lt;p&gt;🐣 Everyone heard about the well-known frameworks such as React. But this article puts the spotlight on the new or less popular frameworks. They might even be a better fit for your next project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/RBU6n2MPb"&gt;12 Best Alternatives To Angular, React and Vue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Microsite Showcasing Coding Fonts
&lt;/h2&gt;

&lt;p&gt;✏️ An open-source website that demonstrates different coding fonts. Built by Chris Coyer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/8NFeMpr0z"&gt;A Microsite Showcasing Coding Fonts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Wrap Up!
&lt;/h2&gt;

&lt;p&gt;That was all for this week. We will come back with another list of interesting development posts next week.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api.daily.dev/get?r=devto"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GnRWXIbg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>design</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Docker Compose: The Perfect Development Environment</title>
      <dc:creator>Ido Shamun</dc:creator>
      <pubDate>Fri, 04 Dec 2020 13:55:48 +0000</pubDate>
      <link>https://dev.to/dailydotdev/docker-compose-the-perfect-development-environment-o55</link>
      <guid>https://dev.to/dailydotdev/docker-compose-the-perfect-development-environment-o55</guid>
      <description>&lt;h1&gt;
  
  
  Local environments are complex
&lt;/h1&gt;

&lt;p&gt;Working on a full-scale project and keeping our local development environment up-to-date is definitely not a simple task! Today, microservices are all around, we write less code, but the environment gets more complex. Every service needs to connect to at least one database (if not more). It might also need other services to work properly. One might say that the staging environment is the solution to all our problems, but I beg to differ. Because every developer might need a different version of a given service to complete their work, or need to populate different values in the database.&lt;/p&gt;

&lt;p&gt;How can we keep track of these dependencies? How can we collaborate with our teammates on the correct settings? or share our work to set up the environment so others won't have to?&lt;/p&gt;

&lt;p&gt;Docker Compose to the rescue! 🦸‍♂️&lt;/p&gt;

&lt;h1&gt;
  
  
  What's Docker Compose anyway?
&lt;/h1&gt;

&lt;p&gt;Before jumping to Compose, we have to understand the containers revolution. Container is a standardized artifact for software packaging. The same container can be used for development, testing, and production. It doesn't matter what language or framework you use, containers can package everything. It's a technology that has been around for a long-time but Docker made it super easy for developers to build and use them.&lt;/p&gt;

&lt;p&gt;So Docker is a unified way to ship and run every service without having to install its runtime, OS dependencies, and libraries. And Compose is the glue that ties many containers together with a proper configuration, and infrastructure. It's a tool for defining and running multi-container Docker applications.&lt;/p&gt;

&lt;p&gt;Compose comes down to a single YAML file that we can add to our repository so others or even our future-self will easily get a local environment up and running as simple as running &lt;code&gt;docker-compose up -d&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Installing Docker Compose
&lt;/h1&gt;

&lt;p&gt;Mac users, if you have Docker Desktop For Mac installed, it comes bundled with Compose.&lt;br&gt;
Otherwise, install Docker Compose by following the &lt;a href="https://docs.docker.com/compose/install/" rel="noopener noreferrer"&gt;official guide&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Simple use-case
&lt;/h1&gt;

&lt;p&gt;Let's get down to the nitty-gritty! As an example, we have a NodeJS service that needs a PostgreSQL instance to store data. That's it, only one dependency.&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="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.1"&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;db_vol&lt;/span&gt;&lt;span class="pi"&gt;:&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;db&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="s"&gt;postgres:11.6-alpine&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;POSTGRES_DB=app&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;POSTGRES_PASSWORD=12345&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db_vol:/var/lib/postgresql/data&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;5432:5432"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how our Compose YAML file should look like. The convention is to save it in the root folder of our project under the name &lt;code&gt;docker-compose.yml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We first start by defining the schema version of this Docker Compose YAML schema. This way, Compose can keep backward compatibility with legacy schemas.&lt;/p&gt;

&lt;p&gt;Going directly to the services node (we'll come back to volumes later), we first have to name our dependency. In our case, we'll name it &lt;code&gt;db&lt;/code&gt;. It doesn't have any major impact, mostly for logging, networking, and reference purposes.&lt;/p&gt;

&lt;p&gt;Now, we need to choose an image for our service. Luckily the Docker community is so awesome that you can find any image you need. We'll proceed with the &lt;a href="https://hub.docker.com/_/postgres" rel="noopener noreferrer"&gt;official Postgres image&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Followed by setting environment variables for configuring our database. For a full list of variables, see the link above. In the example, we set the database name and default user password. Feel free to change it to whatever you would like, maybe a more secured password.&lt;/p&gt;

&lt;p&gt;Next, we would like to store the data of our database permanently. If not defined explicitly, the data will be cleaned whenever we shut the container down. The PostgreSQL data is stored in &lt;code&gt;/var/lib/postgresql/data&lt;/code&gt; in the container file-system. Using the &lt;code&gt;volumes&lt;/code&gt; property, we can bind this directory to a persistent volume that we defined before, &lt;code&gt;db_vol&lt;/code&gt;. Going back to the volumes node that we skipped, we define an empty object &lt;code&gt;db_vol&lt;/code&gt;. This tells Docker Compose that whatever we bind to &lt;code&gt;db_vol&lt;/code&gt; should be persisted between runs. In our case, it's Postgres data folder.&lt;/p&gt;

&lt;p&gt;Lastly, we need to expose ports so our NodeJS application can connect to the database. By default, Docker Compose creates a dedicated network adapter for service communication. Only ports that we ask to expose will be available to other networks. Here, we request to bind port 5432 (Postgres default port) in the dedicated network to port 5432 in localhost.&lt;/p&gt;

&lt;p&gt;Once the file is ready and Docker Compose is installed, we can run &lt;code&gt;docker-compose up&lt;/code&gt; in the root folder of our project. This will provision a Docker container for every service listed in the YAML file and create a dedicated network. We can add an argument to run it in the background &lt;code&gt;docker-compose up -d&lt;/code&gt;. If we're done, simply running &lt;code&gt;docker-compose down&lt;/code&gt; will shut down all the services.&lt;/p&gt;

&lt;p&gt;Now we have a PostgreSQL instance available for our local development with all the relevant configurations inside.&lt;/p&gt;

&lt;h1&gt;
  
  
  Advanced use-case
&lt;/h1&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="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.1"&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;db_vol&lt;/span&gt;&lt;span class="pi"&gt;:&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;db&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="s"&gt;postgres:11.6-alpine&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;POSTGRES_DB=app&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;POSTGRES_PASSWORD=12345&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db_vol:/var/lib/postgresql/data&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;5432:5432"&lt;/span&gt;
  &lt;span class="na"&gt;api&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="s"&gt;gcr.io/daily-ops/daily-api&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;db&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;3000:3000"&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;DATABASE_HOST=db&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PORT=3000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In real-life we might need more than just a database. For example, when building the front-end of our project, we need both a database and an API server. In this example, we instantiate two services. A database like before, and our API server that depends on the database. Like we did for the database, we name our service and define the image, ports, and environment variables. Not only that, but we want to let Compose know that our API depends on the db service. Compose can then prioritize the start-up order of every service. &lt;/p&gt;

&lt;p&gt;Remember the dedicated network that we talked about before? The cool thing is that every service can be referred with its name inside the network. See that we set the database host in the environment variables to be &lt;code&gt;db&lt;/code&gt;, which is the exact name of our database service. We don't need to mess with IP or a complex discovery system. It's as simple as the service name.&lt;/p&gt;

&lt;p&gt;That's it, now can run &lt;code&gt;docker-compose up&lt;/code&gt; to make sure we have all the services for our front-end development. We don't have to know anything about how to set-up exactly Postgres or the API server. This can be a very complex process, and it's all encapsulated by Docker Compose.&lt;/p&gt;

&lt;p&gt;And we're done! Now you can easily share your development environment with your teammates or open-source contributors with Docker Compose. 🤘&lt;/p&gt;

&lt;h1&gt;
  
  
  Useful links
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/install/" rel="noopener noreferrer"&gt;Installation guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/compose-file/" rel="noopener noreferrer"&gt;Compose file reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/" rel="noopener noreferrer"&gt;Docker Hub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&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%2Fi%2Fb996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>docker</category>
      <category>devops</category>
    </item>
    <item>
      <title>🔥 What's Hot in Web Development? — Weekly Picks #156</title>
      <dc:creator>Ido Shamun</dc:creator>
      <pubDate>Wed, 02 Dec 2020 15:02:43 +0000</pubDate>
      <link>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-156-50f2</link>
      <guid>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-156-50f2</guid>
      <description>&lt;p&gt;Every week we publish the top 10 popular posts on &lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This week features a lot of code newbies resources, AI bots, JavaScript quirks, and more.&lt;/p&gt;

&lt;p&gt;Shout out to all the authors 👏&lt;/p&gt;

&lt;h2&gt;
  
  
  This Person Does Not Exist
&lt;/h2&gt;

&lt;p&gt;🕵️‍♂️ This Person Does Not Exist is a website that generates faces of people that do not exist using AI. Barry raises some of the social concerns and potential abuse of such technology.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/1-HbnSxsj" rel="noopener noreferrer"&gt;This Person Does Not Exist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  10 Awesome Github Repos Every Web Developer Should Know
&lt;/h2&gt;

&lt;p&gt;😎 A list of GitHub repos for beginners to boost your web development knowledge. They're mostly theoretical and will help you to ace your next job interview.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/CLQHd-HYf" rel="noopener noreferrer"&gt;10 Awesome Github Repos Every Web Developer Should Know&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  10 Coding principles that no one will teach you
&lt;/h2&gt;

&lt;p&gt;🎩 I've seen many articles that list coding tips. But although this list targets data scientists, some of these principles are unique and can serve well any developer. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/KsvjKqG_x" rel="noopener noreferrer"&gt;10 Coding principles that no one will teach you&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Is {} &amp;gt; []?
&lt;/h2&gt;

&lt;p&gt;🤯 JavaScript has its quirks, we all love to find them. Every now and then there's a discovery. Here's the latest one that explains why {} is greater than []. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/mZGdy6kSU" rel="noopener noreferrer"&gt;Why Is {} &amp;gt; []?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  I made 100 high-quality illustrations, totally free. Use it anywhere without attribution.
&lt;/h2&gt;

&lt;p&gt;🎨 The title says it all. If you're looking for high-quality illustrations, check out this awesome resource.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/LJhrPtMz2" rel="noopener noreferrer"&gt;I made 100 high-quality illustrations, totally free. Use it anywhere without attribution.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Web Developer Roadmap for 2021
&lt;/h2&gt;

&lt;p&gt;🐣 If you're a code newbie or looking to get into web development, this is a great resource for you. It gives you references to topics you need to learn and in the exact order you have to learn it. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/IhBAMT5k9" rel="noopener noreferrer"&gt;Web Developer Roadmap for 2021&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stop Using "data" as a Variable Name
&lt;/h2&gt;

&lt;p&gt;✋ Unindicative names are all around, I often do it myself because it can so hard to name things. This article explains why it's so important to name correctly and gives you some tips.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/4k4FuG3aS" rel="noopener noreferrer"&gt;Stop Using "data" as a Variable Name&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building a Scalable API in Node
&lt;/h2&gt;

&lt;p&gt;🚀 An in-depth review including code snippets for building an API using NodeJS and TypeScript.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/jnqiL8VT7" rel="noopener noreferrer"&gt;Building a Scalable API in Node&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reveal.js: HTML presentation framework
&lt;/h2&gt;

&lt;p&gt;🎬 An incredible library for creating HTML-based presentations. Brilliant transitions combined with the flexibility of programming. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/qAXv9X9W5" rel="noopener noreferrer"&gt;Reveal.js: HTML presentation framework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How i automated my WhatsApp chats
&lt;/h2&gt;

&lt;p&gt;💬 Learn how to use the Python library, ChatterBot, to create a bot that impersonates you and reply to people on WhatsApp.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/KplLwZ7dZ" rel="noopener noreferrer"&gt;How i automated my WhatsApp chats&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Wrap Up!
&lt;/h2&gt;

&lt;p&gt;That was all for this week. We will come back with another list of interesting development posts next week.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&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%2Fi%2Fb996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>codenewbie</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>GraphQL Terminology - Cheatsheet</title>
      <dc:creator>Ido Shamun</dc:creator>
      <pubDate>Thu, 26 Nov 2020 14:11:47 +0000</pubDate>
      <link>https://dev.to/dailydotdev/graphql-terminology-cheatsheet-4lem</link>
      <guid>https://dev.to/dailydotdev/graphql-terminology-cheatsheet-4lem</guid>
      <description>&lt;p&gt;GraphQL is an API query language. Originally developed by Facebook, and now it's part of the Linux Foundation. It is used by giants like Facebook (duh... 😉), GitHub, and Pinterest. Its community is growing fast, and it's probably the most popular alternative to the good old REST.&lt;/p&gt;

&lt;p&gt;Practically, GraphQL is only a specification, and it has many implementations for different languages, JavaScript, Go, Elixir, Ruby, Java, Python, and more.&lt;/p&gt;

&lt;p&gt;In this article, I would like to explain the terms of GraphQL. Just like other specs, they had to come up with their own language and terms, so I'm here to the rescue.&lt;/p&gt;

&lt;p&gt;I'm not going to cover all the terms but only the most popular ones. The ones you're probably going to see when you build your very own GraphQL server or client.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type&lt;/strong&gt; - GraphQL is a type-based query language. As such, Type is the basic building block to model our domain. Just like in any other typed language such as Java, C#, and TypeScript. Every type consists of one or more fields.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Field&lt;/strong&gt; - A Field defines what data a given Type holds. Other languages might refer to it as property or getter. The only difference is that a field can also get arguments just like a function. This enables us to create complex logic for resolving the field.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Query&lt;/strong&gt; - A prebuilt type for querying our data. Every field in the Query type can be perceived as a query on its own. Think of it as a GET request in REST API. A Query field only returns data but doesn't change it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mutation&lt;/strong&gt; - A prebuilt type for manipulating our data. Every field in the Mutation type can be thought of as a POST/PUT/DELETE/PATCH request in REST API. A Mutation field can return data, but its primary purpose is to manipulate data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subscription&lt;/strong&gt; - A prebuilt type for describing real-time events the client can subscribe to. Every field is an event that the client can ask to receive updates in real-time. Think of it as a chat room that you receive all the new messages once you joined it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fragment&lt;/strong&gt; - A reusable unit for grouping together a set of fields often used in a Query, Mutation, or a Subscription. You can think of it as a View in a SQL database. If you find yourself querying for the same fields repeatedly in different queries, you can create a Fragment to encapsulate it. A Fragment can also get arguments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Directive&lt;/strong&gt; - Just like arguments, directives can be used to change a field's fulfillment. A directive can be attached to a field or fragment inclusion. The server has to implement the directive and what they will exactly do. The main concept is to create reusable logic to apply to the resolver of every field. For example, an authentication directive can drop a specific field if the request is not authenticated. The specs include two directives, which must be supported by any GraphQL server, include and skip.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema&lt;/strong&gt; - A document that defines our API. This is the essence of a GraphQL server. It defines the types, queries, mutations, subscriptions, directives, and everything that is needed. A schema is just a definition with no implementation. The schema can be written either in code or in GraphQL SDL (schema definition language).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SDL&lt;/strong&gt; (Schema Definition Language) - The language we use to define our GraphQL schema (see above).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code-first&lt;/strong&gt; - As mentioned above, you can either write your GraphQL schema programmatically or using the SDL. Code-first refers to the first, where the developer creates the schema in the programming language of its choice, for example, TypeScript. The GraphQL schema is then generated automatically by a script.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema-first&lt;/strong&gt; - The exact opposite of code-first. In schema-first, the developer writes the schema in SDL and only then writes the types and resolvers in its choice language. They can also use existing tools to generate it automatically from the schema rather than doing it manually.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resolver&lt;/strong&gt; - A server function that fulfills a request of a certain field. Usually, the first resolver to be called is the query/mutation resolver, followed by the resolver of every field returned in the response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AST&lt;/strong&gt; (Abstract Syntax Tree) - Every GraphQL request can be translated into a big nested tree object. AST is the binary representation for the text-based query. As soon as the server receives the query, it's compiled to an AST that can be used by the resolvers. The resolvers use it to determine what types to return, arguments, directives, and basically everything. AST is a generic concept in programming but can be seen a lot in advanced topics of GraphQL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; - A value that is passed to all the resolvers of the same request. Usually, the Context will hold information such as the authenticated user, database connection, and other shared data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema Federation&lt;/strong&gt; (Apollo Federation) - Today, everyone wants micro-projects, micro-frontend, and microservice. Schema Federation is the process of merging many GraphQL schemas while separating concerns. Each schema can refer to another service schema's types without worrying about the implementation. The references will be resolved at runtime by the Gateway. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gateway&lt;/strong&gt; - a smart GraphQL proxy. The Gateway uses schema federation to expose a single schema composed of at least one federated schema. Upon a request, the Gateway knows how to route split it between the services to fulfill it completely.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it. We made it! Now you can probably understand any GraphQL discussion or get started with your first GraphQL service. You know the fundamental terminology to get it going.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; is the easiest way to stay updated on the latest programming news. It's a feed of articles that's ranked by a community of +60,000 developers. Get the best content from the top tech publications on any topic you want. All in one extension.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&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%2Fi%2Ffuiu65dyow99idmn6e3e.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>graphql</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>🔥 What's Hot in Web Development? — Weekly Picks #155</title>
      <dc:creator>Ido Shamun</dc:creator>
      <pubDate>Wed, 25 Nov 2020 14:04:46 +0000</pubDate>
      <link>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-155-3ici</link>
      <guid>https://dev.to/dailydotdev/what-s-hot-in-web-development-weekly-picks-155-3ici</guid>
      <description>&lt;p&gt;Every week we publish the top 10 popular posts on &lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This week features tailwind 2.0 release, Layr introduction, console.log pro tips, and some inspirational codepens.&lt;/p&gt;

&lt;p&gt;Shout out to all the authors 👏&lt;/p&gt;

&lt;h2&gt;
  
  
  10 best JavaScript practices recommended by Top Developers
&lt;/h2&gt;

&lt;p&gt;🥇 This is one of the most viewed articles in our feed and for a good reason. These are fundamental tips for JavaScript developers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/JSid0ETm8" rel="noopener noreferrer"&gt;10 best JavaScript practices recommended by Top Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Perfect Dark Mode
&lt;/h2&gt;

&lt;p&gt;🌓 This article explains how to get rid of the common flickering issue when loading a website set to dark mode.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/XyWTMwwR9" rel="noopener noreferrer"&gt;The Perfect Dark Mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Top 7 Best Frontend Development Frameworks and When To Use Them
&lt;/h2&gt;

&lt;p&gt;🧨 A review of 7 frontend frameworks, such as React, Vue, Svelte, and Angular. I'm not highly convinced by the "when to use" part of each but it will definitely show the bigger picture of pros and cons.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/xkTeLjJL7" rel="noopener noreferrer"&gt;Top 7 Best Frontend Development Frameworks and When To Use Them&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  10 Inspiring Ideas for Your Next Front-End Project
&lt;/h2&gt;

&lt;p&gt;💡 10 legendary codepens that will leave your mouth wide open...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/4b_qyA6tf" rel="noopener noreferrer"&gt;10 Inspiring Ideas for Your Next Front-End Project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How We Build Our Design System
&lt;/h2&gt;

&lt;p&gt;🖍 A detailed explanation by Bit's co-founder about how they built their design system and used their very own product.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/abKuv9h1k" rel="noopener noreferrer"&gt;How We Build Our Design System&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Top Dev Tools in 2020
&lt;/h2&gt;

&lt;p&gt;🐧 Kisan shares his favorite development tools. Hint he loves Linux.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/t2L6-L-Dz" rel="noopener noreferrer"&gt;My Top Dev Tools in 2020&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use console.log() like a pro!
&lt;/h2&gt;

&lt;p&gt;📝 Developers have a love-hate relation with consle.log. But if you do use it, at least know all its features.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/NtP5hTSPd" rel="noopener noreferrer"&gt;Use console.log() like a pro!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Good Bye Web APIs
&lt;/h2&gt;

&lt;p&gt;👋 An introduction to Layr, a new framework for building web applications. Instead of relying on Web API, it uses an RPC library, called Deepr.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/sNUEBUeGy" rel="noopener noreferrer"&gt;Good Bye Web APIs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Improve your CSS with these 5 principles
&lt;/h2&gt;

&lt;p&gt;🆙 Adrian covers the fundamental CSS tips that will help you avoid the CSS specificity mess. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/mJv-H2doy" rel="noopener noreferrer"&gt;Improve your CSS with these 5 principles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tailwind V2 Released 🎉
&lt;/h2&gt;

&lt;p&gt;🥳 Tailwind 2.0 is here! Check out this review with everything you need to know about the latest release.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.daily.dev/posts/BBA8oz8MO" rel="noopener noreferrer"&gt;Tailwind V2 Released 🎉&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Wrap Up!
&lt;/h2&gt;

&lt;p&gt;That was all for this week. We will come back with another list of interesting development posts next week.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&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%2Fi%2Fb996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>css</category>
    </item>
  </channel>
</rss>
