<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Kristian Freeman</title>
    <description>The latest articles on Forem by Kristian Freeman (@signalnerve).</description>
    <link>https://forem.com/signalnerve</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%2F76064%2F158a3fb7-fce4-4a8f-947c-8ebb243db707.jpg</url>
      <title>Forem: Kristian Freeman</title>
      <link>https://forem.com/signalnerve</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/signalnerve"/>
    <language>en</language>
    <item>
      <title>Three ES6 JavaScript tricks you should know</title>
      <dc:creator>Kristian Freeman</dc:creator>
      <pubDate>Tue, 02 Mar 2021 15:00:00 +0000</pubDate>
      <link>https://forem.com/bytesizedcode/three-es6-javascript-tricks-you-should-know-3pnd</link>
      <guid>https://forem.com/bytesizedcode/three-es6-javascript-tricks-you-should-know-3pnd</guid>
      <description>&lt;p&gt;I've been watching a lot of "beginner programmer" videos on YouTube recently, trying to get back in the headspace of what it was like when I first learning code. One thing I realized while watching myself code is that I use a ton of ES6 trickery when writing JavaScript. ES6 is a term that JS programmers use to refer to the newer versions of JavaScript, which have a lot of syntax and usability improvements built into them.&lt;/p&gt;

&lt;p&gt;Many of the ES6 things that made their way into the language back in 2016 are common place now: if you've read JavaScript tutorials online, you probably know about &lt;code&gt;const&lt;/code&gt; and &lt;code&gt;let&lt;/code&gt; for variable definitions, or you've seen "arrow functions" for defining JavaScript functions with easier-to-grok scoping rules.&lt;/p&gt;

&lt;p&gt;There's a ton of great things in ES6 that make writing JavaScript so much easier: so much so that I forget sometimes I didn't &lt;em&gt;ever&lt;/em&gt; write JS like this. Let's dive into it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Destructuring objects and arrays
&lt;/h2&gt;

&lt;p&gt;Destructuring is my favorite ES6 JavaScript trick. When you work with APIs and complex data structures, whether objects or arrays, destructuring allows you to rapidly dive through them, defining new variables and renaming them as need be, without needing to write syntax like &lt;code&gt;data.response.user.name.first&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The destructuring syntax uses curly braces to &lt;em&gt;assign&lt;/em&gt; variables on the left-hand side of your JavaScript expression. In the below example, I set up the variable &lt;code&gt;data&lt;/code&gt;, setting the keys &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;age&lt;/code&gt;, and &lt;code&gt;location&lt;/code&gt;. In the second line, I use destructuring to assign three variables: &lt;code&gt;name&lt;/code&gt; set to the key &lt;code&gt;name&lt;/code&gt; inside of &lt;code&gt;data&lt;/code&gt;, &lt;code&gt;age&lt;/code&gt; set to the key &lt;code&gt;age&lt;/code&gt;, and &lt;code&gt;city&lt;/code&gt;, which I set to the key &lt;code&gt;location&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nt0vmHwQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/ES6-Object-Destructuring-----1-.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nt0vmHwQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/ES6-Object-Destructuring-----1-.png" alt="Three ES6 JavaScript tricks you should know"&gt;&lt;/a&gt;ES6 Object Destructuring&lt;/p&gt;

&lt;p&gt;That third variable is a neat trick: if I don't want to re-use the key name as my variable outside of the object, I can give it a new variable name, and then say &lt;em&gt;which&lt;/em&gt; key it should use to assign the variable. For instance, in the above example, I wrote &lt;code&gt;location: city&lt;/code&gt;, saying "set the variable &lt;code&gt;location&lt;/code&gt; to the value of the key &lt;code&gt;city&lt;/code&gt;, inside of &lt;code&gt;data&lt;/code&gt;".&lt;/p&gt;

&lt;p&gt;You can also use destructuring to get &lt;em&gt;nested data&lt;/em&gt;. Given the below example, you can dive into a key &lt;em&gt;inside&lt;/em&gt; of an object, and assign variables from the keys inside of that subsection of the object. In the below example, I'll look inside of the &lt;code&gt;name&lt;/code&gt; key in &lt;code&gt;data&lt;/code&gt;, which has an object as a value, and get the &lt;code&gt;first&lt;/code&gt; and &lt;code&gt;last&lt;/code&gt; keys from inside of it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rtFXv0pU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/Destructuring-nested-fields---.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rtFXv0pU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/Destructuring-nested-fields---.png" alt="Three ES6 JavaScript tricks you should know"&gt;&lt;/a&gt;Destructuring nested fields&lt;/p&gt;

&lt;p&gt;Arrays can also be destructured. This is particularly useful if you have a known order or structure to your arrays, allowing you to use the straight bracket array syntax to assign variables from inside the array. In the below example, I set up the array &lt;code&gt;people&lt;/code&gt;, and then assign the variables &lt;code&gt;me&lt;/code&gt; and &lt;code&gt;you&lt;/code&gt;, with &lt;code&gt;me&lt;/code&gt; corresponding to the first entry in the array, and &lt;code&gt;you&lt;/code&gt; to the second:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1nWrGSje--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/Destructuring-arrays---_--.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1nWrGSje--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/Destructuring-arrays---_--.png" alt="Three ES6 JavaScript tricks you should know"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notably, this syntax can be incredibly useful for &lt;em&gt;returning&lt;/em&gt; things as well. Given a function that requests data from the web, you may only want to return a certain number of fields. In the below example, I destructure a number of values from an API response, and then return them using a simple shorthand, where I skip setting a key/value pair if the key and the value are the same name. For instance, &lt;code&gt;{ error }&lt;/code&gt; instead of &lt;code&gt;{ error: error }&lt;/code&gt;, and &lt;code&gt;{ data }&lt;/code&gt; instead of &lt;code&gt;{ data: data }&lt;/code&gt;, as seen below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iEtiN8KX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/Syntax-shortcut-for-returning-from-functions.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iEtiN8KX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/Syntax-shortcut-for-returning-from-functions.png" alt="Three ES6 JavaScript tricks you should know"&gt;&lt;/a&gt;Syntax shortcut for returning from functions&lt;/p&gt;

&lt;h2&gt;
  
  
  Iterators
&lt;/h2&gt;

&lt;p&gt;Iterators allow you to loop through sets of data in JavaScript more effectively. Given a list of names in a &lt;code&gt;names&lt;/code&gt; array, you would traditionally loop through them and act on each item as you would in many languages: by setting a temporary variable, often called &lt;code&gt;i&lt;/code&gt; or something similar, and incrementing it as you loop through the array, stopping once you've reached the end:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mf3cCW9F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/Old-way-of-looping-in-JavaScript.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mf3cCW9F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/Old-way-of-looping-in-JavaScript.png" alt="Three ES6 JavaScript tricks you should know"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This style of iteration works, but in newer versions of ES6, we can optimize it in a few ways. The &lt;em&gt;for..in&lt;/em&gt; syntax allows you to skip incrementing a temporary variable and checking for the end of an array: just set a temporary variable and loop through the array, calling your temporary variable—JavaScript will stop executing the loop at the end of your array for you:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F0x4aLIR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/For..in-iteration.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F0x4aLIR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/For..in-iteration.png" alt="Three ES6 JavaScript tricks you should know"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is better, but the savvy readers among you might note that it still uses the &lt;em&gt;index&lt;/em&gt; of each item in the array for looking up the actual value. For instance, when the loop runs for the first time, &lt;code&gt;nameIndex&lt;/code&gt; will begin at &lt;code&gt;0&lt;/code&gt;, and if I were to &lt;code&gt;console.log(nameIndex)&lt;/code&gt;, I might expect to get &lt;code&gt;Fox Mulder&lt;/code&gt; back—instead, I'll just get 0.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;for..of&lt;/em&gt; syntax fixes this. Instead of referring to the index, &lt;em&gt;for..of&lt;/em&gt; skips it in favor of referencing the values directly. This means that we can simply loop through and &lt;code&gt;console.log&lt;/code&gt; a value &lt;code&gt;name&lt;/code&gt;, instead of &lt;code&gt;nameIndex&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bH-mA4Xy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/For..of-iteration.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bH-mA4Xy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/For..of-iteration.png" alt="Three ES6 JavaScript tricks you should know"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Spreads
&lt;/h2&gt;

&lt;p&gt;Another syntax-heavy trick, &lt;em&gt;spreads&lt;/em&gt; allow you to reference parts of an array or collection within a single variable.&lt;/p&gt;

&lt;p&gt;To see this in action, we can look back at our previous example, an array of &lt;code&gt;people&lt;/code&gt;. Given the addition of a &lt;em&gt;third&lt;/em&gt; person, with the name "Someone else", we can use the &lt;code&gt;...&lt;/code&gt; spread operator to destructure and capture everything besides the first value in the array. In the below example, we use it to set the variable &lt;code&gt;me&lt;/code&gt;, and then &lt;code&gt;otherPeople&lt;/code&gt;, an array of everything else in the array:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qCovnHxD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/Spreads---.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qCovnHxD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/Spreads---.png" alt="Three ES6 JavaScript tricks you should know"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also use the spread operator in functions. This is a really effective way to handle functions with an arbitrary number of arguments. In the below example, I'll use the spread operator to capture every argument into a &lt;code&gt;sumNumbers&lt;/code&gt; function, and loop through them to build a summed value:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9SfSNeQ_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/Summing-with-spreads--.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9SfSNeQ_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/03/Summing-with-spreads--.png" alt="Three ES6 JavaScript tricks you should know"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;What are some of your favorite ES6 tricks? This isn't an exhaustive look by any means at the incredible improvements that ES6 made to JavaScript—for that, you should check out &lt;a href="http://es6-features.org/"&gt;ES6 Features&lt;/a&gt;, a great website with usage examples for basically every feature ES6 added to the language.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FhlCOLej--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/EvaFk33WQAIv0XD.jpg" alt="unknown tweet media content"&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--EevkGsKo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1286084462988730368/SZ2xqxcr_normal.jpg" alt="Kristian profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Kristian
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/signalnerve"&gt;@signalnerve&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      What's your favorite ES6 trick? Mine is destructuring data outside of objects 🧠&lt;br&gt;&lt;br&gt;More on this in tomorrow's &lt;a href="https://t.co/b40HYJFJeX"&gt;bytesized.xyz&lt;/a&gt; newsletter 👀 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      16:34 PM - 01 Mar 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1366426538527326209" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1366426538527326209" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1366426538527326209" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
RT/like my ES6 Thread on Twitter ♥




