<?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: Dave Follett</title>
    <description>The latest articles on Forem by Dave Follett (@davefollett).</description>
    <link>https://forem.com/davefollett</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%2F88861%2Fa882125b-f79c-4bb9-85a2-b820d56939a5.png</url>
      <title>Forem: Dave Follett</title>
      <link>https://forem.com/davefollett</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/davefollett"/>
    <language>en</language>
    <item>
      <title>My Advent of Code 2019 Approach</title>
      <dc:creator>Dave Follett</dc:creator>
      <pubDate>Thu, 05 Dec 2019 05:00:00 +0000</pubDate>
      <link>https://forem.com/davefollett/my-advent-of-code-2019-approach-4gj6</link>
      <guid>https://forem.com/davefollett/my-advent-of-code-2019-approach-4gj6</guid>
      <description>&lt;p&gt;2018 was my first experience with &lt;a href="https://adventofcode.com/" rel="noopener noreferrer"&gt;Advent of Code&lt;/a&gt;. It sounded like &lt;a href="https://www.codewars.com/" rel="noopener noreferrer"&gt;Codewars&lt;/a&gt;, so I jumped right in. Wow, I was really impressed. Not only were the puzzles fun, but I really like these aspects as well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Most of the data sets are large, your algorithms and data structures matter.&lt;/strong&gt; With modern computing, it can be easy to skip or not be worth the time to optimize code. But this doesn’t mean we shouldn’t practice it and the Advent of Code puzzles tend to put you into situations where it’s necessary to do so.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The puzzle descriptions can be long and contain lots of details not necessary to solve the puzzle.&lt;/strong&gt; Some folks don’t like this but I do. Raise your hand ✋ if you have been given a vaguely worded specification that you have to comb through to find the real requirements. Like it or not, some degree of detective 🕵️ work is part of a software developer’s job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Each day’s part 2 puzzle provides a twist on the part 1 puzzle.&lt;/strong&gt; Sometimes its a small adjustment to solve part 2, but sometimes it’s a near rewrite. Though making a major change can be frustrating, this frequently happens for software applications whether it be the customer changing their mind or through the addition of new features.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎄 2018 Approach 🎄
&lt;/h2&gt;

&lt;p&gt;I didn’t have much of an approach last year, but I did decide to do the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use JavaScript as my language.&lt;/li&gt;
&lt;li&gt;Do all development directly on &lt;a href="https://codesandbox.io/" rel="noopener noreferrer"&gt;CodeSandbox&lt;/a&gt; using the &lt;a href="https://nodejs.org/" rel="noopener noreferrer"&gt;NodeJS&lt;/a&gt; template. The idea here was to avoid setting up a local development environment, but still have an easy way to share my solutions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎅 2019 Approach 🎅
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Be more organized.&lt;/strong&gt; Last year, I was careless by not using version control, sometimes I broke part 1 to solve part 2, and it was hard to make my code run different solutions. This year I’m not doing those things and my code can be found in the following &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/davefollett/advent-of-code" rel="noopener noreferrer"&gt;https://github.com/davefollett/advent-of-code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Setup a local development environment but still upload it to CodeSandbox.&lt;/strong&gt; I decided to build on last year’s NodeJS web application by adding &lt;a href="https://expressjs.com/" rel="noopener noreferrer"&gt;ExpressJS&lt;/a&gt; and making it more visually appealing (thanks to &lt;a href="https://nostalgic-css.github.io/NES.css/" rel="noopener noreferrer"&gt;NES.css&lt;/a&gt;). Check it running live on CodeSandbox below. It’s also easy to run locally.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/019-advent-of-code-9l90x"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don’t stress out about it.&lt;/strong&gt; Last year, I put too much pressure on myself to solve each day’s puzzles as quickly as possible. This year I want to focus on creating good working solutions. If I get them done the same day they release, great. But if not, that’s okay, too. The creator of Advent of Code, &lt;a href="https://twitter.com/ericwastl" rel="noopener noreferrer"&gt;Eric Wastl&lt;/a&gt;, recently gave good advice regarding this on Twitter:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;h1&gt;
  
  
  AdventOfCode tips:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Focus on learning; don’t worry about the leaderboard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It’s okay to skip puzzles!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It’s okay to ask for help!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you don’t know how to solve something, try breaking it into smaller parts. Repeat as necessary.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ve got this! 🌟&lt;/p&gt;

&lt;strong&gt;@ericwastl&lt;/strong&gt;&lt;cite&gt;&lt;a href="https://twitter.com/ericwastl/status/1202297198236573697" rel="noopener noreferrer"&gt;twitter.com/ericwastl/status/1202297198236573697&lt;/a&gt;&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🤔 Parting Thoughts 🤔
&lt;/h2&gt;

&lt;p&gt;That pretty much wraps up how I’m approaching Advent of Code this year. Last year, I earned ⭐⭐ on 10 of the first 11 days (I completely skipped day 9). I hoping 🤞 to do about that well this year, but I’m not going to sweat it if I don’t.&lt;/p&gt;

&lt;p&gt;Good luck and feel free to contact me if you need any hints or help.&lt;/p&gt;

</description>
      <category>adventofcode</category>
      <category>javascript</category>
      <category>node</category>
      <category>challenge</category>
    </item>
    <item>
      <title>What have you crashed?</title>
      <dc:creator>Dave Follett</dc:creator>
      <pubDate>Tue, 11 Jun 2019 13:00:11 +0000</pubDate>
      <link>https://forem.com/davefollett/what-have-you-crashed-3308</link>
      <guid>https://forem.com/davefollett/what-have-you-crashed-3308</guid>
      <description>&lt;p&gt;Over the years, when someone crashes something at work I (semi-jokingly) say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you don't crash something every so often, you aren't working hard enough.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And while that might not be 💯 percent correct, I feel it helps put the person at ease, especially if the person is new to the company.  The truth is, it has and will happen to everyone.&lt;/p&gt;

&lt;p&gt;So, have you 💥 crashed 💥 something important? Or brought the network to its knees?  I'd ❤️ to hear about it.&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Learning MDX Deck: Layouts</title>
      <dc:creator>Dave Follett</dc:creator>
      <pubDate>Wed, 05 Jun 2019 04:00:00 +0000</pubDate>
      <link>https://forem.com/davefollett/learning-mdx-deck-layouts-1f2g</link>
      <guid>https://forem.com/davefollett/learning-mdx-deck-layouts-1f2g</guid>
      <description>&lt;p&gt;Welcome back 👋. In this installment of &lt;em&gt;Learning MDX Deck&lt;/em&gt;, I will go over &lt;a href="https://github.com/jxnblk/mdx-deck" rel="noopener noreferrer"&gt;MDX Deck’s&lt;/a&gt; built-in layouts. It is also possible to create your own layouts. I won’t cover that here, but you can read about it in the &lt;a href="https://github.com/jxnblk/mdx-deck/blob/master/docs/layouts.md" rel="noopener noreferrer"&gt;MDX Deck documentation&lt;/a&gt;. So lets get right to it. Here is what MDX Deck provides for &lt;a href="https://github.com/jxnblk/mdx-deck/blob/master/docs/components.md#layouts" rel="noopener noreferrer"&gt;layouts&lt;/a&gt; out of the box.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Default &lt;/li&gt;
&lt;li&gt;Invert&lt;/li&gt;
&lt;li&gt;Split&lt;/li&gt;
&lt;li&gt;SplitRight&lt;/li&gt;
&lt;li&gt;FullScreenCode&lt;/li&gt;
&lt;li&gt;Horizontal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Layouts for MDX Deck are React components. To use a one, you first need to import it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;LayoutName&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="s1"&gt;mdx-deck/layouts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because each slide can use a different layout, multiple layouts can also be imported all at once.&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;LayoutName1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;LayoutName2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;LayoutName2&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="s1"&gt;mdx-deck/layouts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the layout is imported, place your content inside its component tags as shown below, making sure to place newlines around content items. Failure to use newlines can cause the slide to render incorrectly. Optionally, you can put content above or below the layout component.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# SLIDE TITLE

&amp;lt;LayoutName&amp;gt;

Add your content here.

&amp;lt;/LayoutName&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that we know how to use the MDX Deck layouts, lets take a look at all the built-in options.&lt;/p&gt;

&lt;h2&gt;
  
  
  Default
&lt;/h2&gt;

&lt;p&gt;The absence of specifying a layout component will provide the default behavior of stacking all content vertically on the slide from top to bottom.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# LAYOUT: Default

1. All content stacks
1. Top to bottom
1. On the slide
1. This is an ordered list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F06%2F05%2Fmdx-deck-layouts%2Flayout-default.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F06%2F05%2Fmdx-deck-layouts%2Flayout-default.png" alt="Example of MDX Deck's Default Layout Rendered" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Example of MDX Deck's Default Layout Rendered



&lt;h2&gt;
  
  
  Invert
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;Invert&lt;/code&gt; layout stacks content vertically like the default layout but it reverses the theme’s foreground and background colors.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Invert } from 'mdx-deck/layouts'

&amp;lt;Invert&amp;gt;

# LAYOUT: Invert

The foreground and background colors are inverted from the theme.

&amp;lt;/Invert&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F06%2F05%2Fmdx-deck-layouts%2Flayout-invert.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F06%2F05%2Fmdx-deck-layouts%2Flayout-invert.png" alt="Example of MDX Deck's Invert Layout Rendered" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Example of MDX Deck's Invert Layout Rendered



&lt;h2&gt;
  
  
  Split
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;Split&lt;/code&gt; layout divides the slide into two vertical columns; left and right. The first item will display on the left and all additional items will be stacked vertically on the right.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Split } from 'mdx-deck/layouts'

# LAYOUT: Split

&amp;lt;Split&amp;gt;

