<?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: Molly Nemerever</title>
    <description>The latest articles on Forem by Molly Nemerever (@mollynem).</description>
    <link>https://forem.com/mollynem</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%2F141473%2F5d5f72ce-dd68-43ae-adcb-504a331c29a5.JPG</url>
      <title>Forem: Molly Nemerever</title>
      <link>https://forem.com/mollynem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mollynem"/>
    <language>en</language>
    <item>
      <title>Back to Basics - Pure Functions</title>
      <dc:creator>Molly Nemerever</dc:creator>
      <pubDate>Sun, 06 Oct 2019 01:23:39 +0000</pubDate>
      <link>https://forem.com/mollynem/back-to-basics-pure-functions-3n38</link>
      <guid>https://forem.com/mollynem/back-to-basics-pure-functions-3n38</guid>
      <description>&lt;p&gt;Pure functions are one of several core concepts of fundamental programming.  I'm sure you've written them, but were you able to identify that you were writing a pure function? Did you realize the importance or key traits of a pure function? If you're not sure then you've come to the right place. Let's review the basics of pure functions together! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/rVbAzUUSUC6dO/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/rVbAzUUSUC6dO/giphy.gif" alt="chris pratt gif looking excited"&gt;&lt;/a&gt;so excited&lt;/p&gt;

&lt;h4&gt;
  
  
  What are Pure Functions?
&lt;/h4&gt;

&lt;p&gt;Simply put, pure functions are functions which accept argument(s), compute a value based on the argument(s), and return a value. They &lt;em&gt;always&lt;/em&gt; do this.  Sounds really basic - right? Well, pure functions kind of are! But let's dig a little deeper into some additional key characteristics. &lt;/p&gt;

&lt;p&gt;Pure functions must always accept at least 1 argument.  This argument will remain unaltered but will be used in the computation which takes place inside the body of the function. Additionally, there must always be a return value. This is perhaps a dead giveaway of a pure function - the return value will always be the same when called with the same arguments. &lt;/p&gt;

&lt;p&gt;Take the code below - run &lt;code&gt;plusFive&lt;/code&gt; 1 million times and you will always get the same return value when passed the same argument.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbz0fitzf64nbmcy2t6ok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbz0fitzf64nbmcy2t6ok.png" alt="basic pure function example"&gt;&lt;/a&gt;very basic example, I'm sure you've used something like this before!&lt;/p&gt;

&lt;p&gt;It's also important to note what pure functions &lt;strong&gt;don't do&lt;/strong&gt;.  They shall not cause side effects such as altering the arguments that were passed in, changing your application's state, setting/updating global variables, or any other side effect like triggering a fetch request. They're simple and only depend on their arguments to compute and return a value.&lt;/p&gt;

&lt;h4&gt;
  
  
  Pure Functions in Your Program
&lt;/h4&gt;

&lt;p&gt;Cool - now we've got the definition down let's take a look at how they might be used and some advantages.&lt;/p&gt;

&lt;p&gt;Because pure functions are independent of your program's ecosystem, that makes them easier to debug and refactor.  You can expect the same output given the same input - so expect to write simple tests for these functions and if problems do arise you'll be able to quickly diagnose the issue. You can also most likely dismiss them as a culprit of other bugs knowing that these pure functions don't cause side effects. Another plus of no side effects is that when you refactor your pure functions you can kiss away any anxiety you might have about accidentally tweaking another corner of your program. Refactoring these functions won't change others in your program since they were never connected to begin with.&lt;/p&gt;

&lt;h4&gt;
  
  
  Examples of Pure and Impure Functions
&lt;/h4&gt;

&lt;p&gt;First up - let's look at an &lt;em&gt;impure&lt;/em&gt; function. Notice how the &lt;code&gt;moveUpGrade&lt;/code&gt; function alters the argument that was passed in? That means the function is creating a side effect therefore it is impure. &lt;/p&gt;

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

&lt;p&gt;Let's refactor the code to make the function pure.  Below you can see we use the spread operator to create a new student object.  Instead of altering the exact object that was passed in and causing a side effect, we make the update desired and return a new object. Pure!&lt;/p&gt;

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

&lt;p&gt;And that's it for Back to Basics - Pure Functions! They're quite straight forward, can help maintain clean code, encourage simple refactoring, as well as quick testing/debugging. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/xUPOqo6E1XvWXwlCyQ/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/xUPOqo6E1XvWXwlCyQ/giphy.gif" alt="that's all folks gif"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>womenwhocode</category>
    </item>
    <item>
      <title>Back to Basics - Simple Destructuring in JavaScript</title>
      <dc:creator>Molly Nemerever</dc:creator>
      <pubDate>Thu, 22 Aug 2019 21:00:29 +0000</pubDate>
      <link>https://forem.com/mollynem/back-to-basics-simple-destructuring-in-javascript-2dog</link>
      <guid>https://forem.com/mollynem/back-to-basics-simple-destructuring-in-javascript-2dog</guid>
      <description>&lt;p&gt;Want to type less, keep your code concise, and quickly access values within objects and arrays? Then you've come to the right place. This week's Back to Basics series will review the incredible (and perhaps underrated?) feature of destructuring in JavaScript. I'll show how to 'take a peak' inside data structures like objects and arrays and assign specific values to a variable for quick easy reference. &lt;/p&gt;

&lt;p&gt;As implied by the name, destructuring can help simplify complex data structures into smaller and more manageable fragments. This can be especially helpful when passing objects/arrays as arguments, or if you want to frequently access a deeply nested value within an object since you can save yourself some typing (and potentially typos) by assigning the value to a variable.&lt;/p&gt;

&lt;p&gt;Let's begin with simple examples of destructuring arrays and objects in JavaScript. &lt;/p&gt;

&lt;p&gt;Below you can see an example with an array of princesses 👑. For the sake of simplicity we are going to destructure the array and create easy references to the first two princesses in the array - let's call them &lt;code&gt;first&lt;/code&gt; and &lt;code&gt;second&lt;/code&gt;. On line 34 we use the array literal and assign it to our original array. Inside of the array literal we list our new variables &lt;code&gt;first&lt;/code&gt; and &lt;code&gt;second&lt;/code&gt; which will be mapped to the first two elements in the princesses array in their corresponding order. You can see the logs on lines 35 and 36. &lt;/p&gt;