</description>
      <category>javascript</category>
    </item>
    <item>
      <title>2021's best developer tool is your browser's address bar</title>
      <dc:creator>Kristian Freeman</dc:creator>
      <pubDate>Tue, 23 Feb 2021 15:15:00 +0000</pubDate>
      <link>https://forem.com/bytesizedcode/2021-s-best-developer-tool-is-your-browser-s-address-bar-20fa</link>
      <guid>https://forem.com/bytesizedcode/2021-s-best-developer-tool-is-your-browser-s-address-bar-20fa</guid>
      <description>&lt;p&gt;In this blog post and video, I'll be looking at tips for searching better online.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  DDG Bangs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://duckduckgo.com/"&gt;DuckDuckGo&lt;/a&gt; (DDG) is an alternative to Google, the biggest search engine in the world. &lt;strong&gt;DDG's Bangs feature is probably one of my favorite secret weapons in my day-to-day browsing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bang searches work using the &lt;code&gt;!&lt;/code&gt; symbol, and a shortcut for &lt;em&gt;what&lt;/em&gt; you want to search for. Let's start with a simple (and useful one) for developers: &lt;code&gt;!gh&lt;/code&gt; — searching on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;!gh react.js&lt;/code&gt; will take you directly to &lt;a href="https://github.com/search?utf8=%E2%9C%93&amp;amp;q=react.js"&gt;GitHub's search page for the term "react.js"&lt;/a&gt;, allowing you to find repos matching the term React.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DDG Bang searches turn your address bar into a &lt;em&gt;launcher&lt;/em&gt;.&lt;/strong&gt; Instead of being a simple search bar or a place to filter through your browser history, Bang searches are like having &lt;strong&gt;specific workflows for searching a thousand different websites&lt;/strong&gt; , constrained by your ability to find the right keyword (though a lot of the time, you can just guess).&lt;/p&gt;

&lt;p&gt;Here's some of my favorites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;!gh&lt;/code&gt;: GitHub&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;!yt&lt;/code&gt;: YouTube&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;!wiki&lt;/code&gt;: Wikipedia&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;!stackoverflow&lt;/code&gt;: StackOverflow&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;\test&lt;/code&gt; → I'm feeling lucky search for DDG&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Search operators
&lt;/h2&gt;

&lt;p&gt;Search operators, whether in Google, DuckDuckGo, or any search engine, have long been touted as "advanced" searching. You've probably seen some of these before, but some of the basics are worth exploring again, so you can refine your searches as much as possible.&lt;/p&gt;

&lt;p&gt;Search engines work by looking at what you're searching for, and trying to find matching terms in the content that it knows about. When I search for the term "javascript packages", search engines are trying to find content that it knows about the term "javascript packages", but also "javascript" and "packages" separately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exact match
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The &lt;em&gt;exact-match&lt;/em&gt; operator, which you can use by wrapping your search term in double quotes, searches &lt;em&gt;just&lt;/em&gt; for the exact text that you're looking for.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A great example of this is searching for error messages. Recently, my Ghost blog went down, and I saw the following error message in my logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MESSAGE: Worker initialization failure: EMFILE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Searching that term in Google returns 6.5k results. Searching the same term, &lt;a href="https://www.google.com/search?hl=en&amp;amp;ei=kcMmYO6aOYvNtQbOqK6ABA&amp;amp;q=%22MESSAGE%3A+Worker+initialization+failure%3A+EMFILE%22&amp;amp;oq=%22MESSAGE%3A+Worker+initialization+failure%3A+EMFILE%22&amp;amp;gs_lcp=Cgdnd3Mtd2l6EAM6BwgAEEcQsANQlJgCWPCdAmCxnwJoAnACeACAAT2IAacBkgEBM5gBAKABAaoBB2d3cy13aXrIAQjAAQE&amp;amp;sclient=gws-wiz&amp;amp;ved=0ahUKEwiup6bt9-TuAhWLZs0KHU6UC0AQ4dUDCA0&amp;amp;uact=5"&gt;wrapped in double quotes&lt;/a&gt;, as an exact-match search, returns just three results, all specifically related to the issue I ran into on my own blog:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"MESSAGE: Worker initialization failure: EMFILE"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Search by site
&lt;/h3&gt;

&lt;p&gt;Using my above example, I first did a general search for an error message, before ultimately using the &lt;em&gt;exact-match&lt;/em&gt; search to narrow my searches down to just three results.&lt;/p&gt;

&lt;p&gt;These three results look almost identical: one is from GitHub, and two are from gitMemory, which seems to be a mirror for GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bNMxQ01m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/02/Capture.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bNMxQ01m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/2021/02/Capture.png" alt="2021's best developer tool is your browser's address bar"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This sort of duplication is really common in searches, especially when there's a strong incentive to generate &lt;em&gt;a lot&lt;/em&gt; of content on your site for SEO (search engine optimization) purposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The &lt;code&gt;site:&lt;/code&gt; operator allows you to narrow your search results to a specific website.&lt;/strong&gt; In the above case, let's say I &lt;em&gt;just&lt;/em&gt; want to search for results from GitHub. Updating my search term to only search github.com will remove the two gitMemory results from my search:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;site:github.com "MESSAGE: Worker initialization failure: EMFILE"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Inclusion, exclusion, combination
&lt;/h3&gt;

&lt;p&gt;There's a few other search tricks you should know about that I'll run through quickly.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;AND&lt;/strong&gt; operator allows you to search for multiple terms &lt;em&gt;together&lt;/em&gt;. For instance, &lt;code&gt;python AND javascript&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;OR&lt;/strong&gt; operator allows you to search for either one term, another term, or both. For instance, &lt;code&gt;javascript OR typescript&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The parentheses operator allows you to group a certain part of your query into a separate section. This is useful when using the AND/OR operators above: if I'm searching for new form packages to use in my project, I could search &lt;code&gt;(javascript OR typescript) form packages&lt;/code&gt;, I could then see results for form packages in JavaScript or TypeScript.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;-exclude&lt;/code&gt; operator allows you to remove certain terms from your search. For instance, if I'm researching how best to do form validation in JavaScript, I may want to remove results from older websites in favor of more up-to-date results.&lt;/p&gt;

&lt;p&gt;Searching &lt;code&gt;form validation javascript&lt;/code&gt; returns the usual sites you'll always see in these searches — w3schools, tutorialspoint, and more — but filtering the search down to &lt;code&gt;form validation javascript -w3schools -tutorialspoint&lt;/code&gt; will remove both sites from the search results, and returns things like &lt;a href="https://www.freecodecamp.org/news/basic-form-validation-in-javascript/"&gt;a FreeCodeCamp article&lt;/a&gt; from January 2020, with more modern JavaScript syntax and a better implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shortcut URLs
&lt;/h2&gt;

&lt;p&gt;The recent explosion of new top-level domains (TLDs) has given rise to one particularly useful shortcut: &lt;code&gt;.new&lt;/code&gt; domains. These TLDs have been registered by a number of companies, including many developer tools, that let you jump quickly to new repositories, projects, documents, and more.&lt;/p&gt;

&lt;p&gt;Here's a list of some of my favorites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://repo.new"&gt;repo.new&lt;/a&gt; creates a new GitHub repository&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://story.new"&gt;story.new&lt;/a&gt; creates a new Medium story&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://docs.new"&gt;docs.new&lt;/a&gt; / &lt;a href="http://sheets.new"&gt;sheets.new&lt;/a&gt; / &lt;a href="http://slides.new"&gt;slides.new&lt;/a&gt; all create new things in the Google ecosystem — a new Google Doc, Google Sheet, or Google Slides presentation&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://pen.new"&gt;pen.new&lt;/a&gt; creates a new CodePen pen&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://js.new"&gt;js.new&lt;/a&gt; creates a new JavaScript project in CodeSandbox&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://canva.new"&gt;canva.new&lt;/a&gt; creates a new Canva artboart&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://link.new"&gt;link.new&lt;/a&gt; creates a new &lt;a href="http://bit.ly"&gt;Bit.ly&lt;/a&gt; link&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Handy sites
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/conwnet/github1s"&gt;GitHub1s&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;GitHub1s is a recent discovery I made via a great video from the codeSTACKr YouTube channel. It allows you to view any GitHub repository directly in VS Code, in your browser. I’m kinda amazed this works, and it’s super fast, too. Just change any GitHub repo URL in your browser (for instance, &lt;a href="https://github.com/signalnerve/lilredirector"&gt;signalnerve/lilredirector&lt;/a&gt;) to &lt;code&gt;github1s.com&lt;/code&gt;, and in just a few seconds, you’ll get a VS Code instance you can use to poke around the codebase.&lt;/p&gt;

&lt;p&gt;Just as a caveat, this project doesn’t appear to let you search &lt;em&gt;globally&lt;/em&gt; throughout the codebase using the File Finder (&lt;code&gt;Ctrl+p&lt;/code&gt;)  or using the Search function (&lt;code&gt;Ctrl+f&lt;/code&gt;) — instead, it appears to be constrained to whatever file you have open. This doesn’t make it immediately useful for discovering something in a new project, but this may be something that can be fixed in the future.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.jsdelivr.com/"&gt;jsDelivr&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;jsDelivr is a free CDN for open source code. It has the standard CDN-for-JS and CSS tricks: you can provide version numbers and files directly in the URL, and you can hotlink directly to jsDelivr to include things like jQuery or Tailwind CSS (see our Tailwind CSS guide) in your projects.&lt;/p&gt;

&lt;p&gt;jsDelivr’s underrated feature is &lt;em&gt;GitHub integration&lt;/em&gt;. A few years ago, there was a great project called RawGit, which allowed you to hotlink directly to GitHub projects or files in your codebase. It effectively made GitHub a free (and easy-to-use) storage service for your projects. As you might imagine, it became expensive to run as it got more popular, and it eventually shut down.&lt;/p&gt;

