<?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: Maggie Appleton</title>
    <description>The latest articles on DEV Community by Maggie Appleton (@maggieappleton).</description>
    <link>https://dev.to/maggieappleton</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%2F111641%2F106d1ea0-62a4-472e-b2e8-73c1aff3dfa9.png</url>
      <title>DEV Community: Maggie Appleton</title>
      <link>https://dev.to/maggieappleton</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maggieappleton"/>
    <language>en</language>
    <item>
      <title>Illustrated Notes on Web Security Essentials</title>
      <dc:creator>Maggie Appleton</dc:creator>
      <pubDate>Mon, 30 Nov 2020 18:03:02 +0000</pubDate>
      <link>https://dev.to/egghead/illustrated-notes-on-web-security-essentials-3ob7</link>
      <guid>https://dev.to/egghead/illustrated-notes-on-web-security-essentials-3ob7</guid>
      <description>&lt;p&gt;Between IoT botnet attacks, Bitcoin ransomware, and the weekly cadence of high-profile data breaches, doing anything on the internet feels like playing Russian Roulette.&lt;/p&gt;

&lt;p&gt;And that's just for normal people using it.&lt;/p&gt;

&lt;p&gt;As a developer, you're partially responsible for protecting all those normal people from the horrors of whatever LulzSec are up to right now. The least you can do is make sure your website isn't an accessory to their nefarious activities.&lt;/p&gt;

&lt;p&gt;So what does the current landscape of internet risk looks like. How, exactly, is LulzSec going to hack into my mainframe in 2020?&lt;/p&gt;

&lt;p&gt;Here's my illustrated notes from Mike Sherov's egghead course on '&lt;a href="https://bit.ly/39tzKth" rel="noopener noreferrer"&gt;Web Security Essentials&lt;/a&gt;' that should give you a big picture overview of what to should look out for.&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%2Fcpvahacov3gsz0hnaxpm.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%2Fcpvahacov3gsz0hnaxpm.png" alt="web-security-1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Turns out there's a small set of fairly well-known and easy to defend attacks that we can protect ourselves from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Man in the Middle (MITM)&lt;/li&gt;
&lt;li&gt;Cross-Site Request Forgery (CSRF)&lt;/li&gt;
&lt;li&gt;Cross-Site Scripting (XSS)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shielding yourself from these three is a great starting point. It's at least enough to keep the script kiddies out.&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%2Fwtiuqo47g17t3qzwjfqp.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%2Fwtiuqo47g17t3qzwjfqp.png" alt="web-security-2"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fravw48zq7vq5r9wsrv6h.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%2Fravw48zq7vq5r9wsrv6h.png" alt="web-security-6"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsn3clruyzcohbzie3z68.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%2Fsn3clruyzcohbzie3z68.png" alt="web-security-7"&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%2Fwya3k4ucpcesp5s16ihm.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%2Fwya3k4ucpcesp5s16ihm.png" alt="web-security-3"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fo6df0lif283qvoc7n5wz.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%2Fo6df0lif283qvoc7n5wz.png" alt="web-security-4"&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%2Fzordhyjxh7fzmpb27ifj.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%2Fzordhyjxh7fzmpb27ifj.png" alt="web-security-5"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Keeping out this trio of attacks will go a long way. Thankfully, you do not have to brave the black hat darkness alone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bit.ly/39tzKth" rel="noopener noreferrer"&gt;Mike Sherov's course&lt;/a&gt; covers a whole range of ways to mitigate your risk and protect against them. &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%2F5oir528fi51jqdwkqzna.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%2F5oir528fi51jqdwkqzna.png" alt="web-security-essentials-mitm-csrf-and-xss"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;👁‍🗨 If these are hard to read, you can download a free high-res PDF version on the course itself.&lt;br&gt;
Dev.to limits image sizes a lot and it's hard to make it readable on here. Apologies!&lt;/p&gt;