&lt;p&gt;Another option is to assign the remainder of the array to a variable. This can be accomplished by using the spread operator as the third and final variable within our array literal (&lt;code&gt;...remaining&lt;/code&gt;). You can see the logs from this alternative example on lines 40-42.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbp49dyicoq9ghr82x8j4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbp49dyicoq9ghr82x8j4.png" alt="simple array destruction example"&gt;&lt;/a&gt;two variations of destructuring a simple array&lt;/p&gt;

&lt;p&gt;Moving on now..let's explore a simple object example. We need to keep track of the hometowns of each princess (very important stuff, I know).  We have a rather large object which lists each princess, her rumored country of origin, and the region said country belongs to. While this is just a fraction of princesses, we can imagine that a complete list would create a much larger object. Hypothetically speaking throughout our program we will want to reference the object which represents each region. We can easily destructure our hometowns object into variables which represent each region. &lt;/p&gt;

&lt;p&gt;On line 58 we use the object literal to create a variable &lt;code&gt;europe&lt;/code&gt; and assign it to the object &lt;code&gt;hometowns&lt;/code&gt;. This variable will be mapped to the value of the key &lt;code&gt;europe&lt;/code&gt; inside the hometowns object as proved on line 60. We can also declare two variables like &lt;code&gt;northAmerica&lt;/code&gt; and &lt;code&gt;asia&lt;/code&gt; in one object literal to pull of the remaining two nested object - take a look at lines 62-66!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F7fdg2r05u0wlysqqpj2t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F7fdg2r05u0wlysqqpj2t.png" alt="simple object destructuring example"&gt;&lt;/a&gt;you can assign multiple variables at once&lt;/p&gt;

&lt;p&gt;Lastly, let's take a brief look at how you can destructure a function parameter.  From our princess data - you'd really like to print out the total number of countries represented from each region. To achieve this efficiently through destructuring, pass in the larger hometown object and pick off each region. You can then log the count of keys inside of each country object. Note that here we destructured each region, but you could also just destructure &lt;code&gt;{asia}&lt;/code&gt; similar to the earlier object example. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fnqs11bol3d94atiufx0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fnqs11bol3d94atiufx0a.png" alt="destructuring function parameter example"&gt;&lt;/a&gt;hometown object is destructured as function parameter&lt;/p&gt;

&lt;p&gt;I hope this post helped to provide some foundation for destructuring in JavaScript.  There are a lot of other cool ways you can utilize destructuring within your code and I encourage you to explore further. I've linked the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment" rel="noopener noreferrer"&gt;MDN doc&lt;/a&gt; for your convenience! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/11cwuBQ4TLa8FO/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/11cwuBQ4TLa8FO/giphy.gif" alt="salute princess gif"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>womewhocode</category>
    </item>
    <item>
      <title>Back to Basics - JavaScript Closures</title>
      <dc:creator>Molly Nemerever</dc:creator>
      <pubDate>Mon, 12 Aug 2019 15:33:16 +0000</pubDate>
      <link>https://forem.com/mollynem/back-to-basics-javascript-closures-17bh</link>
      <guid>https://forem.com/mollynem/back-to-basics-javascript-closures-17bh</guid>
      <description>&lt;p&gt;It's time for part 2 of my JavaScript Basics series! This week we are reviewing closures. I think it is very likely that many beginner programmers understand this concept, but might not recognize that we call this functionality a closure. Let's dig into the definition of a closure and explore some examples.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures" rel="noopener noreferrer"&gt;MDN&lt;/a&gt; defines a closure as &lt;em&gt;"the combination of a function and the lexical environment within which that function was declared."&lt;/em&gt; Great..but can we simplify even more into layman's terms? &lt;/p&gt;

&lt;p&gt;Think of a closure as a function with preserved data. The preserved data consists of any variables or arguments that were in scope at the time of function call. Each and every function call creates its own preserved data which we call a &lt;em&gt;local binding&lt;/em&gt;. The idea that we can access a particular instance of a local binding is closure. &lt;/p&gt;

&lt;p&gt;Let's look at some examples:&lt;/p&gt;

&lt;p&gt;The code below shows an outer and inner function. The outer function takes in a number, assigns it to a local variable (&lt;em&gt;local&lt;/em&gt;) and returns our inner function. The inner function computes and returns the value of the local variable multiplied by two. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0ki45w1sbuaplza350ew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0ki45w1sbuaplza350ew.png" alt="simple outer/inner function example of closure"&gt;&lt;/a&gt;demonstrates multiple local bindings (closures)&lt;/p&gt;

&lt;p&gt;As mentioned earlier, each time a function is called a new local binding is created. Therefore a single function can have various local bindings as illustrated in the code above. We have a closure which accesses the binding of &lt;code&gt;num = 2&lt;/code&gt; and a closure which accesses the binding of &lt;code&gt;num = 4&lt;/code&gt;. We also get the ability to call &lt;code&gt;var1()&lt;/code&gt; and &lt;code&gt;var2()&lt;/code&gt; anywhere in our program and they'll maintain their local bindings. &lt;/p&gt;

&lt;p&gt;The next example is a tad more complex. It considers both an outer and inner function, but this time the inner function takes in an argument. The objective of this code is to build a DRY function that creates a blueprint for multiplication. We can bind this function to a factor (ex: 5) and then reuse over and over again passing in different numbers. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ftfdd69fqfmjw6168jwpn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ftfdd69fqfmjw6168jwpn.png" alt="more complex outer/inner function example of closure"&gt;&lt;/a&gt;functions see the bindings in which it was created, not called&lt;/p&gt;

&lt;p&gt;Above we are creating two separate environments on lines 7 and 10. &lt;code&gt;triple&lt;/code&gt; constructs an environment where &lt;code&gt;factor = 3&lt;/code&gt; and &lt;code&gt;quadruple&lt;/code&gt; does the same where &lt;code&gt;factor = 4&lt;/code&gt;. Now looking at line 13, the function which is returned by calling &lt;code&gt;triple(5)&lt;/code&gt; recalls that &lt;code&gt;factor = 3&lt;/code&gt; and recognizes that the argument of &lt;code&gt;5&lt;/code&gt; represents &lt;code&gt;num&lt;/code&gt;. So, the result of &lt;code&gt;num * factor&lt;/code&gt; is returned.&lt;/p&gt;