&lt;p&gt;Since jsDelivr is already a CDN, adding support for hotlinking your GitHub files turns out to be a pretty trivial addition. jsDelivr supports linking to GitHub by using the &lt;code&gt;/gh/user/repo@tag/file-path&lt;/code&gt; syntax, as seen below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://cdn.jsdelivr.net/gh/jquery/jquery@3.2.1/dist/jquery.min.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another great feature of jsDelivr is the directory UI. By simply going to &lt;code&gt;/gh/user/repo/&lt;/code&gt; (omitting the &lt;code&gt;tag&lt;/code&gt; and &lt;code&gt;file-path&lt;/code&gt;), you can see a complete directory structure for the project, allowing you to click around, and ultimately select a file for inclusion in your project. For an example of this, check out my lilredirector repo &lt;a href="https://cdn.jsdelivr.net/gh/signalnerve/lilredirector/"&gt;inside of jsDelivr&lt;/a&gt; — clicking any of the files will give you a versioned and ready-to-use link that you could import into your project.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Everything you need to know to get started with Tailwind CSS, the utility-first CSS framework 🍃</title>
      <dc:creator>Kristian Freeman</dc:creator>
      <pubDate>Tue, 02 Feb 2021 15:00:00 +0000</pubDate>
      <link>https://forem.com/bytesizedcode/everything-you-need-to-know-to-get-started-with-tailwind-css-the-utility-first-css-framework-2fpj</link>
      <guid>https://forem.com/bytesizedcode/everything-you-need-to-know-to-get-started-with-tailwind-css-the-utility-first-css-framework-2fpj</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eUE_Fyo6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://www.bytesized.xyz/content/images/size/w2000/2021/02/blocks-1.gif" class="article-body-image-wrapper"&gt;&lt;img alt="Feature image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--eUE_Fyo6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://www.bytesized.xyz/content/images/size/w2000/2021/02/blocks-1.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bytesized is a weekly newsletter covering important ideas for developers. &lt;a href="https://www.bytesized.xyz"&gt;Join 4,000+ developers who get our newsletter in their inbox every week ➝&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tailwindcss.com/"&gt;Tailwind&lt;/a&gt; is a utility-first CSS framework. Unlike comprehensive frameworks like &lt;a href="https://getbootstrap.com/"&gt;Bootstrap&lt;/a&gt; or &lt;a href="https://get.foundation/"&gt;Foundation&lt;/a&gt;, which provide solutions for things like &lt;em&gt;cards&lt;/em&gt;, &lt;em&gt;forms&lt;/em&gt;, and &lt;em&gt;buttons&lt;/em&gt;, Tailwind allows you to &lt;em&gt;compose&lt;/em&gt; your UI out of smaller classes: for instance, the &lt;code&gt;p-4&lt;/code&gt; class applies a padding of &lt;code&gt;1rem&lt;/code&gt;, and the &lt;code&gt;flex&lt;/code&gt; class sets up a basic flexbox layout by setting &lt;code&gt;display: flex&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Tailwind offers a &lt;em&gt;very&lt;/em&gt; different approach to writing CSS. That approach is controversial (more on that later), but for the most part, many developers find moving to a utility-first CSS framework makes it easier to &lt;em&gt;own&lt;/em&gt; your CSS, instead of working under the constraints of CSS that's given to you.&lt;/p&gt;

&lt;p&gt;Let's look at Tailwind from a few angles – first, a few video introductions to Tailwind, templates and starter kits, tools and cheat sheets, and some deep dives into the &lt;em&gt;how&lt;/em&gt; and the &lt;em&gt;why&lt;/em&gt; of Tailwind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Video introductions to Tailwind
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=6zIuAyLZPH0&amp;amp;feature=emb_title"&gt;Get started with Tailwind CSS in 15 Minutes&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Chris on Code's 15 minute intro to Tailwind covers why it matters, how it works, and how to build your first few components with it. Check out Chris' &lt;a href="https://beginnertailwind.com/"&gt;Beginner Tailwind course&lt;/a&gt; if you dig his teaching style and want to go more in depth with Tailwind, too!&lt;/p&gt;

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

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=_JhTaENzfZQ"&gt;Building interfaces with Tailwind CSS&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/adamwathan"&gt;Adam Wathan&lt;/a&gt;, creator of Tailwind CSS, shows off the framework by recreating Netlify using 100% Tailwind classes. It's a really great lesson in breaking down existing designs and building them back up with simple CSS primitives, and the entire series (linked as part of the video) covers rebuilds of drastically different layouts and page styles using just Tailwind. Must-watch!&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Templates and starter kits
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://tailwindui.com"&gt;Tailwind UI&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Tailwind UI is a commercial product built by the Tailwind Labs team (comprised of the Tailwind creators and engineering team), showcasing beautiful component and page layouts directly using Tailwind. An interesting development of Tailwind UI is how often it seems to contribute new features or directions back to Tailwind, the open-source framework: if you want to support the development of Tailwind UI, buying the UI library is a great place to start.&lt;/p&gt;

&lt;p&gt;Looking for an intro to Tailwind UI itself? &lt;a href="https://www.youtube.com/watch?v=quhvuOTlrwA"&gt;This video&lt;/a&gt; on our YouTube channel covers Tailwind UI and how to get started with it, by adding it to an existing web app.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://tailwindcomponents.com"&gt;Tailwind Components&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Tailwind Components is a free, open-source collection of community contributed components for Tailwind. If you have designs or layout ideas that aren't covered in Tailwind UI, or you can't afford Tailwind UI, this could be a great solution for filling in the gaps.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.tailwindtoolbox.com"&gt;Tailwind Toolbox&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Tailwind Toolbox provides a different approach to Tailwind starter kits by giving you full-on templates to get started with the framework. Things like landing pages, admin dashboards, and smaller components like modals, accordions, and responsive tables are all covered, and available for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools and cheat sheets
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://play.tailwindcss.com/"&gt;Tailwind Play&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Tailwind Play is Tailwind's official online playground for the framework. Experiment with layouts and configurations and try out new designs in real-time, using the most up-to-date version of the framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/scottw/tailwind-css-cheat-sheet-1mpj-temp-slug-7686329"&gt;Tailwind Cheat Sheet&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Jay Elaraj's cheat sheet is a great interactive site for looking at all of the classes and properties exposed by Tailwind, allowing you to search and dive directly into the corresponding docs for anything in the framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/aniftyco/awesome-tailwindcss"&gt;awesome-tailwindcss&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This GitHub repo is a collection of tutorials, starter kits, open-source projects, and basically &lt;em&gt;anything&lt;/em&gt; built with or about Tailwind CSS. It's open-source, and you can contribute to it yourself, so if you find a missing resource, make sure to add it!&lt;/p&gt;

&lt;h2&gt;
  
  
  How and why it works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://adamwathan.me/css-utility-classes-and-separation-of-concerns/"&gt;CSS Utility Classes and "Separation of Concerns"&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Adam Wathan's original post on Tailwind CSS, where he first announced the framework, also serves as a great introduction to the &lt;em&gt;why&lt;/em&gt; of CSS utility frameworks. In the post, he argues that CSS utility class frameworks offer better consistency, less premature abstractions, and more consistent designs:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My experience is that building things utility-first leads to &lt;em&gt;more&lt;/em&gt; consistent looking designs than working component-first, as unintuitive as it might sound at first.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.swyx.io/why-tailwind/"&gt;Why Tailwind CSS&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Shawn Wang writes on why he changed his mind about Tailwind CSS:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I'm not a Tailwind shill. I'm a &lt;a href="https://www.swyx.io/guo-lai-ren/"&gt;Guo Lai Ren&lt;/a&gt; - someone who has changed their mind on it recently and am a happy user despite acknowledged tradeoffs. "Crossover people" can often be more persuasive to skeptics than born-and-bred believers. So I hope to contribute my perspective to the discussion, if you are open to it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/godspowercuche/why-tailwind-isn-t-for-me-2hl5-temp-slug-2473530"&gt;Why Tailwind Isn't for Me&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;For a contrary point of view, check out Jared White's blog post about his experience with Tailwind, and why he thinks it's the wrong direction for CSS on the web:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I've gotten into more than one heated argument on the interwebs lately over Tailwind CSS. I'm not proud of this. I don't like being at odds with anybody. I think the folks building Tailwind are talented and nice people. But at a pure technical level, I simply don't like Tailwind. Whoever it was built for, &lt;strong&gt;it was not built for me&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Liked this issue? Check out last month's Bytesized newsletters, in case you missed them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.bytesized.xyz/8-vscode/"&gt;14 Great VSCode Resources - Dev Setups, Quickstart Videos, Courses, and Deep Dives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bytesized.xyz/9-vim/"&gt;Here's what you need to learn and master Vim, the modal text editor 🤸‍♀️&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bytesized.xyz/10-emacs/"&gt;How to start using Emacs, the programmer's editor 🤓&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bytesized.xyz/tools-for-thought/"&gt;What could we build with better tools for thought? 📝&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See you next week!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bytesized is a weekly newsletter exploring important ideas for developers. Join us on &lt;a href="https://click.convertkit-mail4.com/27uw4zlz0xb9u42d37s3/dphehmuqzv2w56fm/aHR0cHM6Ly93d3cuYnl0ZXNpemVkLnh5ei9kaXNjb3Jk"&gt;our Discord server&lt;/a&gt; 👋&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tailwindcss</category>
      <category>newsletter</category>
      <category>news</category>
    </item>
    <item>
      <title>Here's what you need to learn and master Vim, the modal text editor 🤸‍♀️</title>
      <dc:creator>Kristian Freeman</dc:creator>
      <pubDate>Wed, 13 Jan 2021 15:22:34 +0000</pubDate>
      <link>https://forem.com/bytesizedcode/here-s-what-you-need-to-learn-and-master-vim-the-modal-text-editor-31po</link>
      <guid>https://forem.com/bytesizedcode/here-s-what-you-need-to-learn-and-master-vim-the-modal-text-editor-31po</guid>
      <description>&lt;p&gt;&lt;em&gt;Bytesized is a weekly newsletter covering important ideas for developers. &lt;a href="https://www.bytesized.xyz"&gt;Join 4,000+ developers who get our newsletter in their inbox every week ➝&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Vim (Vi IMproved) was first released in 1991 by &lt;a href="https://www.moolenaar.net/"&gt;Bram Moolenaar&lt;/a&gt;. It started as a clone of &lt;code&gt;vi&lt;/code&gt;, a Unix text editor initially released in 1976.&lt;/p&gt;

&lt;p&gt;Vim (and Vi) are modal text editors: they have contextual "modes" that allow you to interact with the text in your file in different ways. Vim has modes for different situations – &lt;code&gt;insert&lt;/code&gt; for when you're writing text, &lt;code&gt;visual&lt;/code&gt; for selecting text and manipulating it, &lt;code&gt;normal&lt;/code&gt; for navigating through your document, and many more for ancillary situations. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://wincent.com/wiki/Modal_editor"&gt;Here's Greg Hurrell on modal text editors:&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A modal text editor is a, nowadays rare, text editor that offers multiple interaction modes which are optimized for specific types of action and interaction. The rationale is that each mode is a finely-tuned tool which allows the user to realize their objectives in an efficient and powerful manner. This does require more learning than you might be accustomed to as a user of a non-modal editor, but the reward is hopefully increased efficiency and power.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DXEHgb1H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/size/w1000/2021/01/vim.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DXEHgb1H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.bytesized.xyz/content/images/size/w1000/2021/01/vim.png" alt="Vim"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.bytesized.xyz/8-vscode/"&gt;Last week, we looked at the most popular editor in the world, VSCode.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our focus was on &lt;em&gt;productivity&lt;/em&gt; – most readers of Bytesized probably know of VSCode, and are probably using it. &lt;/p&gt;

&lt;p&gt;The same generally can't be said of Vim: only &lt;a href="https://insights.stackoverflow.com/survey/2019#development-environments-and-tools"&gt;25% of people surveyed in Stack Overflow's 2019 Developer Survey&lt;/a&gt; use Vim, and it has a notoriously hard learning curve.&lt;/p&gt;

&lt;p&gt;I've used Vim for almost a decade, and even if I'm not in Vim every day, the concepts of modal editing and keyboard-based navigation have transferred over into everything I do on the computer. Learning Vim is worth doing! &lt;/p&gt;

