<?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: Michael Kienbusch</title>
    <description>The latest articles on DEV Community by Michael Kienbusch (@mkienbus).</description>
    <link>https://dev.to/mkienbus</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%2F677793%2F7eed31f4-f354-438e-a4ff-060f1af60e65.png</url>
      <title>DEV Community: Michael Kienbusch</title>
      <link>https://dev.to/mkienbus</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mkienbus"/>
    <language>en</language>
    <item>
      <title>Learning Programming for Web Development, One Year In</title>
      <dc:creator>Michael Kienbusch</dc:creator>
      <pubDate>Wed, 06 Apr 2022 01:04:45 +0000</pubDate>
      <link>https://dev.to/mkienbus/learning-programming-for-web-development-one-year-in-5bc</link>
      <guid>https://dev.to/mkienbus/learning-programming-for-web-development-one-year-in-5bc</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;I recently graduated from an online web development programming course. Before that, the only programming experience I had was from a semester long course I took my junior year of high school. Seeing as I am 30 years old now, all I remember from then is &lt;code&gt;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;. In this post, I want to go over the things I've learned this year, and what I hope to learn in the future. &lt;/p&gt;

&lt;h3&gt;
  
  
  What I have learned
&lt;/h3&gt;

&lt;p&gt;Over the past year, I learned HTML, CSS, JavaScript, React, Redux, Ruby, Sinatra, and Ruby on Rails. When I say "learned", I mean I was able to complete lab assignments, projects, and live coding challenges which demonstrated competent knowledge and understanding of the languages and frameworks we were using in my course. I have not mastered any one of these tools, but I do have a solid grasp on them and understand the logic behind programming. &lt;/p&gt;

&lt;p&gt;As I worked through the curriculum and projects of my course, the tools we learned early on were used to help us understand how the frameworks built on them work. What would require an effort level of 10/10 to implement then, became an effort level of 2/10 because of helpful libraries and frameworks. However, I have less confidence in my ability to write vanilla JavaScript now than I did three months into my course. So, one of my goals moving forwards is to go back to JavaScript, get more practice with the concepts I am familiar with to gain fluency, as well as learn new concepts.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I hope to learn in the near future
&lt;/h3&gt;

&lt;p&gt;You do not really ever stop &lt;em&gt;learning&lt;/em&gt; how to program. There are always new frameworks and refactored libraries coming out in the massive programming community. Even as I was between projects in my course, React updated &lt;code&gt;&amp;lt;BrowserRouter /&amp;gt;&lt;/code&gt; and I was able to learn how to use their newest version of it on my following project.&lt;/p&gt;

&lt;p&gt;Each time I would look up documentation on how to implement a concept in whichever language, I would find myself going down a rabbit hole of linked documentation for relatable problems or concepts that I wanted to explore. However, I think my next main focus will be implementing Redux fully with my React based application I built for my final project.&lt;/p&gt;

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

&lt;p&gt;This past year has been a fulfilling experience of stressful times with difficult concepts, and amazing highs when I would get those concepts to work and make my ideas come to life. Now that I have whet my appetite for programming and web development, I am excited for the future and learning as much as I can!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>javascript</category>
      <category>student</category>
    </item>
    <item>
      <title>Tips for Bootcamp Students</title>
      <dc:creator>Michael Kienbusch</dc:creator>
      <pubDate>Tue, 05 Apr 2022 23:23:24 +0000</pubDate>
      <link>https://dev.to/mkienbus/tips-for-bootcamp-students-20m8</link>
      <guid>https://dev.to/mkienbus/tips-for-bootcamp-students-20m8</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;I recently graduated from Flatiron School's Software Engineering course, and would like to pass on some advice I learned firsthand during my learning experience to any current, or future, students. While I attended Flatiron School, this advice is applicable to students attending any program. A lot of the advice I can give is focused on students learning online, but some of it is universal to learning to program in general.&lt;/p&gt;

&lt;h4&gt;
  
  
  Note:
&lt;/h4&gt;

&lt;p&gt;Everybody learns differently. These tips are things I found helpful, if they don't work for you, then try something else!&lt;/p&gt;

&lt;h3&gt;
  
  
  Background Information
&lt;/h3&gt;

&lt;p&gt;I chose to enroll in their flexible online program, which was 100% online and stretched over a period of ten months, excluding one month of pre-course work. I went with this option because I was working full time, and could not afford to quit work to attend a full time, in person course.&lt;/p&gt;

&lt;p&gt;Students were placed into a cohort of about fifteen students with one instructor. Each week, the cohort had two hour long class sessions together with the instructor. Then, once a week, you and two other students had an hour long session with the instructor to go over any problems or topics the few of you wanted to discuss. You were also able to schedule one-on-one time with your instructor as often as he/she was available. &lt;/p&gt;

&lt;p&gt;The course was broken into five phases. Each phase consisted of a topic/language to learn, a project to be completed and assessed, and a live coding challenge to be graded. The phases built on each other, and by phase five, we were using everything we had learned.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Dedicate a workspace:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Set aside a physical workspace
&lt;/h4&gt;