&lt;p&gt;I hope this article helped to provide some more explanation around what a closure is. Feel free to comment below with feedback, examples of when you've used closure, or any additional tips! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/eMsCxr6w35vjfI4zl5/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/eMsCxr6w35vjfI4zl5/giphy.gif" alt="closure gif from friends"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>womenwhocode</category>
    </item>
    <item>
      <title>Back to Basics - JavaScript Hoisting 101</title>
      <dc:creator>Molly Nemerever</dc:creator>
      <pubDate>Tue, 06 Aug 2019 23:29:50 +0000</pubDate>
      <link>https://forem.com/mollynem/back-to-basics-javascript-hoisting-101-1c8d</link>
      <guid>https://forem.com/mollynem/back-to-basics-javascript-hoisting-101-1c8d</guid>
      <description>&lt;p&gt;It's always a good time to review the basics of your programming language!  In this series I'll be reviewing some fundamentals of JavaScript. It is important that we refresh ourselves on how the language works behind the scenes and of course it is also great practice to be able to explain concepts in simple terms. &lt;/p&gt;

&lt;p&gt;This week we review &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Hoisting"&gt;Hoisting&lt;/a&gt; - what it is, function and variable hoisting, and a few key takeaways.   &lt;/p&gt;

&lt;h4&gt;
  
  
  What is Hoisting?
&lt;/h4&gt;

&lt;p&gt;When your JavaScript code is compiled, variable and function declarations are "hoisted" to the top of their scope. Depending on where a variable is declared, the scope could be global or local. Either way, the variable declaration is hoisted to the top of that specific scope. Functions are also hoisted, but to the very top of the program. Functions are hoisted even above global variables. Hoisting is why you might see functions successfully called before they are declared - to make this possible they are pulled (hoisted) to the top of your program right before the code is executed.&lt;/p&gt;

&lt;p&gt;It is important to note that when code is hoisted it is not physically relocated in your program. Instead, your program is scanned for all variable/function declarations and those relationships are saved in the &lt;a href="https://www.ecma-international.org/ecma-262/6.0/#sec-lexical-environments"&gt;lexical environment&lt;/a&gt;. Your code maintains its original formatting and structure while variable/function declarations are accessible via lexical environment.&lt;/p&gt;

&lt;h4&gt;
  
  
  Hoisting Functions:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Function Declarations &lt;/strong&gt; are hoisted to the very top of the program. They can be called in the code prior to actual declaration. The example below logs without error:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KyRjPicb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/w8hhxyjhe5bz10xkmimv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KyRjPicb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/w8hhxyjhe5bz10xkmimv.png" alt="function declaration hoisting example"&gt;&lt;/a&gt;function declarations hoisted to top of program&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Function Expressions&lt;/strong&gt; are not completely hoisted in the program. Instead, only the declaration will be hoisted because it is recognized as a variable (hint: &lt;code&gt;var&lt;/code&gt; keyword). The actual assignment of the variable's value (in this case a function) is not hoisted. In the example below, you'll first get an error stating that expression is not a function. That is because the assignment was not hoisted - only the declaration. The second call of &lt;code&gt;expression()&lt;/code&gt; works, because the program has parsed through the program ad reached the assignment of the function to &lt;code&gt;var expression&lt;/code&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MrKKMJV2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/po8v2c981sxgd1vad71u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MrKKMJV2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/po8v2c981sxgd1vad71u.png" alt="function expression hoisting example"&gt;&lt;/a&gt;declaration is hoisted, but not assignment of function value&lt;/p&gt;

&lt;h4&gt;
  
  
  Hoisting Variables:
&lt;/h4&gt;

&lt;p&gt;Variables are hoisted to the top of their scope (local or global). Variables declared with &lt;code&gt;var&lt;/code&gt; are hoisted slightly differently that variables declared with &lt;code&gt;const&lt;/code&gt; or &lt;code&gt;let&lt;/code&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;var Variables&lt;/strong&gt; are hoisted, initialized, but assigned value of &lt;code&gt;undefined&lt;/code&gt;. Similar to function expressions only the declaration is hoisted, not the actual assignment of the variable's value. The code below demonstrates how &lt;code&gt;var&lt;/code&gt; variables are hoisted, initialized with a value of &lt;code&gt;undefined&lt;/code&gt;, and then reassigned their value once the program reaches the value assignment.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m8a2E4J5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/wsk4p0t4xvubmpilz092.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m8a2E4J5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/wsk4p0t4xvubmpilz092.png" alt="var variable hoisting example"&gt;&lt;/a&gt;hoisted, initialized, assigned undefined&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;let/const Variables&lt;/strong&gt; are a little more tricky. These variables are hoisted, but remain uninitialized until they are evaluated. Unlike the &lt;code&gt;var&lt;/code&gt; variables which are hoisted &lt;em&gt;and&lt;/em&gt; initialized with a value of &lt;code&gt;undefined&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;/&lt;code&gt;const&lt;/code&gt; variables are hoisted, but not initialized at all. That means they're sitting in the lexical environment uninitialized. Attempting to access a variable that is uninitialized throws a reference error. Once the program is in execution and reaches the variable declaration, your &lt;code&gt;let&lt;/code&gt;/&lt;code&gt;const&lt;/code&gt; variable will be initialized. It will either be initialized with a value (if assigned in the declaration line) or with &lt;code&gt;undefined&lt;/code&gt; until a value assignment is reached later on in the code. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This can be rather confusing at first, so let's take a look at the example below. You'll see that first an error is thrown because while the variable exists in the lexical environment, it remains uninitialized until the program reaches the line of variable declaration. Line 11 the variable gets initialized, but is assigned a value of &lt;code&gt;undefined&lt;/code&gt; because there is no value assignment. Line 13 the variable is assigned a value which overwrites previous value of &lt;code&gt;undefined&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--osgT-WOe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/cpjrrsvusgwfpkk09mhh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--osgT-WOe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/cpjrrsvusgwfpkk09mhh.png" alt="let const variable examples"&gt;&lt;/a&gt;hoisted, but initialized &amp;amp; assigned value once declaration is reached in code&lt;/p&gt;