&lt;p&gt;In this edition of &lt;a href="https://www.bytesized.xyz"&gt;the Bytesized newsletter&lt;/a&gt;, I'll cover both how to learn Vim, by going through some great tutorials and long-form pieces on how to think about modal editing, as well as some batteries-included configurations and plugins to have a great setup quickly. The Vim ecosystem is incredibly active and there's a ton of great developer experience improvements to be made over Vim's default setup as well, so if you're using Vim, you'll still get a ton out of this newsletter. Let's dig in!&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn Vim, fast
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://medium.com/actualize-network/how-to-learn-vim-a-four-week-plan-cd8b376a9b85"&gt;How to Learn Vim: A Four Week Plan&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Peter Jang offers a structured four-week plan to learn the fundamentals of Vim:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Week 1: Complete vimtutor once a day, every day&lt;/li&gt;
&lt;li&gt;Week 2: Use Vim with minimal config, no plugins&lt;/li&gt;
&lt;li&gt;Week 3: Use Vim with minimal plugins&lt;/li&gt;
&lt;li&gt;Week 4: Compose Vim commands with verbs and nouns&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://vimtricks.com/"&gt;VimTricks – weekly tips, tricks, guides, plugins, videos, screencasts, and more – all about Vim&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;VimTricks is a newsletter covering Vim tricks and plugins. Each week, you get a new Vim command, tip, or hack on how to work inside of Vim more effectively. Even if I'm not using Vim and I'm experimenting with a new editor or tool, I still try to catch up with VimTricks every week – it's a great read!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://danielmiessler.com/study/vim/"&gt;Learn Vim For the Last Time: A Tutorial and Primer&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Daniel Missler's blog has a comprehensive (and up-to-date) reference to Vim, covering both the basics – working with files, changing/deleting text, etc., and more advanced topics, like repeating commands, macros. Of particular note is the section on Vim's &lt;em&gt;editing language&lt;/em&gt; – see the video "Mastering the Vim Language" later in the newsletter for more on this.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.vim.so/"&gt;vim.so: Learn and Master Vim faster with interactive exercises&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Kenneth Cassel is building an interactive online Vim course that's available for just $8 at an early-bird discount.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instant configurations
&lt;/h2&gt;