&lt;p&gt;My wife and I lived in a single bedroom apartment with our newborn son taking up more space than I could have ever imagined an infant would. When I went through this course, we did not have a lot of space to spare. At the start of the course, I was just plopping my laptop on the kitchen table, using it on the couch, or wherever I thought I would want to study and work. It was hard to really get into a "work" mindset and be able to focus on learning difficult concepts, much less put them into practice. &lt;/p&gt;

&lt;p&gt;My advice to you is to &lt;strong&gt;dedicate a specific workspace&lt;/strong&gt; that nothing else in the house has claim over. You don't need a dedicated home office room to accomplish this, it can be a specific corner of the kitchen table, a foldable table you set up in the basement, or anything! That way, when you sit down and login to your computer, your mind knows its time to focus and work, because there is nothing else that is done in this spot of the house/apartment. While I did take my laptop with me for travels, I was never quite as productive as when I was at my "desk".&lt;/p&gt;

&lt;h3&gt;
  
  
  Time management:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Set aside time to work
&lt;/h4&gt;

&lt;p&gt;Much like you set aside a physical space to work in, set aside &lt;strong&gt;time&lt;/strong&gt; that you work during. Even with my wife and I both being back at work with a newborn baby, I was able to set aside time to work. While the class meeting times are set in stone, you need to set time aside to learn and complete course material on your own. There will be times during your curriculum that are slow paced, and some that are fast paced. For me, I did most of my course work on my days off work, and for two hours immediately after getting home from work before I got too tired. It is a sacrifice, and can be mentally draining, but know that it is temporary and it helps you in the long term. &lt;/p&gt;

&lt;h3&gt;
  
  
  Connect with students and utilize your instructor:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Utilize the resources you are paying for
&lt;/h4&gt;

&lt;p&gt;Don't be shy! Flatiron School utilized Slack to facilitate communication within the cohort and with the instructor. If you are stuck on topic or problem, message your cohort and see if anyone else is also stuck. Everyone is in it together, and your question is never beneath the group. Topics you learned in the first month, you might forget in a few months. If you can't figure out your problem through research, reach out for help. And don't feel hesitant to schedule one-on-one meetings with your instructor. They are &lt;strong&gt;paid&lt;/strong&gt; to be available to you, you are not inconveniencing them. &lt;/p&gt;

&lt;h3&gt;
  
  
  Do not get fixated on one problem
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Don't waste time
&lt;/h4&gt;

&lt;p&gt;I didn't really learn this lesson until I was working on my final project. I was determined to implement a new concept and library on my frontend for my final project. When I started trying to use these new tools, I got stuck. I utilized online resources, peers, and my instructor, to no avail. The library was new to my instructor, so we were more or less learning it together through our meetings, instead of me more speedily implementing it into my project. I did not work on other areas of my project while I was trying to figure out this one concept. Bottom line, I wasted two weeks on my final project on getting &lt;strong&gt;one&lt;/strong&gt; concept to work. This put me behind for the rest of my project, and I was rushed for the remainder of the course. &lt;/p&gt;

&lt;p&gt;If you are stuck on one topic in a project, work on the topics you do understand. You can build out other aspects of your program, and come back to the problem area later. &lt;/p&gt;

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

&lt;p&gt;Those are my four biggest takeaways from remote learning. These are pieces of advice I will take with me into my new career, and I hope they help you during your studies.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>students</category>
      <category>advice</category>
    </item>
    <item>
      <title>Using Redux Toolkit (RTK) Query for API Fetch Requests</title>
      <dc:creator>Michael Kienbusch</dc:creator>
      <pubDate>Tue, 05 Apr 2022 20:25:25 +0000</pubDate>
      <link>https://dev.to/mkienbus/using-redux-toolkit-rtk-query-for-api-fetch-requests-5e1a</link>
      <guid>https://dev.to/mkienbus/using-redux-toolkit-rtk-query-for-api-fetch-requests-5e1a</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;As part of my final project for my web development course with Flatiron School, I decided to give the implementation of Redux Toolkit a try. I had thus far only manipulated state locally in React within specific components, but my instructor encouraged the students to step outside of their comfort zones and try new concepts with our final projects. &lt;/p&gt;

&lt;p&gt;When working with React throughout the course, I had found it awfully repetitive sending fetch requests to my backend, converting the response to JSON, and then assigning that data to a local state variable using the useState hook. As I started looking into Redux, and the associated Redux Toolkit, I came across a powerful tool called &lt;strong&gt;RTK Query&lt;/strong&gt;. It allows developers to fetch and cache data from API's with ease.&lt;/p&gt;

&lt;h4&gt;
  
  
  Note:
&lt;/h4&gt;