&lt;p&gt;Take a look at the example below which showcases &lt;code&gt;let&lt;/code&gt;/&lt;code&gt;var&lt;/code&gt; variables and their hoisting differences side by side:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RJBeioFI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/owisglbs4w99o24gue89.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RJBeioFI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/owisglbs4w99o24gue89.png" alt="compare contrast var let hoisting"&gt;&lt;/a&gt;note the difference in how var is hoisted and initialized and let is not&lt;/p&gt;

&lt;h4&gt;
  
  
  Key Takeaways!
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Variable declarations are hoisted, while variable definitions are not.&lt;/li&gt;
&lt;li&gt;Function declarations are hoisted, while function expressions are not.&lt;/li&gt;
&lt;li&gt;Variables with &lt;code&gt;var&lt;/code&gt; are hoisted, initialized, and assigned value of &lt;code&gt;undefined&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Variables with &lt;code&gt;let&lt;/code&gt;/&lt;code&gt;const&lt;/code&gt; are hoisted, but remain uninitialized until their variable declaration code is reached. Then, they are either assigned &lt;code&gt;undefined&lt;/code&gt; or a value depending if value assignment exists.&lt;/li&gt;
&lt;li&gt;It is helpful to declare your variables at the top of the function scope. This way, it is clear where variables are coming from and easier to identify their scope. &lt;/li&gt;
&lt;li&gt;Declare and initialize your variables before use to avoid bugs which stem from incorrect hoisting assumptions.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Setting Up Sass in Gatsby Project - 4 Easy Steps </title>
      <dc:creator>Molly Nemerever</dc:creator>
      <pubDate>Mon, 29 Jul 2019 15:59:37 +0000</pubDate>
      <link>https://forem.com/mollynem/setting-up-sass-in-gatsby-project-4-easy-steps-4p9b</link>
      <guid>https://forem.com/mollynem/setting-up-sass-in-gatsby-project-4-easy-steps-4p9b</guid>
      <description>&lt;p&gt;Working on a Gatsby project and want to up your game by utilizing Sass? You've come to the right place, my friend. Below is a guide to get you started with Sass right away! No time like the present - right? &lt;/p&gt;

&lt;h3&gt;
  
  
  1. Install Plugins &amp;amp; Packages
&lt;/h3&gt;

&lt;p&gt;Up first - install the node-sass package and the Gatsby plugin for Sass through your terminal. Navigate into your Gatsby project and run the following command: &lt;code&gt;npm install --save node-sass gatsby-plugin-sass&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F8uyp23yjehe1cu4xq02r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F8uyp23yjehe1cu4xq02r.png" alt="npm install node sass and sass plugin"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Update Plugins in your Configuration File
&lt;/h3&gt;

&lt;p&gt;Now that you've imported the Sass plugin to your project - be sure to add this into your &lt;code&gt;gatsby-config.js&lt;/code&gt; file. You'll see that the react package is already living inside the plugins array, simply add &lt;code&gt;gatsby-plugin-sass&lt;/code&gt; to the array and save the file. &lt;/p&gt;

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

&lt;h3&gt;
  
  
  3. Rename &lt;code&gt;layout.css&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Gatsby gives you a default file titled &lt;code&gt;layout.css&lt;/code&gt; but now that we are taking advantage of &lt;code&gt;Sass&lt;/code&gt; we'll need to revise the file extension. Simply rename the file to include &lt;code&gt;.scss&lt;/code&gt; at the end.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  4. Adjust Import Statement in &lt;code&gt;layout.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;This step is easy - both easy to miss and to complete! Don't forget to adjust the file name of &lt;code&gt;layout.scss&lt;/code&gt; in your &lt;code&gt;layout.js&lt;/code&gt; file. Whatever you decided you wanted your file to be named in step 4, make sure it matches in &lt;code&gt;layout.js&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F9172n5xn8hidlskpi05z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F9172n5xn8hidlskpi05z.png" alt="adjust import file name to scss in layout.js"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the rest is history! You're ready to start using Sass in your Gatsby project. Run &lt;code&gt;gatsby develop&lt;/code&gt; as you work through your styling to see your changes instantly on localhost. Resources provided below for additional insight:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sass-lang.com/guide" rel="noopener noreferrer"&gt;Sass Guide&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.gatsbyjs.org/plugins/" rel="noopener noreferrer"&gt;Gatsby Plugins&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>gatsby</category>
      <category>css</category>
      <category>sass</category>
    </item>
    <item>
      <title>The Chrome Extension All Devs Need</title>
      <dc:creator>Molly Nemerever</dc:creator>
      <pubDate>Mon, 22 Jul 2019 14:52:51 +0000</pubDate>
      <link>https://forem.com/mollynem/the-chrome-extension-all-devs-need-31j4</link>
      <guid>https://forem.com/mollynem/the-chrome-extension-all-devs-need-31j4</guid>
      <description>&lt;p&gt;We know that developers play a critical role in how the internet is shaped today - from content to functionality to accessibility. But how mindful are we being of accessibility standards when it comes to our passion projects? I hope that the same due diligence regarding accessibility standards is taken regardless of the project - but I fear this may not be the case. &lt;/p&gt;

&lt;p&gt;I wrote an earlier &lt;a href="https://dev.to/mollynem/5-ways-your-html-code-affects-a-screen-reader-2cn1"&gt;post&lt;/a&gt; about HTML and its affects on a screen reader  and then I got thinking more about accessibility standards.  It is easy to remember to use the strong/em tags and to include alt tags for images - but for more complex HTML elements do we know how we are affecting a screen reader? What if you want to have an unordered list without bullet points - is that screen reader friendly? I suppose you could do some research each time you question an HTML choice, but luckily I’ve found a helpful Chrome extension to do this work for us.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chrome.google.com/webstore/detail/continuum-explorer-commun/bafnegdlhjhdcmakjaankoogodomfbde?hl=en-US" rel="noopener noreferrer"&gt;Continuum Explorer Community&lt;/a&gt; extension is free and easy to add to your Chrome browser. I’ve been using this extension to proof my passion projects before deploying to Heroku/Netlify. The tool scans webpages for accessibility concerns and also gives tips on how to resolve any issues. I’ve found it extremely helpful and enlightening as I jump into my career as a developer. You never know when you might accidentally mis-type something which could prohibit a screen reader from doing its job. Think of this extension as another set of eyes to review your work to ensure that all users can interpret and interact with your page. &lt;/p&gt;