![](https://media.giphy.com/media/1CrejqXxVZs9q/giphy.gif)

* Otter Elevates
* For The 🏀 Dunk

&amp;lt;/Split&amp;gt;

First item displayed to the ⬅️, all remaining to the ➡️
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F06%2F05%2Fmdx-deck-layouts%2Flayout-split.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F06%2F05%2Fmdx-deck-layouts%2Flayout-split.png" alt="Example of MDX Deck's Split Layout Rendered" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Example of MDX Deck's Split Layout Rendered



&lt;h2&gt;
  
  
  SplitRight
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;SplitRight&lt;/code&gt; layout is the reverse of the &lt;code&gt;Split&lt;/code&gt; layout. The first item will display on the right and all additional items will be stacked vertically on the left.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { SplitRight } from 'mdx-deck/layouts'

# LAYOUT: SplitRight

&amp;lt;SplitRight&amp;gt;

![](https://media.giphy.com/media/vjKrEyy2NVblS/giphy.gif)

* So Much Otter
* Cuteness 😍

&amp;lt;/SplitRight&amp;gt;

First item displayed to the ➡️, all remaining to the ⬅️
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F06%2F05%2Fmdx-deck-layouts%2Flayout-splitright.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F06%2F05%2Fmdx-deck-layouts%2Flayout-splitright.png" alt="Example of MDX Deck's SplitRight Layout Rendered" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Example of MDX Deck's SplitRight Layout Rendered



&lt;h2&gt;
  
  
  FullScreenCode
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;FullScreenCode&lt;/code&gt; layout will display code blocks fenced by three back-ticks using the full screen.&lt;/p&gt;

&lt;pre&gt;
import { SplitRight } from 'mdx-deck/layouts'

&amp;lt;FullScreenCode&amp;gt;


```js
   const arrayOfNumbers = [0, 1, 2, 3, 4, 5];

   const sum = arrayOfNumbers.reduce(function (accumulator, currentValue) {
     return accumulator + currentValue;
   });

   console.log("The sum is: " + sum);
```


&amp;lt;/FullScreenCode&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F06%2F05%2Fmdx-deck-layouts%2Flayout-fullscreencode.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F06%2F05%2Fmdx-deck-layouts%2Flayout-fullscreencode.png" alt="Example of MDX Deck's FullScreenCode Layout Rendered" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Example of MDX Deck's FullScreenCode Layout Rendered



&lt;h2&gt;
  
  
  Horizontal
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;Horizontal&lt;/code&gt; layout is the reverse of the default layout. Inside of stacking content vertically (top to bottom), it stacks the content left to right horizontally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# LAYOUT: Horizontal

&amp;lt;Horizontal&amp;gt;

![](https://media.giphy.com/media/26gssIytJvy1b1THO/giphy.gif)

![](https://media.giphy.com/media/26gssIytJvy1b1THO/giphy.gif)

![](https://media.giphy.com/media/26gssIytJvy1b1THO/giphy.gif)

&amp;lt;/Horizontal&amp;gt;

Each item displayed into its own column

👋 Hi Mr. Otter 👋
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F06%2F05%2Fmdx-deck-layouts%2Flayout-horizontal.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F06%2F05%2Fmdx-deck-layouts%2Flayout-horizontal.png" alt="Example of MDX Deck's Horizontal Layout Rendered" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Example of MDX Deck's Horizontal Layout Rendered



&lt;h2&gt;
  
  
  🏁 Conclusion
&lt;/h2&gt;

&lt;p&gt;As you can see, MDX Deck provides a solid set of layouts that will cover most presentation needs. All the code used for this article can be viewed using the following references.&lt;/p&gt;

&lt;h3&gt;
  
  
  CodeSandbox.io
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/learning-mdx-deck-layouts-i87ih"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/davefollett/learning-mdx-deck-layouts" rel="noopener noreferrer"&gt;https://github.com/davefollett/learning-mdx-deck-layouts&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployed to Netlify
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://learning-mdx-deck-layouts.davefollett.io" rel="noopener noreferrer"&gt;https://learning-mdx-deck-layouts.davefollett.io&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔜 Up Next
&lt;/h2&gt;

&lt;p&gt;Next in the &lt;em&gt;Learning MDX Deck&lt;/em&gt; series we will explore MDX Deck’s built in theme options. I’ll add a link here when it’s published.&lt;/p&gt;

</description>
      <category>react</category>
      <category>mdx</category>
      <category>slides</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Learning MDX Deck: Deploy To Netlify</title>
      <dc:creator>Dave Follett</dc:creator>
      <pubDate>Mon, 20 May 2019 04:00:00 +0000</pubDate>
      <link>https://forem.com/davefollett/learning-mdx-deck-deploy-to-netlify-5e78</link>
      <guid>https://forem.com/davefollett/learning-mdx-deck-deploy-to-netlify-5e78</guid>
      <description>&lt;p&gt;In the previous article, &lt;a href="https://dev.to/davefollett/mdx-deck-getting-started-4hn3"&gt;Learning MDX Deck: Getting Started&lt;/a&gt;, I showed how to get up and running with &lt;a href="https://github.com/jxnblk/mdx-deck" rel="noopener noreferrer"&gt;MDX Deck&lt;/a&gt;. MDX Deck is a tool for creating presentation deck websites using &lt;a href="https://mdxjs.com/" rel="noopener noreferrer"&gt;MDX&lt;/a&gt;. But what good is creating a super sweet presentation if you can’t easily show it off to your friends? Let’s take the exact code from &lt;a href="https://dev.to/davefollett/mdx-deck-getting-started-4hn3"&gt;Learning MDX Deck: Getting Started&lt;/a&gt; and deploy it to &lt;a href="https://netlify.com" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ Create a Git repository
&lt;/h2&gt;

&lt;p&gt;Netlify has a few deployment options, but my favorite is &lt;a href="https://www.netlify.com/docs/continuous-deployment/" rel="noopener noreferrer"&gt;Continuous Deployment&lt;/a&gt;. Netlify will watch your Git repository and when it detects a change, it will build and redeploy your site automatically. Netlify currently supports the following Git providers for Continuous Deployment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bitbucket.org/" rel="noopener noreferrer"&gt;Bitbucket&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;How to setting up a Git repository is well-documented online, so I will not cover it here but I will provide a link for all three options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://help.github.com/en/articles/adding-an-existing-project-to-github-using-the-command-line" rel="noopener noreferrer"&gt;Add existing project to GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.gitlab.com/ee/gitlab-basics/create-project.html#push-to-create-a-new-project" rel="noopener noreferrer"&gt;Push to create a new GitLab project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confluence.atlassian.com/bitbucketserver/importing-code-from-an-existing-project-776640909.html" rel="noopener noreferrer"&gt;Import code to Bitbucket from an existing project&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  2️⃣ Add a build script
&lt;/h2&gt;

&lt;p&gt;Now that the project is setup in Git, we need to add the following build script to our &lt;code&gt;package.json&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"build": "mdx-deck build deck.mdx",
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The build script will export our presentation deck as a static HTML page with JS bundle that Netlify can deploy. With this change, the &lt;code&gt;scripts&lt;/code&gt; section of &lt;code&gt;package.json&lt;/code&gt; will now look like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
    "start": "mdx-deck deck.mdx",
    "build": "mdx-deck build deck.mdx",
    "test": "echo \"Error: no test specified\" &amp;amp;&amp;amp; exit 1"
  },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running the build script can now be done with the following command.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;The results of the build script will be placed into a newly created &lt;code&gt;dist/&lt;/code&gt; folder so make sure you include it in your &lt;code&gt;.gitignore&lt;/code&gt; file. Also, make sure to push these changes to your repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  3️⃣ Add a netlify.toml file
&lt;/h2&gt;

&lt;p&gt;Netlify uses an option configuration file to guide building and deploying sites. For this project it’s not strictly required, but it will make setting up Netlify easier in the next section. Our configuration file contains just two options; the build command and what directory to publish. Just place the following lines into a file named &lt;code&gt;netlify.toml&lt;/code&gt; in the root of the project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[build]
  command = "npm run build"
  publish = "dist/"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are interested in reading more about &lt;code&gt;netlify.toml&lt;/code&gt; you can find it &lt;a href="https://www.netlify.com/docs/netlify-toml-reference/" rel="noopener noreferrer"&gt;here&lt;/a&gt; in Netlify’s documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  4️⃣ Setup Netlify and deploy
&lt;/h2&gt;

&lt;p&gt;Now that we have our project in a Git repository with a build script and Netlify configuration, we are ready to deploy to Netlify. If you don’t have an account, go ahead and sign up &lt;a href="https://app.netlify.com/signup" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Once logged in, on the sites tab, click the &lt;a href="https://app.netlify.com/start" rel="noopener noreferrer"&gt;new site from Git&lt;/a&gt; button located in the upper right of the page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F05%2F20%2Fmdx-deck-deploy-to-netlify%2Fnetlify-new-site-from-git.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F05%2F20%2Fmdx-deck-deploy-to-netlify%2Fnetlify-new-site-from-git.png" alt="Netlify's deploy new site button" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Netlify's deploy new site button



&lt;p&gt;Next, select your Git provider: GitHub, GitLab, or Bitbucket.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F05%2F20%2Fmdx-deck-deploy-to-netlify%2Fnetlify-select-git-provider.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F05%2F20%2Fmdx-deck-deploy-to-netlify%2Fnetlify-select-git-provider.png" alt="Netlify's git provider options" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Netlify's git provider options



&lt;p&gt;With your Git provider selected, now select your repository. Note, you &lt;em&gt;may&lt;/em&gt; have to configure your Git provider to have access to your repository in order to select it for deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F05%2F20%2Fmdx-deck-deploy-to-netlify%2Fnetlify-select-git-repository.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F05%2F20%2Fmdx-deck-deploy-to-netlify%2Fnetlify-select-git-repository.png" alt="Netlify's git repository selections" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Netlify's git repository selections



&lt;p&gt;The last step to deploying is to select our build options. Because we included a &lt;code&gt;netlify.toml&lt;/code&gt; configuration file, all the build options will already be set and all we need to do is click the &lt;code&gt;Deploy site&lt;/code&gt; button at the bottom of the page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F05%2F20%2Fmdx-deck-deploy-to-netlify%2Fnetlify-deploy-site.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F05%2F20%2Fmdx-deck-deploy-to-netlify%2Fnetlify-deploy-site.png" alt="Netlify's deploy site button" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Netlify's deploy site button



&lt;p&gt;After approximately a minute, the next screen will indicate that your site has been deployed and provide its URL as shown in the next screenshot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F05%2F20%2Fmdx-deck-deploy-to-netlify%2Fnetlify-site-deployed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F05%2F20%2Fmdx-deck-deploy-to-netlify%2Fnetlify-site-deployed.png" alt="Netlify's site deployed overview" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Netlify's site deployed overview



&lt;h2&gt;
  
  
  🏁 Conclusion
&lt;/h2&gt;

&lt;p&gt;Now that you have Netlify configured to deploy from your Git repository, anytime you make a change to the master branch on your Git Provider, Netlify will automatically rebuild your MDX Deck site and deploy it.&lt;/p&gt;

&lt;p&gt;Reference Links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All code used for this article can be found on GitHub here:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/davefollett/learning-mdx-deck-getting-started" rel="noopener noreferrer"&gt;https://github.com/davefollett/learning-mdx-deck-getting-started&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;My deployment URL for this MDX Deck site can be found here:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learning-mdx-deck-getting-started.davefollett.io" rel="noopener noreferrer"&gt;https://learning-mdx-deck-getting-started.davefollett.io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔜 Up Next
&lt;/h2&gt;

&lt;p&gt;Next in the &lt;code&gt;Learning MDX Deck&lt;/code&gt; series we will explore MDX Deck’s built in layout options for each slide. I’ll add a link here when it’s published.&lt;/p&gt;

</description>
      <category>react</category>
      <category>mdx</category>
      <category>slides</category>
      <category>netlify</category>
    </item>
    <item>
      <title>Learning MDX Deck: Getting Started</title>
      <dc:creator>Dave Follett</dc:creator>
      <pubDate>Sun, 12 May 2019 04:00:00 +0000</pubDate>
      <link>https://forem.com/davefollett/mdx-deck-getting-started-4hn3</link>
      <guid>https://forem.com/davefollett/mdx-deck-getting-started-4hn3</guid>
      <description>&lt;h2&gt;
  
  
  🙋 What is MDX Deck?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://mdx-deck.jxnblk.com/" rel="noopener noreferrer"&gt;MDX Deck&lt;/a&gt; was created by Brent Jackson (&lt;a href="https://twitter.com/jxnblk" rel="noopener noreferrer"&gt;@jxnblk&lt;/a&gt;) and is a tool for creating presentation deck websites using &lt;a href="https://mdxjs.com/" rel="noopener noreferrer"&gt;MDX&lt;/a&gt;. &lt;a href="https://mdxjs.com/" rel="noopener noreferrer"&gt;MDX&lt;/a&gt; provides the ability to use &lt;a href="https://reactjs.org/" rel="noopener noreferrer"&gt;React’s&lt;/a&gt; &lt;a href="https://reactjs.org/docs/introducing-jsx.html" rel="noopener noreferrer"&gt;JSX&lt;/a&gt; inside &lt;a href="https://en.wikipedia.org/wiki/Markdown" rel="noopener noreferrer"&gt;Markdown&lt;/a&gt;. The combination creates a powerful experience for building a web-based presentation deck. Here are a list of features, as listed on the &lt;a href="https://github.com/jxnblk/mdx-deck" rel="noopener noreferrer"&gt;MDX Deck GitHub Page&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📝 Write presentations in markdown&lt;/li&gt;
&lt;li&gt;⚛ Import and use React components&lt;/li&gt;
&lt;li&gt;💅 Customizable themes and components&lt;/li&gt;
&lt;li&gt;0️⃣ Zero-config CLI&lt;/li&gt;
&lt;li&gt;💁‍♀️ Presenter mode￼&lt;/li&gt;
&lt;li&gt;📓 Speaker notes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏗️ Installation
&lt;/h2&gt;

&lt;p&gt;First make sure you have &lt;a href="https://nodejs.org/en/" rel="noopener noreferrer"&gt;node&lt;/a&gt; installed and paste the following as &lt;code&gt;package.json&lt;/code&gt; into a new file. Alternatively, you can run: &lt;code&gt;npm init&lt;/code&gt; to generate a &lt;code&gt;package.json&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"demo-mdx-deck"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Demo MDX Deck"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Error: no test specified&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;&amp;amp; exit 1"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Dave Follett"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MIT"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, install mdx-deck with the following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -D mdx-deck
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🏃‍♀️ Getting Started
&lt;/h2&gt;

&lt;p&gt;To create a simple presentation, create a file named &lt;code&gt;deck.mdx&lt;/code&gt; and copy the following contents into it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# SLIDE 1 - LIST

* I am a bullet list item
* I am another bullet list item
* I am another bullet list item

---

# SLIDE 2 - HEADERS

## Header 2
### Header 3
#### Header 4
##### Header 5

---

# SLIDE 3 - TABLE

| Fruit         | Weight   | Cost  |
| ------------- | ---------| ----- |
| Strawberries  | 16oz     | $3.99 |
| Blueberries   | 8oz      | $2.99 |
| Grapes        | 12oz     | $3.75 |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each slide is separated by &lt;code&gt;---&lt;/code&gt;. To see the presentation in action, add the following to the scripts section of &lt;code&gt;package.json&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
  "start": "mdx-deck deck.mdx"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And run the following command to start the development server.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;The presentation can be viewed at &lt;code&gt;http://localhost:8080/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F05%2F12%2Fmdx-deck-getting-started%2Fmdx-deck-demo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F05%2F12%2Fmdx-deck-getting-started%2Fmdx-deck-demo.gif" alt="Animation of the MDX Deck example" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⌨️ Keyboard Shortcuts
&lt;/h2&gt;

&lt;p&gt;The following keyboard shortcuts can be used to interact with the presentation.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Left Arrow&lt;/td&gt;
&lt;td&gt;Go to previous slide (or step in Appear)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Right Arrow&lt;/td&gt;
&lt;td&gt;Go to next slide (or step in Appear)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Space&lt;/td&gt;
&lt;td&gt;Go to next slide (or step in Appear)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alt + P&lt;/td&gt;
&lt;td&gt;Toggle Presenter Mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alt + O&lt;/td&gt;
&lt;td&gt;Toggle Overview Mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alt + G&lt;/td&gt;
&lt;td&gt;Toggle Grid Mode&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🏁 Conclusion
&lt;/h2&gt;

&lt;p&gt;As you can see, you can get up and running with MDX Deck pretty quickly. There is a lot more to MDX Deck than I have shown here. Coming up 🔜, I will be exploring more of the features it provides, such as, importing react components, layouts, themes, speaker notes, and deploying to &lt;a href="http://netlify.com" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>react</category>
      <category>mdx</category>
      <category>slides</category>
      <category>javascript</category>
    </item>
    <item>
      <title>4 Tips For Workplace Pranks</title>
      <dc:creator>Dave Follett</dc:creator>
      <pubDate>Tue, 19 Mar 2019 04:00:00 +0000</pubDate>
      <link>https://forem.com/davefollett/4-tips-for-workplace-pranks-5cc8</link>
      <guid>https://forem.com/davefollett/4-tips-for-workplace-pranks-5cc8</guid>
      <description>&lt;p&gt;Any workplace can get stale, boring or in a rut. I think software development can be particularly susceptible because the high level of concentration needed to write code. Over the years I’ve found that that small breaks from the routine can help clear my head and allow me to better focus on my work. This typically means working a few minutes on the crossword or jigsaw puzzles in the break room when getting a coffee. Sometimes, it takes more than a puzzle to shake things up. That’s when I like to play harmless pranks on my coworkers. If done right, not only can this cause a break from the routine but it can crack a few smiles and cause a little laughter.&lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ Pick the right person
&lt;/h2&gt;

&lt;p&gt;Pick someone you have a good relationship with. Someone who you know has a sense of humor, someone who is isn’t going to get upset. Don’t pick the new guy or gal. If you think there is the slightest chance they will be upset, save yourself and HR from the potential drama, and pick a new target.&lt;/p&gt;

&lt;h2&gt;
  
  
  2️⃣ Be neutral and non-offensive
&lt;/h2&gt;

&lt;p&gt;A prank should be harmless. You should be laughing &lt;em&gt;with&lt;/em&gt; the target not at the target. Steer clear of religion, politics, or any other personal topics. Always err on the side of caution.&lt;/p&gt;

&lt;h2&gt;
  
  
  3️⃣ Don’t interfere with the work day
&lt;/h2&gt;

&lt;p&gt;A prank should cause some laughs and be over quickly so the work day can continue. The last thing you want to do is interfere with your employer’s bottom line by causing a coworker to be unable to work for an extended period of time. That’s a good way to get fired. If the prank requires an elaborate set up, do it on your time not your employer’s. Either come in early or work late. Also, a good prank should not cause any damage. Once it’s over, it should be like it never happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  4️⃣ A little goes a long way
&lt;/h2&gt;

&lt;p&gt;Don’t over do it by playing a prank too often. Even harmless pranks can get old fast if you are pulling them too often.&lt;/p&gt;

&lt;h2&gt;
  
  
  👀 Getting Started
&lt;/h2&gt;

&lt;p&gt;In case you are wondering how to get started while following all my rules, I will share with you one of my best pranks. With help from an accomplice, we secretly snuck through the office and placed googly eyes on various objects. Look at this stapler and potted plant. Try not to laugh, I dare you!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F03%2F19%2F4-tips-for-workplace-pranks%2Fpotted-plant-stapler.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F03%2F19%2F4-tips-for-workplace-pranks%2Fpotted-plant-stapler.jpg" alt="Googly eyes on potted plant and stapler" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Googly eyes on potted plant and stapler



&lt;p&gt;LEGOs are popular where I work and proved to be easy targets. Special thanks to their owners for being good sports!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F03%2F19%2F4-tips-for-workplace-pranks%2Fbb8-k2s0-star-destroyer.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F03%2F19%2F4-tips-for-workplace-pranks%2Fbb8-k2s0-star-destroyer.jpg" alt="Googly eyes on Star Wars LEGO sets (BB-8, K-2SO, Star Destroyer)" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Googly eyes on Star Wars LEGO sets (BB-8, K-2SO, Star Destroyer)



&lt;p&gt;What is a safer target than a common area bathroom sign?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F03%2F19%2F4-tips-for-workplace-pranks%2Fbathroom-sign.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F03%2F19%2F4-tips-for-workplace-pranks%2Fbathroom-sign.jpg" alt="Googly eyes on bathroom sign" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
Googly eyes on bathroom sign



&lt;p&gt;It took a few hours for the first set of googly eyes to get spotted and it didn’t take long for the investigation to target me. I caved immediately when questioned, I just couldn’t keep it in.&lt;/p&gt;

&lt;p&gt;Perhaps my accomplice and I had the most fun, finding targets and causing distractions so the other could place the googly eyes, but the bottom line was we created some fun around the office in a harmless way. If we are all going to be working day in and day out together, it’s good to be able to share a few laughs along the way.&lt;/p&gt;

&lt;p&gt;Do you have any good workplace pranks? Please please pretty please share them with me.&lt;/p&gt;

</description>
      <category>tips</category>
      <category>fun</category>
      <category>culture</category>
      <category>googlyeyes</category>
    </item>
    <item>
      <title>My Favorite Vue Resources</title>
      <dc:creator>Dave Follett</dc:creator>
      <pubDate>Sat, 09 Mar 2019 05:00:00 +0000</pubDate>
      <link>https://forem.com/davefollett/my-favorite-vue-resources-big</link>
      <guid>https://forem.com/davefollett/my-favorite-vue-resources-big</guid>
      <description>&lt;p&gt;To learn about Vue, I started following interesting people in the Vue community, listened to podcasts, and completed several tutorials. I thought it might be helpful to others to share some my favorite of those Vue resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  👩 👨 People To Follow
&lt;/h2&gt;

&lt;p&gt;The Vue community is full of people who are not just talented developers but also welcoming, thoughtful, and generous. This list could go on and on but I’ve pared it down to the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/youyuxi" rel="noopener noreferrer"&gt;Evan You (@youyuxi)&lt;/a&gt; - Evan is the creator and leader of &lt;a href="https://vuejs.org/" rel="noopener noreferrer"&gt;Vue.js&lt;/a&gt;. With Vue version 3 under heavy development, following him on twitter is a great way to keep up to date on what is coming.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/sarah_edo" rel="noopener noreferrer"&gt;Sarah Drasner (@sarah_edo)&lt;/a&gt; - Sarah is a Vue Core Team member and is an extremely talented writer and speaker. It’s hard to put into words the quality of her content, just check out her website at &lt;a href="https://sarahdrasnerdesign.com" rel="noopener noreferrer"&gt;https://sarahdrasnerdesign.com&lt;/a&gt; and follow her on twitter.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/chrisvfritz" rel="noopener noreferrer"&gt;Chris Fritz (@chrisvfritz)&lt;/a&gt; - Chris is a Vue Core Team member, &lt;a href="https://devchat.tv/views-on-vue/" rel="noopener noreferrer"&gt;Views on Vue&lt;/a&gt; podcast panelist, person responsible for the high quality of the Vue Documentation, and fellow Michigander.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/Akryum" rel="noopener noreferrer"&gt;Guillaume Chau (@akryum)&lt;/a&gt; - Guillaume is a Vue Core Team member and the author and/or major contributor to several prominent Vue libraries such as &lt;a href="https://github.com/Akryum/vue-apollo" rel="noopener noreferrer"&gt;vue-apollo&lt;/a&gt;, &lt;a href="https://github.com/vuejs/vue-cli" rel="noopener noreferrer"&gt;vue-cli&lt;/a&gt;, and &lt;a href="https://github.com/vuejs/vue-devtools" rel="noopener noreferrer"&gt;vue-devtools&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/shortdiv" rel="noopener noreferrer"&gt;Divya Sasidharan (shortdiv)&lt;/a&gt; - Divya is a &lt;a href="https://devchat.tv/views-on-vue/" rel="noopener noreferrer"&gt;Views on Vue&lt;/a&gt; podcast panelist and developer advocate at Netlify.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/MarinaMosti" rel="noopener noreferrer"&gt;Marina Mosti (@marinamosti)&lt;/a&gt; - I recently discovered Marina on dev.to by reading her very well written &lt;a href="https://dev.to/vuevixens/hands-on-vuejs-for-beginners-part-1-2j2g"&gt;Hands-on Vue.js for Beginners&lt;/a&gt; series. She is also part of &lt;a href="https://vuevixens.org/" rel="noopener noreferrer"&gt;Vue Vixens&lt;/a&gt;, which I really admire.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎧 Podcasts To Listen To
&lt;/h2&gt;

&lt;p&gt;I started listening to podcasts about 2 years ago as a way to escape the repetitive drudgery of radio content and I’m so glad I did. It’s a great way for me to consume content while doing activities that don’t require my full attention. Like commuting to work, mowing the lawn, or waiting in the lobby while my daughters are participating in after school activities. Here is a list of my Vue favorite podcasts or specific episodes on Vue:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://devchat.tv/views-on-vue/" rel="noopener noreferrer"&gt;Views on Vue&lt;/a&gt; - This Vue specific podcast is apart of DevChat.tv’s network of podcasts and releases weekly. It follows the format of having a different guest each week that is interviewed by a panel people.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://news.vuejs.org/" rel="noopener noreferrer"&gt;Official Vue News&lt;/a&gt; - Released weekly, this 5 to 7 minute podcast keeps me up-to-date with the latest Vue news and tutorials. 🚨 Shameless Plug Alert 🚨 My series, &lt;a href="https://dev.to/davefollett/a-new-vue-on-javascript30---getting-started-4o61"&gt;A New Vue on JavaScript30&lt;/a&gt; was featured on &lt;a href="https://news.vuejs.org/issues/109" rel="noopener noreferrer"&gt;episode 109&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://cynicaldeveloper.com/podcast/99/" rel="noopener noreferrer"&gt;Cynical Developer #99 (10-15-2018)&lt;/a&gt; - &lt;a href="https://twitter.com/JamesStuddart" rel="noopener noreferrer"&gt;James Studdart (@jamesstuddart)&lt;/a&gt; interviews &lt;a href="https://twitter.com/FudgeLyons" rel="noopener noreferrer"&gt;Brandon Lyons (@fudgelyons)&lt;/a&gt; about Vue.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://qit.cloud/search/vue" rel="noopener noreferrer"&gt;Vue podcast list via QIT.cloud&lt;/a&gt; - &lt;a href="https://qit.cloud" rel="noopener noreferrer"&gt;QIT.cloud&lt;/a&gt; is a progressive web application (PWA) that can be used to search for podcasts by topic. At the time of writing, more than 200 podcasts Vue results are provided.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📑 Tutorials &amp;amp; Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://vuejs.org/v2/guide/" rel="noopener noreferrer"&gt;Official Vue Documentation&lt;/a&gt; - Some of the best documentation around, make sure to also check out the &lt;a href="https://vuejs.org/v2/style-guide/" rel="noopener noreferrer"&gt;Style Guide&lt;/a&gt;, &lt;a href="https://vuejs.org/v2/examples/" rel="noopener noreferrer"&gt;Examples&lt;/a&gt;, and &lt;a href="https://vuejs.org/v2/cookbook/" rel="noopener noreferrer"&gt;Cookbook&lt;/a&gt; sections.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://alligator.io/vuejs/" rel="noopener noreferrer"&gt;Alligator.io&lt;/a&gt; - Alligator.io provides quick and to-the-point tutorials on Vue and other web technologies.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vuejs/awesome-vue" rel="noopener noreferrer"&gt;Awesome Vue&lt;/a&gt; - A curated list of awesome things related to Vue.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://scotch.io/tag/vue" rel="noopener noreferrer"&gt;Scotch.io&lt;/a&gt; - Scotch.io provides a large catalog of great courses and tutorials on Vue and other web technologies.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.vuemastery.com/" rel="noopener noreferrer"&gt;Vue Mastery&lt;/a&gt; - Vue Mastery is a great source of high quality free and paid video tutorials about Vue. A portion of their proceeds are donated to Vue, so supporting them also helps to support Vue.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/t/vue"&gt;Dev.to&lt;/a&gt; - Dev.to is a fantastic community for developers to share articles, questions, discussions on any topic, including more than 550 articles on Vue.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vue</category>
      <category>resources</category>
      <category>tutorials</category>
      <category>podcast</category>
    </item>
    <item>
      <title>2019 Self Improvement Plan</title>
      <dc:creator>Dave Follett</dc:creator>
      <pubDate>Sun, 24 Feb 2019 05:00:00 +0000</pubDate>
      <link>https://forem.com/davefollett/2019-self-improvement-plan-4c09</link>
      <guid>https://forem.com/davefollett/2019-self-improvement-plan-4c09</guid>
      <description>&lt;p&gt;Before last year, I had not put together an improvement plan for myself for at least 10 years. Putting down my thoughts on how to get better as a developer really did help. While I didn’t do all the things I set out to do, I did make progress towards last year’s general theme of putting myself out there more:&lt;/p&gt;

&lt;p&gt;✔️️ Started a blog to work on my technical writing&lt;br&gt;
✔️ Attended several local meetups&lt;br&gt;
✔️ Was interviewed by &lt;a href="https://cynicaldeveloper.com/podcast/104/" rel="noopener noreferrer"&gt;The Cynical Developer Podcast about Code Reviews&lt;/a&gt;&lt;br&gt;
✔️ Contributed to a couple open source projects&lt;br&gt;
✔️ Completed &lt;a href="https://javascript30.com/" rel="noopener noreferrer"&gt;Wes Bos’s #JavaScript30 course&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, I did miss the mark in some other areas by not doing the following:&lt;/p&gt;

&lt;p&gt;😢 Didn’t take &lt;a href="https://cssgrid.io/" rel="noopener noreferrer"&gt;Wes Bos’s CSS Grid course&lt;/a&gt;&lt;br&gt;
😢 Fell short meeting my &lt;a href="https://www.codewars.com" rel="noopener noreferrer"&gt;Codewars&lt;/a&gt; goal&lt;br&gt;
😢 Didn’t create a bot for slack or twitter&lt;/p&gt;

&lt;p&gt;Overall, I’m still quite 😀 and this year I’m planning to do more and expand my goals to also cover some non-developer areas of my life. Also, last year I kept my plan to myself. This year I’m going to make it public in an effort to help keep me on track.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personal Health
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lose 25 lbs&lt;/li&gt;
&lt;li&gt;Stop drinking pop but mainly stop drinking diet coke&lt;/li&gt;
&lt;li&gt;Reduce coffee consumption to 2 to 3 cups a day and only drink it before 12pm&lt;/li&gt;
&lt;li&gt;Go to the doctor for a physical&lt;/li&gt;
&lt;li&gt;Train and run 2 5k races&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Professional
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Average writing 2 blog posts a month to continue improving my writing&lt;/li&gt;
&lt;li&gt;Continue to contribute to the &lt;a href="https://qit.cloud" rel="noopener noreferrer"&gt;QIT&lt;/a&gt; open source project&lt;/li&gt;
&lt;li&gt;Attend at least 6 local meetups&lt;/li&gt;
&lt;li&gt;Present at a local meetup&lt;/li&gt;
&lt;li&gt;Increase my &lt;a href="https://www.codewars.com/users/davefollett" rel="noopener noreferrer"&gt;Codewars&lt;/a&gt; points to 700&lt;/li&gt;
&lt;li&gt;Complete &lt;a href="https://cssgrid.io/" rel="noopener noreferrer"&gt;Wes Bos’s CSS Grid course&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Research Areas:

&lt;ul&gt;
&lt;li&gt;Web frontends with &lt;a href="https://vuejs.org/" rel="noopener noreferrer"&gt;Vue&lt;/a&gt; and &lt;a href="https://nuxtjs.org/" rel="noopener noreferrer"&gt;Nuxt&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Containers with &lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Backends and APIs with &lt;a href="https://graphql.org/" rel="noopener noreferrer"&gt;GraphQL&lt;/a&gt;, &lt;a href="https://hasura.io/" rel="noopener noreferrer"&gt;Hasura&lt;/a&gt;, and &lt;a href="https://www.graph.cool/" rel="noopener noreferrer"&gt;Graphcool&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Vue based mobile apps with &lt;a href="https://ionicframework.com/" rel="noopener noreferrer"&gt;Ionic&lt;/a&gt; and &lt;a href="https://nativescript-vue.org/" rel="noopener noreferrer"&gt;NativeScript Vue&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Testing with &lt;a href="https://www.cypress.io/" rel="noopener noreferrer"&gt;Cypress&lt;/a&gt; and &lt;a href="https://jestjs.io/" rel="noopener noreferrer"&gt;Jest&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>career</category>
      <category>goals</category>
      <category>health</category>
    </item>
    <item>
      <title>A New Vue On JavaScript30 - 08 Fun with HTML5 Canvas</title>
      <dc:creator>Dave Follett</dc:creator>
      <pubDate>Sun, 06 Jan 2019 05:00:00 +0000</pubDate>
      <link>https://forem.com/davefollett/a-new-vue-on-javascript30---08-fun-with-html5-canvas-86m</link>
      <guid>https://forem.com/davefollett/a-new-vue-on-javascript30---08-fun-with-html5-canvas-86m</guid>
      <description>&lt;p&gt;This article is part of the &lt;a href="https://dev.to/t/anewvueonjs30"&gt;A New Vue On JavaScript30&lt;/a&gt; series that explores re-implementing Wes Bos’s (&lt;a href="https://twitter.com/wesbos" rel="noopener noreferrer"&gt;@wesbos&lt;/a&gt;) &lt;a href="https://JavaScript30.com" rel="noopener noreferrer"&gt;#JavaScript30&lt;/a&gt; projects using &lt;a href="https://vuejs.org" rel="noopener noreferrer"&gt;Vue&lt;/a&gt;. Today I will be working with #JavaScript30’s &lt;strong&gt;08 Fun with HTML5 Canvas&lt;/strong&gt; project. This project uses a &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; element to provide a fun a way to draw in the browser window by clicking and dragging the mouse. As you draw, the line will get larger and smaller as well as change color. Here is an animated gif of it in action.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F01%2F06%2Fa-new-vue-on-javascript30-08-fun-with-html5-canvas%2Fjs30-fun-with-html5-canvas.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F01%2F06%2Fa-new-vue-on-javascript30-08-fun-with-html5-canvas%2Fjs30-fun-with-html5-canvas.gif" alt="#JavaScript30 Finished Fun with HTML5 Canvas Project" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔑 Vue Concepts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;mounted&lt;/code&gt; lifecycle hook&lt;/li&gt;
&lt;li&gt;Event binding&lt;/li&gt;
&lt;li&gt;Methods&lt;/li&gt;
&lt;li&gt;Special attribute - ref&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏗️ Vue Implementation
&lt;/h2&gt;

&lt;p&gt;The first step is the same as my other articles, grab the &lt;a href="https://github.com/davefollett/JavaScript30/blob/master/00%20-%20Getting%20Started/index-VUE.html" rel="noopener noreferrer"&gt;base starter file&lt;/a&gt; from my &lt;a href="https://dev.to/davefollett/a-new-vue-on-javascript30---getting-started-4o61"&gt;getting started&lt;/a&gt; article and insert the code from the original #JavaScript30 project into their corresponding Vue locations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F01%2F06%2Fa-new-vue-on-javascript30-08-fun-with-html5-canvas%2Fjs30-to-vue-locations.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2019%2F01%2F06%2Fa-new-vue-on-javascript30-08-fun-with-html5-canvas%2Fjs30-to-vue-locations.gif" alt="Animation of inserting #JavaScript30 code into their corresponding Vue locations" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The HTML section was placed inside the root &lt;code&gt;&amp;lt;div id="app"&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;cxt&lt;/code&gt;, &lt;code&gt;isDrawing&lt;/code&gt;, &lt;code&gt;lastX&lt;/code&gt;, &lt;code&gt;lastY&lt;/code&gt;, &lt;code&gt;hue&lt;/code&gt;, and &lt;code&gt;direction&lt;/code&gt; variables were placed into the &lt;code&gt;data&lt;/code&gt; section&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;draw()&lt;/code&gt; function was placed into the &lt;code&gt;methods&lt;/code&gt; section&lt;/li&gt;
&lt;li&gt;The JavaScript that executed upon page load was placed into the &lt;code&gt;mounted&lt;/code&gt; function&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;computed&lt;/code&gt; and &lt;code&gt;watch&lt;/code&gt; sections were not needed and removed&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; section was moved into my Vue version unchanged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This time around the “Getting Started” steps were nearly all that needed to be done, but we still have a few things left to do. First, we need to handle the events on the &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; element. In the &lt;a href="https://JavaScript30.com" rel="noopener noreferrer"&gt;#JavaScript30&lt;/a&gt; version, the events for &lt;code&gt;mousedown&lt;/code&gt;, &lt;code&gt;mousemove&lt;/code&gt;, &lt;code&gt;mouseup&lt;/code&gt;, and &lt;code&gt;mouseout&lt;/code&gt; were setup with &lt;code&gt;addEventListener()&lt;/code&gt; function calls. For the Vue version, I attached the events directly onto the &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; element using Vue event bindings of &lt;code&gt;@mousedown&lt;/code&gt;, &lt;code&gt;@mousemove&lt;/code&gt;, &lt;code&gt;@mouseup&lt;/code&gt;, and &lt;code&gt;@mouseout&lt;/code&gt;. Note that I am using Vue’s shorthand notation for event binding instead of &lt;code&gt;v-on&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Then, to get a reference to the &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; element, I used Vue’s special attribute &lt;a href="https://vuejs.org/v2/api/#ref" rel="noopener noreferrer"&gt;ref&lt;/a&gt; instead of how &lt;a href="https://JavaScript30.com" rel="noopener noreferrer"&gt;#JavaScript30&lt;/a&gt; used &lt;code&gt;document.querySelector('#draw')&lt;/code&gt;. By setting a &lt;code&gt;ref&lt;/code&gt; of &lt;code&gt;myCanvas&lt;/code&gt; on the html &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; element, I’m able to directly access it later as &lt;code&gt;this.$refs.myCanvas&lt;/code&gt;. This completed the HTML section as shown in the below gist.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;And finally, I moved the callback handlers for the &lt;code&gt;mousedown&lt;/code&gt;, &lt;code&gt;mouseup&lt;/code&gt;, and &lt;code&gt;mouseout&lt;/code&gt; into functions within Vue’s &lt;code&gt;methods&lt;/code&gt; section.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  🏁 Putting It All Together
&lt;/h2&gt;

&lt;p&gt;Click and drag in the CodeSandbox below to see the project in action.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/yvyqm83lnz?initialpath=08%20-%20Fun%20with%20HTML5%20Canvas%2Findex-VUE.html&amp;amp;module=%2F08%20-%20Fun%20with%20HTML5%20Canvas%2Findex-VUE.html"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Re-implementing this &lt;a href="https://JavaScript30.com" rel="noopener noreferrer"&gt;#JavaScript30&lt;/a&gt; project proved to largely reuse the same techniques as the earlier projects, with the exception of using Vue’s special attribute &lt;a href="https://vuejs.org/v2/api/#ref" rel="noopener noreferrer"&gt;ref&lt;/a&gt;. Even so, I feel that it continues to show how versatile Vue is and I had fun coding it.&lt;/p&gt;

&lt;p&gt;Here are links to the #JavaScript30 version and my Vue version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/davefollett/JavaScript30/blob/master/08%20-%20Fun%20with%20HTML5%20Canvas/index-FINISHED.html" rel="noopener noreferrer"&gt;#JavaScript30’s 08 - Fun with HTML5 Canvas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/davefollett/JavaScript30/blob/master/08%20-%20Fun%20with%20HTML5%20Canvas/index-VUE.html" rel="noopener noreferrer"&gt;A New Vue On JavaScript30’s 08 - Fun with HTML5 Canvas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope you enjoyed this article. Feel free to message me with any questions, comments, or &lt;em&gt;corrections&lt;/em&gt;. All code presented within this series is available in &lt;a href="https://github.com/davefollett/JavaScript30" rel="noopener noreferrer"&gt;my fork&lt;/a&gt; of the official &lt;a href="https://github.com/wesbos/JavaScript30" rel="noopener noreferrer"&gt;#JavaScript30 GitHub repository&lt;/a&gt; which is located at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/davefollett/JavaScript30" rel="noopener noreferrer"&gt;https://github.com/davefollett/JavaScript30&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔜 Up Next
&lt;/h2&gt;

&lt;p&gt;Next in the &lt;a href="https://dev.to/t/anewvueonjs30"&gt;A New Vue On JavaScript30&lt;/a&gt; series will be #JavaScript30’s “10 - Hold Shift and Check Checkboxes” project. I’ll add a link here when it’s published.&lt;/p&gt;

</description>
      <category>anewvueonjs30</category>
      <category>vue</category>
      <category>javascript30</category>
      <category>javascript</category>
    </item>
    <item>
      <title>2018 Give Back Gift List</title>
      <dc:creator>Dave Follett</dc:creator>
      <pubDate>Mon, 26 Nov 2018 05:00:00 +0000</pubDate>
      <link>https://forem.com/davefollett/2018-give-back-gift-list-4p5o</link>
      <guid>https://forem.com/davefollett/2018-give-back-gift-list-4p5o</guid>
      <description>&lt;p&gt;Every Christmas season, I always dread the task of coming up with gift ideas for me that family members can use. Is that too expensive? Is it not expensive enough? Can this very specific electronics part be easily purchased? These are just some of the questions I ask myself every year but NOT this year. I’m going to 💀🐦🐦⚫. This year, I have the perfect way to build a list and it also checks off another thing I have been meaning to do. Support the free content producers and open source projects I use every day by purchasing their swag. So I present to you:&lt;/p&gt;

&lt;h3&gt;
  
  
  🎄🎄🎄 Dave Follett’s 2018 Give Back Gift List 🎄🎄🎄
&lt;/h3&gt;

&lt;h3&gt;
  
  
  1️⃣ &lt;a href="https://www.codingblocks.net/" rel="noopener noreferrer"&gt;CodingBlocks Podcast&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://www.codingblocks.net/" rel="noopener noreferrer"&gt;CodingBlocks podcast&lt;/a&gt; is the first podcast I ever listened to and is responsible for getting me hooked on using podcasts as a learning medium. The &lt;a href="https://www.codingblocks.net/about/" rel="noopener noreferrer"&gt;podcast hosts&lt;/a&gt;, &lt;a href="https://twitter.com/theallenu" rel="noopener noreferrer"&gt;Allen Underwood&lt;/a&gt;, &lt;a href="https://twitter.com/thejoezack" rel="noopener noreferrer"&gt;Joe Zack&lt;/a&gt;, and &lt;a href="https://twitter.com/iamwaltuo" rel="noopener noreferrer"&gt;Michael Outlaw&lt;/a&gt;, breakdown complex programming topics into easy to digest explanations and have a lot of fun along the way. They also operate a very active and supportive &lt;a href="https://www.codingblocks.net/slack/" rel="noopener noreferrer"&gt;slack channel&lt;/a&gt;. So I’m putting this nice CodingBlocks two tone coffee mug at the top of my list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.zazzle.com/caffeine_then_code_two_tone_coffee_mug-168751073751910322" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F26%2F2018-give-back-gift-list%2Fcodingblocks-mug.jpg" alt="CodingBlocks Coffee Mug"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2️⃣ &lt;a href="https://cynicaldeveloper.com/" rel="noopener noreferrer"&gt;The Cynical Developer Podcast&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Another favorite podcast of mine is &lt;a href="https://cynicaldeveloper.com/" rel="noopener noreferrer"&gt;The Cynical Developer&lt;/a&gt;. The host &lt;a href="https://twitter.com/JamesStuddart" rel="noopener noreferrer"&gt;James Studdart&lt;/a&gt; produces weekly podcasts which are a mix of sharing his experience or conducting interviews on the latest development technology. I almost like this sharp blue t-shirt as much as i like his podcast. Almost.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cynicaldeveloper.bigcartel.com/product/classic-tshirt-blue" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F26%2F2018-give-back-gift-list%2Fcynical-developer-blue-tshirt.jpg" alt="Blue Cynical Developer T-Shirt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3️⃣ &lt;a href="https://dev.to/"&gt;Dev.to&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;If you haven’t checked out &lt;a href="https://dev.to/"&gt;dev.to&lt;/a&gt; yet, you really should. It’s a developer-friendly platform for publishing software development articles. I publish my articles to my own website but I also crosspost them to dev.to because they provide a canonical link to the original source. Led by &lt;a href="https://twitter.com/bendhalpern" rel="noopener noreferrer"&gt;Ben Halpern&lt;/a&gt;, &lt;a href="https://twitter.com/jessleenyc" rel="noopener noreferrer"&gt;Jess Lee&lt;/a&gt;, and &lt;a href="https://twitter.com/PeterKimFrank" rel="noopener noreferrer"&gt;Peter Frank&lt;/a&gt;, it has quickly become one of my go-to resources for reading about software development. They also have a &lt;a href="https://shop.dev.to/"&gt;large store&lt;/a&gt; with a bunch of really nice items. I really hope I end up with the DEV hat!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shop.dev.to/collections/accesories/products/dev-hat?variant=13793615806573"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F26%2F2018-give-back-gift-list%2Fdevto-hat.jpg" alt="Black Dev.to Hat"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shop.dev.to/collections/2018-new-merch/products/dev-unisex-t-shirt"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F26%2F2018-give-back-gift-list%2Fdevto-tshirt.jpg" alt="Grey Dev.to T-Shirt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shop.dev.to/collections/accesories/products/sticker-pack-1"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F26%2F2018-give-back-gift-list%2Fdevto-stickers.jpg" alt="Dev.to Sticker Pack"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4️⃣ &lt;a href="https://www.ubuntu.com/" rel="noopener noreferrer"&gt;Ubuntu Linux&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;I’ve used &lt;a href="https://en.wikipedia.org/wiki/Linux" rel="noopener noreferrer"&gt;Linux&lt;/a&gt; a long time and &lt;a href="https://www.ubuntu.com/" rel="noopener noreferrer"&gt;Ubuntu&lt;/a&gt; is my favorite distribution. For me, it strikes the right balance of being stable but also providing access to the latest software package versions. Also, they just announced that &lt;a href="https://www.zdnet.com/article/mark-shuttleworth-reveals-ubuntu-18-04-will-get-a-10-year-support-lifespan/" rel="noopener noreferrer"&gt;Ubuntu 18.04 will be supported for 10 years&lt;/a&gt; so this t-shirt should be in style for a long time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shop.canonical.com/product_info.php?products_id=1258" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F26%2F2018-give-back-gift-list%2Fubuntu1804-tshirt.jpg" alt="Ubuntu Bionic Beaver 18.04 LTS T-Shirt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5️⃣ &lt;a href="https://vuejs.org/" rel="noopener noreferrer"&gt;Vue.js&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;I’m not a &lt;a href="https://en.wikipedia.org/wiki/JavaScript" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt; developer during my day job so when I decided I want to learn about it and JavaScript frameworks, I picked &lt;a href="https://vuejs.org/" rel="noopener noreferrer"&gt;Vue.js&lt;/a&gt; because I heard it had a low barrier to entry. And wow, I was completely blow away. Not only was it easy for a non-JavaScript developer to pick up, it provides an &lt;a href="https://www.youtube.com/watch?v=UW6YycsYzHY&amp;amp;t=3884s" rel="noopener noreferrer"&gt;excellent developer experience&lt;/a&gt; with its CLI and DevTools as well. &lt;a href="https://twitter.com/youyuxi" rel="noopener noreferrer"&gt;Evan You&lt;/a&gt; (Vue creator) and his team have really created something special and I’d be happy to wear this t-shirt around town.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vue.threadless.com/designs/vue-logo-2/mens/t-shirt/triblend?color=heather_onyx" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F26%2F2018-give-back-gift-list%2Fvue-tshirt.jpg" alt="Vue.js T-Shirt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6️⃣ &lt;a href="https://twitter.com/Akryum" rel="noopener noreferrer"&gt;Guillaume Chau&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The Vue Core Team does some pretty amazing work and it’s crazy to think nearly all of them do it for free in their spare time after working other jobs. &lt;a href="https://twitter.com/Akryum" rel="noopener noreferrer"&gt;Guillaume Chau&lt;/a&gt; is exactly one of those people and he works tirelessly to make Vue better. Recently he was a big part of the &lt;a href="https://cli.vuejs.org/" rel="noopener noreferrer"&gt;Vue CLI UI&lt;/a&gt; and the new &lt;a href="https://github.com/vuejs/vue-devtools" rel="noopener noreferrer"&gt;Vue DevTools&lt;/a&gt;. He also recently released this cool vuefinity design t-shirt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://akryum.threadless.com/designs/vuefinity/mens/t-shirt/regular?color=slate&amp;amp;size=x-large" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F26%2F2018-give-back-gift-list%2Fvuefinity-tshirt.jpg" alt="Vuefinity T-Shirt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7️⃣ &lt;a href="https://vuetifyjs.com/" rel="noopener noreferrer"&gt;Vuetify&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;I really struggle with CSS and making things look nice. So when I need to quickly make something that looks good, I go for the &lt;a href="https://vuetifyjs.com/" rel="noopener noreferrer"&gt;Vuetify UI component library&lt;/a&gt;. If you aren’t familiar, think of &lt;a href="https://getbootstrap.com/" rel="noopener noreferrer"&gt;Bootstrap&lt;/a&gt; but with a material design and built into Vue components. They also have a cool logo that works well on this hat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vuetifyjs.com/en/store/product/1439739183146" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F26%2F2018-give-back-gift-list%2Fvuetify-hat.jpg" alt="Navy Vuetify Hat"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8️⃣ &lt;a href="https://gitlab.com/" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;I started using &lt;a href="https://gitlab.com/" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt; a few years ago because it offered free private repositories. I’ve stayed because it works so well and they have steadily rolled out feature after feature. I’m interested to see where this &lt;a href="https://about.gitlab.com/company/culture/all-remote/" rel="noopener noreferrer"&gt;100% remote working company&lt;/a&gt; goes in the future. Check out this cool mug!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shop.gitlab.com/collections/frontpage/products/camper-mug" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F26%2F2018-give-back-gift-list%2Fgitlab-mug.jpg" alt="GitLab Mug"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎁 Wrap Up
&lt;/h3&gt;

&lt;p&gt;I’m not quite sure how this will work out but I have high hopes to spread 💰 support and awareness to some of the free things I use everyday (while getting some cool gear). I can’t wait to see what I end up getting! I’ll be sure to update here with what ends up getting bought.&lt;/p&gt;

</description>
      <category>givebackgiftlist</category>
      <category>nontechnical</category>
      <category>gratitude</category>
      <category>opensource</category>
    </item>
    <item>
      <title>A New Vue On JavaScript30 - 06 Type Ahead</title>
      <dc:creator>Dave Follett</dc:creator>
      <pubDate>Fri, 02 Nov 2018 04:00:00 +0000</pubDate>
      <link>https://forem.com/davefollett/a-new-vue-on-javascript30---06-type-ahead-5760</link>
      <guid>https://forem.com/davefollett/a-new-vue-on-javascript30---06-type-ahead-5760</guid>
      <description>&lt;p&gt;This article is part of the &lt;a href="https://dev.to/t/anewvueonjs30"&gt;A New Vue On JavaScript30&lt;/a&gt; series that explores re-implementing Wes Bos’s (&lt;a href="https://twitter.com/wesbos" rel="noopener noreferrer"&gt;@wesbos&lt;/a&gt;) &lt;a href="https://JavaScript30.com" rel="noopener noreferrer"&gt;#JavaScript30&lt;/a&gt; projects using &lt;a href="https://vuejs.org" rel="noopener noreferrer"&gt;Vue&lt;/a&gt;. Today I will be working with #JavaScript30’s &lt;strong&gt;06 - Type Ahead&lt;/strong&gt; project. This project uses an input to filter down a list of cities as the user types. In addition to filtering the list, it also highlights the input value in the results. Here is an animated gif of it in action.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F02%2Fa-new-vue-on-javascript30-06-type-ahead%2Fjs30-type-ahead.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F02%2Fa-new-vue-on-javascript30-06-type-ahead%2Fjs30-type-ahead.gif" alt="#JavaScript30 Finished Type Ahead Project" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔑 Vue Concepts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;v-for&lt;/code&gt; directive&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;v-model&lt;/code&gt; directive to create two-way data bindings on form input&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;v-html&lt;/code&gt; directive&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;mounted&lt;/code&gt; lifecycle hook&lt;/li&gt;
&lt;li&gt;Computed Properties&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏗️ Vue Implementation
&lt;/h2&gt;

&lt;p&gt;The first step is the same as my other articles, grab the &lt;a href="https://github.com/davefollett/JavaScript30/blob/master/00%20-%20Getting%20Started/index-VUE.html" rel="noopener noreferrer"&gt;base starter file&lt;/a&gt; from my &lt;a href="https://dev.to/davefollett/a-new-vue-on-javascript30---getting-started-4o61"&gt;getting started&lt;/a&gt; article and insert the code from the original #JavaScript30 project into their corresponding Vue locations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F02%2Fa-new-vue-on-javascript30-06-type-ahead%2Fjs30-to-vue-locations.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F11%2F02%2Fa-new-vue-on-javascript30-06-type-ahead%2Fjs30-to-vue-locations.gif" alt="Animation of inserting #JavaScript30 code into their corresponding Vue locations" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The HTML section was placed inside the root &lt;code&gt;&amp;lt;div id="app"&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;endpoint&lt;/code&gt; and &lt;code&gt;cities&lt;/code&gt; variables were placed into the &lt;code&gt;data&lt;/code&gt; section&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;numberWithCommas()&lt;/code&gt; function was placed into the &lt;code&gt;methods&lt;/code&gt; section&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;findMatches()&lt;/code&gt; and &lt;code&gt;displayMatches()&lt;/code&gt; functions were placed into the &lt;code&gt;computed&lt;/code&gt; section&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;fetch()&lt;/code&gt; call that executed on page load was placed into the &lt;code&gt;mounted&lt;/code&gt; function&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;watch&lt;/code&gt; section was not needed so it was removed&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; section was removed because the stylesheet was pulled in with a &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tag&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whew, there was a lot going on there but if you have been reading the previous articles, hopefully it’s familiar 😀. Unfortunately, we have quite a bit of work still left to do to get this working. The next step is to adjust the &lt;code&gt;displayMatches()&lt;/code&gt; computed property to return an object for each city instead of an HTML list item.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;This will make it easier to loop the results of the &lt;code&gt;displayMatches&lt;/code&gt; computed property within the HTML area, shown later. Next, I added a &lt;code&gt;v-model&lt;/code&gt; directive to create a two-way data bindings on form input to the &lt;code&gt;searchValue&lt;/code&gt; variable that I added to the data section.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;The last set of changes are numerous and all inside the HTML area. Let’s first take a look at it in full and then break it down.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;In the #JavaScript30 version, the unordered list &lt;code&gt;&amp;lt;ul class="suggestions"&amp;gt;&lt;/code&gt; displayed default information and then as the user started typing, it was replaced with the matching city information. To do this with Vue, I inserted a &lt;code&gt;v-if&lt;/code&gt; / &lt;code&gt;v-else&lt;/code&gt; block within &lt;code&gt;&amp;lt;ul class="suggestions"&amp;gt;&lt;/code&gt; to conditionally render the matching city information when &lt;code&gt;searchValue&lt;/code&gt; is &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Truthy" rel="noopener noreferrer"&gt;truthy&lt;/a&gt; and the default information when &lt;code&gt;searchValue&lt;/code&gt; is &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Falsy" rel="noopener noreferrer"&gt;falsy&lt;/a&gt;. You will probably notice I attached the &lt;code&gt;v-if&lt;/code&gt; and &lt;code&gt;v-else&lt;/code&gt; directives to &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; elements. I did this because Vue directives must be attached to a single element and &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; elements will not be rendered in the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model" rel="noopener noreferrer"&gt;Document Object Model (DOM)&lt;/a&gt;. Within the &lt;code&gt;v-if&lt;/code&gt; section, I created matching HTML to the #JavaScript30 project by looping the &lt;code&gt;displayMatches&lt;/code&gt; computed property with a &lt;code&gt;v-for&lt;/code&gt; directive. On the &lt;code&gt;&amp;lt;span class="name"&amp;gt;&lt;/code&gt; element you will see that I used the &lt;code&gt;v-html&lt;/code&gt; directive. This was needed because the &lt;code&gt;displayMatches&lt;/code&gt; computed property contains strings of HTML and the &lt;code&gt;v-html&lt;/code&gt; directive will interpret them as HTML instead of plain text. Finally, the last step was to fill in the &lt;code&gt;v-else&lt;/code&gt; section with the unchanged HTML from the #JavaScript30 project.&lt;/p&gt;

&lt;p&gt;If you were able to follow and make any sense of all that, please pat yourself on the back and accept this major award: 🏆.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏁 Putting It All Together
&lt;/h2&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/yvyqm83lnz?initialpath=06%20-%20Type%20Ahead%2Findex-VUE.html&amp;amp;module=%2F06%20-%20Type%20Ahead%2Findex-VUE.html"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Up until this point, as far as I know, I have been able to create equivalent Vue versions of all the #JavaScript30 projects. But this time I ran into a 🐞 where the capitalization of highlighted text will be wrong as it auto completes if you are using Google Chrome. The 🐞 does not occur when using Firefox or Edge. Did I bump into a bug with Google Chrome or is it with my usage of &lt;code&gt;v-html&lt;/code&gt; with Vue’s re-rendering? And why Google Chrome only? I created a &lt;a href="https://codesandbox.io/s/rmmqxvqlrq" rel="noopener noreferrer"&gt;CodeSandbox&lt;/a&gt; and shared it with a friend and on the &lt;a href="https://vue-land.js.org/" rel="noopener noreferrer"&gt;Vue Land Discord&lt;/a&gt; in an attempt to figure it out. While we had some good theories, we were not able to come to a definitive answer as to why the issue was occurring for Google Chrome only. A few good ideas were also given on ways to restructure the code that probably would avoid the 🐞 but I decided to leave it in because I feel this version is close to matching the overall spirit of #JavaScript30 project. Plus, it’s all my code 😀. I’d still love to hear any feedback on this 🐞, so please let me know if you understand what is causing it.&lt;/p&gt;

&lt;p&gt;While I don’t think Vue provides as much as a benefit in this #JavaScript30 project when compared to the others so far, I did find it to be a bigger challenge. It pushed me to learn new Vue techniques, such as the &lt;code&gt;v-html&lt;/code&gt; directive and the use of &lt;code&gt;v-if&lt;/code&gt; and &lt;code&gt;v-else&lt;/code&gt; directives with &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; elements.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For more information about conditional rendering and using the &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; element as an invisible wrapper, you can read about it &lt;a href="https://vuejs.org/v2/guide/conditional.html" rel="noopener noreferrer"&gt;here&lt;/a&gt; in the &lt;a href="https://vuejs.org/v2/guide/" rel="noopener noreferrer"&gt;Official Vue Documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;For more information about the &lt;code&gt;v-html&lt;/code&gt; directive, you can read about it &lt;a href="https://vuejs.org/v2/guide/syntax.html#Raw-HTML" rel="noopener noreferrer"&gt;here&lt;/a&gt; in the &lt;a href="https://vuejs.org/v2/guide/" rel="noopener noreferrer"&gt;Official Vue Documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are links to the #JavaScript30 version and my Vue version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/davefollett/JavaScript30/blob/master/06%20-%20Type%20Ahead/index-FINISHED.html" rel="noopener noreferrer"&gt;#JavaScript30’s 06 - Type Ahead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/davefollett/JavaScript30/blob/master/06%20-%20Type%20Ahead/index-VUE.html" rel="noopener noreferrer"&gt;A New Vue On JavaScript30’s 06 - Type Ahead&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope you enjoyed this article, feel free to message me with any questions, comments, or &lt;em&gt;corrections&lt;/em&gt;. All code presented within this series is available in &lt;a href="https://github.com/davefollett/JavaScript30" rel="noopener noreferrer"&gt;my fork&lt;/a&gt; of the official &lt;a href="https://github.com/wesbos/JavaScript30" rel="noopener noreferrer"&gt;#JavaScript30 GitHub repository&lt;/a&gt; which is located at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/davefollett/JavaScript30" rel="noopener noreferrer"&gt;https://github.com/davefollett/JavaScript30&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔜 Up Next
&lt;/h2&gt;

&lt;p&gt;Next in the &lt;a href="https://dev.to/t/anewvueonjs30"&gt;A New Vue On JavaScript30&lt;/a&gt; series is:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/davefollett" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.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%2F88861%2Fa882125b-f79c-4bb9-85a2-b820d56939a5.png" alt="davefollett"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/davefollett/a-new-vue-on-javascript30---08-fun-with-html5-canvas-86m" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;A New Vue On JavaScript30 - 08 Fun with HTML5 Canvas&lt;/h2&gt;
      &lt;h3&gt;Dave Follett ・ Jan 7 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#anewvueonjs30&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#vue&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript30&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>anewvueonjs30</category>
      <category>vue</category>
      <category>javascript30</category>
      <category>javascript</category>
    </item>
    <item>
      <title>A New Vue On JavaScript30 - 05 Flex Panel Gallery</title>
      <dc:creator>Dave Follett</dc:creator>
      <pubDate>Tue, 09 Oct 2018 04:00:00 +0000</pubDate>
      <link>https://forem.com/davefollett/a-new-vue-on-javascript30---05-flex-panel-gallery-5g8f</link>
      <guid>https://forem.com/davefollett/a-new-vue-on-javascript30---05-flex-panel-gallery-5g8f</guid>
      <description>&lt;p&gt;This article is part of the &lt;a href="https://dev.to/t/anewvueonjs30"&gt;A New Vue On JavaScript30&lt;/a&gt; series that explores re-implementing Wes Bos’s (&lt;a href="https://twitter.com/wesbos" rel="noopener noreferrer"&gt;@wesbos&lt;/a&gt;) &lt;a href="https://JavaScript30.com" rel="noopener noreferrer"&gt;#JavaScript30&lt;/a&gt; projects using &lt;a href="https://vuejs.org" rel="noopener noreferrer"&gt;Vue&lt;/a&gt;. Today I will be tackling #JavaScript30’s &lt;strong&gt;05 - Flex Panel Gallery&lt;/strong&gt; project. This project displays a page of five images in vertical slices with words on them. When an image is clicked there is a neat animation to expand the image and slide in some additional text. My description doesn’t do it justice so how about an animated gif?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F10%2F09%2Fa-new-vue-on-javascript30-05-flex-panel-gallery%2Fjs30-flex-panel-gallery.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F10%2F09%2Fa-new-vue-on-javascript30-05-flex-panel-gallery%2Fjs30-flex-panel-gallery.gif" alt="#JavaScript30 Finished Flex Panel Gallery" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have been following along, you will notice that I’m skipping #JavaScript30’s &lt;strong&gt;04 - Array Cardio Day 1&lt;/strong&gt; project. While this is a great exercise in learning about &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array" rel="noopener noreferrer"&gt;JavaScript Arrays&lt;/a&gt;, it doesn’t make sense to re-implement with Vue because nothing gets rendered to the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔑 Vue Concepts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;v-for&lt;/code&gt; directive&lt;/li&gt;
&lt;li&gt;Class binding&lt;/li&gt;
&lt;li&gt;Event binding&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏗️ Vue Implementation
&lt;/h2&gt;

&lt;p&gt;The first step is the same as my other articles, grab the &lt;a href="https://github.com/davefollett/JavaScript30/blob/master/00%20-%20Getting%20Started/index-VUE.html" rel="noopener noreferrer"&gt;base starter file&lt;/a&gt; from my &lt;a href="https://dev.to/davefollett/a-new-vue-on-javascript30---getting-started-4o61"&gt;getting started&lt;/a&gt; article and insert the code from the original #JavaScript30 project into their corresponding Vue locations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F10%2F09%2Fa-new-vue-on-javascript30-05-flex-panel-gallery%2Fjs30-to-vue-locations.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdavefollett.io%2F2018%2F10%2F09%2Fa-new-vue-on-javascript30-05-flex-panel-gallery%2Fjs30-to-vue-locations.gif" alt="Animation of inserting #JavaScript30 code into their corresponding Vue locations" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The HTML section was placed inside the root &lt;code&gt;&amp;lt;div id="app"&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The functions were placed into the &lt;code&gt;methods&lt;/code&gt; section&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;computed&lt;/code&gt;, &lt;code&gt;mounted&lt;/code&gt;, and &lt;code&gt;watch&lt;/code&gt; sections were removed because they were not needed&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; section was maintained with no changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From here, my approach was more or less the same as I took when doing the &lt;a href="https://dev.to/davefollett/a-new-vue-on-javascript30---01-javascript-drum-kit-1k7f"&gt;JavaScript Drum Kit&lt;/a&gt; project. First, take the repetitive HTML sections and convert them into an array of objects.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Then, loop the array using the &lt;code&gt;v-for&lt;/code&gt; directive to create each panel &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Within the loop, I did the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inserted the three words to their &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; elements using text interpolation (the “Mustache” syntax double curly braces).&lt;/li&gt;
&lt;li&gt;Bound the proper &lt;code&gt;class&lt;/code&gt; to maintain the original CSS styles. Rather than toggle the classes, I used &lt;code&gt;isOpen&lt;/code&gt; and &lt;code&gt;isActive&lt;/code&gt; boolean flags to keep track of state.&lt;/li&gt;
&lt;li&gt;Bound the &lt;code&gt;@transitionend&lt;/code&gt; event to the &lt;code&gt;toggleActive()&lt;/code&gt; function and the &lt;code&gt;@click&lt;/code&gt; event to the &lt;code&gt;toggleOpen()&lt;/code&gt; function. This is the Vue equivalent of #JavaScript30 using &lt;code&gt;addEventListener()&lt;/code&gt; with those events.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏁 Putting It All Together
&lt;/h2&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/yvyqm83lnz?initialpath=05%20-%20Flex%20Panel%20Gallery%2Findex-VUE.html&amp;amp;module=%2F05%20-%20Flex%20Panel%20Gallery%2Findex-VUE.html"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The Flex Panel Gallery is another great project by Wes Bos’s #JavaScript30 but since the approach to create a Vue version was so similar to the &lt;a href="https://dev.to/davefollett/a-new-vue-on-javascript30---01-javascript-drum-kit-1k7f"&gt;JavaScript Drum Kit&lt;/a&gt; project, I decided to not go into as much detail on the explanations. If things don’t click for you here, give that article a quick read. Here are links to the #JavaScript30 version and my Vue version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/davefollett/JavaScript30/blob/master/05%20-%20Flex%20Panel%20Gallery/index-FINISHED.html" rel="noopener noreferrer"&gt;#JavaScript30’s 05 - Flex Panel Gallery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/davefollett/JavaScript30/blob/master/05%20-%20Flex%20Panel%20Gallery/index-VUE.html" rel="noopener noreferrer"&gt;A New Vue On JavaScript30’s 05 - Flex Panel Gallery&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope you enjoyed this article, feel free to message me with any questions, comments, or &lt;em&gt;corrections&lt;/em&gt;. All code presented within this series is available in &lt;a href="https://github.com/davefollett/JavaScript30" rel="noopener noreferrer"&gt;my fork&lt;/a&gt; of the official &lt;a href="https://github.com/wesbos/JavaScript30" rel="noopener noreferrer"&gt;#JavaScript30 GitHub repository&lt;/a&gt; which is located at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/davefollett/JavaScript30" rel="noopener noreferrer"&gt;https://github.com/davefollett/JavaScript30&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔜 Up Next
&lt;/h2&gt;

&lt;p&gt;Next in the &lt;a href="https://dev.to/t/anewvueonjs30"&gt;A New Vue On JavaScript30&lt;/a&gt; series is:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/davefollett" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.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%2F88861%2Fa882125b-f79c-4bb9-85a2-b820d56939a5.png" alt="davefollett"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/davefollett/a-new-vue-on-javascript30---06-type-ahead-5760" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;A New Vue On JavaScript30 - 06 Type Ahead&lt;/h2&gt;
      &lt;h3&gt;Dave Follett ・ Nov 2 '18&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#anewvueonjs30&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#vue&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript30&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>anewvueonjs30</category>
      <category>vue</category>
      <category>javascript30</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