&lt;p&gt;This demonstration is going to assume you have created a React application with &lt;code&gt;npx create-react-app restaurant-app --template redux&lt;/code&gt; or &lt;code&gt;npx create-react-app restaurant-app&lt;/code&gt; and afterwards installed Redux Toolkit with &lt;code&gt;npm install @reduxjs/toolkit&lt;/code&gt;.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1:
&lt;/h2&gt;

&lt;p&gt;RTK Query is included with the core Redux Toolkit package. It is available to components within your application by using &lt;code&gt;import { createApi } from '@reduxjs/toolkit/query/react'&lt;/code&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2:
&lt;/h2&gt;

&lt;p&gt;Define an "API slice", much like Redux slices, which will include the base URL you retrieve from the server as well as the endpoints you want to utilize from that base URL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//./src/slices/restaurantSlice.js
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'


  //auto-generates an "API slice" when using createApi()
    //in this case, useGetAllRestaurantsQuery
export const restaurantApi = createApi({
    reducerPath: 'restaurantApi',
    baseQuery: fetchBaseQuery({ baseUrl: 'http://localhost:3000/'}),
    endpoints: (builder) =&amp;gt; ({
        getAllRestaurants: builder.query({
            query: () =&amp;gt; `/restaurants`,
        })
    }),
})

export const {useGetAllRestaurantsQuery} = restaurantApi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now &lt;code&gt;useGetAllRestaurantsQuery&lt;/code&gt; is exported and set to retrieve from the &lt;code&gt;http://localhost:3000/restaurants&lt;/code&gt;endpoint. However, we still need to set up the Redux store. &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3:
&lt;/h2&gt;

&lt;p&gt;To set up your Redux store, navigate to your &lt;code&gt;"./src/store.js"&lt;/code&gt; file, and add the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { configureStore } from "@reduxjs/toolkit";
import { setupListeners } from "@reduxjs/toolkit/query";
import { restaurantApi } from "./slices/restaurantSlice";

const store = configureStore({
    reducer: {
        [restaurantApi.reducerPath] : restaurantApi.reducer,
    },
    middleware: (getDefaultMiddleware) =&amp;gt;
    getDefaultMiddleware().concat(restaurantApi.middleware),

})


export default store;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4:
&lt;/h2&gt;

&lt;p&gt;Now you are all ready to import and use the React hook generated in &lt;strong&gt;Step 2&lt;/strong&gt;, &lt;code&gt;useGetAllRestaurantsQuery&lt;/code&gt;, in whatever component you need to.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from "react";
import { useGetAllRestaurantsQuery } from ".src/slices/restaurantSlice.js";

function Restaurants(){

    const { data, error, isLoading, isSuccess } = useGetAllRestaurantsQuery();

return(
    &amp;lt;div&amp;gt;{data.information}&amp;lt;/div&amp;gt;
  )
}

export default Restaurants;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;data&lt;/code&gt;, &lt;code&gt;error&lt;/code&gt;, &lt;code&gt;isLoading&lt;/code&gt;, and &lt;code&gt;isSuccess&lt;/code&gt; state variables are provided by RTK Query, and can be used for custom handling of the response for different situations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other common usage:
&lt;/h2&gt;