&lt;p&gt;To use, simply click on the extension icon in your browser, the application will scan your current webpage for any concerns regarding accessibility. Below, see first and example of a page without  concerns, followed by a page that needs a lot of help!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Filu0gky995uw5faleg3t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Filu0gky995uw5faleg3t.png" alt="site without accessibility concerns"&gt;&lt;/a&gt; error free message&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F3kkgtp94ikvg1g9b6tk8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F3kkgtp94ikvg1g9b6tk8.png" alt="site with several accessibility concerns"&gt;&lt;/a&gt; error detail of several errors to be fixed&lt;/p&gt;

&lt;p&gt;You can see that this extension does a great job of listing the error, severity, and even gives you a clear path to identify the offender in your code. If you’re unsure of how to resolve the issue you can click on the link next to “Best Practice” to be lead to the page below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ffizk9aajz56bdeu01vs8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ffizk9aajz56bdeu01vs8.png" alt="Info page regarding accessibility"&gt;&lt;/a&gt; useful info page to learn more about errors&lt;/p&gt;

&lt;p&gt;This page is a great tool to learn more about the accessibility standards and to see several examples of how to write screen reader friendly pages. This is one of my favorite parts of the extension - instead of only telling you how to fix the problem, a resource is provided where I can dig deeper and learn more. &lt;/p&gt;

&lt;p&gt;I hope that you’ll take the time to explore this Chrome extension. I’ve found it extremely helpful when proofing my work. As developers, it is imperative that we are constantly mindful on the impact we have on accessibility. The Internet is a place for community, discovering, commerce, learning, and so much more. Everyone should be able to interact with the Internet the same - with or without a screen reader.  &lt;/p&gt;

</description>
      <category>a11y</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Learning Node.js - Recommendations?</title>
      <dc:creator>Molly Nemerever</dc:creator>
      <pubDate>Thu, 20 Jun 2019 18:29:04 +0000</pubDate>
      <link>https://forem.com/mollynem/learning-node-js-recommendations-3do7</link>
      <guid>https://forem.com/mollynem/learning-node-js-recommendations-3do7</guid>
      <description>&lt;p&gt;I'm interested in learning Node.js and am wondering if there are any recommendations for online resources?  I'm particularly interested in something engaging (practice problems and reviewed solutions) such as the courses offered on udemy. &lt;/p&gt;

&lt;p&gt;Does anyone have any recommendations on material that they found to be beneficial? There is so much content out there - looking for some personal insight before I go down the Google rabbit hole. 🐰&lt;/p&gt;

&lt;p&gt;Thanks in advance!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>node</category>
    </item>
    <item>
      <title>4 Simple Steps For Custom Bash Commands</title>
      <dc:creator>Molly Nemerever</dc:creator>
      <pubDate>Mon, 08 Apr 2019 18:48:23 +0000</pubDate>
      <link>https://forem.com/mollynem/4-simple-steps-for-custom-bash-commands-4c58</link>
      <guid>https://forem.com/mollynem/4-simple-steps-for-custom-bash-commands-4c58</guid>
      <description>&lt;p&gt;The terminal isn’t the most user friendly - sensitive to errors, challenging to read, and it requires a lot of typing!  I frequently find myself typing the same commands over and over into my terminal. If only there was a way to create my own shortcuts to access my main folders by typing a single keyword…&lt;/p&gt;

&lt;p&gt;Luckily this functionality exists! Let's walk through 4 simple steps to creating your personalized bash commands:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Locate Your .bash_profile (OSX) or .bashrc (Linux)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt; Navigate through your terminal to either your .bash_profile file or .bashrc depending on your operating system. Your shortcuts will live in these files so that each time you open a new terminal session, the shortcuts are accessible. 
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqheh2wbxz71xbbe3c4ky.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqheh2wbxz71xbbe3c4ky.png" alt="navigate to bash profile in osx"&gt;&lt;/a&gt; navigate to .bash_profile within OSX&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Add Your Commands
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt; Inside the file start creating your own commands! Use them to help you navigate to frequently accessed folders, shorten git commands, open applications, or anything you think would be helpful and time saving.  Examples below: 
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fipb8yl0g4hgh09ko7s2r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fipb8yl0g4hgh09ko7s2r.png" alt="bash shortcut command examples"&gt;&lt;/a&gt;&lt;/p&gt;
 a few examples of personalized bash commands



&lt;h4&gt;
  
  
  3. Update Your Command File Through the Terminal
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt; For best practice, after you add new commands to your shortcut file, be sure to run the command below to refresh your file via the terminal:  source ~/.yourfilenamehere 
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0h18cdxgg8wxcsqv5710.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0h18cdxgg8wxcsqv5710.png" alt="update file through bash"&gt;&lt;/a&gt; run this command after editing your file             &lt;/p&gt;

&lt;h4&gt;
  
  
  4. Run Your Commands!
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt; Use your commands and enjoy the time you’ve saved by working smarter - not harder! Go back and add commands as you need throughout the future. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3co40ta01mv9kuyw954c.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3co40ta01mv9kuyw954c.gif" alt="get work done gif"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

