<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Joshua Byrd</title>
    <description>The latest articles on DEV Community by Joshua Byrd (@phocks).</description>
    <link>https://dev.to/phocks</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%2F123352%2Ff878f5a5-3e3c-438a-b88b-3a10071971b5.gif</url>
      <title>DEV Community: Joshua Byrd</title>
      <link>https://dev.to/phocks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/phocks"/>
    <language>en</language>
    <item>
      <title>How to get 2x Oracle Cloud servers free forever</title>
      <dc:creator>Joshua Byrd</dc:creator>
      <pubDate>Sun, 15 Nov 2020 04:04:52 +0000</pubDate>
      <link>https://dev.to/phocks/how-to-get-2x-oracle-cloud-servers-free-forever-4o22</link>
      <guid>https://dev.to/phocks/how-to-get-2x-oracle-cloud-servers-free-forever-4o22</guid>
      <description>&lt;p&gt;This is a follow up to my &lt;a href="https://dev.to/phocks/how-to-get-a-free-google-server-forever-1fpf"&gt;How to get a Google server free forever&lt;/a&gt; post.&lt;/p&gt;

&lt;p&gt;In the comments &lt;a href="https://dev.to/selim13"&gt;selim13&lt;/a&gt; let me know that Oracle was offering a similar deal but even better!&lt;/p&gt;


&lt;div class="liquid-comment"&gt;
    &lt;div class="details"&gt;
      &lt;a href="/selim13"&gt;
        &lt;img class="profile-pic" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F94471%2F19082b96-4652-4ab2-b4c7-c89d17417b21.png" alt="selim13 profile image"&gt;
      &lt;/a&gt;
      &lt;a href="/selim13"&gt;
        &lt;span class="comment-username"&gt;Dmitry Seleznyov&lt;/span&gt;
      &lt;/a&gt;
      &lt;span class="color-base-30 px-2 m:pl-0"&gt;•&lt;/span&gt;

&lt;a href="https://dev.to/selim13/comment/17on5" class="comment-date crayons-link crayons-link--secondary fs-s"&gt;
  &lt;time class="date-short-year"&gt;
    Nov 11 '20
  &lt;/time&gt;

&lt;/a&gt;

    &lt;/div&gt;
    &lt;div class="body"&gt;
      &lt;p&gt;Oracle also gives free VDS instances. &lt;br&gt;
&lt;a href="https://www.oracle.com/cloud/free/#always-free" rel="nofollow noopener noreferrer"&gt;oracle.com/cloud/free/#always-free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each have 1Gb RAM, 1/8 of CPU core and 50 Gb of storage (witch is rather cool). The biggest limitation of those is bandwidth limit of 10 Mbps,still suitable for lots of tasks. I host some demo web sites and proxy on those.&lt;/p&gt;


    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The servers have twice the RAM that Google offers and more Hard Disk space plus 2 CPU cores compared with 1 on Google Cloud. And you get 10 TB outgoing traffic per month compared with 1 GB on Google! As for the 10 Mbps bandwidth limit, it seems that only applies if you enable a &lt;strong&gt;load balancer&lt;/strong&gt; on your virtual network.&lt;/p&gt;

&lt;p&gt;Seems like a great deal anyway. Here's how to do it.&lt;/p&gt;

&lt;p&gt;Go &lt;a href="https://www.oracle.com/au/cloud/free/" rel="noopener noreferrer"&gt;here&lt;/a&gt; and click &lt;strong&gt;Start for free&lt;/strong&gt;. Then enter your country, name, and confirm your email. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note: my confirmation email went to spam so check there&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffc5nygsa2uqz3yafwh1l.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffc5nygsa2uqz3yafwh1l.PNG" alt="Sign up"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose a username and password and make sure you choose a region that includes the &lt;a href="https://www.oracle.com/cloud/data-regions.html#northamerica" rel="noopener noreferrer"&gt;always free cloud services&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8we9iscc83t81vcad3c3.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8we9iscc83t81vcad3c3.PNG" alt="Choose region"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fill in your address, verify your mobile number, then hand over your credit card details.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note: unfortunately payment info is required even though they won't actually charge you if you stay on the free tier&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pretty soon they'll send through your access details via email so you can log in. Then you'll get this screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6djsph7ge9yvzvpwnbpj.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6djsph7ge9yvzvpwnbpj.PNG" alt="Build your server"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Create a VM instance&lt;/strong&gt; and configure your machine.&lt;/p&gt;

&lt;p&gt;I switched from Oracle Linux to Ubuntu Linux but other than that I just kept all the defaults. You can change the boot image by clicking &lt;strong&gt;Edit&lt;/strong&gt; in the &lt;strong&gt;Configure placement and hardware&lt;/strong&gt; section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fggxbnwymfqx9y4hp99sx.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fggxbnwymfqx9y4hp99sx.PNG" alt="Edit image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IMPORTANT: SAVE THE PRIVATE KEY&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4byujr1tqjkvjhhluur2.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4byujr1tqjkvjhhluur2.PNG" alt="Save the private key"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;You will not get another chance to do this and will not be able to access the server without it&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Click &lt;strong&gt;Create&lt;/strong&gt; and your server will spin up!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0y59wxzsj1s6rw2i7smu.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0y59wxzsj1s6rw2i7smu.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repeat this from &lt;strong&gt;Create a VM instance&lt;/strong&gt; to get your 2nd free server.&lt;/p&gt;