&lt;p&gt;You can add as many endpoints as you want, I only demonstrated one here. You can also search for specific items at an endpoint by adding parameters into the slice function and URL endpoint depending on how the API is structured:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;getRestaurantByName: builder.query&amp;lt;Restaurant, string&amp;gt;({
      query: (name) =&amp;gt; `restaurant/${name}`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion:
&lt;/h2&gt;

&lt;p&gt;Now your data is fetched and cached all with the use of one hook! I found RTK Query to be useful in the development of my project, and I hope you get a chance to use it too. &lt;/p&gt;

</description>
      <category>react</category>
      <category>redux</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Passing Data Between React Components</title>
      <dc:creator>Michael Kienbusch</dc:creator>
      <pubDate>Mon, 07 Feb 2022 01:39:02 +0000</pubDate>
      <link>https://dev.to/mkienbus/passing-data-between-react-components-5c8l</link>
      <guid>https://dev.to/mkienbus/passing-data-between-react-components-5c8l</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;A question I found myself googling often when I started learning how to use React, was how do I pass information from a child component to its parent component? To be able to do so, you have to first understand how to pass data from the parent component to the child. I will demonstrate how to accomplish both of these tasks with a quick tutorial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passing data down from parent component to child component
&lt;/h2&gt;

&lt;p&gt;Data is passed down in the form of &lt;strong&gt;props&lt;/strong&gt; (properties). I often found myself having to pass the data my state was saving in the parent component to the child component. Let's use a simple function component with state as an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';
import Child from './Child.js';

function Parent() {

  const [name, setName] = useState('')

  function greeting(){
    setName('Michael')
  }

  return (
    &amp;lt;&amp;gt;
      &amp;lt;Child parentData = {name}/&amp;gt;
      &amp;lt;Button onClick={() =&amp;gt; greeting()}&amp;gt;Click Here&amp;lt;/Button&amp;gt;
    &amp;lt;/&amp;gt;
  );
}

export default Parent;

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

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Child&lt;/code&gt; must be imported into the &lt;code&gt;Parent&lt;/code&gt; component in order for it to be rendered. &lt;br&gt;
All that is happening here is &lt;code&gt;greeting()&lt;/code&gt; is being called upon the &lt;code&gt;onClick&lt;/code&gt; action on our button element. The &lt;code&gt;greeting()&lt;/code&gt; function calls &lt;code&gt;setName('Michael')&lt;/code&gt;, storing string &lt;code&gt;Michael&lt;/code&gt; in state. &lt;/p&gt;

&lt;p&gt;We then can pass that string as &lt;strong&gt;props&lt;/strong&gt; down to the &lt;code&gt;Child&lt;/code&gt; component being rendered by the &lt;code&gt;Parent&lt;/code&gt;. You can name your props whatever you want. Here, I named them &lt;code&gt;parentData&lt;/code&gt; and assigned them the data held in state, with &lt;code&gt;name&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;Child parentData = {name}/&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;Child&lt;/code&gt; component now has access to the props stored in state in the parent component. Let's see how that might look in the &lt;code&gt;Child&lt;/code&gt; component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';

function Child({parentData}) {
  return (
    &amp;lt;&amp;gt;
      {parentData}
    &amp;lt;/&amp;gt;
  );
}

export default Child;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, the props named &lt;code&gt;parentData&lt;/code&gt; from the &lt;code&gt;Parent&lt;/code&gt; component are being received by the functional component, &lt;code&gt;Child&lt;/code&gt;. It can do whatever it wants with that data, in this case render the string 'Michael' on the screen when the button is clicked. &lt;/p&gt;

&lt;p&gt;Now that we know how to pass data from a parent component to a child component, we can see how to pass data in the opposite direction, from child component to parent component.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passing data up from child component to parent component
&lt;/h2&gt;

&lt;p&gt;Passing data in the other direction is a little more complicated. A common situation where you will have to do this, is when you are wanting to change the data stored in state in a parent component from its child component. In order to accomplish this, you have to pass a &lt;strong&gt;callback function&lt;/strong&gt; down to the child component in the form of props. &lt;/p&gt;

&lt;p&gt;We'll use a similar example as above for demonstration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';
import Child from './Child.js'

function Parent() {

  const [name, setName] = useState('')

  function callBack(childName){
    setName(childName)
  }

  return (
    &amp;lt;&amp;gt;
      &amp;lt;Child callBack = {callBack} /&amp;gt;
      {name}
    &amp;lt;/&amp;gt;
  );
}

export default Parent;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice how the function &lt;code&gt;callBack&lt;/code&gt; is passed to &lt;code&gt;Child&lt;/code&gt; as props with&lt;br&gt;
&lt;code&gt;&amp;lt;Child callBack = {callBack} /&amp;gt;&lt;/code&gt;&lt;br&gt;
The &lt;code&gt;childName&lt;/code&gt; parameter received by &lt;code&gt;callBack&lt;/code&gt; is actually being passed up from the &lt;code&gt;Child&lt;/code&gt; component, let's take a look:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';

function Child({callBack}) {

  const childName = 'Dave'

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;button onClick={() =&amp;gt; callBack(childName)}&amp;gt;Click Child&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

export default Child;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Child&lt;/code&gt; receives the &lt;code&gt;callBack&lt;/code&gt; function in its parameters. It holds the &lt;code&gt;childName&lt;/code&gt; variable with a string of 'Dave'. Upon the click action on our button, the &lt;code&gt;callBack&lt;/code&gt; function is called passing into it the &lt;code&gt;childName&lt;/code&gt; data. This data is seen in the &lt;code&gt;Parent&lt;/code&gt; component, and is used to change state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#in the Parent component

function callBack(childName){
    setName(childName)
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The new state data is then rendered by the &lt;code&gt;Parent&lt;/code&gt; component.&lt;/p&gt;

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

&lt;p&gt;There you have it! That's about as simple as it gets when it comes to passing data from parent components to child components, and vice versa. Knowing how to perform these methods is an important tool to have under your belt, as they are crucial to the usage of React. &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>props</category>
      <category>react</category>
      <category>fundamentals</category>
    </item>
    <item>
      <title>Basics of Creating Tables With Active Record Migrations</title>
      <dc:creator>Michael Kienbusch</dc:creator>
      <pubDate>Mon, 06 Dec 2021 17:47:42 +0000</pubDate>
      <link>https://dev.to/mkienbus/basics-of-creating-tables-with-active-record-migrations-2eld</link>
      <guid>https://dev.to/mkienbus/basics-of-creating-tables-with-active-record-migrations-2eld</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Over the past six months, I have been learning the ins and outs of front-end web development as part of my school program. Whenever I would write a front-end application that would send fetch requests to a back-end, it was done to an independent JSON server which I hadn't set up myself. Now that I have been learning Ruby, I was finally able to build an application which made fetch requests to my own database. This quick tutorial will walk you through the basics of creating a table in a database with Ruby using migrations, assuming you have installed the necessary dependencies from your Gemfile.  &lt;/p&gt;

&lt;h1&gt;
  
  
  Active Record
&lt;/h1&gt;

&lt;p&gt;Ruby uses Active Record to fulfill the &lt;strong&gt;model&lt;/strong&gt; component of the &lt;strong&gt;model-view-controller (MVC)&lt;/strong&gt; paradigm. It's a an &lt;strong&gt;object-relational mapping (ORM)&lt;/strong&gt; framework for Ruby. Active Record is designed to be used with very specific naming conventions, and commonly followed organization conventions, to facilitate speed and ease of use.&lt;/p&gt;

&lt;h4&gt;
  
  
  Basic File Structure
&lt;/h4&gt;

&lt;p&gt;At the top level of the directory, there should be a &lt;strong&gt;db&lt;/strong&gt; folder (database). You should make sure there is a &lt;strong&gt;migrate&lt;/strong&gt; folder under the db folder. This migrate folder will be where Active Record saves your database migrations in the exact order in which you execute them, which is useful for keeping track of version history in your database. &lt;/p&gt;

&lt;h4&gt;
  
  
  Creating Your First Table
&lt;/h4&gt;

&lt;p&gt;Naming convention is extremely important when using Active Record. When creating a table, the table name needs to be &lt;strong&gt;plural&lt;/strong&gt;. For this example, I will be using pets. In your CLI you run &lt;/p&gt;

&lt;p&gt;&lt;code&gt;bundle exec rake db:create_migration NAME="create_pets"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This will create a ruby file under your &lt;strong&gt;migrate&lt;/strong&gt; folder which is automatically named beginning with a timestamp, and ending with your migration name. In this case "create_pets". &lt;/p&gt;

&lt;p&gt;For example: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;20211206094530_create_pets.rb&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Within this file, there will exist a template generated for you which will look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class CreatePets &amp;lt; ActiveRecord::Migration[6.1]
  def change
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Editing your table
&lt;/h4&gt;

&lt;p&gt;Now you can edit this file to add columns into the table in your database with data types of your choosing. The best way to do so is to set up an iteration in your new class using the &lt;code&gt;create_table&lt;/code&gt; method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class CreatePets &amp;lt; ActiveRecord::Migration[6.1]
  def change
    create_table :pets do |t|
      t.string :name
      t.string :breed
      t.boolean :spayed_neutered
      t.integer :owner_id
      t.timestamps
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create a table with seven columns titled in order as id, name, breed, spayed_neutered, owner_id, created_at, and updated_at.&lt;br&gt;
The &lt;strong&gt;id&lt;/strong&gt; column is generated automatically by Active Record and is SQL's way of keeping track of all data it has in the table. The &lt;strong&gt;created_at&lt;/strong&gt; and &lt;strong&gt;updated_at&lt;/strong&gt; columns are generated with the &lt;strong&gt;t.timestamps&lt;/strong&gt; shortcut and is considered good practice to include in all of your tables. The &lt;strong&gt;owner_id&lt;/strong&gt; column is there to show how you would relate this table to a separate hypothetical &lt;strong&gt;owners&lt;/strong&gt; table by way of a &lt;strong&gt;foreign key&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In order to implement the changes you have made to the &lt;code&gt;20211206094530_create_pets.rb&lt;/code&gt; file, you have to run the following command in your CLI:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;bundle exec rake db:migrate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You should now see a &lt;strong&gt;schema.rb&lt;/strong&gt; file generated in your &lt;strong&gt;db&lt;/strong&gt; folder, populated with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ActiveRecord::Schema.define(version: 2021_12_03_225736) do

  create_table "pets", force: :cascade do |t|
    t.string "name"
    t.string "breed"
    t.boolean "spayed_neutered"
    t.integer "owner_id"
    t.datetime "created_at"
    t.datetime "updated_at
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;schema.rb&lt;/strong&gt; file shows the structure of your table in the database.&lt;/p&gt;

&lt;p&gt;If you realize you have made a mistake after executing your &lt;code&gt;db:migrate&lt;/code&gt; command, you can run &lt;code&gt;bundle exec rake db:rollback&lt;/code&gt; to bring yourself back one version history, edit the file, and run &lt;code&gt;bundle exec db:migrate&lt;/code&gt; again. &lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;There you have it, the basics of creating and editing a simple table in Active Record using Ruby. We used the &lt;code&gt;create_table&lt;/code&gt; method in this example, but naturally there are many more methods at your disposal. You can find them, and more information, &lt;a href="https://guides.rubyonrails.org/active_record_querying.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>database</category>
    </item>
    <item>
      <title>How to Set Up Client-Side Routing Using React</title>
      <dc:creator>Michael Kienbusch</dc:creator>
      <pubDate>Tue, 05 Oct 2021 00:04:00 +0000</pubDate>
      <link>https://dev.to/mkienbus/how-to-set-up-client-side-routing-using-react-38km</link>
      <guid>https://dev.to/mkienbus/how-to-set-up-client-side-routing-using-react-38km</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Giving users the ability to navigate throughout your application in a logical and organized manner is crucial. React provides developers with the &lt;code&gt;&amp;lt;Route&amp;gt;&amp;lt;/Route&amp;gt;&lt;/code&gt; tool to allow ease of access to the components of your choosing. In this post, I will walk you through the steps to take in order to set up client-side routing using React in the form of clickable links, assuming you have started a React application using &lt;code&gt;create-react-app&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1:
&lt;/h2&gt;

&lt;p&gt;Before you are able to use &lt;code&gt;&amp;lt;Route&amp;gt;&lt;/code&gt; you must first import from react as such:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import {BrowserRouter} from "react-router-dom";&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This should be done in your index.js file. &lt;/p&gt;

&lt;p&gt;If you wish to rename the &lt;code&gt;BrowserRouter&lt;/code&gt; to something else, you can do so by importing in the following manner:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import {BrowserRouter as MyRouter} from "react-router-dom";&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For the sake of this guide, I will be using &lt;code&gt;&amp;lt;BrowserRouter&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2:
&lt;/h2&gt;

&lt;p&gt;In your terminal, run the command &lt;code&gt;$ npm install react-router-dom&lt;/code&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3:
&lt;/h2&gt;

&lt;p&gt;In your index.js file, wrap the application being rendered with &lt;code&gt;&amp;lt;BrowserRouter&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;eg:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
ReactDOM.render(
   &amp;lt;BrowserRouter&amp;gt;
     &amp;lt;App /&amp;gt;
   &amp;lt;/BrowserRouter&amp;gt;
 document.getElementById('root')
);
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4:
&lt;/h2&gt;

&lt;p&gt;Decide where you want to draw the routes. Usually, it makes sense to direct the routes to where the components are being rendered. I'll say that parent component is called &lt;code&gt;&amp;lt;App /&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5:
&lt;/h2&gt;

&lt;p&gt;Import &lt;code&gt;&amp;lt;Route&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;Switch&amp;gt;&lt;/code&gt; into the &lt;code&gt;&amp;lt;App /&amp;gt;&lt;/code&gt; component using&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import {Route, Switch} from "react-router-dom";&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6:
&lt;/h2&gt;

&lt;p&gt;Create an empty navigation component, such as Nav.js&lt;/p&gt;

&lt;p&gt;eg:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from "react";

  function Nav(){
     return(&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;);
  }

export default Nav;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 7:
&lt;/h2&gt;

&lt;p&gt;Render the navigation component within the &lt;code&gt;&amp;lt;App /&amp;gt;&lt;/code&gt; component.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8:
&lt;/h2&gt;

&lt;p&gt;Wrap all the components within &lt;code&gt;&amp;lt;App /&amp;gt;&lt;/code&gt; you wish to create routes to with &lt;code&gt;&amp;lt;Switch&amp;gt;&amp;lt;/Switch&amp;gt;&lt;/code&gt;, and wrap each individual component within the &lt;code&gt;&amp;lt;Switch&amp;gt;&lt;/code&gt; with &lt;code&gt;&amp;lt;Route&amp;gt;&amp;lt;/Route&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;eg:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
function App(){
   return(){
     &amp;lt;Nav /&amp;gt;
       &amp;lt;Switch&amp;gt;
         &amp;lt;Route&amp;gt;
           &amp;lt;ComponentOne /&amp;gt;
         &amp;lt;/Route&amp;gt;
         &amp;lt;Route&amp;gt;
           &amp;lt;ComponentTwo /&amp;gt;
         &amp;lt;/Route&amp;gt;
       &amp;lt;/Switch&amp;gt;
   };
}
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; the &lt;code&gt;&amp;lt;Nav /&amp;gt;&lt;/code&gt; component was left outside of the &lt;code&gt;&amp;lt;Switch&amp;gt;&lt;/code&gt;, this is because we want the navigation functionality to remain on all pages of our application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 9:
&lt;/h2&gt;

&lt;p&gt;Set the paths you want for each component within the &lt;code&gt;&amp;lt;Switch&amp;gt;&lt;/code&gt; using &lt;code&gt;path&lt;/code&gt; or &lt;code&gt;exact path&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;eg:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
       &amp;lt;Route exact path="/One"&amp;gt;
        &amp;lt;ComponentOne /&amp;gt;
       &amp;lt;/Route&amp;gt;
       &amp;lt;Route exact path="/Two"&amp;gt;
        &amp;lt;ComponentTwo /&amp;gt;
       &amp;lt;/Route&amp;gt;
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 10:
&lt;/h2&gt;

&lt;p&gt;Import &lt;code&gt;&amp;lt;NavLink&amp;gt;&lt;/code&gt; into your &lt;code&gt;&amp;lt;Nav /&amp;gt;&lt;/code&gt; component. Then, add &lt;code&gt;&amp;lt;NavLink&amp;gt;&lt;/code&gt; to create clickable links with paths defined by the &lt;code&gt;&amp;lt;Route&amp;gt;&lt;/code&gt;s in step 9. &lt;/p&gt;

&lt;p&gt;eg:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
import {NavLink} from "react-router-dom";

function Nav(){
   return(
     &amp;lt;div&amp;gt;
       &amp;lt;h2&amp;gt;Navigation Bar&amp;lt;/h2&amp;gt;
        &amp;lt;NavLink to="/One"&amp;gt;ComponentOne&amp;lt;/NavLink&amp;gt;
        &amp;lt;NavLink to="/Two"&amp;gt;ComponentTwo&amp;lt;/NavLink&amp;gt;
     &amp;lt;/div&amp;gt;
   )
}
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Conclusion:
&lt;/h1&gt;

&lt;p&gt;You should now have fully functioning client-side routing in the form of clickable links under a navigation bar! Being able to implement routes is a crucial skill to have considering how necessary it is for users to be able to navigate around applications with ease. I hope this guide is helpful to you if you are learning how to build client-side routing in React. &lt;/p&gt;

</description>
      <category>react</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Learning Lessons Building a Single Page Application as a Programming Student</title>
      <dc:creator>Michael Kienbusch</dc:creator>
      <pubDate>Mon, 02 Aug 2021 01:04:04 +0000</pubDate>
      <link>https://dev.to/mkienbus/learning-lessons-building-a-single-page-application-as-a-programming-student-2dj</link>
      <guid>https://dev.to/mkienbus/learning-lessons-building-a-single-page-application-as-a-programming-student-2dj</guid>
      <description>&lt;p&gt;I recently completed my first project assignment with Flatiron School as part of their online part-time software engineering program. The goals for this assignment were to create a &lt;strong&gt;Single Page Application&lt;/strong&gt; (SPA) which used HTML, JavaScript, and CSS, as well as accessed data from a public &lt;strong&gt;Application Programming Interface&lt;/strong&gt; (API). It also asked for three separate interactive features in the form of &lt;strong&gt;JavaScript event listeners&lt;/strong&gt;. The rest was up to me! I was excited to take on this challenge because it was my first opportunity to be creative with my programming abilities, and work on something practical in the real world, instead of just passing tests on assignments. Working on this project taught me a couple &lt;strong&gt;valuable lessons&lt;/strong&gt; as a new programmer with only a couple of months of learning under his belt, lessons that may be useful to new students or anyone self-teaching! This post will discuss those lessons, and how they were learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Application
&lt;/h2&gt;

&lt;p&gt;I decided to use the &lt;a href="//api.coinpaprika.com"&gt;coinpaprika&lt;/a&gt; API as my source of information in order to build a single page application which would provide details on the most popular cryptocurrencies. My vision was to be able to search the &lt;strong&gt;cryptocurrency database&lt;/strong&gt; provided by the coinpaprika API on my web application, display information about that cryptocurrency, and compare the current value of that cryptocurrency in dollars to a secondary cryptocurrency of the user's choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Important Steps
&lt;/h2&gt;

&lt;p&gt;The majority of my application utilized JavaScript, although it also utilized HTML and CSS. What I will discuss in this blog are the steps I took using Javascript and HTML to accomplish what I had set out to do which resulted in me learning a valuable lesson.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 1 - Understand your API
&lt;/h2&gt;

&lt;p&gt;When I set off on programming my application, I let my goals for the application completely drive what I wanted to do &lt;strong&gt;before&lt;/strong&gt; I had a complete understanding of the API I wanted to use. I wanted to be able to pull detailed information from the API about the desired cryptocurrency, and direct the user to the information. &lt;/p&gt;

&lt;p&gt;I looked through several cryptocurrencies and how the API structured the JSON which was sent via the fetch request. The examples I looked at had all the information I wanted, with key:value pairs which provided the information I wanted. For example:&lt;/p&gt;

&lt;p&gt;*Bitcoin&lt;br&gt;
&lt;code&gt;name: "Bitcoin"&lt;/code&gt;&lt;br&gt;
&lt;code&gt;whitepaper:&lt;br&gt;
       link: "https://static.coinpaprika.com/storage/cdn/whitepapers/215.pdf"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;However, as I was finishing up my project and testing input values for other cryptocurrencies, I noticed a few of the cryptocurrency objects came back with no key:value pair for the &lt;code&gt;link: "https://example.com"&lt;/code&gt; data. And thus I learned my first &lt;strong&gt;valuable lesson&lt;/strong&gt; on this project, &lt;strong&gt;be familiar with the information provided to you by your API.&lt;/strong&gt; I did not have time at the end of my project to add filters to search queries with null return values, or to come up with another solution. If I had become more familiar with my API, I could have allotted more time for a fix. &lt;/p&gt;
&lt;h2&gt;
  
  
  Lesson 2 - Sketch out, or outline, how you envision your final project looking
&lt;/h2&gt;

&lt;p&gt;Eager to start my project, I immediately started typing out HTML and getting the structure of my document established. I had a vague idea of how I wanted the site to look in my head, and that's all I was working off. I had my form all set up in my HTML with an input field, and a place to put the information returned from the API after the search. I then realized the API required very specific values to be provided for it to return information on cryptocurrencies. The URL from the API was structured as such:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://api.coinpaprika.com/v1/coins/{coin_id}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;with &lt;code&gt;{coin_id}&lt;/code&gt; being the input value users would plug into the search bar to retrieve the information. The format of &lt;code&gt;{coin_id}&lt;/code&gt; had to match exactly as &lt;code&gt;"id": "btc-bitcoin"&lt;/code&gt; according to the key:value pair provided by the API objects.&lt;/p&gt;

&lt;p&gt;My search function was set up as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function displayCrypto(e){
    e.preventDefault()
    fetch(`https://api.coinpaprika.com/v1/coins/${input.value}`)
        .then(response =&amp;gt; response.json())
        .then(function(data){
            result.innerHTML = `
                &amp;lt;li&amp;gt;
                    ${data.name}
                    &amp;lt;br&amp;gt;
                    Description: ${data.description}
                    &amp;lt;br&amp;gt;
                    Click &amp;lt;span id = "link"&amp;gt; here &amp;lt;/span&amp;gt; for more information: 
                &amp;lt;/li&amp;gt;
                `
                    console.log(data)
        })

    input.value = "";
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This led me to the decision to automatically print a list of the cryptocurrencies on the page by adding an event listener on the document, which listened for &lt;code&gt;DOMContentLoaded&lt;/code&gt;. I executed this in the following manner:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function displayAll(){
    fetch(`https://api.coinpaprika.com/v1/coins`)
        .then(response =&amp;gt; response.json())
        .then(function(data){
            //console.log(data.slice(0, 100)), limited from size of of about 6100
            let sliced = data.slice(0, 100)
            sliced.forEach((d) =&amp;gt; {
                cryptoList.innerHTML += `
                    &amp;lt;li&amp;gt;
                        Name: ${d.name}, &amp;lt;br&amp;gt;Symbol: ${d.symbol}
                    &amp;lt;/li&amp;gt;
                `
            })

        }) 
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this list, I wanted to include the &lt;code&gt;{coin_id}&lt;/code&gt; information, which is found in the &lt;code&gt;${d.name}&lt;/code&gt; and &lt;code&gt;${d.symbol}&lt;/code&gt; interpolations, so users could reference the list of cryptocurrencies, and then see what they would have to type in to the input field to retrieve additional information. This is a very inefficient and unintuitive way to get information to users. &lt;/p&gt;

&lt;p&gt;This made me realize another &lt;strong&gt;valuable lesson&lt;/strong&gt;. &lt;strong&gt;If I had sketched out by hand, or made an outline of my project, along with a better understanding of the API I was using, I would have realized it would have required some filtering functionality for null values, or just display the list of cryptocurrencies and have them be clickable elements&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;However, since I had already set up a full list to load on the DOM, and I had set up my search through input function, I decided to just add a clickable element to the cryptocurrency once it had been searched. I did this by adding the following code to my &lt;code&gt;displayCrypto()&lt;/code&gt; function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let el = document.getElementById("link");
                el.addEventListener("click", function(){
                    location.href = `${data.whitepaper.link}`;
            });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, the &lt;code&gt;displayCrypto()&lt;/code&gt; function in its entirety came out to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function displayCrypto(e){
    e.preventDefault()
    fetch(`https://api.coinpaprika.com/v1/coins/${input.value}`)
        .then(response =&amp;gt; response.json())
        .then(function(data){
            result.innerHTML = `
                &amp;lt;li&amp;gt;
                    ${data.name}
                    &amp;lt;br&amp;gt;
                    Description: ${data.description}
                    &amp;lt;br&amp;gt;
                    Click &amp;lt;span id = "link"&amp;gt; here &amp;lt;/span&amp;gt; for more information: 
                &amp;lt;/li&amp;gt;
                `
                    console.log(data)
                let el = document.getElementById("link");
                el.addEventListener("click", function(){
                    location.href = `${data.whitepaper.link}`;
            });
        })

    input.value = "";
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Takeaways from my first project
&lt;/h2&gt;

&lt;p&gt;While I did create an application which met all the requirements for my project assignment, I know a few things I will do differently before I tackle my next project. With the two main lessons I've learned, I need to keep the big picture in mind, and take the time to gather my thoughts and ideas before jumping straight into programming. This will help ensure I create a product that is as practical and user-friendly as possible. I hope the lessons I've learned are helpful to any other beginner programmers. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>html</category>
    </item>
  </channel>
</rss>