</description>
      <category>bash</category>
      <category>productivity</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>'Rails Routes' My New BFF</title>
      <dc:creator>Molly Nemerever</dc:creator>
      <pubDate>Tue, 02 Apr 2019 02:38:33 +0000</pubDate>
      <link>https://forem.com/mollynem/rails-routes-my-new-bff-k3a</link>
      <guid>https://forem.com/mollynem/rails-routes-my-new-bff-k3a</guid>
      <description>&lt;p&gt;Last week I finished my &lt;a href="https://github.com/mollynemerever/Module-2-Final-Project" rel="noopener noreferrer"&gt;second project&lt;/a&gt; at Flatiron School.  The task at hand was to create an application using Ruby on Rails and to deploy via &lt;a href="https://www.heroku.com/" rel="noopener noreferrer"&gt;Heroku&lt;/a&gt;. Throughout the process of designing our application, my team and I were constantly utilizing the ‘rails routes’ command through our terminal to check the paths to each file within our application. Prior to this project, I had used the command sparingly, but I had no idea exactly how useful this tool is until I created an application myself.  The objective of this post is to help other developers learn when to call this command, how to interpret the message, and to portray the value of this built-in tool. &lt;/p&gt;

&lt;h4&gt;
  
  
  When To Use 'Rails Routes'
&lt;/h4&gt;

&lt;p&gt;The routes in your application will act as a bridge between the URI and controller files.  When a user types in an address the route will examine the request and look for the corresponding controller. When writing your application you always have the option to hard code your paths, but calling ‘rails routes’ will provide you with route helpers.  I recommend using these helpers because they are dynamic, can improve readability of your code, and is a more natural way of writing urls instead of string interpolation. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1v8jlvhpy4xvsi332u1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1v8jlvhpy4xvsi332u1.png" alt="RESTful routes diagram" width="800" height="463"&gt;&lt;/a&gt;MVC project workflow&lt;/p&gt;

&lt;p&gt;I used the command ‘rails routes’ most frequently when trying to complete the following tasks:&lt;/p&gt;

&lt;p&gt;Creating links&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Throughout the application there were links from one page to another, and I was never exactly sure off the top of my head what the path to these pages were.  By calling rails routes I was able to get a quick summary of the available paths, where they lead to, and the correct syntax for them within my program. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nesting Routes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Because we we were using the Heroku free plan, we weren’t going to have our own domain so we decided to nest all of our routes behind “/brain” (the name of our application). It was important that we maintain clean and clear URI paths to preserve our users' experience.  This was my first time nesting routes and while it was challenging, I couldn’t have done it without consistently calling ‘rails routes’. Below is a screenshot of the nested routes for this project - it was not intuitive for me at first look.  By calling rails routes I was able to immediately view in the terminal what our routes looked like, verify if they were correct, and could also make changes in real time and see the updates to routes in the terminal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4l1mcfz3lgmqlhxmbt2q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4l1mcfz3lgmqlhxmbt2q.png" alt="nested routes" width="800" height="182"&gt;&lt;/a&gt; nested routes are not very intuitive &lt;/p&gt;

&lt;h4&gt;
  
  
  Interpreting The Terminal Output
&lt;/h4&gt;

&lt;p&gt;The output will show you all the available routes within your program. As mentioned above, these are listed as route helper methods so that you don’t have to hard code paths into your project. Route helpers also offer the benefit of providing intuitive path names so when you or someone else is reading the code, they can make an educated guess on where the link will lead them. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffxuio3q0eq5t92ivk1nu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffxuio3q0eq5t92ivk1nu.png" alt="rails routes output" width="800" height="244"&gt;&lt;/a&gt; example output after running rails routes&lt;/p&gt;

&lt;p&gt;Column 1 - Prefix:&lt;br&gt;
These are the prefixes for the helper method - you’ll want to add _path at the end of the method when using in your code. See how intuitive these are!&lt;/p&gt;

&lt;p&gt;Column 2 - Verb:&lt;br&gt;
Lists the HTTP verb - what the program is doing and corresponds to a CRUD action.&lt;/p&gt;

&lt;p&gt;Column 3 - URI Pattern:&lt;br&gt;
This column lists the path for route.  Tells you what the URI will look like from a users’ perspective and will also note what type of parameters are needed (ex: user_id, post_id).&lt;/p&gt;

&lt;p&gt;Column 4 - Controller#Action:&lt;br&gt;
Lists the designated controller and the corresponding action. The controller will be listed on the left side of the hashtag, and the action (where it is going within the controller) is listed on the right side of the hashtag. &lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion - An Invaluable Command
&lt;/h4&gt;

&lt;p&gt;Overall, 'rails routes' has proved to be an invaluable tool and helped to demonstrate how the code I was writing would be translated in the URI. I could easily visualize how my program was navigating through the MVC architecture.  It also cut back on my errors because I was able to quickly reference the correct paths, rather than guess them.  My tip for beginners is to remember the power of running ‘rails routes’ - utilize it frequently to ensure proper application structure and to check out your URIs from the users' perspective.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp9nhn468mf2xpe5j1gsm.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp9nhn468mf2xpe5j1gsm.gif" alt="the more you know gif" width="600" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://backend.turing.io/module2/lessons/archive/advanced_routing_rails" rel="noopener noreferrer"&gt;Routing Image&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>ruby</category>
      <category>rails</category>
      <category>webdev</category>
    </item>
    <item>
      <title>A Beginner's Guide to the Internet of Things</title>
      <dc:creator>Molly Nemerever</dc:creator>
      <pubDate>Mon, 25 Mar 2019 02:36:24 +0000</pubDate>
      <link>https://forem.com/mollynem/a-beginners-guide-to-the-internet-of-things-4ihc</link>
      <guid>https://forem.com/mollynem/a-beginners-guide-to-the-internet-of-things-4ihc</guid>
      <description>&lt;p&gt;You've probably heard the buzz-phrase "Internet of Things" (IoT) - but do you really know what it means?  I'll be the first to admit, I had no clue what this fancy sounding thing was, when I encountered the term.  &lt;em&gt;enter inspiration for this post&lt;/em&gt; I'm here to help break down the fundamentals of the Internet of Things, so that beginners like myself can get a grasp on this exciting technology. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/3otPoOoPY7KVLW5Cr6/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/3otPoOoPY7KVLW5Cr6/giphy.gif" alt="I don't get this gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  The Beginning of IoT:
&lt;/h4&gt;

&lt;p&gt;The term Internet of Things was originally coined by Kevin Ashton in 1999.  Realizing the potential of radio-frequency identification (RFID) in supply chain, Kevin was passionate about bringing RFID to the forefront of business strategy. He later founded the Auto-ID Center at MIT which served as a catalyst for RFID research across the globe. &lt;/p&gt;