</description>
      <category>security</category>
      <category>infosec</category>
    </item>
    <item>
      <title>WTF is Rust? The Illustrated Notes</title>
      <dc:creator>Maggie Appleton</dc:creator>
      <pubDate>Mon, 23 Nov 2020 16:46:55 +0000</pubDate>
      <link>https://dev.to/egghead/wtf-is-rust-the-illustrated-notes-564p</link>
      <guid>https://dev.to/egghead/wtf-is-rust-the-illustrated-notes-564p</guid>
      <description>&lt;p&gt;The &lt;a href="https://www.rust-lang.org/" rel="noopener noreferrer"&gt;Rust programming language&lt;/a&gt; keeps winning the middle-school popularity contest of the developer world: "most loved" on &lt;a href="https://insights.stackoverflow.com/survey/2019#technology" rel="noopener noreferrer"&gt;Stack Overflow surveys&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%2F6wz9nsscvjx9e70np2n0.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%2F6wz9nsscvjx9e70np2n0.png" alt="stackoverflow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, what's this Rust thing and why is everyone enamoured?&lt;/p&gt;

&lt;p&gt;Let's explore...&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%2Fiz58kqzpxuwqw2p8q9ra.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%2Fiz58kqzpxuwqw2p8q9ra.png" alt="WTFRust_1"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;This happy balance Rust manages to strike – between speed, control over memory, and human-friendliness is what makes it so popular.&lt;/p&gt;

&lt;p&gt;The kind of programmes you can write with Rust would otherwise be made in a language like C or C++. A lot of developers find the C-suite challenging to work with, so this friendly alternative is very welcome!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's got the Goldilocks Effect going on.   Not too slow, not too dangerous, not too complicated – just right.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;The Rust community is also infamous for being welcoming, open, and encouaging to newcomers. Fostering that kind of culture is very likely why it's gained so much traction in the last few years.&lt;/p&gt;

&lt;p&gt;Anyone who hangs out in Developer World long enough realises frameworks and languages are identities much more than they're tools. You belong to Team React, or Camp Python, or the Rust Crew.&lt;/p&gt;

&lt;p&gt;And no one wants to join a bunch of judgey gatekeepers.&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%2Fd49przduerjok68p26s5.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%2Fd49przduerjok68p26s5.png" alt="WTFRust_5"&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%2Fnc7671f66sp5cbkea9ux.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%2Fnc7671f66sp5cbkea9ux.png" alt="WTFRust_3"&gt;&lt;/a&gt;&lt;/p&gt;

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




&lt;p&gt;I've just done a sweeping and completely incomplete overview of Rust here. But it's enough to point you in the right direction.&lt;/p&gt;

&lt;p&gt;While researching and making these I watched &lt;a href="https://twitter.com/PascalPrecht" rel="noopener noreferrer"&gt;Pascal Precht&lt;/a&gt;'s egghead course that shows you how to &lt;a href="http://bit.ly/39EPEyl" rel="noopener noreferrer"&gt;Write Your First Rust Programme&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%2Flcnx9guhiegsu998ikz5.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%2Flcnx9guhiegsu998ikz5.png" alt="write-your-first-program-with-the-rust-language"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;It's free 20 minute course that shows you all the basics.&lt;/p&gt;




&lt;p&gt;👁‍🗨 If these are hard to read, you can download a free high-res PDF version &lt;a href="http://bit.ly/39EPEyl" rel="noopener noreferrer"&gt;on the course itself&lt;/a&gt;.&lt;br&gt;
Dev.to limits image sizes a lot and it's hard to make it readable on here. Apologies!&lt;/p&gt;

</description>
      <category>rust</category>
      <category>illustrated</category>
    </item>
    <item>
      <title>Illustrated Notes on Custom React Hooks</title>
      <dc:creator>Maggie Appleton</dc:creator>
      <pubDate>Fri, 20 Nov 2020 10:21:09 +0000</pubDate>
      <link>https://dev.to/egghead/illustrated-notes-on-custom-react-hooks-5b4a</link>
      <guid>https://dev.to/egghead/illustrated-notes-on-custom-react-hooks-5b4a</guid>
      <description>&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%2Fk3hxrcz468zgpl7r2hj7.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%2Fk3hxrcz468zgpl7r2hj7.png" alt="CustomHooks_DevTo_1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Illustrated notes on &lt;a href="https://joeprevite.com/" rel="noopener noreferrer"&gt;Joe Previtte&lt;/a&gt;'s course on &lt;a href="http://bit.ly/3av6FvK" rel="noopener noreferrer"&gt;Building Custom React Hooks&lt;/a&gt; on egghead&lt;/p&gt;




