<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marie-Elise</title>
    <description>The latest articles on DEV Community by Marie-Elise (@kreyoldev).</description>
    <link>https://dev.to/kreyoldev</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%2F508187%2F3ba9666f-50a5-4ba3-a53d-47b0a6b52c29.jpeg</url>
      <title>DEV Community: Marie-Elise</title>
      <link>https://dev.to/kreyoldev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kreyoldev"/>
    <language>en</language>
    <item>
      <title>Understanding Hash Tables</title>
      <dc:creator>Marie-Elise</dc:creator>
      <pubDate>Thu, 11 Mar 2021 04:14:08 +0000</pubDate>
      <link>https://dev.to/kreyoldev/understanding-hash-tables-gl4</link>
      <guid>https://dev.to/kreyoldev/understanding-hash-tables-gl4</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;What's so great about hash tables?&lt;/li&gt;
&lt;li&gt;What do hash tables look like IRL?&lt;/li&gt;
&lt;li&gt;How do hash tables work?&lt;/li&gt;
&lt;li&gt;So what's the catch?&lt;/li&gt;
&lt;li&gt;How do I implement a hash table?&lt;/li&gt;
&lt;li&gt;
Where can I learn more?

&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's so great about hash tables?
&lt;/h2&gt;

&lt;p&gt;Hash tables are an excellent data structure to use when you're working with 2 related types of data. This &lt;strong&gt;relationship&lt;/strong&gt; is established by using key-value pairs, where one data type is assigned as the key, and the other data type is assigned as the value. &lt;/p&gt;

&lt;p&gt;Hash tables are ideal when you need to &lt;code&gt;insert&lt;/code&gt;, &lt;code&gt;search&lt;/code&gt;, and &lt;code&gt;delete&lt;/code&gt; objects from your dataset often. In fact, hash tables perform these operations so efficiently that they have an average time complexity of O(1)—that's right, &lt;strong&gt;constant time&lt;/strong&gt;!&lt;/p&gt;



&lt;h2&gt;
  
  
  What do hash tables look like IRL?
&lt;/h2&gt;