&lt;p&gt;Although Kevin Ashton gets kudos for coining the IoT buzzword, legend has it that the first IoT device was a Coke machine at &lt;a href="https://www.cs.cmu.edu/~coke/history_long.txt" rel="noopener noreferrer"&gt;Carnegie Mellon&lt;/a&gt; in the 1970s. Tired of walking down lengthy hallways only to arrive at an empty vending machine, researchers in the Computer Science department decided to track the Coke machine's inventory remotely by monitoring the lights, which indicated stock levels, and temperatures of the sodas. This tracking program was hooked up through &lt;a href="https://en.wikipedia.org/wiki/ARPANET" rel="noopener noreferrer"&gt;ARPANET&lt;/a&gt; so that anyone at Carnegie Mellon could see the status of the vending machine. &lt;/p&gt;

&lt;p&gt;Despite these early pioneers, the development of IoT was initially slow to progress, as supporting technologies such as RFID and cellular/wireless networks were not yet developed enough to support its full capabilities. However, monumental strides in technologies such as broadband internet, wifi/cellular networks, and affordable, efficient hardware have since helped enable the rise of IoT.&lt;/p&gt;

&lt;h4&gt;
  
  
  How to Define IoT:
&lt;/h4&gt;

&lt;p&gt;So what exactly does IoT mean? The Internet of Things is any network of devices which collects and shares data through means of the internet. Often times, these devices don't even require the interaction of humans and the data it collects and transmits, is analyzed in real time.&lt;/p&gt;

&lt;p&gt;Some examples of the prevalence of IoT are:&lt;/p&gt;

&lt;p&gt;Home - smartphone, lighting/climate control, tv/speaker&lt;br&gt;
Public - public transit, traffic control, garbage collection&lt;br&gt;
Businesses - inventory management, delivery tracking, security cameras&lt;br&gt;
Workplace - access control, smart furniture, virtual meetings &lt;/p&gt;

&lt;p&gt;One perk of IoT is that these smart products aim to make our lives easier. Instead of having to check or change things manually, IoT products can automatically keep track of different metrics or settings, and with a simple click of a button, allow humans to complete tasks. They allow us to control devices remotely (such as turning on the oven while driving home from work), voice commands into our televisions, change traffic lights to mitigate congestion, and even remind us when to move our feet to stay healthy.&lt;/p&gt;

&lt;p&gt;These devices are also opening up endless possibilities for data analytics. As we continue to use smart devices, companies are able to collect more and more data on our behavior.  On one hand, this accumulation of data allows for companies to invent smarter machines which will better suit our needs in the future. On the other hand, companies are now privy to our every move and could even know our exact location at any given time. &lt;/p&gt;

&lt;p&gt;Devin Pickell has a great intro to &lt;a href="https://learn.g2crowd.com/what-is-data-analytics" rel="noopener noreferrer"&gt;Data Analytics&lt;/a&gt; if you want to learn more about how companies may utilize this data.&lt;/p&gt;

&lt;h4&gt;
  
  
  How Does IoT Work?
&lt;/h4&gt;

&lt;p&gt;In a nutshell - your smart device communicates through the internet to reach your remote, which has the ability to communicate directions back to the smart device (such as stop music or turn off lights). Data sent between can also be stored in locations such as the cloud, local databases or any of the devices. &lt;/p&gt;

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

&lt;h4&gt;
  
  
  IoT Isn't Going Anywhere
&lt;/h4&gt;

&lt;p&gt;I hope that this post helped to serve as introduction to IoT because it isn't going away anytime soon. The IoT market was estimated at $170 billion in 2017 and predictions estimate that by 2022, the IoT market will be around &lt;a href="https://www.reply.com/en/topics/internet-of-things/the-evolution-of-the-consumer-internet-of-things" rel="noopener noreferrer"&gt;$561 billion&lt;/a&gt;. As companies continue to collect more data and manufacture smarter devices, we can expect more and more integrated technology to be at the touch of our fingertips.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/qKgwRH8hyp6py/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/qKgwRH8hyp6py/giphy.gif" alt="will not fight future gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Resources:&lt;br&gt;
&lt;a href="https://www.ibm.com/blogs/industries/little-known-story-first-iot-device/" rel="noopener noreferrer"&gt;IBM Industries&lt;/a&gt;&lt;br&gt;
&lt;a href="https://internetofthingsagenda.techtarget.com/definition/Internet-of-Things-IoT" rel="noopener noreferrer"&gt;IoT Agenda&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.forbes.com/sites/jacobmorgan/2014/05/13/simple-explanation-internet-things-that-anyone-can-understand/#45f48e451d09" rel="noopener noreferrer"&gt;Forbes&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.quora.com/What-are-some-examples-of-Internet-of-Things-IoT-used-in-telecom-industry" rel="noopener noreferrer"&gt;CarriTech Diagram&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>iot</category>
      <category>smartdevices</category>
    </item>
    <item>
      <title>Do you use the Dvorak Keyboard?</title>
      <dc:creator>Molly Nemerever</dc:creator>
      <pubDate>Fri, 22 Mar 2019 21:29:41 +0000</pubDate>
      <link>https://forem.com/mollynem/do-you-use-the-dvorak-keyboard-58oa</link>
      <guid>https://forem.com/mollynem/do-you-use-the-dvorak-keyboard-58oa</guid>
      <description>&lt;p&gt;Doing some research on Dvorak vs Qwerty keyboard.  Does anyone have any experience with both?&lt;br&gt;&lt;br&gt;
I'm interested in gaining insight into the learning curve of Dvorak and its effectiveness with programming. &lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>5 Ways Your HTML Code Affects A Screen Reader</title>
      <dc:creator>Molly Nemerever</dc:creator>
      <pubDate>Mon, 18 Mar 2019 03:09:48 +0000</pubDate>
      <link>https://forem.com/mollynem/5-ways-your-html-code-affects-a-screen-reader-2cn1</link>
      <guid>https://forem.com/mollynem/5-ways-your-html-code-affects-a-screen-reader-2cn1</guid>
      <description>&lt;p&gt;Screen readers are important because they make the Internet an inclusive place. A screen reader is software that reads the contents of a webpage aloud to a user, and are most helpful for those who are visually impaired/blind, have a cognitive disability, or are illiterate.  Screen readers are responsible for identifying data on a webpage, interpreting that data, and then communicating the data to the user. This can be output through the voice of the computer or through a braille terminal (pictured below). &lt;/p&gt;

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