&lt;h2&gt;
  
  
  The Basics of React Hooks
&lt;/h2&gt;

&lt;p&gt;If you're not up to speed on &lt;a href="https://reactjs.org/docs/hooks-intro.html" rel="noopener noreferrer"&gt;React hooks&lt;/a&gt;, here's a very quick overview...&lt;/p&gt;

&lt;p&gt;Hooks let us do more than just display static UI components. They give us the ability to hold state in our components, and use lifecycle events that can handle side effects and data changing over time.&lt;/p&gt;

&lt;p&gt;We used to do this with &lt;a href="//16.8"&gt;class components&lt;/a&gt;, but the React library added hooks in early 2019 with version 16.8.&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%2Fu637kljxekttuoed30dq.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%2Fu637kljxekttuoed30dq.png" alt="CustomHooks_DevTo_2"&gt;&lt;/a&gt;&lt;/p&gt;

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




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

&lt;h2&gt;
  
  
  The Two Main Hooks
&lt;/h2&gt;

&lt;p&gt;The React library comes with a set of "build in" hooks. There are &lt;a href="https://reactjs.org/docs/hooks-reference.html" rel="noopener noreferrer"&gt;10 official hooks&lt;/a&gt;, but the two most common ones are &lt;strong&gt;useState&lt;/strong&gt; and &lt;strong&gt;useEffect&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. useState
&lt;/h3&gt;

&lt;p&gt;useState lets us hold "state" – a piece of data that changes over time while your app is up and running.&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%2F1cg6qoks3qe0h8godqp9.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%2F1cg6qoks3qe0h8godqp9.png" alt="CustomHooks_DevTo_5"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. useEffect
&lt;/h3&gt;

&lt;p&gt;useEffect let's us perform side effects. That means we can execute functions or run code that isn't directly about rendering UI elements to the DOM.&lt;/p&gt;

&lt;p&gt;This includes making data requests, or running JavaScript functions &lt;em&gt;after&lt;/em&gt; the components have already rendered.&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%2Fbwmt1hiwak5zjf0g3r0e.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%2Fbwmt1hiwak5zjf0g3r0e.png" alt="CustomHooks_DevTo_6"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fps7c22vykz9vx7rri0zh.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%2Fps7c22vykz9vx7rri0zh.png" alt="CustomHooks_DevTo_7"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Creating Your Own Custom Hooks
&lt;/h2&gt;

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

&lt;p&gt;We can also remix these built-in hooks to create &lt;strong&gt;custom hooks&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;These are simply functions you write that use the basic hooks, and layer extra functionality on top of them.&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%2Fiukemhqs64t9inmw11iw.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%2Fiukemhqs64t9inmw11iw.png" alt="CustomHooks_DevTo_9"&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%2Fql2g96fk789kp79a3ul2.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%2Fql2g96fk789kp79a3ul2.png" alt="CustomHooks_DevTo_10"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's a great collection on &lt;a href="https://usehooks.com/" rel="noopener noreferrer"&gt;usehooks.com&lt;/a&gt; if you want to see some examples.&lt;/p&gt;

&lt;p&gt;Once you've written your hook, there's a handy &lt;a href="https://www.npmjs.com/package/create-react-hook" rel="noopener noreferrer"&gt;create-react-hook&lt;/a&gt; library that does all the formatting grunt work and makes uploading your hook to npm easy.&lt;/p&gt;

&lt;p&gt;Just use &lt;code&gt;npx create-react-hook&lt;/code&gt;, add a package name, description, Github details, and licence. There's a default template that works for most cases.&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%2Fkw9i35z619p9b48aphu8.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%2Fkw9i35z619p9b48aphu8.png" alt="CustomHooks_DevTo_11"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It'll generate a series of files and folders for you. You just need to add your hook file to the &lt;code&gt;/src&lt;/code&gt; folder, write the readme, and take care of some other housekeeping.&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%2F8xt2nb36nxtsj2h0a58b.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%2F8xt2nb36nxtsj2h0a58b.png" alt="CustomHooks_DevTo_12"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that you're all ready to publish your hook for others to use 🎉&lt;/p&gt;