&lt;p&gt;A huge part of Vim's culture is &lt;em&gt;sharing your configuration&lt;/em&gt;. The rise of GitHub has made this super easy: there's a ton of batteries-included Vim configurations that you can install in minutes to completely change (and hopefully enhance) your Vim workflow. Here's some of the more popular ones:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/amix"&gt;
        amix
      &lt;/a&gt; / &lt;a href="https://github.com/amix/vimrc"&gt;
        vimrc
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The ultimate Vim configuration (vimrc)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/e03f7a8f2be49765f1a5ba44604465dea3e7e34322be491fb9d65112fd37e363/68747470733a2f2f646e70347065686b766f6f366e2e636c6f756466726f6e742e6e65742f34336335616635393762643563316136346562313832396630313163323038662f61732f556c74696d61746525323056696d72632e737667"&gt;&lt;img src="https://camo.githubusercontent.com/e03f7a8f2be49765f1a5ba44604465dea3e7e34322be491fb9d65112fd37e363/68747470733a2f2f646e70347065686b766f6f366e2e636c6f756466726f6e742e6e65742f34336335616635393762643563316136346562313832396630313163323038662f61732f556c74696d61746525323056696d72632e737667" alt="VIM"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
The Ultimate vimrc&lt;/h1&gt;
&lt;p&gt;Over the last 10 years, I have used and tweaked Vim. This configuration is the ultimate vimrc (or at least my version of it).&lt;/p&gt;
&lt;p&gt;There are two versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Basic&lt;/strong&gt;: If you want something small just copy &lt;a href="https://github.com/amix/vimrc/blob/master/vimrcs/basic.vim"&gt;basic.vim&lt;/a&gt; into your ~/.vimrc and you will have a good basic setup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Awesome&lt;/strong&gt;: Includes a ton of useful plugins, color schemes, and configurations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I would, of course, recommend using the awesome version.&lt;/p&gt;
&lt;h2&gt;
How to install the Awesome version?&lt;/h2&gt;
&lt;h3&gt;
Install for your own user only&lt;/h3&gt;
&lt;p&gt;The awesome version includes a lot of great plugins, configurations and color schemes that make Vim a lot better. To install it simply do following from your terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_awesome_vimrc.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;
Install for multiple users&lt;/h3&gt;
&lt;p&gt;To install for multiple users, the repository needs to be cloned to a location accessible for all the intended users.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone --depth=1 https://github.com/amix/vimrc.git&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/amix/vimrc"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SpaceVim"&gt;
        SpaceVim
      &lt;/a&gt; / &lt;a href="https://github.com/SpaceVim/SpaceVim"&gt;
        SpaceVim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A community-driven modular vim distribution - The ultimate vim configuration
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://spacevim.org" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/6ee52ffc9db0bd1bd5514f8523a7da1ba319fb40338750f3ffd3159d2e50fc29/68747470733a2f2f737061636576696d2e6f72672f6c6f676f2e706e67" alt="SpaceVim"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/SpaceVim/SpaceVim/wiki"&gt;Wiki&lt;/a&gt; |
&lt;a href="https://spacevim.org/community/" rel="nofollow"&gt;Community&lt;/a&gt; |
&lt;a href="https://spacevim.org/sponsors/" rel="nofollow"&gt;Sponsors&lt;/a&gt; |
&lt;a href="https://twitter.com/SpaceVim" rel="nofollow"&gt;Twitter&lt;/a&gt; |
&lt;a href="https://gitter.im/SpaceVim/SpaceVim" rel="nofollow"&gt;Gitter &lt;strong&gt;Chat&lt;/strong&gt;&lt;/a&gt; |
&lt;a href="https://spacevim.org/cn/" rel="nofollow"&gt;中文官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://travis-ci.org/SpaceVim/SpaceVim" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/b1adabd9312b1c10d8d2fd77cdf91ddf3a0be8d952e6c8f75bc12d505f2d155c/68747470733a2f2f7472617669732d63692e6f72672f537061636556696d2f537061636556696d2e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="https://ci.appveyor.com/project/wsdjeg/spacevim/branch/master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/f2718657714be923388060006b11559c41db3557a025a632981a8b536d3e8f28/68747470733a2f2f63692e6170707665796f722e636f6d2f6170692f70726f6a656374732f7374617475732f65683374356f706837306162703636352f6272616e63682f6d61737465723f7376673d74727565" alt="Build status"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/SpaceVim/SpaceVim/branch/master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/944d0ab9ed5ef880b1d2faba509e3d9833241d2f1544ebcc5f50b687d45799f9/68747470733a2f2f636f6465636f762e696f2f67682f537061636556696d2f537061636556696d2f6272616e63682f6d61737465722f67726170682f62616467652e737667" alt="codecov"&gt;&lt;/a&gt;
&lt;a href="https://hub.docker.com/r/spacevim/spacevim/" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/2ff47b543c6499203a89f84aa736370c6d844fd1a2fced6f9a8fe140257c0caf/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f6275696c642f737061636576696d2f737061636576696d2e737667" alt="Docker Build Status"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/70f46be7ad64f947bfea1c89cefef6d7cf5cb249bad1311cb82b26a08e47d04b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d312e372e302d2d6465762d3837303046462e737667"&gt;&lt;img src="https://camo.githubusercontent.com/70f46be7ad64f947bfea1c89cefef6d7cf5cb249bad1311cb82b26a08e47d04b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d312e372e302d2d6465762d3837303046462e737667" alt="Version"&gt;&lt;/a&gt;
&lt;a href="https://raw.githubusercontent.com/SpaceVim/SpaceVim/master/LICENSE"&gt;&lt;img src="https://camo.githubusercontent.com/0b6758422f85bc2599288b346c7de30c6b7b217112c0a877ae4b25a7009722e4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d47504c76332d626c75652e737667" alt="GPLv3 License"&gt;&lt;/a&gt;
&lt;a href="https://raw.githubusercontent.com/SpaceVim/SpaceVim/master/doc/SpaceVim.txt"&gt;&lt;img src="https://camo.githubusercontent.com/62ca7fd2a2f72420c0ca6e1179824c3cc0570578df5bf48ccb7836a067ad643a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f632d25334168253230537061636556696d2d6f72616e67652e737667" alt="Doc"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://user-images.githubusercontent.com/13142418/103414298-5e1da980-4bb8-11eb-96bc-b2e118f672b5.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y9zrnC9G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/13142418/103414298-5e1da980-4bb8-11eb-96bc-b2e118f672b5.png" alt="welcome page"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://spacevim.org/" rel="nofollow"&gt;SpaceVim&lt;/a&gt; is a community-driven modular Vim distribution. It manages collections
of plugins in layers, which help to collect related packages together to provide IDE-like features.&lt;/p&gt;
&lt;p&gt;The last release is &lt;a href="https://spacevim.org/SpaceVim-release-v1.6.0/" rel="nofollow"&gt;v1.6.0&lt;/a&gt;, check out &lt;a href="https://github.com/SpaceVim/SpaceVim/wiki/Following-HEAD"&gt;following-HEAD&lt;/a&gt; page for what happened since last release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;See the followings below for more information:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://spacevim.org/quick-start-guide/" rel="nofollow"&gt;Quick Start Guide&lt;/a&gt;: A simple guide for Beginners.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://spacevim.org/documentation/" rel="nofollow"&gt;Documentation&lt;/a&gt;: The full documentation about using SpaceVim.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://spacevim.org/layers/" rel="nofollow"&gt;Available Layers&lt;/a&gt;: A list of all available layers included in SpaceVim.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Support SpaceVim&lt;/h2&gt;
&lt;p&gt;This project exists thanks to all the people who &lt;a href="https://raw.githubusercontent.com/SpaceVim/SpaceVim/master/CONTRIBUTING.md"&gt;contributed&lt;/a&gt;
We are thankful for any contributions from the community.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/SpaceVim/SpaceVim/graphs/contributors"&gt;&lt;img src="https://camo.githubusercontent.com/ff524ba89784ac66820df6dd8733ae7f153bfda1d52069a24a8aeeb6c2cfaf04/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f737061636576696d2f636f6e7472696275746f72732e7376673f77696474683d38393026627574746f6e3d66616c7365"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The best way to support SpaceVim is to contribute to it either by reporting bugs
Helping the community on the &lt;a href="https://gitter.im/SpaceVim/SpaceVim" rel="nofollow"&gt;Gitter Chat&lt;/a&gt; or sending pull requests.&lt;/p&gt;
&lt;p&gt;For more information please check our &lt;a href="https://spacevim.org/development/" rel="nofollow"&gt;development guidelines&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you use SpaceVim…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SpaceVim/SpaceVim"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/spf13"&gt;
        spf13
      &lt;/a&gt; / &lt;a href="https://github.com/spf13/spf13-vim"&gt;
        spf13-vim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The ultimate vim distribution
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="markdown"&gt;
&lt;h1&gt;
spf13-vim : Steve Francia's Vim Distribution&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;                __ _ _____              _
     ___ _ __  / _/ |___ /      __   __(_)_ __ ___
    / __| '_ \| |_| | |_ \ _____\ \ / /| | '_ ` _ \
    \__ \ |_) |  _| |___) |_____|\ V / | | | | | | |
    |___/ .__/|_| |_|____/        \_/  |_|_| |_| |_|
        |_|
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;spf13-vim is a distribution of vim plugins and resources for Vim, Gvim and &lt;a href="http://code.google.com/p/macvim/" rel="nofollow"&gt;MacVim&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It is a good starting point for anyone intending to use VIM for development running equally well on Windows, Linux, *nix and Mac.&lt;/p&gt;
&lt;p&gt;The distribution is completely customisable using a &lt;code&gt;~/.vimrc.local&lt;/code&gt;, &lt;code&gt;~/.vimrc.bundles.local&lt;/code&gt;, and &lt;code&gt;~/.vimrc.before.local&lt;/code&gt; Vim RC files.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/7f32abb0894de4dfb9bd32885a56d147c804916f1ba98ca4bb39b637533f4ea7/68747470733a2f2f692e696d6775722e636f6d2f554b546f592e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/7f32abb0894de4dfb9bd32885a56d147c804916f1ba98ca4bb39b637533f4ea7/68747470733a2f2f692e696d6775722e636f6d2f554b546f592e706e67" alt="spf13-vim image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Unlike traditional VIM plugin structure, which similar to UNIX throws all files into common directories, making updating or disabling plugins a real mess, spf13-vim 3 uses the &lt;a href="https://github.com/gmarik/vundle"&gt;Vundle&lt;/a&gt; plugin management system to have a…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/spf13/spf13-vim"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Watch Vim in action
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=gnupOrSEikQ"&gt;How to Configure Vim like VSCode&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Ben Awad covers his configuration to setup Vim like VSCode, including a file explorer, type-ahead suggestions, and more.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=zF9EcpYb1KE"&gt;THE PERFECT VIM CONFIGURATION&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Sebastian Karlsson dives into his &lt;code&gt;.vimrc&lt;/code&gt; (the Vim configuration file), how it works, and how to install it for yourself.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=wlR5gYd6um0"&gt;Mastering the Vim Language&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Chris Toomey covers Vim's editor language – a dense mapping of text objects, nouns, and verbs – that allow you to think about inserting and editing text in a way that many other editors simply can't do.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=PoHLO-b_TxA"&gt;What is Neovim, and why should you care?&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://neovim.io/"&gt;Neovim&lt;/a&gt; is an open-source project to modernize Vim and Vim's modal editing for a new generation of programmers. In this video, the MinuteVimTricks YouTube channel covers why Neovim matters for Vim developers, and why it may be worth switching to.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  My favorite plugins
&lt;/h2&gt;

&lt;p&gt;Like I said at the beginning of the email, I've been using Vim for almost a decade. Since this newsletter is getting a bit long, I narrowed down my choice picks to just three – the plugins I can't live without when I'm in Vim.&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntastic
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;syntastic&lt;/code&gt; is a syntax checking plugin for Vim. If you've only worked with VSCode or other IDEs (integrated development environments), you might be surprised to learn that Vim ships without any sort of syntax checking! This plugin hooks into your language's checker tools (e.g. &lt;code&gt;jslint&lt;/code&gt;, &lt;code&gt;rustc&lt;/code&gt;, or &lt;code&gt;gcc&lt;/code&gt;) and renders potential code errors right in your editor.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/vim-syntastic"&gt;
        vim-syntastic
      &lt;/a&gt; / &lt;a href="https://github.com/vim-syntastic/syntastic"&gt;
        syntastic
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Syntax checking hacks for vim
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="markdown"&gt;
&lt;pre&gt;&lt;code&gt;
              / \,,_  .'|
           ,{{| /}}}}/_.'            _____________________________________________
          }}}}` '{{'  '.            /                                             \
        {{{{{    _   ;, \          /            Ladies and Gentlemen,              \
     ,}}}}}}    /o`\  ` ;)        |                                                |
    {{{{{{   /           (        |                 this is ...                    |
    }}}}}}   |            \       |                                                |
   {{{{{{{{   \            \      |                                                |
   }}}}}}}}}   '.__      _  |     |    _____             __             __  _      |
   {{{{{{{{       /`._  (_\ /     |   / ___/__  ______  / /_____ ______/ /_(_)____ |
    }}}}}}'      |    //___/   --=:   \__ \/ / / / __ \/ __/ __ `/ ___/ __/ / ___/ |
jgs `{{{{`       |     '--'       |  ___/ / /_/ / / / / /_/ /_/ (__  ) /_/ / /__   |
     }}}`                         | /____/\__, /_/ /_/\__/\__,_/____/\__/_/\___/   |
                                  |      /____/                                    |
                                  |                                               /
                                   \_____________________________________________/
&lt;/code&gt;&lt;/pre&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/vim-syntastic/syntastic/master/README.markdown/#introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://raw.githubusercontent.com/vim-syntastic/syntastic/master/README.markdown/#installation"&gt;Installation&lt;/a&gt;
2.1. &lt;a href="https://raw.githubusercontent.com/vim-syntastic/syntastic/master/README.markdown/#requirements"&gt;Requirements&lt;/a&gt;
2.2. &lt;a href="https://raw.githubusercontent.com/vim-syntastic/syntastic/master/README.markdown/#installpathogen"&gt;Installing syntastic with Pathogen&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/vim-syntastic/syntastic/master/README.markdown/#settings"&gt;Recommended settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://raw.githubusercontent.com/vim-syntastic/syntastic/master/README.markdown/#faq"&gt;FAQ&lt;/a&gt;
4.1. &lt;a href="https://raw.githubusercontent.com/vim-syntastic/syntastic/master/README.markdown/#faqinfo"&gt;I installed syntastic but it isn't reporting any errors...&lt;/a&gt;
4.2. &lt;a href="https://raw.githubusercontent.com/vim-syntastic/syntastic/master/README.markdown/#faqcheckers"&gt;Syntastic supports several checkers for my filetype, how&lt;/a&gt;…&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vim-syntastic/syntastic"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  vim-airline
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;vim-airline&lt;/code&gt; was one of the first plugins I used to make my Vim installation look good. It updates Vim's tabline (the solid bar across the bottom of Vim's UI) with better colors, as well as the ability to customize it with information from other plugins, or from your own custom scripts.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/vim-airline"&gt;
        vim-airline
      &lt;/a&gt; / &lt;a href="https://github.com/vim-airline/vim-airline"&gt;
        vim-airline
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      lean &amp;amp; mean status/tabline for vim that's light as air
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
vim-airline&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://saythanks.io/to/cb%40256bit.org" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/353dc0088027def780cf08f3597526351ed0e6f6199c9f8173d4941ca6f8d320/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5361792532305468616e6b732d212d3145414544422e737667" alt="Say Thanks!"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vim-airline/vim-airline/actions?query=workflow%3Areviewdog+event%3Apush+branch%3Amaster"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dhkqLIV3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/vim-airline/vim-airline/workflows/reviewdog/badge.svg%3Fbranch%3Dmaster%26event%3Dpush" alt="reviewdog"&gt;&lt;/a&gt;
&lt;a href="https://github.com/vim-airline/vim-airline/actions?query=workflow%3ACI"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LcYZW9GG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/vim-airline/vim-airline/workflows/CI/badge.svg" alt="CI"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lean &amp;amp; mean status/tabline for vim that's light as air.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/vim-airline/vim-airline/wiki/screenshots/demo.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FK5PvQUB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://github.com/vim-airline/vim-airline/wiki/screenshots/demo.gif" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When the plugin is correctly loaded, there will be a nice statusline at the
bottom of each vim window.&lt;/p&gt;
&lt;p&gt;That line consists of several sections, each one displaying some piece of
information. By default (without configuration) this line will look like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;+-----------------------------------------------------------------------------+
|~                                                                            |
|~                                                                            |
|~                     VIM - Vi IMproved                                      |
|~                                                                            |
|~                       version 8.2                                          |
|~                    by Bram Moolenaar et al.                                |
|~           Vim is open source and freely distributable                      |
|~                                                                            |
|~           type :h :q&amp;lt;Enter&amp;gt;          to exit                               |
|~           type :help&amp;lt;Enter&amp;gt; or &amp;lt;F1&amp;gt;  for on-line help                      |
|~           type :help version8&amp;lt;Enter&amp;gt; for version info                      |
|~                                                                            |
|~                                                                            |
+-----------------------------------------------------------------------------+
| A | B |                     C                            X | Y | Z |  [...] |
+-----------------------------------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The statusline is the colored line at the bottom, which contains the sections
(possibly in different colors):&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;section&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vim-airline/vim-airline"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  ctrlp
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ctrlp&lt;/code&gt; is a classic fuzzy file finder for Vim, used to quickly look up files in a project. This keyboard-based file finder became extremely popular via the editor TextMate, and this project seeks to bring it to Vim. Just type &lt;code&gt;&amp;lt;CTRL&amp;gt;-p&lt;/code&gt; (or whatever you customize it to), write a few characters of the file you're looking for, and press &lt;code&gt;enter&lt;/code&gt;. So easy!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kien"&gt;
        kien
      &lt;/a&gt; / &lt;a href="https://github.com/kien/ctrlp.vim"&gt;
        ctrlp.vim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Fuzzy file, buffer, mru, tag, etc finder.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;#&lt;strong&gt;This project is unmaintained&lt;/strong&gt;
&lt;strong&gt;You should use &lt;a href="https://github.com/ctrlpvim/ctrlp.vim"&gt;this fork&lt;/a&gt; instead.&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;
ctrlp.vim&lt;/h1&gt;
&lt;p&gt;Full path fuzzy &lt;strong&gt;file&lt;/strong&gt;, &lt;strong&gt;buffer&lt;/strong&gt;, &lt;strong&gt;mru&lt;/strong&gt;, &lt;strong&gt;tag&lt;/strong&gt;, &lt;strong&gt;...&lt;/strong&gt; finder for Vim.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Written in pure Vimscript for MacVim, gVim and Vim 7.0+.&lt;/li&gt;
&lt;li&gt;Full support for Vim's regexp as search patterns.&lt;/li&gt;
&lt;li&gt;Built-in Most Recently Used (MRU) files monitoring.&lt;/li&gt;
&lt;li&gt;Built-in project's root finder.&lt;/li&gt;
&lt;li&gt;Open multiple files at once.&lt;/li&gt;
&lt;li&gt;Create new files and directories.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/kien/ctrlp.vim/tree/extensions"&gt;Extensible&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/433f087e3e8823bf41dbee5d886e8ee9123ca2f6869447bf7be0555b190aee7a/687474703a2f2f692e696d6775722e636f6d2f7949796e722e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/433f087e3e8823bf41dbee5d886e8ee9123ca2f6869447bf7be0555b190aee7a/687474703a2f2f692e696d6775722e636f6d2f7949796e722e706e67" alt="ctrlp"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Basic Usage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;:CtrlP&lt;/code&gt; or &lt;code&gt;:CtrlP [starting-directory]&lt;/code&gt; to invoke CtrlP in find file mode.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;:CtrlPBuffer&lt;/code&gt; or &lt;code&gt;:CtrlPMRU&lt;/code&gt; to invoke CtrlP in find buffer or find MRU file mode.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;:CtrlPMixed&lt;/code&gt; to search in Files, Buffers and MRU files at the same time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check &lt;code&gt;:help ctrlp-commands&lt;/code&gt; and &lt;code&gt;:help ctrlp-extensions&lt;/code&gt; for other commands.&lt;/p&gt;
&lt;h5&gt;
Once CtrlP is open:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;&amp;lt;F5&amp;gt;&lt;/code&gt; to purge the cache for the current directory to get new files, remove deleted files and apply new ignore options.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;&amp;lt;c-f&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;c-b&amp;gt;&lt;/code&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kien/ctrlp.vim"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Liked this issue? Good news—Bytesized's theme this month is editors. We'll be looking at text editors, tools for thought, and how to be more productive this year as we build software. See you next week!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bytesized is a weekly newsletter exploring important ideas for developers. &lt;a href="https://www.bytesized.xyz/discord/"&gt;Join us on our Discord server&lt;/a&gt;&lt;/em&gt; 👋&lt;/p&gt;

</description>
      <category>vim</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>14 Great VSCode Resources - Dev Setups, Quickstart Videos, Courses, and Deep Dives</title>
      <dc:creator>Kristian Freeman</dc:creator>
      <pubDate>Tue, 05 Jan 2021 19:31:05 +0000</pubDate>
      <link>https://forem.com/bytesizedcode/14-great-vscode-resources-dev-setups-quickstart-videos-courses-and-deep-dives-35ca</link>
      <guid>https://forem.com/bytesizedcode/14-great-vscode-resources-dev-setups-quickstart-videos-courses-and-deep-dives-35ca</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eDUx93PJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.sanity.io/images/82qqyrei/production/d0eab98cd583f0b0db13afd90288b53ad5e14e59-828x815.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eDUx93PJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.sanity.io/images/82qqyrei/production/d0eab98cd583f0b0db13afd90288b53ad5e14e59-828x815.gif" alt="GIF"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VSCode is the &lt;a href="https://www.software.com/src/ranking-the-top-5-code-editors-2019"&gt;most popular&lt;/a&gt; text editor in the world.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's a remarkable stat on its own, but even more so when you consider how new it is: the first release was in April 2015.&lt;/p&gt;

&lt;p&gt;In this issue of &lt;strong&gt;Bytesized&lt;/strong&gt; (&lt;a href="https://www.bytesized.xyz"&gt;a free newsletter covering important ideas for developers&lt;/a&gt;), we'll take a look at VSCode from a productivity angle: there's a good chance that VSCode is part of your repertoire, so instead of teaching you what it is, we'll look at how you can get more productive with it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bytesized covers important ideas for developers, sent to over 4,000 people every week. &lt;a href="https://www.bytesized.xyz"&gt;Join here!&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setups
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://welearncode.com/vscode-setup/"&gt;My Visual Studio Code Setup&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Ali Spittel's collection of her favorite VSCode extensions and themes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://medium.com/productivity-freak/the-ultimate-vscode-setup-for-js-react-6a4f7bd51a2"&gt;The Ultimate VSCode Setup for Front End/JS/React&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Elad Ossadon covers the extensions you need to have to work as a front-end developer in VSCode.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://calebporzio.com/my-vs-code-setup-2"&gt;My VS Code Setup&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Caleb Porzio's favorite extensions, settings, and special "zen" mode for minimalist developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.freecodecamp.org/news/how-to-set-up-vscode-to-improve-your-productivity-fb14c81d4991/"&gt;How to set up VSCode to improve your productivity&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;A collection of useful extensions, with a focus on text editing improvements and reducing repetitive motions and actions with templating extensions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quickstart Videos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=yvXHM2NByh4"&gt;5 Ways to Customize VS Code&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;James Quick covers custom themes, fonts, extensions, settings, and keyboard shortcuts in his popular VSCode intro.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=u21W_tfPVrY"&gt;VS Code Top-Ten Pro Tips&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The uber-popular Fireship YouTube channel takes a look at ten tips for increasing your VSCode productivity and happiness.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=44snngEzNMQ"&gt;Using VSCode with the VIM Extension&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Richard Bagshaw covers a great way to use VSCode: Vim keyboard bindings. He walks through how to install a Vim extension, set up your key bindings, and best practices for making the switch to Vim shortcuts in your day-to-day work.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=d9_8e3LrrCI"&gt;Visual Studio Code Markdown Preview&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;If you work in GitHub, read Reddit, or write code-adjacent prose in anyway, you probably have some familiarity with Markdown. This video covers the basics of some great Markdown tooling for VSCode, showing how you can lint, spell-check, build templates, and preview your Markdown content directly in VSCode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Courses
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://vimforvscode.com/"&gt;Vim for VSCode&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Joe Previte's excellent $10 course has 100+ exercises for learning how to use Vim inside of VSCode.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://vscode.pro/"&gt;VSCode Power User&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Ahmad Awais's comprehensive (5 hours!) course on getting up and running with VSCode, including specific sections on web development, working with Git and GitHub, Markdown, and Ahmad's favorite extensions. This course is on sale pretty frequently, so keep an eye out 👀&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://makevscodeawesome.com/"&gt;Make VS Code Awesome&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Caleb Porzio's course on VSCode isn't focused on exploring every single feature of the editor; instead, it's about zooming in on the important things for developers: extensions, keyboard-based navigation, and a particular focus on building a better development experience for PHP developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Digging Deeper
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://code.visualstudio.com/api/language-extensions/language-server-extension-guide"&gt;Language Server Extension Guide&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;VSCode is open-source, but it's also changing the way that other text editors think and work with the underlying code they show to users. The VSCode Language Server is a spec that has allowed developers to build support for languages into VSCode with first-party support, and it's even been the inspiration for new features in older editors like Vim and Emacs. Check out more about how it works!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.c-sharpcorner.com/article/vscode-architecture-and-overview/"&gt;VSCode Architecture And Overview&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Want to know how VSCode works under the hood? C#Corner's overview of the architecture of VSCode covers all the pieces of the open-source codebase and how they fit together. As you might expect, VSCode wouldn't be possible without a ton of incredible underlying open-source tooling: this article teaches you what those things are.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://medium.com/better-programming/how-to-configure-vs-code-like-a-pro-782d2d718586"&gt;How to Configure VS Code Like a Pro&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;There's a lot of underlying primitives in VSCode that aren't as well-known, but provide great support for working in a codebase for an extended period of time. Stefan Metodiev's guide to setting up VSCode workspaces, tasks, and snippets is a great way to build a more IDE-like experience for your projects inside of VSCode.&lt;/p&gt;




&lt;p&gt;Bytesized is a free weekly newsletter covering important ideas for software developers. &lt;a href="https://bytesized.xyz"&gt;Join 4,000+ devs who read our weekly newsletter to stay in-the-know on important trends in software development!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
    </item>
    <item>
      <title>CLOUDFLARE PAGES: First look at Cloudflare's new JAMstack deployment platform</title>
      <dc:creator>Kristian Freeman</dc:creator>
      <pubDate>Thu, 17 Dec 2020 17:11:49 +0000</pubDate>
      <link>https://forem.com/bytesizedcode/cloudflare-pages-first-look-at-cloudflare-s-new-jamstack-deployment-platform-192p</link>
      <guid>https://forem.com/bytesizedcode/cloudflare-pages-first-look-at-cloudflare-s-new-jamstack-deployment-platform-192p</guid>
      <description>&lt;p&gt;Let's dive into Cloudflare Pages, Cloudflare's new deployment platform for deploying all your JAMstack applications!&lt;/p&gt;

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

&lt;p&gt;Cloudflare Pages: &lt;a href="https://pages.cloudflare.com"&gt;https://pages.cloudflare.com&lt;/a&gt;&lt;br&gt;
Announcement blog post: &lt;a href="https://blog.cloudflare.com/cloudflare-pages/"&gt;https://blog.cloudflare.com/cloudflare-pages/&lt;/a&gt;&lt;br&gt;
Link to request beta access: &lt;a href="https://www.cloudflare.com/pages-jamstack-platform-beta-sign-up/"&gt;https://www.cloudflare.com/pages-jamstack-platform-beta-sign-up/&lt;/a&gt;&lt;br&gt;
Documentation (guides, tutorials): &lt;a href="https://developers.cloudflare.com/pages/"&gt;https://developers.cloudflare.com/pages/&lt;/a&gt;&lt;br&gt;
Build an API for your frontend using Cloudflare Workers: &lt;a href="https://developers.cloudflare.com/pages/tutorials/build-an-api-with-workers"&gt;https://developers.cloudflare.com/pages/tutorials/build-an-api-with-workers&lt;/a&gt;&lt;/p&gt;

</description>
      <category>jamstack</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>serverless</category>
    </item>
    <item>
      <title>My new course on starting and growing your newsletter is live</title>
      <dc:creator>Kristian Freeman</dc:creator>
      <pubDate>Thu, 01 Oct 2020 14:10:42 +0000</pubDate>
      <link>https://forem.com/signalnerve/my-new-course-on-starting-and-growing-your-newsletter-is-live-33d9</link>
      <guid>https://forem.com/signalnerve/my-new-course-on-starting-and-growing-your-newsletter-is-live-33d9</guid>
      <description>&lt;p&gt;I'm super excited to announce my first course: &lt;strong&gt;&lt;a href="https://www.newsletterbootcamp.com"&gt;Newsletter Bootcamp&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Newsletter Bootcamp is a seven-day email course and Ebook that will teach you everything you need to know to start and grow your newsletter. The bootcamp is launching at just $10, so if you're interested, buy now to lock in the best price!&lt;/p&gt;

&lt;p&gt;Each day, you'll focus on a theme, complete exercises, and dig deep into how to build a compelling and engaging newsletter that subscribers love.&lt;/p&gt;

&lt;p&gt;Here's some of what you'll learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to pick a newsletter idea that resonates with subscribers&lt;/li&gt;
&lt;li&gt;How to stay consistent and publish a newsletter every single week&lt;/li&gt;
&lt;li&gt;How to write fresh content and keep your newsletter engaging&lt;/li&gt;
&lt;li&gt;How to get effective feedback from your subscribers&lt;/li&gt;
&lt;li&gt;How to measure your newsletter's success&lt;/li&gt;
&lt;li&gt;How to monetize your newsletter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The course bundle includes a go at your own pace email course, a downloadable PDF version of the bootcamp, and an audiobook reading of each lesson (MP3 format).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.newsletterbootcamp.com"&gt;You can buy Newsletter Bootcamp on Gumroad!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unsure if Newsletter Bootcamp is for you? Get a nine page PDF sample by &lt;a href="https://www.newsletterbootcamp.com/sample"&gt;joining the newsletter&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>showdev</category>
    </item>
    <item>
      <title>How to start a newsletter with Substack</title>
      <dc:creator>Kristian Freeman</dc:creator>
      <pubDate>Tue, 18 Aug 2020 21:21:02 +0000</pubDate>
      <link>https://forem.com/signalnerve/how-to-start-a-newsletter-with-substack-12b3</link>
      <guid>https://forem.com/signalnerve/how-to-start-a-newsletter-with-substack-12b3</guid>
      <description>&lt;p&gt;In this video, I'll show you how to start a newsletter in a little under twenty minutes with &lt;a href="https://www.substack.com"&gt;Substack&lt;/a&gt;. &lt;/p&gt;

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

&lt;p&gt;In a recent survey I took of subscribers to the &lt;a href="https://www.producthunt.com/upcoming/mailing-list-hackers"&gt;Mailing List Hackers project on Product Hunt&lt;/a&gt;, the majority of them said that they don't have a newsletter, but really want to start one. &lt;/p&gt;

&lt;p&gt;In this video, I'll show you a simple, free way to start a newsletter using Substack, including creating a new publication, publishing your first post, and sending it to your newsletter subscribers.&lt;/p&gt;

&lt;p&gt;For more content like this, consider joining the Mailing List Hackers community below! You'll get access to our chat community, other courses and videos, and an invite to our monthly meetups (and access to our archive of past meetups).&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--SdYxMxzd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1284188410286968833/_BebUcsz_normal.jpg" alt="Mailing List Hackers 💌 profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Mailing List Hackers 💌
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @mlisthackers
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      💬 Join our chat community to talk all things newsletters and mailing lists&lt;br&gt;&lt;br&gt;&lt;a href="https://t.co/okZK8W47nR"&gt;mailinglisthackers.com/chat&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      20:59 PM - 10 Aug 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1292928511519399943" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1292928511519399943" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1292928511519399943" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      0
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


</description>
      <category>tutorial</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>🚀 Made a chat server for mailing list hackers</title>
      <dc:creator>Kristian Freeman</dc:creator>
      <pubDate>Mon, 10 Aug 2020 18:59:43 +0000</pubDate>
      <link>https://forem.com/signalnerve/made-a-chat-server-for-mailing-list-hackers-14bc</link>
      <guid>https://forem.com/signalnerve/made-a-chat-server-for-mailing-list-hackers-14bc</guid>
      <description>&lt;p&gt;Hey friends 👋&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.mailinglisthackers.com"&gt;Mailing List Hackers&lt;/a&gt; is a new chat community for people building mailing lists and newsletters. The goal long-term is to build a paid membership community, but for now, &lt;strong&gt;joining is free&lt;/strong&gt; for the first hundred people or so to build a community of like-minded folks and get the conversation going.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Super quick link to get your invite 👉 &lt;a href="https://mailinglisthackers.com/chat"&gt;https://mailinglisthackers.com/chat&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Wrote a bit about the process below on the site, so if you're interested in learning more about the project, check it out:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.mailinglisthackers.com/become-a-founding-member-of-mailing-list-hackers-for-free"&gt;https://www.mailinglisthackers.com/become-a-founding-member-of-mailing-list-hackers-for-free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have a few channels so far, including software-specific channels (#mailchimp, #convertkit, etc) as well as a fun #show-your-work channel to show off your emails, stats, or whatever else you're building. Really excited to build this stuff out based on user feedback, too!&lt;/p&gt;

&lt;p&gt;If you're building a mailing list, or if you're interested in building one but don't know where to start, come hang out in the chat, ask questions, and get feedback on what you're building. See you there!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>motivation</category>
    </item>
    <item>
      <title>Open Monetization Wallet supports dev.to's new account payment pointers 💅</title>
      <dc:creator>Kristian Freeman</dc:creator>
      <pubDate>Fri, 12 Jun 2020 15:15:10 +0000</pubDate>
      <link>https://forem.com/bytesizedcode/open-monetization-wallet-supports-dev-to-s-new-account-payment-pointers-5eid</link>
      <guid>https://forem.com/bytesizedcode/open-monetization-wallet-supports-dev-to-s-new-account-payment-pointers-5eid</guid>
      <description>&lt;p&gt;In a post published on Wednesday, &lt;a class="comment-mentioned-user" href="https://dev.to/ben"&gt;@ben&lt;/a&gt;
 announced that dev.to now supports account-specific Web Monetization payment pointers – hooray!&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/ben" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bgwIhvJ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--1M1qt9Sp--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/1/f451a206-11c8-4e3d-8936-143d0a7e65bb.png" alt="ben image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/devteam/you-can-now-web-monetize-your-dev-posts-but-don-t-get-your-hopes-up-too-quickly-goc" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;You can now web-monetize your DEV posts! (But don't get your hopes up too quickly)&lt;/h2&gt;
      &lt;h3&gt;Ben Halpern ・ Jun 10 ・ 1 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webmonetization&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#gftwhackathon&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#coil&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#meta&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;My Grant For The Web Hackathon project Open Monetization Wallet (OMW) supports account-specific payment pointers on the site with no additional configuration needed! Check out the announcement post below to learn more about the project:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/signalnerve" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t8sfEPgo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--FowgDDFQ--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/76064/158a3fb7-fce4-4a8f-947c-8ebb243db707.jpg" alt="signalnerve image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/bytesizedcode/announcing-open-monetization-wallet-my-gftw-hackathon-project-32o" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;✨ Announcing Open Monetization Wallet - my GFTW Hackathon project&lt;/h2&gt;
      &lt;h3&gt;Kristian Freeman ・ May 21 ・ 4 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#gftwhackathon&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#showdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;To get started, simply go to &lt;a href="https://dev.to/settings/misc"&gt;/settings/misc&lt;/a&gt; on this site and enter your Open Monetization Wallet URL. With the pre-release version of Open Monetization Wallet, you can enter in your wallet URL and get access to some sweet features, like a &lt;em&gt;durable, unique wallet URL&lt;/em&gt; (so you can change your wallet provider between tools like Uphold, Stronghold, and more, without having to change the URL you specify on dev.to), and &lt;em&gt;revenue sharing&lt;/em&gt;, if you want to share Web Monetization payments between multiple people or wallets. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wPgin3wL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s6zifbj81ziubt98srxi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wPgin3wL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s6zifbj81ziubt98srxi.png" alt="OMW wallet in dev.to"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A fun update – I've submitted a grant application for Open Monetization Wallet to help support shipping version 1.0 of the project! You can check out &lt;a href="https://github.com/signalnerve/openmonetizationwallet/milestone/2"&gt;the v1.0 milestone I've created on GitHub&lt;/a&gt; that has a lot of exciting new features - multiple wallets, UI improvements, and more! Wish me luck as the grant application is reviewed 😅&lt;/p&gt;

</description>
      <category>gftwhackathon</category>
      <category>showdev</category>
      <category>meta</category>
    </item>
    <item>
      <title>#onedayprojects: Four projects for web developers to start today (video)</title>
      <dc:creator>Kristian Freeman</dc:creator>
      <pubDate>Tue, 26 May 2020 19:07:42 +0000</pubDate>
      <link>https://forem.com/bytesizedcode/onedayprojects-four-projects-for-web-developers-to-start-today-video-28i2</link>
      <guid>https://forem.com/bytesizedcode/onedayprojects-four-projects-for-web-developers-to-start-today-video-28i2</guid>
      <description>&lt;p&gt;Four projects that you can get started on today, specifically designed to help you learn crucial skills and concepts in web development! #onedayproject&lt;/p&gt;

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

&lt;p&gt;Resources mentioned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=5-iST0a69cI"&gt;"How to Become a Really Good Game Developer In Under a Year" - Miziziziz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;🐦 Follow Bytesized Code on Twitter  &lt;a href="https://twitter.com/bytesizedcode"&gt;https://twitter.com/bytesizedcode&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;🐦 Follow your host Kristian on Twitter  &lt;a href="https://twitter.com/signalnerve"&gt;https://twitter.com/signalnerve&lt;/a&gt;  &lt;/p&gt;




&lt;p&gt;💛 BYTESIZED CODE is building a developer community for everyone! We publish weekly programming tutorials and guides, and also produce the unique online conference Byteconf, where developers around the world learn in a live-streamed, 100% free dev conference. Join our community! &lt;a href="https://www.bytesized.xyz"&gt;https://www.bytesized.xyz&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>career</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>✨ Announcing Open Monetization Wallet - my GFTW Hackathon project</title>
      <dc:creator>Kristian Freeman</dc:creator>
      <pubDate>Thu, 21 May 2020 15:02:34 +0000</pubDate>
      <link>https://forem.com/bytesizedcode/announcing-open-monetization-wallet-my-gftw-hackathon-project-32o</link>
      <guid>https://forem.com/bytesizedcode/announcing-open-monetization-wallet-my-gftw-hackathon-project-32o</guid>
      <description>&lt;p&gt;Hey dev.to! 👋 I'm super excited to announce the first release of &lt;a href="https://github.com/signalnerve/openmonetizationwallet"&gt;Open Monetization Wallet&lt;/a&gt; (OMW), a tool I built as part of the &lt;a href="https://dev.to/devteam/announcing-the-grant-for-the-web-hackathon-on-dev-3kd1"&gt;Grant For The Web Hackathon&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;OMW makes it easier to accept payments with the Web Monetization API at scale, including support for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom wallet URLs: own your own &lt;a href="https://paymentpointers.org/"&gt;"Payment Pointer"&lt;/a&gt;, e.g. &lt;code&gt;$wallet.signalnerve.com&lt;/code&gt;, instead of &lt;code&gt;$pay.stronghold.co/abcdef123&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Change between wallets/providers with no downtime&lt;/li&gt;
&lt;li&gt;Logs of incoming payment requests&lt;/li&gt;
&lt;li&gt;Revenue sharing between multiple wallets, e.g. for multiple team members&lt;/li&gt;
&lt;li&gt;Infinitely scalable with serverless technology&lt;/li&gt;
&lt;li&gt;Free and open-source&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Pl4ekQal--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/eo3h0i1jor9wlr33bv72.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Pl4ekQal--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/eo3h0i1jor9wlr33bv72.png" alt="Example Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to poke around at the interface, I've set up a demo instance - check it out at &lt;a href="https://omw-demo.signalnerve.workers.dev/admin"&gt;omw-demo.signalnerve.workers.dev&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;I'm super interested in the Web Monetization standard, and one thing that stuck out to me immediately when reading through the documentation was the opportunity to simplify &lt;a href="https://paymentpointers.org/"&gt;"Payment Pointers"&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;If you've signed up for a wallet on Stronghold or other wallet providers, you'll know that the URL is pretty hard to remember, and &lt;em&gt;non-durable&lt;/em&gt;: if you make a new wallet URL, or switch providers, you'll need to go and update every time you use the wallet URL across your projects. OMW provides a "vanity URL", meaning that you can deploy it somewhere like &lt;code&gt;$wallet.signalnerve.com&lt;/code&gt;. This means that you can swap out your wallet URL with no downtime and avoid the worst-case scenario: your wallet URL silently failing and missing out on the chance to get paid for your work.&lt;/p&gt;

&lt;p&gt;OMW also has support for revenue sharing, so you can add a number of users (for instance, multiple members of your team), and incoming payments will be distributed between your team members' wallets. For instance, you can evenly divide payments between a developer and designer (a 50/50 split), or even weigh the revenue share so that one member gets 90% of the payments, and the other gets 10%. &lt;/p&gt;

&lt;p&gt;All of this happens behind a single vanity URL, so you can change the revenue sharing and number of users without ever leaving the OMW admin interface!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wOuungqH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4q5pgai42shykxkzx7e4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wOuungqH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4q5pgai42shykxkzx7e4.png" alt="Defining revenue share"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I chose to use &lt;a href="https://workers.dev"&gt;Cloudflare Workers&lt;/a&gt; for building the first version of OMW, and I'm really happy with the results. OMW is deployed with serverless technology, so if a thousand people who all have the Coil extension visit your site, the wallet will scale gracefully. Workers KV is used as both a JAMstack deployment platform (hosting the Gatsby admin interface) and as a lightweight database, allowing you to store wallet information and even logs about incoming payments without needing to spin up an external database.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I work as the developer advocate for Cloudflare Workers! Regardless, I still would have picked Workers for this project :)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I made a quick video to show off the basics of OMW, and you can check the source &lt;a href="https://github.com/signalnerve/openmonetizationwallet"&gt;on GitHub&lt;/a&gt; (it's 100% open-source and free) to see how it's built.&lt;/p&gt;

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

&lt;p&gt;I'm using OMW on &lt;a href="https://www.bytesized.xyz"&gt;bytesized.xyz&lt;/a&gt;, so if you're using &lt;a href="https://coil.com"&gt;Coil&lt;/a&gt; or something similar to pay creators, you should see an indicator that your Coil account is streaming payments to my vanity OMW wallet. I already made two cents during my testing of the site - woo-hoo!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B3pELQdi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ou8umqbnpijmkdfhgjgl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B3pELQdi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ou8umqbnpijmkdfhgjgl.png" alt="My first Web Monetization deposit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;small&gt;My first deposit into my Web Monetization wallet, powered by OMW!&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;As I mentioned above, OMW is open-source, and I have more things planned for the project over the next few weeks. Check out the issue tracker if you're interested in contributing, and if you want to run it yourself, &lt;a href="https://github.com/signalnerve/openmonetizationwallet"&gt;the README on GitHub&lt;/a&gt; has everything you need to get up and running.&lt;/p&gt;

&lt;p&gt;Expect the ride between pre-release (&amp;lt; 1.0.0) to be a little bumpy, as I'll be working on making it easier to deploy the project without needing to install dependencies locally, and the way that the project is set up is bound to change slightly.&lt;/p&gt;

&lt;p&gt;Thanks to the dev.to team for this awesome hackathon, and I'm looking forward to seeing everyone else's projects. Happy coding!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update: thanks to everyone who's been checking out this project! Sharing some of my favorite tweets about it below:&lt;/em&gt;&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--LO6hTdzt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1213242414128779266/GJUJH6cD_normal.jpg" alt="Arturo Portilla profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Arturo Portilla
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @arturo_p_a
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      The &lt;a href="https://twitter.com/hashtag/WebMonetization"&gt;#WebMonetization&lt;/a&gt; community is fascinating! Amazing vibe and great ideas brewing everywhere.&lt;br&gt;&lt;br&gt;&lt;a href="https://twitter.com/signalnerve"&gt;@signalnerve&lt;/a&gt; just announced the release of Open Monetization Wallet (OMW), an open tool aimed at simplifying and enhancing the management of Web Monetization payments.&lt;br&gt;&lt;br&gt;Check it out! &lt;a href="https://t.co/YZDHVPhOAH"&gt;twitter.com/signalnerve/st…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      16:22 PM - 22 May 2020
    &lt;/div&gt;

      &lt;div class="ltag__twitter-tweet__quote"&gt;
        &lt;div class="ltag__twitter-tweet__quote__header"&gt;
          &lt;span class="ltag__twitter-tweet__quote__header__name"&gt;
            kristian is logged off
          &lt;/span&gt;
          &lt;a class="comment-mentioned-user" href="https://dev.to/signalnerve"&gt;@signalnerve&lt;/a&gt;

        &lt;/div&gt;
        excited to show off open monetization wallet (omw) this morning - a set of tools to help you and your team make money with the web monetization api 💸

built for the &lt;a class="comment-mentioned-user" href="https://dev.to/thepracticaldev"&gt;@thepracticaldev&lt;/a&gt;
/@GrantForTheWeb hackathon, using @cloudflaredev workers!

blog post 👇

https://t.co/utI3DJEMHr
      &lt;/div&gt;

    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1263867746644828166" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1263867746644828166" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      2
      &lt;a href="https://twitter.com/intent/like?tweet_id=1263867746644828166" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      12
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--VJ7N8qB0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1027000420801994752/YDZP8Lsd_normal.jpg" alt="alispivak profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        alispivak
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/alispivak"&gt;@alispivak&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Another cool &lt;a href="https://twitter.com/ThePracticalDev"&gt;@ThePracticalDev&lt;/a&gt; &lt;a href="https://twitter.com/GrantForTheWeb"&gt;@GrantForTheWeb&lt;/a&gt; hackathon project- &lt;a href="https://twitter.com/signalnerve"&gt;@signalnerve&lt;/a&gt;'s 's Open Monetization Wallet provides a vanity pointer you can configure for revenue sharing, logging capabilities, a nice-looking interface, and runs on &lt;a href="https://twitter.com/Cloudflare"&gt;@Cloudflare&lt;/a&gt; workers. &lt;br&gt;&lt;a href="https://t.co/FmBCHeb14O"&gt;dev.to/bytesizedcode/…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      14:31 PM - 22 May 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1263839786336268288" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1263839786336268288" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      1
      &lt;a href="https://twitter.com/intent/like?tweet_id=1263839786336268288" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      5
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;





&lt;p&gt;&lt;em&gt;This section fills out the template for a GFTW Hackathon submission – it's copy-pasted from the above blog post&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;OMW makes it easier to accept payments with the Web Monetization API at scale, including support for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom wallet URLs: own your own &lt;a href="https://paymentpointers.org/"&gt;"Payment Pointer"&lt;/a&gt;, e.g. &lt;code&gt;$wallet.signalnerve.com&lt;/code&gt;, instead of &lt;code&gt;$pay.stronghold.co/abcdef123&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Change between wallets/providers with no downtime&lt;/li&gt;
&lt;li&gt;Logs of incoming payment requests&lt;/li&gt;
&lt;li&gt;Revenue sharing between multiple wallets, e.g. for multiple team members&lt;/li&gt;
&lt;li&gt;Infinitely scalable with serverless technology&lt;/li&gt;
&lt;li&gt;Free and open-source&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;Foundational technology&lt;/p&gt;

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

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

&lt;p&gt;&lt;a href="https://omw-demo.signalnerve.workers.dev/admin/"&gt;https://omw-demo.signalnerve.workers.dev/admin/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Link to Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/signalnerve"&gt;
        signalnerve
      &lt;/a&gt; / &lt;a href="https://github.com/signalnerve/openmonetizationwallet"&gt;
        openmonetizationwallet
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      👛 Tools for managing a vanity Web Monetization wallet
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
  &lt;h1&gt;
Open Monetization Wallet&lt;/h1&gt;
  &lt;p&gt;Tools for managing your vanity Web Monetization wallet&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;
Summary&lt;/h2&gt;
&lt;p&gt;Open Monetization Wallet (OMW) makes it easier to accept payments with the Web Monetization API at scale. Some features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Custom wallet URLs: own your own "Payment Pointer", e.g. $wallet.signalnerve.com, instead of $pay.stronghold.co/abcdef123&lt;/li&gt;
&lt;li&gt;Change between wallets/providers with no downtime&lt;/li&gt;
&lt;li&gt;Logs of incoming payment requests&lt;/li&gt;
&lt;li&gt;Revenue sharing between multiple wallets, e.g. for multiple team members&lt;/li&gt;
&lt;li&gt;Infinitely scalable with serverless technology&lt;/li&gt;
&lt;li&gt;Free and open-source&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://raw.githubusercontent.com/signalnerve/openmonetizationwallet/master/./.github/example.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0OxXXKVl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/signalnerve/openmonetizationwallet/master/./.github/example.png" alt="Example"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://workers.dev" rel="nofollow"&gt;Cloudflare Workers&lt;/a&gt; unlimited plan to deploy your OMW instance&lt;/li&gt;
&lt;li&gt;If deploying in front of a domain, a configured Cloudflare zone (see the "Origin" section of "Configuration" below)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/cloudflare/wrangler"&gt;&lt;code&gt;wrangler&lt;/code&gt;&lt;/a&gt; cli tool installed and configured (see the &lt;a href="https://developers.cloudflare.com/workers/quickstart#configure" rel="nofollow"&gt;Quick Start&lt;/a&gt; in the docs)&lt;/li&gt;
&lt;li&gt;A configured Web Monetization wallet + payment pointer for use in your account, e.g. from &lt;a href="https://stronghold.co/" rel="nofollow"&gt;Stronghold&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Configuration&lt;/h2&gt;
&lt;h3&gt;
&lt;code&gt;wrangler.toml&lt;/code&gt;
&lt;/h3&gt;
&lt;p&gt;Copy &lt;code&gt;wrangler.toml.example&lt;/code&gt; to &lt;code&gt;wrangler.toml&lt;/code&gt; and begin filling out the file to prepare your OMW instance for deployment.&lt;/p&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/signalnerve/openmonetizationwallet"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I built it
&lt;/h2&gt;

&lt;p&gt;I chose to use &lt;a href="https://workers.dev"&gt;Cloudflare Workers&lt;/a&gt; for building the first version of OMW, and I'm really happy with the results. OMW is deployed with serverless technology, so if a thousand people who all have the Coil extension visit your site, the wallet will scale gracefully. Workers KV is used as both a JAMstack deployment platform (hosting the Gatsby admin interface) and as a lightweight database, allowing you to store wallet information and even logs about incoming payments without needing to spin up an external database.&lt;/p&gt;

&lt;p&gt;Technology used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloudflare Workers&lt;/li&gt;
&lt;li&gt;Workers KV&lt;/li&gt;
&lt;li&gt;Gatsby&lt;/li&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;Tailwind UI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Additional Resources/Info
&lt;/h2&gt;

&lt;p&gt;(see repo link and demo video above!)&lt;/p&gt;

</description>
      <category>gftwhackathon</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