&lt;p&gt;Hash tables have many real-world applications, but here are some practical examples.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mapping a price to an item &lt;/li&gt;
&lt;li&gt;Mapping web addresses to IP addresses (&lt;a href="https://www.bleepingcomputer.com/tutorials/what-is-domain-name-resolution/"&gt;DNS Resolution&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Mapping an ID number to an employee &lt;/li&gt;
&lt;li&gt;Mapping a hotel room number to a guest&lt;/li&gt;
&lt;li&gt;Mapping a piece of music to a composer (see implementation below)&lt;/li&gt;
&lt;/ol&gt;



&lt;h2&gt;
  
  
  How do hash tables work?
&lt;/h2&gt;

&lt;p&gt;Hash tables go by many names: dictionary, associative array, map, hash map, hash, etc. They're built into most programming languages but it's important to understand how they work under the hood, even if you never have to implement one from scratch.&lt;/p&gt;

&lt;p&gt;Hash tables are &lt;strong&gt;powered by 2 components&lt;/strong&gt;: a hash function and an array table. Here's a breakdown of how these components process and store data.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A key-value pair is passed to the &lt;strong&gt;hash function&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;hash function&lt;/strong&gt; hashes the key to find an index location.&lt;/li&gt;
&lt;li&gt;The value is stored in the &lt;strong&gt;hash table&lt;/strong&gt; at the hashed index location.&lt;/li&gt;
&lt;li&gt;Repeat Steps 1-3 until all key/value pairs are stored. &lt;/li&gt;
&lt;li&gt;When the table gets full, the array is doubled in size. All previously stored data is re-hashed and stored in (potentially) new index locations.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Using the hash table structure that's built into a programming language means that you don't have to worry about: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;choosing a hash function&lt;/li&gt;
&lt;li&gt;handling collisions&lt;/li&gt;
&lt;li&gt;resizing your array&lt;/li&gt;
&lt;/ol&gt;



&lt;h2&gt;
  
  
  Why are hash tables so fast?
&lt;/h2&gt;

&lt;p&gt;When you need to look up a value, the hash table will perform a direct lookup of the key that corresponds to that value. There is no need to sort or iterate through a list to &lt;code&gt;search&lt;/code&gt; for the data!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; If you're interested in building your own hash functions and tables, check out William Fiset's &lt;a href="https://www.udemy.com/course/introduction-to-data-structures/"&gt;Easy to Advanced Data Structures course&lt;/a&gt;. You'll learn how to choose the right hash function for your use case, as well as different techniques for managing collisions.&lt;/p&gt;



&lt;h2&gt;
  
  
  So what's the catch?
&lt;/h2&gt;

&lt;p&gt;While hash tables provide many benefits, they're not suited for every situation. Here are a few important things to keep in mind.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hash tables aren't meant for ordered datasets. &lt;/li&gt;
&lt;li&gt;Hash tables won't work if you want to allow duplicate entries.&lt;/li&gt;
&lt;li&gt;Collisions will occur. Make sure your keys are unique to reduce the chance of collisions.&lt;/li&gt;
&lt;li&gt;Performance will slow as the hash table fills up.&lt;/li&gt;
&lt;/ol&gt;



&lt;h2&gt;
  
  
  How do I implement a hash table?
&lt;/h2&gt;

&lt;p&gt;This one's for my fellow musicians! Let's set up a music catalogue that stores a piece of music as the key, and a composer as the value.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;As part of my &lt;a href="https://blog.code-create.dev/leveling-up-in-2021"&gt;2021 goals&lt;/a&gt;, I implemented the example below in both Python and JavaScript.&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Example 1: Music catalogue in Python
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#############################################
#create a hash table for the music catalogue
&lt;/span&gt;&lt;span class="n"&gt;music_catalogue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;#add a piece of music to the catalogue
&lt;/span&gt;&lt;span class="n"&gt;music_catalogue&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"Symphony No. 5"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Beethoven"&lt;/span&gt;

&lt;span class="c1"&gt;#function to search the catalogue for a composer
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;composer_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;piece&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="c1"&gt;#retrieve the name of the composer if s/he is in the catalogue
&lt;/span&gt;  &lt;span class="c1"&gt;#this step isn't necessary but it's easier to visualize
&lt;/span&gt;  &lt;span class="n"&gt;composer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;music_catalogue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;piece&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="c1"&gt;#if the composer is in the catalogue, print his/her name
&lt;/span&gt;  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;composer&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;piece&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" was written by "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;composer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Error: composer not found!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's try out this catalogue by calling the &lt;code&gt;composer_search&lt;/code&gt; function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;########################################################
#someone wants to find out who composed "Symphony No. 5"
&lt;/span&gt;&lt;span class="n"&gt;piece&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Symphony No. 5"&lt;/span&gt;

&lt;span class="c1"&gt;#check the registry for "Symphony No. 5"
&lt;/span&gt;&lt;span class="n"&gt;composer_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;piece&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;The console output will read: &lt;code&gt;Symphony No. 5 was written by Beethoven&lt;/code&gt;.&lt;/p&gt;



&lt;h4&gt;
  
  
  Example 2: Music catalogue in JavaScript
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;/////////////////////////////////////////////&lt;/span&gt;
&lt;span class="c1"&gt;//create a hash table for the music catalogue&lt;/span&gt;
&lt;span class="nx"&gt;musicCatalogue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;

&lt;span class="c1"&gt;//add a piece of music to the catalogue&lt;/span&gt;
&lt;span class="nx"&gt;musicCatalogue&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Symphony No. 5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Beethoven&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;//function to search the hash table for a composer&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;composerSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;piece&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;//retrieve the name of the composer if s/he is in the catalogue&lt;/span&gt;
  &lt;span class="c1"&gt;//this step isn't necessary but it's easier to visualize&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;composer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;musicCatalogue&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;piece&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="c1"&gt;//if the composer is in the catalogue, print his/her name&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;composer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;piece&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; was written by &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;composer&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Error: composer not found!`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's try out this catalogue by calling the &lt;code&gt;composerSearch&lt;/code&gt; function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;/////////////////////////////////////////////////////////&lt;/span&gt;
&lt;span class="c1"&gt;//someone wants to find out who composed "Canon in D"&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;piece&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Canon in D&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;//check the registry for "Canon in D"&lt;/span&gt;
&lt;span class="nx"&gt;composerSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;piece&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The console output will read: &lt;code&gt;Error: composer not found!&lt;/code&gt;&lt;/p&gt;



&lt;h2&gt;
  
  
  Where can I learn more?
&lt;/h2&gt;

&lt;p&gt;Here are some great resources to dive deeper into hash tables and hash functions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Books:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.manning.com/books/grokking-algorithms"&gt;Grokking Algorithms&lt;/a&gt; by Aditya Bhargava&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844"&gt;Introduction to Algorithms&lt;/a&gt; by Cormen, Leiserson, Rivest, and Stein&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Courses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.udemy.com/course/introduction-to-data-structures/"&gt;Easy to Advanced Data Structures&lt;/a&gt; by William Fiset&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Blogs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://medium.com/basecs/taking-hash-tables-off-the-shelf-139cbf4752f0"&gt;Taking Hash Tables Off The Shelf&lt;/a&gt; by BaseCS&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/basecs/hashing-out-hash-functions-ea5dd8beb4dd"&gt;Hashing Out Hash Functions&lt;/a&gt; by BaseCS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Happy Coding! 👩🏽‍💻&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>datastructures</category>
    </item>
    <item>
      <title>Leveling Up in 2021</title>
      <dc:creator>Marie-Elise</dc:creator>
      <pubDate>Sat, 09 Jan 2021 17:38:25 +0000</pubDate>
      <link>https://dev.to/kreyoldev/leveling-up-in-2021-51eb</link>
      <guid>https://dev.to/kreyoldev/leveling-up-in-2021-51eb</guid>
      <description>&lt;p&gt;Reflecting on 2020 was eye-opening for me. While I never had a shortage of goals I wanted to accomplish, I struggled with organizing those goals into focused efforts. So this year I committed to a different approach, and created a 3-step process to keep myself on track for 2021. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set a focus for the year.&lt;/li&gt;
&lt;li&gt;Plan goals based on that focus.&lt;/li&gt;
&lt;li&gt;Establish milestones to stay on track.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🌀 2021 Focus
&lt;/h3&gt;

&lt;p&gt;I chose 3 areas of programming that I want to focus on and master. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep Dives:&lt;/strong&gt; Data Structures &amp;amp; Algorithms&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Goals
&lt;/h3&gt;

&lt;p&gt;With my priorities in mind, I established 5 measurable goals to keep me on track. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Publish 25 blog posts. Write about topics related to my &lt;strong&gt;Focus&lt;/strong&gt; areas.&lt;/li&gt;
&lt;li&gt;Complete 3 Udemy courses: &lt;a href="https://www.udemy.com/course/learning-algorithms-in-javascript-from-scratch/"&gt;Learning Algorithms in JavaScript&lt;/a&gt;, &lt;a href="https://www.udemy.com/course/python-for-data-structures-algorithms-and-interviews/"&gt;Python for Data Structures&lt;/a&gt;, &lt;a href="https://www.udemy.com/course/the-complete-javascript-course/"&gt;The Complete Javascript Course 2020&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Finish my last 2 Computer Science classes. &lt;/li&gt;
&lt;li&gt;Attend 2 tech conferences: &lt;a href="https://ghc.anitab.org/"&gt;Grace Hopper Celebration&lt;/a&gt;, &lt;a href="https://us.pycon.org/2021/"&gt;PyCon&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Complete my &lt;a href="https://blog.code-create.dev/reading-list"&gt;2021 Reading List&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🏔️ Milestones
&lt;/h3&gt;

&lt;p&gt;I divided my 2021 calendar into blocks—I chose two-month terms because that worked best with my university's schedule. &lt;strong&gt;I created milestones by dividing my goals into smaller tasks&lt;/strong&gt;, then I assigned each milestone to a specific term. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Keep your workload in mind as you assign milestones. &lt;em&gt;For example, my CS classes have an intense workload, so I know I won't have time to work on any other goals during Term 2.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--leer0tV5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1609628808320/jVDGN6bYm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--leer0tV5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1609628808320/jVDGN6bYm.png" alt="2021 Goals Term Graph@2x.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;I set a focus for 2021 to help me &lt;strong&gt;prioritize my time and structure my goals&lt;/strong&gt;. I also created milestones to keep me motivated and I'm excited to see how this approach works IRL. &lt;/p&gt;

&lt;p&gt;Have you set your goals yet? What will you be working on this year?&lt;/p&gt;

&lt;p&gt;Let's make 2021 a good one! 🥂&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Wrapping Up 2020</title>
      <dc:creator>Marie-Elise</dc:creator>
      <pubDate>Thu, 31 Dec 2020 16:42:17 +0000</pubDate>
      <link>https://dev.to/kreyoldev/wrapping-up-2020-2mlj</link>
      <guid>https://dev.to/kreyoldev/wrapping-up-2020-2mlj</guid>
      <description>&lt;p&gt;2020 didn't quite go according to plan, but it still had plenty of silver linings. I spent some time this week reflecting on the last 365 days and even though my 2020 resolutions were a bit unrealistic, I had a more productive year than I thought. &lt;/p&gt;

&lt;h3&gt;
  
  
  🌟 Professional Wins
&lt;/h3&gt;

&lt;p&gt;Being a full-time dev and a full-time student made time management a struggle. Planning ahead consistently—and planning well—was key for reaching these milestones. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Led a corporate website redesign and received a Graphic Design USA award for the project.&lt;/li&gt;
&lt;li&gt;Finished 11 classes towards my Computer Science degree. Only 2 more to go!&lt;/li&gt;
&lt;li&gt;Attended 3 tech conferences: &lt;a href="https://events.drupal.org/"&gt;DrupalCon&lt;/a&gt;, &lt;a href="https://www.adobe.com/max.html"&gt;AdobeMAX&lt;/a&gt;, &lt;a href="https://githubuniverse.com/"&gt;GitHub Universe&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  👩🏽‍💻 Side Projects
&lt;/h3&gt;

&lt;p&gt;With the switch to working remotely, my commute was &lt;strong&gt;a lot&lt;/strong&gt; shorter and I used the extra time to work on my side projects.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redesigned my portfolio.&lt;/li&gt;
&lt;li&gt;Started blogging.&lt;/li&gt;
&lt;li&gt;Started maintaining my CS program's Wiki site.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⛰️ Skills Gained
&lt;/h3&gt;

&lt;p&gt;Between CS classes and self-learning, I picked up some new skills. I &lt;strong&gt;especially&lt;/strong&gt; loved learning AWS, Python, and React.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloud Computing (AWS)&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;ReactJS&lt;/li&gt;
&lt;li&gt;SQL&lt;/li&gt;
&lt;li&gt;Swift&lt;/li&gt;
&lt;li&gt;WordPress &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📚Favorite Reads
&lt;/h3&gt;

&lt;p&gt;Audiobooks made it possible to read and adult at the same time. (Laundry has never gone by so quickly. 😂 🧺) &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://amzn.to/35g1vmn"&gt;Digital Minimalism&lt;/a&gt; by Cal Newport&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://amzn.to/3p7FAFd"&gt;It Doesn't Have To Be Crazy At Work&lt;/a&gt; by Jason Fried &amp;amp; David Heinemeier Hansson&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://amzn.to/34ZS3mH"&gt;Quiet: The Power of Introverts in a World That Can't Stop Talking&lt;/a&gt; by Susan Cain&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://amzn.to/3n3YT0A"&gt;Scrum: The Art of Doing Twice the Work in Half the Time&lt;/a&gt; by Jeff Sutherland&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://amzn.to/2KO0qLe"&gt;The Age of Surveillance Capitalism&lt;/a&gt; by Shoshana Zuboff&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://amzn.to/34W8wsk"&gt;The Bullet Journal Method&lt;/a&gt; by Ryder Carroll&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Check if your local library has a partnership with &lt;a href="https://www.overdrive.com/apps/libby/"&gt;Libby&lt;/a&gt;—it's an awesome platform for ebooks and audiobooks. Just enter your library card number and you're good to go! &lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;Don't forget to take a moment to reflect on how far you've come this year. Now let's count down to 2021...cheers! 🎊&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: &lt;em&gt;This post contains affiliate links.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>yearinreview</category>
      <category>reflection</category>
      <category>webdev</category>
      <category>books</category>
    </item>
    <item>
      <title>How To Plan A Redesign</title>
      <dc:creator>Marie-Elise</dc:creator>
      <pubDate>Sat, 26 Dec 2020 20:43:46 +0000</pubDate>
      <link>https://dev.to/kreyoldev/how-to-plan-a-redesign-3iji</link>
      <guid>https://dev.to/kreyoldev/how-to-plan-a-redesign-3iji</guid>
      <description>&lt;p&gt;I recently led a corporate website redesign, which involved a move from Drupal 7 to Drupal 8. I wanted to share my process for tackling this kind of CMS-based project. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: The process outlined below is a guide. Feel free to adapt it to fit the scope of your project. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Table of Contents
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Setup&lt;/li&gt;
&lt;li&gt;Phase I: Requirements Gathering&lt;/li&gt;
&lt;li&gt;Phase II: Research&lt;/li&gt;
&lt;li&gt;Phase III: Information Architecture&lt;/li&gt;
&lt;li&gt;Phase IV: Wireframe&lt;/li&gt;
&lt;li&gt;Phase V: Design&lt;/li&gt;
&lt;li&gt;Phase VI: Build&lt;/li&gt;
&lt;li&gt;Phase VII: Content Migration&lt;/li&gt;
&lt;li&gt;Phase VIII: Test&lt;/li&gt;
&lt;li&gt;Phase IX: Deploy&lt;/li&gt;
&lt;li&gt;Phase X: Maintain&lt;/li&gt;
&lt;li&gt;Summary&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;Choose a project management application (&lt;a href="https://todoist.com"&gt;Todoist&lt;/a&gt;, &lt;a href="https://notion.so"&gt;Notion&lt;/a&gt;, &lt;a href="https://basecamp.com"&gt;Basecamp&lt;/a&gt;, etc) and set up your project. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a section for each phase of the project.&lt;/li&gt;
&lt;li&gt;Add tasks to each section as they come up.&lt;/li&gt;
&lt;li&gt;Share the project with your team to keep everyone on-task and up-to-date.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I used Todoist for my redesign and appreciated the built-in shortcuts for adding tasks, tags, and due dates &lt;strong&gt;with one line of text&lt;/strong&gt;. It was a huge timesaver in my busy office. That being said, I will probably try Notion or Basecamp next time—just to experiment with a different system. There are many other great PM choices out there though! &lt;/p&gt;

&lt;h2&gt;
  
  
  Phase I: Requirements Gathering
&lt;/h2&gt;

&lt;p&gt;Gather the basic project requirements and confirm the "ideal" timeline for completion (if it's known). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're planning to use a CMS&lt;/strong&gt;, research platforms now and get quotes if needed. Understanding the basic features and associated costs can help you identify the platforms that will work best for your project. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip #1:&lt;/strong&gt; Don't commit to a timeline until the end of Phase II. Research can take time and reveal unknowns that could impact the scope of the project or the platform you end up choosing.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip #2:&lt;/strong&gt; Set expectations early that the timeline is subject to change and that you will communicate any changes early and often. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip #3:&lt;/strong&gt; Know who you need to communicate with—and get approval from—throughout the process. If this information is unknown, make sure to get approval from all stakeholders—at the very least—before starting Phase VI and Phase IX.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase II: Research
&lt;/h2&gt;

&lt;p&gt;It's time to dive into UX research. &lt;/p&gt;

&lt;h3&gt;
  
  
  Steps:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.toptal.com/designers/user-research/guide-to-ux-research-methods"&gt;Determine which types of research make the most sense for your project.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Implement your chosen research tactics and gather data.&lt;/li&gt;
&lt;li&gt;Pull analytics from any available sources (e.g., Google, Facebook, Twitter).&lt;/li&gt;
&lt;li&gt;Compile a report with all of your findings.&lt;/li&gt;
&lt;li&gt;Discuss findings with your team and any additional stakeholders that need to be at the table.&lt;/li&gt;
&lt;li&gt;Based on findings, brainstorm a list of all features that could address user pain points.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature Triage&lt;/strong&gt;—distinguish "Must Have" vs "Nice To Have" features. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;If you're planning to use a CMS&lt;/strong&gt;, this is a great time to cross-reference your feature wishlist with the built-in capabilities of different platforms. You may realize that a must-have feature isn't included with certain platforms—and this could significantly alter your project timeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase III: Information Architecture
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Information architecture refers to the way that content is organized on your site. One way that this architecture is represented is with navigation menus. A well-organized menu is essential to a good user experience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Print out your existing sitemap and analyze the structure of your site (&lt;strong&gt;read:&lt;/strong&gt; how the pages are organized). This is also an opportunity to conduct a content audit. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this content interesting or useful to your user? &lt;/li&gt;
&lt;li&gt;Did the analytics highlight any common—or unexpected—paths that users are taking to access certain types of content? &lt;/li&gt;
&lt;li&gt;Does it make sense to reorganize certain sections or pages? &lt;/li&gt;
&lt;li&gt;Does it make sense to condense—or break up—certain pages?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you've reorganized your IA, you'll have an idea of the sections you'll need to create—along with the total number of pages you'll have to build—on your new site. This information is especially useful &lt;strong&gt;if you're using a CMS&lt;/strong&gt; because it will affect the content types you'll have to build during Phase VI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; When the IA has been finalized, assign someone to start writing any new content that will be needed, and start proofreading existing content that will be migrated to the new site. (That includes confirming contact information, spell-checking names, flagging graphic elements that are no longer on-brand, etc.) It will take time to complete this process if your site is large. &lt;/p&gt;

&lt;h2&gt;
  
  
  Phase IV: Wireframe
&lt;/h2&gt;

&lt;p&gt;Start sketching your wireframes! Grab a paper and pencil—or iPad and Apple Pencil— and start brainstorming. Don't be afraid to research other sites for inspiration, different layouts, etc. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're using a CMS&lt;/strong&gt;, make sure that you sketch wireframes for each content type you'll be implementing on the new site.&lt;/p&gt;

&lt;p&gt;Once your sketches are complete, create final versions of your wireframes with your UI software of choice. Some popular options include: &lt;a href="https://adobe.com/xd"&gt; AdobeXD&lt;/a&gt;, &lt;a href="https://www.sketch.com"&gt;Sketch&lt;/a&gt; and &lt;a href="https://www.figma.com"&gt;Figma&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Discuss the wireframe options with your team and narrow down the layouts that will work best for your users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase V: Design
&lt;/h2&gt;

&lt;p&gt;Take your final wireframes and turn them into full-color, interactive prototypes. This is an important step for integrating brand elements into the wireframe. Feel free to experiment and create multiple prototypes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're using a CMS&lt;/strong&gt;, this is another opportunity to determine what features—from your prototype—are already built into your chosen platform. Determine if any custom modules need to be developed. Adjust your timeline accordingly.&lt;/p&gt;

&lt;p&gt;Discuss the prototype(s) with your team and finalize the design. Send a link of the final prototype to all essential stakeholders. Make any necessary changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase VI: Build
&lt;/h2&gt;

&lt;p&gt;Once the design is approved, it's time to start building! Set up your server, framework, platform, libraries, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're using a CMS&lt;/strong&gt;, you'll need to complete this phase in 2 stages.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Site Building—install the base theme, install modules, configure settings, etc&lt;/li&gt;
&lt;li&gt;Custom Theming—customize the CSS, implement custom JS, build custom modules, etc &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Tip #1:&lt;/strong&gt; Incorporate &lt;a href="https://accessibility.arl.org/standards-best-practices/#technical-standards"&gt;accessibility best practices&lt;/a&gt; as you customize your theme. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip #2:&lt;/strong&gt; Bugs &lt;em&gt;will&lt;/em&gt; come up at this point in the process. Be prepared to alter your timeline at this point in the process. If you have to change your go-live date, communicate with all essential stakeholders. If you're not able to push the launch, revisit your feature wishlist and triage again. Consider what features can wait to be implemented until after the site is live.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase VII: Content Migration
&lt;/h2&gt;

&lt;p&gt;Migrate your old site's content to your new platform. This can be done automatically or manually. An automatic approach may work best if you're migrating between two versions of a CMS platform. A manual approach may work best if your site is small or if your databases are not compatible. Make sure to research your options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Incorporate any accessibility features that couldn't be added during Phase VI (e.g., alt text for newly-migrated images) at this point in the process. &lt;/p&gt;

&lt;p&gt;When migration is complete, send a link for the test site to all essential stakeholders. Provide a deadline for users to test the new platform and proofread content. Encourage them to use different devices and browsers and make note of all feedback you receive (e.g., broken links, typos, features that don't work on certain browsers).&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase VIII: Test
&lt;/h2&gt;

&lt;p&gt;Now it's time for browser compatibility testing. There are two approaches you can take.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Manual testing—install different browsers on your device and pull up your site on each one to manually click through. &lt;/li&gt;
&lt;li&gt;Automatic testing—subscribe to a browser testing service (like &lt;a href="https://www.browserstack.com/"&gt;BrowserStack&lt;/a&gt; or &lt;a href="https://www.browserling.com/"&gt;Browserling&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Make note of any bugs that are identified and triage. Determine if/what problems need to be addressed before the go-live date.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase IX: Deploy
&lt;/h2&gt;

&lt;p&gt;When testing is complete and your site has been approved, it's time to deploy! Confirm the go-live date and time, as well as the process for publishing the new site. Choose a non-peak time, preferably early in the week, to give yourself plenty of space to troubleshoot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase X: Maintain
&lt;/h2&gt;

&lt;p&gt;This phase often gets overlooked but as I work more with older sites, I appreciate the value of a well thought-out maintenance plan. It's easy for a site's IA to grow out of control over time—and for vanity pages to creep in. This is where a solid web content strategy comes into play. It will help you establish an audit schedule for a site's content, along with guidelines for managing that content. This will make long-term maintenance (and future redesigns!) less painful. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'll write a future post with tips for developing a web content strategy.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Redesigning a website can seem overwhelming, but there is a systematic way to break it down and tackle it. While the steps outlined above are not necessary for every project, it worked well for my CMS-based redesign. &lt;/p&gt;

&lt;p&gt;Have you tackled a redesign? Did you go about it in a different way? I'd love to hear about it!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>cms</category>
      <category>projectmanagement</category>
    </item>
    <item>
      <title>Book Review: It Doesn't Have To Be Crazy At Work</title>
      <dc:creator>Marie-Elise</dc:creator>
      <pubDate>Sat, 19 Dec 2020 21:25:05 +0000</pubDate>
      <link>https://dev.to/kreyoldev/book-review-it-doesn-t-have-to-be-crazy-at-work-442e</link>
      <guid>https://dev.to/kreyoldev/book-review-it-doesn-t-have-to-be-crazy-at-work-442e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Disclaimer: &lt;em&gt;This post contains affiliate links.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;br&gt;&lt;a href="https://amzn.to/3p7FAFd"&gt;&lt;strong&gt;It Doesn't Have To Be Crazy At Work&lt;/strong&gt;&lt;/a&gt; is a manifesto written by Jason Fried &amp;amp; David Heinemeier Hansson, the creators of the productivity platform &lt;strong&gt;Basecamp&lt;/strong&gt;. It describes the fundamental (and sometimes unconventional) values that define Basecamp's unique company culture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2XDNt068--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1608398662096/M6XFAmxW-.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2XDNt068--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1608398662096/M6XFAmxW-.png" alt="It Doesn't Have To Be Crazy At Work@2x.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the heart of this book is the belief that &lt;strong&gt;distraction&lt;/strong&gt; is the greatest enemy of &lt;strong&gt;quality work&lt;/strong&gt;. Fried &amp;amp; Hansson focus on the negative impacts of distraction, how it occurs in the workplace, and what you can do about it.&lt;/p&gt;

&lt;p&gt;Below are the distractions—and tips—that I found most interesting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Distractions
&lt;/h2&gt;

&lt;p&gt;Fried and Hansson argue that many companies focus on protecting their tangible assets—brand, data, secrets, investments, etc. As a result, they often fail to protect the greatest asset that they actually possess—their employees' time. &lt;/p&gt;

&lt;p&gt;Employees are human beings, not productivity machines. They need breaks to recharge their minds and bodies. Their time and energy are finite resources. To make the most of these resources, companies should design work environments that encourage &lt;strong&gt;quality work&lt;/strong&gt; by minimizing distraction. &lt;/p&gt;

&lt;p&gt;Distraction seems to thrive in toxic company cultures, and while Fried &amp;amp; Hansson explore various "bad habits" that can emerge, these red flags stood out. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sustained exhaustion as a badge of honor.&lt;/strong&gt; Some companies have a culture of working unnecessarily long hours. Exhausted employees do not produce their best work. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focusing on productivity above all else.&lt;/strong&gt; This encourages people to focus on simply "being busy." Quantity != quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treating co-workers like family.&lt;/strong&gt; Companies that promote this idea create a culture of self-sacrifice. It puts employees in a position of choosing between work and their actual families.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chasing goals at any cost.&lt;/strong&gt; Goals are arbitrary, artificial targets that often lead companies to compromise their morals and integrity.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When employees are encouraged to work long hours—and fill up those hours with busywork and goal-chasing, the opportunities for distraction are endless. If those employees work in an open-office setting, the distractions multiply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips
&lt;/h2&gt;

&lt;p&gt;What I enjoyed most about this book were Fried and Hansson's tips for minimizing distractions. While they are tailored to the workplace, many of them can be applied to daily life. Here are the tips that I found most interesting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fight the presence prison
&lt;/h3&gt;

&lt;p&gt;The authors describe the &lt;strong&gt;presence prison&lt;/strong&gt; as what happens when you're always available and/or reachable. Your colleagues feel free to "stop in" and interrupt you with chit-chat, questions, favors, etc. This type of distraction can quickly derail your day. If you work in this type of environment, here are some tips for breaking free.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create personal office hours.&lt;/strong&gt; Set aside a dedicated time each week when you're available to answer random questions people have. This is especially useful if you're the subject-matter expert on a topic and people are used to stopping by with "a quick question." &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make your calendar private by default.&lt;/strong&gt; And set your availability to "busy." When someone wants to speak with you, they have to formally request a meeting and describe the purpose of the meeting. This allows you to decide whether or not a meeting is necessary to address their question—and how much time you need to set aside.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Start "library days"
&lt;/h3&gt;

&lt;p&gt;Have dedicated days where everyone has to observe "library rules." For example, no loud noises, no conversations above a whisper, etc. This tip is geared toward those who work in an open office, where everyday noises can be especially distracting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Eliminate obligations
&lt;/h3&gt;

&lt;p&gt;The only way to get more done is to have less to do. Focusing on time management will only take you so far. When push comes to shove, a day will never have more than 24 hours. Think carefully about your obligations and eliminate anything that is not essential.&lt;/p&gt;

&lt;h2&gt;
  
  
  TLDR;
&lt;/h2&gt;

&lt;p&gt;If you're struggling with work-life balance, I can't recommend this book enough. Fried &amp;amp; Hansson's tips won't apply to everyone or every workplace, but you will find some valuable insights and advice regardless of your situation.&lt;/p&gt;

</description>
      <category>books</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to publish a ReactJS app on GitHub</title>
      <dc:creator>Marie-Elise</dc:creator>
      <pubDate>Sat, 12 Dec 2020 21:27:57 +0000</pubDate>
      <link>https://dev.to/kreyoldev/how-to-publish-a-reactjs-app-on-github-2230</link>
      <guid>https://dev.to/kreyoldev/how-to-publish-a-reactjs-app-on-github-2230</guid>
      <description>&lt;p&gt;&lt;a href="https://pages.github.com"&gt;GitHub Pages&lt;/a&gt; is a hosting service that lets you publish your projects to the web, directly from your GitHub repository. And it's &lt;strong&gt;free&lt;/strong&gt; to use.&lt;/p&gt;

&lt;p&gt;Pages is really useful if you need to &lt;strong&gt;get your portfolio projects up and running quickly&lt;/strong&gt;. As you learn new skills and update your repos, you have peace-of-mind knowing that your projects can be published with just a few clicks. If you've ever had to unexpectedly share your portfolio with a potential client or recruiter, you know how valuable this can be!&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Step 1: Create a ReactJS app
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open your terminal.&lt;/li&gt;
&lt;li&gt;Navigate to the directory where you want to save your project.&lt;/li&gt;
&lt;li&gt;If you haven't installed &lt;strong&gt;Node.js&lt;/strong&gt; or &lt;strong&gt;npm&lt;/strong&gt; on your device, you can &lt;a href="https://www.npmjs.com/get-npm"&gt;find instructions here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Create your new app. This will be the &lt;strong&gt;local repository&lt;/strong&gt; for the project.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;npx create-react-app my-project
cd my-project
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Initialize a Git Repository
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Log into your &lt;a href="https://github.com"&gt;GitHub&lt;/a&gt; account.&lt;/li&gt;
&lt;li&gt;Create a new repository with the &lt;strong&gt;same name&lt;/strong&gt; that you used for your local repository. This will be your &lt;strong&gt;remote repository&lt;/strong&gt; for the project.&lt;/li&gt;
&lt;li&gt;Connect your local and remote repositories.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;git remote add origin
https://github.com/my-username/my-project
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Build Your App
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In the terminal, type &lt;code&gt;npm start&lt;/code&gt; to spin up a local server on your device.&lt;/li&gt;
&lt;li&gt;Open &lt;a href="https://localhost:3000"&gt;http://localhost:3000&lt;/a&gt; to view your app. &lt;em&gt;The page will automatically reload as you make changes.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Build your app! &lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 4: Publish to GitHub
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;When your project is ready to publish, bundle it by typing &lt;code&gt;npm run build&lt;/code&gt; in the terminal. &lt;/li&gt;
&lt;li&gt;Push your production-ready app to GitHub.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;git add .
git commit -m "Add a short description of the changes you made."
git push -u origin master
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Open your project's repository on &lt;a href="https://github.com"&gt;GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Click on the Settings tab and scroll down to the GitHub Pages section.&lt;/li&gt;
&lt;li&gt;Under Source, select the branch that you want to publish. The default choice is usually the &lt;code&gt;master&lt;/code&gt; branch or the &lt;code&gt;main&lt;/code&gt; branch. &lt;/li&gt;
&lt;li&gt;Click Save and GitHub will display the URL for your project. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; To learn more about configuring source branches, see this &lt;a href="https://docs.github.com/en/free-pro-team@latest/github/working-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site"&gt;GitHub Docs page&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Use a Custom URL
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In your project's repository on GitHub, click on the Settings tab.&lt;/li&gt;
&lt;li&gt;Scroll down to the GitHub Pages section.&lt;/li&gt;
&lt;li&gt;Under Custom Domain, enter your domain name and click Save. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; To learn more about configuring custom domains, see this &lt;a href="https://docs.github.com/en/free-pro-team@latest/github/working-with-github-pages/configuring-a-custom-domain-for-your-github-pages-site"&gt;GitHub Docs page&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;GitHub Pages makes it easy to deploy and host web-based apps. If you need a &lt;strong&gt;simple, user-friendly&lt;/strong&gt; way to publish your portfolio projects, give Pages a try!&lt;/p&gt;

</description>
      <category>react</category>
      <category>github</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