&lt;p&gt;&lt;a href="http://bit.ly/3av6FvK" rel="noopener noreferrer"&gt;Joe's course&lt;/a&gt; is nice and short, and covers all the details of how to do this.&lt;/p&gt;

&lt;p&gt;You can get a handle on custom hooks in under 30 minutes. Then start writing your own!&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%2F3o7ynn3shq7egu3gpe9x.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%2F3o7ynn3shq7egu3gpe9x.png" alt="shareable-custom-hooks-in-react"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;👁‍🗨 If these are hard to read, you can download a free high-res PDF version &lt;a href="http://bit.ly/3av6FvK" rel="noopener noreferrer"&gt;on the course itself&lt;/a&gt;.&lt;br&gt;
Dev.to limits image sizes a lot and it's hard to make it readable on here. Apologies!&lt;/p&gt;

</description>
      <category>react</category>
      <category>hooks</category>
      <category>javascript</category>
      <category>illustrated</category>
    </item>
    <item>
      <title>Illustrated Notes on Fixing Git Mistakes</title>
      <dc:creator>Maggie Appleton</dc:creator>
      <pubDate>Tue, 17 Nov 2020 17:39:55 +0000</pubDate>
      <link>https://dev.to/egghead/illustrated-notes-on-fixing-git-mistakes-1c16</link>
      <guid>https://dev.to/egghead/illustrated-notes-on-fixing-git-mistakes-1c16</guid>
      <description>&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%2Ftsbsimsb1nxz134m5yo0.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%2Ftsbsimsb1nxz134m5yo0.png" alt="FixGitMistakes_4_DevTo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are illustrated notes I made while working through &lt;a href="https://chrisachard.com/" rel="noopener noreferrer"&gt;Chris Achard&lt;/a&gt;'s &lt;a href="http://bit.ly/gitfix" rel="noopener noreferrer"&gt;Fix Common Git Mistakes&lt;/a&gt; course on egghead.&lt;/p&gt;

&lt;p&gt;The course is a great refresher on the fundamental structure of git, adding and removing commits, and (critically) undoing mistakes of all kinds.&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%2Fle6fafirpbq05vyv6xtb.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%2Fle6fafirpbq05vyv6xtb.png" alt="fix-common-git-mistakes title"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Basic Structure of Git
&lt;/h2&gt;

&lt;p&gt;Chris covers all the various 'levels' your Git files can be at. I personally needed to think of it as a spatial stack to understand how files move between them.&lt;/p&gt;

&lt;p&gt;Every time I push commits to Github I see something like this in my head:&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%2F2wkf22g4qncsurrpypzd.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%2F2wkf22g4qncsurrpypzd.png" alt="FixGitMistakes_3_DevTo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also found it helpful to think of the 'stash' as a side drawer you tuck files away in, and then can 'pop' them back out later.&lt;/p&gt;




&lt;h2&gt;
  
  
  Branches are Pointers
&lt;/h2&gt;

&lt;p&gt;This framing of git branches as "pointers" you can move around changed the way I think about them a lot.&lt;/p&gt;

&lt;p&gt;We can move the pointers to different commits, which are just different versions of our project at a specific point in time.&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%2Fadrtw3t9ima7vimsbay6.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%2Fadrtw3t9ima7vimsbay6.png" alt="FixGitMistakes_1_DevTo"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Git Log
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;git log&lt;/code&gt; is a handy feature that shows you all your previous commits and their details. It's quite verbose though.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git log --oneline&lt;/code&gt; is much easier to read since it only shows you the commit hashes and messages&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git log --graph&lt;/code&gt; draws a tiny graph in the terminal showing branches and merges&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fj3syvt51em8xuuoc4cvu.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%2Fj3syvt51em8xuuoc4cvu.png" alt="Artboard 2_DevTo"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Undoing Mistakes
&lt;/h2&gt;

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