&lt;p&gt;That's it! You can &lt;a href="https://docs.cloud.oracle.com/en-us/iaas/Content/Compute/Tasks/accessinginstance.htm" rel="noopener noreferrer"&gt;connect to your new servers via ssh&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Have fun!&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>devops</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to make a GitHub profile README</title>
      <dc:creator>Joshua Byrd</dc:creator>
      <pubDate>Mon, 09 Nov 2020 20:59:32 +0000</pubDate>
      <link>https://dev.to/phocks/a-github-profile-readme-4o59</link>
      <guid>https://dev.to/phocks/a-github-profile-readme-4o59</guid>
      <description>&lt;p&gt;In case you missed it. GitHub profiles are now live!&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1281883959140335617-748" src="https://platform.twitter.com/embed/Tweet.html?id=1281883959140335617"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1281883959140335617-748');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1281883959140335617&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I first saw this feature being teased a little while back in this post and I was pretty excited, but I've been waiting a while for it to become an actual thing. Finally they're here!&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1265773172520914944-869" src="https://platform.twitter.com/embed/Tweet.html?id=1265773172520914944"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1265773172520914944-869');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1265773172520914944&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Looks like they used to be done with a &lt;code&gt;.github/README.md&lt;/code&gt; repo and file. But it seems like they've changed things a little. Here's how you do it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make a repository with the same name as your GitHub username.&lt;/li&gt;
&lt;li&gt;Create a README.md file inside that repo.&lt;/li&gt;
&lt;li&gt;Commit and push the file to GitHub&lt;/li&gt;
&lt;li&gt;Click the "Share to Profile" button in the sidebar.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. Now check your GitHub profile. It should look a little &lt;a href="https://github.com/phocks" rel="noopener noreferrer"&gt;like this&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>github</category>
      <category>portfolio</category>
      <category>beginners</category>
      <category>resume</category>
    </item>
    <item>
      <title>How to get a free Google server forever</title>
      <dc:creator>Joshua Byrd</dc:creator>
      <pubDate>Sun, 08 Nov 2020 20:22:50 +0000</pubDate>
      <link>https://dev.to/phocks/how-to-get-a-free-google-server-forever-1fpf</link>
      <guid>https://dev.to/phocks/how-to-get-a-free-google-server-forever-1fpf</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;NOTE: GOOGLE HAVE CHANGED THEIR FREE TIER FROM F1-MICRO TO E2-MICRO. PLEASE USE E2-MICRO TO GET A FREE SERVER. YOU CAN UPGRADE YOUR CURRENT INSTANCE &lt;a href="https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#before-you-begin" rel="noopener noreferrer"&gt;LIKE THIS&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I first heard you could get a free Virtual Private Server instance on the Google Compute Engine from a random person on Twitter.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1284414043449511937-365" src="https://platform.twitter.com/embed/Tweet.html?id=1284414043449511937"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1284414043449511937-365');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1284414043449511937&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;So here's how to do it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Go to the &lt;a href="https://console.cloud.google.com" rel="noopener noreferrer"&gt;Google Cloud Platform Console&lt;/a&gt; and sign up/in if you have to and go to the &lt;a href="https://console.cloud.google.com/compute" rel="noopener noreferrer"&gt;Compute Engine&lt;/a&gt; section using the hamburger menu top left.&lt;/li&gt;
&lt;li&gt; Enable Compute Engine if it's not already enabled and then set up billing (you need to add a credit card or PayPal but don't worry you won't be charged).&lt;/li&gt;
&lt;li&gt; Create a new instance in one of the free tier locations (Iowa, Oregon, or South Carolina) with machine type &lt;code&gt;f1-micro&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Filidqjs8kh3gelslxchx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Filidqjs8kh3gelslxchx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finish the server config (make sure you add the max 30GB free disk space) and spin up the server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fri2rlac53dzk7k290mju.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fri2rlac53dzk7k290mju.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhw8agt33isxibhzztc4y.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhw8agt33isxibhzztc4y.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the &lt;strong&gt;Connect via SSH&lt;/strong&gt; button to log in.&lt;/p&gt;