&lt;p&gt;To reiterate, screen readers play an incredibly important role to those who utilize them, as they serve as a gateway to the Internet for those who cannot access it on their own.  Completing everyday tasks such as emailing, paying online bills, or booking a plane ticket might not be possible without the aid of a screen reader. &lt;/p&gt;

&lt;p&gt;Because of their importance, it is imperative that Software Engineers remain educated and mindful of screen readers as they build and shape the Internet. I hope that with this post I can help to remind the developer community of the responsibilities we share to make the Internet an inclusive and accessible environment for everyone. Kindly note that I am not covering all the ways HTML code affects a screen reader and this article is intended only as an introduction to the topic. &lt;/p&gt;

&lt;h2&gt;
  
  
  5 Ways Your HTML Code Affects A Screen Reader:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Alternate Text for Images
&lt;/h3&gt;

&lt;p&gt;Screen readers can’t “read” images. Instead they read the alternate text provided through the HTML tag.  This alternate text should give an accurate and clear description of the image’s contents.  If there is no alternate text provided, the screen reader will read “graphic”.  Not very user-friendly is it?  Be sure to include a meaningful description of each image you include in a webpage. &lt;/p&gt;

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

&lt;h3&gt;
  
  
  Language
&lt;/h3&gt;

&lt;p&gt;HTML allows you to specify the language your page is written in.  This allows for seamless translation when your page is accessed in another country, or by a user with different language settings.  If your page includes snippets of text from other languages, you’ll need to add another language tag surrounding the foreign snippet. This way, as a screen reader parses through your page it can read and translate the text into the appropriate language. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F5nzxlq1l0ht9n4olmy1x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F5nzxlq1l0ht9n4olmy1x.png" alt="examples of entire doc language and sectional language"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Semantic Structure
&lt;/h3&gt;

&lt;p&gt;Screen readers will announce the text included in tags such as title or h1.  Therefore, it is important to be strategic and mindful about what you are identifying as headers.  Be sure that each of your headers throughout the page are valid and justify being read with emphasis. It is important to note that header tags should always be used - never tweak the size of the font or bold in place of a header tag.  A screen reader looks for concrete HTML indicators to announce something as a heading so make sure to provide so. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fj5frcdp1ejqifntcpfk1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fj5frcdp1ejqifntcpfk1.png" alt="example of main header in html"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fj011nrypye8qfefzdgga.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fj011nrypye8qfefzdgga.png" alt="example of bold and italicized font in html"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same applies for text within the body of the paragraph. While the strong (strong) and emphasis (em) tag will be picked up by the screen reader, the bold (bold) and italicize (i) tags will not be communicated to the user because they only have visual implications. &lt;/p&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;p&gt;Links are announced and read aloud for their entirety.  This means that links with long text - more than a phrase or word - will often confuse the user and could result in them skipping the link all together.  Additionally, links that are too short could prove difficult for a user to click on.  Someone with a physical disability might use a screen reader as an aid, but use their mouse on their own. If the link is a single character, they might have trouble aiming the mouse perfectly over the link to click.  Keep this in mind when deciding on the text that serves as a link.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqaenf81gbga2cfhw8oe6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqaenf81gbga2cfhw8oe6.png" alt="example of brief and concise links in html"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Page Structure
&lt;/h3&gt;

&lt;p&gt;When a human views a web page for the first time, they’re able to visually assess the page: general layout, color scheme, context, and route of navigation. A screen reader doesn’t have this luxury. Instead, each section of a page is read step-by-step in order top to bottom. Therefore, it is important that the layout of your page makes sense. Ask yourself - is all the content ordered in a way that would make sense if a user could only read top to bottom?&lt;/p&gt;

&lt;p&gt;Now, take into consideration that the user can tell a screen reader to jump around to different parts of the page.  Say I tell my screen reader to jump to the main context section, will the context here make sense? Is it actually the main section of the page? Additionally, are the navigation tabs across the page identified as navigation? When I ask my reader to go there will I understand the various links available to jump around the site?  With these questions in mind, make sure that your page is organized in a way that makes intuitive sense to any user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflggfkh27msmghv5dngx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflggfkh27msmghv5dngx.png" alt="main content example on starbucks.com"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My inspiration for this post came from an article I found on &lt;a href="https://www.fastcompany.com/40555815/what-its-like-to-be-a-blind-software-engineer-at-amazon" rel="noopener noreferrer"&gt;Fast Company&lt;/a&gt;.  The article tells a remarkable story about Michael Forzano, who has been working as a Software Engineer at Amazon since 2013. Michael was born with Norrie disease has been blind since birth. He relies on screen readers each day - at home and at the office.  His story is incredibly inspiring and impressive.  I encourage you to read and share the story with your colleagues.  &lt;/p&gt;

&lt;p&gt;I hope that we can all take a moment to reflect on the integral role Software Engineers play in a world which continues to rely more and more on the Internet each day.  Because we shape a user’s experience on the web, it is critical we maintain these best practices to maintain a low barrier to entry, so that anyone may participate. By keeping screen readers in the front of our minds, we can ensure that everyone can benefit from the Internet.&lt;/p&gt;

&lt;p&gt;Resources:&lt;br&gt;
&lt;a href="http://www.afb.org/prodBrowseCatResults.aspx?CatID=49" rel="noopener noreferrer"&gt;American Foundation for the Blind&lt;/a&gt;&lt;br&gt;
&lt;a href="https://webaim.org/techniques/screenreader/" rel="noopener noreferrer"&gt;WebAIM&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.fastcompany.com/40555815/what-its-like-to-be-a-blind-software-engineer-at-amazon" rel="noopener noreferrer"&gt;Fast Company&lt;/a&gt;&lt;/p&gt;

</description>
      <category>html</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>basics</category>
    </item>
  </channel>
</rss>