&lt;h3&gt;
  
  
  Git Commit Ammend
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;git commit --ammend&lt;/code&gt; lets us add or change files in our last commit, as well as the commit message&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%2Fcke5jpmnb823wl6o6x2a.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%2Fcke5jpmnb823wl6o6x2a.png" alt="Artboard 3_DevTo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Git Reset
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;git reset&lt;/code&gt; will move a file backwards. If you're committed a file to either staging or the local repo, we can bring it back to our working directory.&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%2Fx32i3x8nu8ki07rsgljt.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%2Fx32i3x8nu8ki07rsgljt.png" alt="Artboard 5_DevTo"&gt;&lt;/a&gt;&lt;br&gt;
Git gives us three levels of "intensity" for resetting - &lt;code&gt;git reset --hard&lt;/code&gt;, &lt;code&gt;git reset --soft&lt;/code&gt;, and mixed.&lt;/p&gt;

&lt;p&gt;If you don't specify one, mixed is the default which just moves it from the local repo back to your working files.&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%2F7245xfgzdsvtxhjob2ed.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%2F7245xfgzdsvtxhjob2ed.png" alt="Artboard 6_DevTo"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Git Diff
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;git diff&lt;/code&gt; is a handy utility for seeing what's changed between two commits or two files&lt;/p&gt;

&lt;p&gt;You can compare two commits using their branch names or commit hashes: &lt;code&gt;git diff main new-feature&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can also compare two files by passing in both file names: &lt;code&gt;git diff path/to/file/ComponentA.js path/to/file/ComponentB.js&lt;/code&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%2Fze24zgrcd8vf0ctsp960.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%2Fze24zgrcd8vf0ctsp960.png" alt="FixGitMistakes_2_DevTo"&gt;&lt;/a&gt; &lt;/p&gt;




&lt;h2&gt;
  
  
  Detached Head
&lt;/h2&gt;

&lt;p&gt;A detached head is less morbid than it sounds. It just means we've checked out a commit using it's specific hash name, such as &lt;code&gt;git checkout 49da32&lt;/code&gt;&lt;br&gt;
That commit is now the "head" because it's the most recent version of our project.&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%2Fy6uv9hczkfjb3egspf2e.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%2Fy6uv9hczkfjb3egspf2e.png" alt="Artboard 4 copy1_DevTo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's "detached" because we've navigated there directly and aren't on our usual branch structure. We have to "reattach" the commit back to our branch with &lt;code&gt;git checkout -b my-new-branch-name&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkevqu8alek5itygbiih2.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%2Fkevqu8alek5itygbiih2.png" alt="Artboard 4 copy2_DevTo"&gt;&lt;/a&gt;&lt;/p&gt;






&lt;p&gt;It feels good to be less lost in the git forest now.&lt;br&gt;
I hope some of these techniques make your git log less sad too :)&lt;/p&gt;

&lt;p&gt;There's plenty more in &lt;a href="http://bit.ly/gitfix" rel="noopener noreferrer"&gt;Chris' course&lt;/a&gt; that I left out here.&lt;/p&gt;




&lt;p&gt;👁‍🗨 If these are hard to read, you can download a free high-res PDF version &lt;a href="http://bit.ly/gitfix" rel="noopener noreferrer"&gt;on the course itself&lt;/a&gt;.&lt;br&gt;
Dev.to limits image sizes a lot and it's hard to make it readable on here. Apologies!&lt;/p&gt;

</description>
      <category>git</category>
      <category>javascript</category>
      <category>fundamentals</category>
    </item>
    <item>
      <title>Illustrated Notes on Advanced JavaScript Fundamentals</title>
      <dc:creator>Maggie Appleton</dc:creator>
      <pubDate>Wed, 04 Nov 2020 19:27:35 +0000</pubDate>
      <link>https://dev.to/egghead/illustrated-notes-on-advanced-javascript-fundamentals-4lbp</link>
      <guid>https://dev.to/egghead/illustrated-notes-on-advanced-javascript-fundamentals-4lbp</guid>
      <description>&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%2Fyptnlyus1kk7gwhacraa.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%2Fyptnlyus1kk7gwhacraa.png" alt="AdvJS_Devto_1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Being humans, we rarely learn things linearly. &lt;/p&gt;

&lt;p&gt;No one begins their JavaScript journey by reading the &lt;a href="https://www.ecma-international.org/ecma-262/5.1/" rel="noopener noreferrer"&gt;TC39 language specification&lt;/a&gt; line-by-line like a pedantic masochist.&lt;/p&gt;

&lt;p&gt;Instead we all cobble together a good-enough understanding, leaving holes here and there to fill in later.&lt;/p&gt;