&lt;p&gt;And that's about it for now. Enjoy your free server forever!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If this post helped you please consider &lt;a href="https://github.com/sponsors/phocks" rel="noopener noreferrer"&gt;sponsoring my open source projects&lt;/a&gt; on GitHub for $1.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;NOTE: Even though you can run this server for free, Google may charge if you go over certain &lt;a href="https://cloud.google.com/free" rel="noopener noreferrer"&gt;"free tier" limits&lt;/a&gt; etc so just keep a lookout for that in the terms and conditions...&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Update: The free offering from Oracle Cloud is almost certainly better than Google Cloud. See this article 👇&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/phocks" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F123352%2Ff878f5a5-3e3c-438a-b88b-3a10071971b5.gif" alt="phocks"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/phocks/how-to-get-2x-oracle-cloud-servers-free-forever-4o22" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How to get 2x Oracle Cloud servers free forever&lt;/h2&gt;
      &lt;h3&gt;Joshua Byrd ・ Nov 15 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#cloud&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>devops</category>
      <category>googlecloud</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>... (rest and spread) explained as simply as I humanly can</title>
      <dc:creator>Joshua Byrd</dc:creator>
      <pubDate>Thu, 21 Mar 2019 23:29:38 +0000</pubDate>
      <link>https://dev.to/phocks/-explained-as-simply-as-i-humanly-can-427p</link>
      <guid>https://dev.to/phocks/-explained-as-simply-as-i-humanly-can-427p</guid>
      <description>&lt;p&gt;Three dots &lt;code&gt;...&lt;/code&gt; does two different things depending on how you use them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Spread:
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;...&lt;/code&gt; in front of an array removes the outside &lt;code&gt;[]&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ 0, 1, 2, 3, 4, 5, 6 ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;...&lt;/code&gt; in front of an object removes the outside &lt;code&gt;{}&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;one&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;two&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;three&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;four&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;five&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;six&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// { one: 1, two: 2, three: 3, four: 4, five: 5, six: 6 }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Rest:
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;...&lt;/code&gt; when &lt;a href="https://hacks.mozilla.org/2015/05/es6-in-depth-destructuring/"&gt;destructuring&lt;/a&gt; an array, assigns the rest of the elements.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;one&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;one&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 1&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [2, 3]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;...&lt;/code&gt; when destructuring an object, assigns the rest of the properties.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;one&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;two&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;three&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;one&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;one&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 1&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// { two: 2, three: 3 }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>explainlikeimfive</category>
    </item>
    <item>
      <title>React Hooks explained as simply as I humanly can</title>
      <dc:creator>Joshua Byrd</dc:creator>
      <pubDate>Fri, 15 Feb 2019 22:42:26 +0000</pubDate>
      <link>https://dev.to/phocks/react-hooks-explained-as-simply-as-i-humanly-can-1ggi</link>
      <guid>https://dev.to/phocks/react-hooks-explained-as-simply-as-i-humanly-can-1ggi</guid>
      <description>&lt;p&gt;Hooks let you do more things with function components.&lt;/p&gt;




&lt;p&gt;You can use state with the &lt;code&gt;useState()&lt;/code&gt; hook.&lt;/p&gt;

&lt;p&gt;eg. &lt;code&gt;const [count, setCount] = useState(0)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now &lt;code&gt;count&lt;/code&gt; equals &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Update &lt;code&gt;count&lt;/code&gt; with &lt;code&gt;setCount(1)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now &lt;code&gt;count&lt;/code&gt; equals &lt;code&gt;1&lt;/code&gt; and the component will update.&lt;/p&gt;




&lt;p&gt;You can also trigger side effects with the &lt;code&gt;useEffect()&lt;/code&gt; hook.&lt;/p&gt;

&lt;p&gt;eg. &lt;code&gt;useEffect(() =&amp;gt; console.log(count), [count])&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now it will console log every time &lt;code&gt;count&lt;/code&gt; updates.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;hint: use &lt;code&gt;[]&lt;/code&gt; to only trigger the side effect once when the component is mounted and just leave off the second argument to trigger the effect after any state change.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;hint 2: if you return a function from your side effect it will run that function after the componet unmounts.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Here's some code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;countHigher&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;countHigher&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;And that's pretty much it.&lt;/p&gt;

&lt;p&gt;If you want a more in-depth look &lt;a href="https://reactjs.org/docs/hooks-intro.html"&gt;read the docs&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>react</category>
      <category>hooks</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>async/await explained as simply as I humanly possibly can</title>
      <dc:creator>Joshua Byrd</dc:creator>
      <pubDate>Mon, 11 Feb 2019 04:30:00 +0000</pubDate>
      <link>https://dev.to/phocks/asyncawait-explained-as-simply-as-i-humanly-possibly-can-i-think-309g</link>
      <guid>https://dev.to/phocks/asyncawait-explained-as-simply-as-i-humanly-possibly-can-i-think-309g</guid>
      <description>&lt;p&gt;Put &lt;code&gt;async&lt;/code&gt; in front of a function.&lt;/p&gt;

&lt;p&gt;eg. &lt;code&gt;async function test() {}&lt;/code&gt; or &lt;code&gt;const test = async () =&amp;gt; {}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now you can use &lt;code&gt;await&lt;/code&gt; inside that function to pause and wait for values that take their time getting back to us.&lt;/p&gt;

&lt;p&gt;Here's an async function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define our async function and let it use await&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.github.com/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Wait for the Promise&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Wait to resolve the Promise&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Log the response&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Run the function&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Okay that's it! Get it now?&lt;/p&gt;

&lt;p&gt;If not, &lt;a href="https://dev.to/siwalik/async-programming-basics-every-js-developer-should-know-in-2018-a9c"&gt;go here&lt;/a&gt; for a better explanation. Or leave a comment and I'll try to help out.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