&lt;p&gt;If you're like me, you might have been stumbling through your JavaScript journey without 100% grokking prototypical inheritance, or how call, apply, and bind work on functions.&lt;/p&gt;

&lt;p&gt;It's fine. Stuff mostly works.&lt;/p&gt;

&lt;p&gt;Until it doesn't ¯_(ツ)_/¯&lt;/p&gt;

&lt;p&gt;At some point, it's useful to stop stumbling around and peek back at those holes.&lt;/p&gt;

&lt;p&gt;I found &lt;a href="https://tylerclark.life/" rel="noopener noreferrer"&gt;Tyler Clark&lt;/a&gt;'s egghead course on &lt;a href="http://bit.ly/advanjs" rel="noopener noreferrer"&gt;Advanced JavaScript Foundations&lt;/a&gt; was the perfect opportunity to strengthen my JS foundations.&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%2Fog-image-egghead-course.now.sh%2Fadvanced-javascript-foundations" 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%2Fog-image-egghead-course.now.sh%2Fadvanced-javascript-foundations" alt="Course illustration for advanced js foundations"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While working through the course, I illustrated a set of notes to help me understand and remember all the concepts.&lt;/p&gt;




&lt;h2&gt;
  
  
  Primitive Types &amp;amp; Autoboxing
&lt;/h2&gt;

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

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




&lt;h2&gt;
  
  
  Prototypical Inheritence
&lt;/h2&gt;

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




&lt;h2&gt;
  
  
  The &lt;code&gt;New&lt;/code&gt; Keyword
&lt;/h2&gt;

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




&lt;h2&gt;
  
  
  The &lt;code&gt;.this&lt;/code&gt; keyword
&lt;/h2&gt;

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




&lt;p&gt;These illustrations aren't perfectly designed to explain the concepts they're about, and instead work as shorthand notes for me.&lt;/p&gt;

&lt;p&gt;Take a look at &lt;a href="http://bit.ly/advanjs" rel="noopener noreferrer"&gt;Tyler's course&lt;/a&gt; if you want to dig into the concepts more.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>fundamentals</category>
      <category>es6</category>
      <category>illustration</category>
    </item>
    <item>
      <title>A Fresh Serving of JavaScript ES2019</title>
      <dc:creator>Maggie Appleton</dc:creator>
      <pubDate>Thu, 25 Jul 2019 16:12:31 +0000</pubDate>
      <link>https://dev.to/egghead/a-fresh-serving-of-javascript-es2019-5hf6</link>
      <guid>https://dev.to/egghead/a-fresh-serving-of-javascript-es2019-5hf6</guid>
      <description>&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%2Fillustrated.dev%2Fstatic%2Fbd34c4ae7be1b89f642720abbe74a3fe%2F2f950%2Fes2019-sketchnotes-Title.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%2Fillustrated.dev%2Fstatic%2Fbd34c4ae7be1b89f642720abbe74a3fe%2F2f950%2Fes2019-sketchnotes-Title.png"&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%2Fillustrated.dev%2Fstatic%2F2e678222e86bb387bb40548c04084b4b%2F2f950%2Fes2019-sketchnotes-Intro.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%2Fillustrated.dev%2Fstatic%2F2e678222e86bb387bb40548c04084b4b%2F2f950%2Fes2019-sketchnotes-Intro.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The original post is up &lt;a href="http://maggieappleton.com/es2019" rel="noopener noreferrer"&gt;on my digital garden&lt;/a&gt; (the image quality is a bit dodgy here on dev.to)&lt;/p&gt;

&lt;h3&gt; A new version of JavaScript has landed! &lt;/h3&gt;

&lt;p&gt;Every year JavaScript gets a handful of new features and functions for everyone to play with.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://tc39.es/" rel="noopener noreferrer"&gt;TC39 committee&lt;/a&gt; have released the 2019 additions to &lt;a href="https://www.ecma-international.org/memento/tc39.htm" rel="noopener noreferrer"&gt;ECMAScript&lt;/a&gt;, which is the generally accepted version of JavaScript we all know and &lt;del&gt;love&lt;/del&gt; tolerate.&lt;/p&gt;

&lt;p&gt;You can take a look at the TC39 &lt;a href="https://github.com/tc39" rel="noopener noreferrer"&gt;Github&lt;/a&gt; to track the progress of proposed features, including &lt;a href="https://github.com/tc39/proposals/blob/master/finished-proposals.md" rel="noopener noreferrer"&gt;all the ones they've accepted into the official language&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Mike Sherov just put together a new egghead course on &lt;a href="https://egghead.io/courses/javascript-es2019-in-practice" rel="noopener noreferrer"&gt;Javascript ES2019 in Practice&lt;/a&gt; which is a good summary of all the new shiny bits, as well as how they apply in IRL dev situations.&lt;/p&gt;

&lt;p&gt;I took sketchnotes while watching his course, and have a quick illustrated summary of the 7 big changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Optional Catch Binding&lt;/li&gt;
&lt;li&gt;Stable &lt;code&gt;array.sort()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Flatten Arrays with &lt;code&gt;flat()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Flatten &amp;amp; Map Arrays with &lt;code&gt;flatMap()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Cut out Whitespace with &lt;code&gt;trimStart()&lt;/code&gt; &amp;amp; &lt;code&gt;trimEnd()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Descriptions on Symbols&lt;/li&gt;
&lt;li&gt;Create Objects from Entries with &lt;code&gt;fromEntries()&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&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%2Fillustrated.dev%2Fstatic%2F2a86061c6cc13d1045938d06abc64b22%2F2f950%2Fes2019-sketchnotes-1-Optional.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%2Fillustrated.dev%2Fstatic%2F2a86061c6cc13d1045938d06abc64b22%2F2f950%2Fes2019-sketchnotes-1-Optional.png"&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%2Fillustrated.dev%2Fstatic%2Fe818ddfa856975f0daf6eb2896704ee5%2F2f950%2Fes2019-sketchnotes-2-Stable.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%2Fillustrated.dev%2Fstatic%2Fe818ddfa856975f0daf6eb2896704ee5%2F2f950%2Fes2019-sketchnotes-2-Stable.png"&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%2Fillustrated.dev%2Fstatic%2F4397febe618431cd202e5f7189f8bcf8%2F2f950%2Fes2019-sketchnotes-3-Flatten.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%2Fillustrated.dev%2Fstatic%2F4397febe618431cd202e5f7189f8bcf8%2F2f950%2Fes2019-sketchnotes-3-Flatten.png"&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%2Fillustrated.dev%2Fstatic%2F57a79cdbf7a53892a96d790fe6629dbd%2F2f950%2Fes2019-sketchnotes-4-FlatMap.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%2Fillustrated.dev%2Fstatic%2F57a79cdbf7a53892a96d790fe6629dbd%2F2f950%2Fes2019-sketchnotes-4-FlatMap.png"&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%2Fillustrated.dev%2Fstatic%2F4545d85c19fc51e47be76303c4261396%2F2f950%2Fes2019-sketchnotes-5-Trim.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%2Fillustrated.dev%2Fstatic%2F4545d85c19fc51e47be76303c4261396%2F2f950%2Fes2019-sketchnotes-5-Trim.png"&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%2Fillustrated.dev%2Fstatic%2F56bc0b6b98b8fbe64bc01a5cac419420%2F2f950%2Fes2019-sketchnotes-6-Symbol.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%2Fillustrated.dev%2Fstatic%2F56bc0b6b98b8fbe64bc01a5cac419420%2F2f950%2Fes2019-sketchnotes-6-Symbol.png"&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%2Fillustrated.dev%2Fstatic%2Fc871355cc8bf6bce402f8bd0f67b80ca%2F2f950%2Fes2019-sketchnotes-7-ObjectEntries.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%2Fillustrated.dev%2Fstatic%2Fc871355cc8bf6bce402f8bd0f67b80ca%2F2f950%2Fes2019-sketchnotes-7-ObjectEntries.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Note that the space theme going on here has less to do with ES2019 and more to do with me watching &lt;a href="https://www.imdb.com/title/tt8760684/" rel="noopener noreferrer"&gt;Apollo 11&lt;/a&gt; last week. Five stars, would recommend)&lt;/p&gt;




</description>
      <category>es2019</category>
      <category>illustration</category>
      <category>javascript</category>
      <category>arrays</category>
    </item>
  </channel>
</rss>
