<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[A Coding Journey ]]></title><description><![CDATA[A Coding Journey ]]></description><link>https://blogs.jerryfitzner.dev</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 02:57:41 GMT</lastBuildDate><atom:link href="https://blogs.jerryfitzner.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Quality Assurance]]></title><description><![CDATA[Background
It was a little over a year ago when I embarked on my journey to become a software developer. I knew I wanted to work in this field and I desired to start somewhere so I could grow my skills while in school. Through hard work, and God's di...]]></description><link>https://blogs.jerryfitzner.dev/quality-assurance</link><guid isPermaLink="true">https://blogs.jerryfitzner.dev/quality-assurance</guid><category><![CDATA[Quality Assurance]]></category><category><![CDATA[Testing]]></category><category><![CDATA[Manual Testing]]></category><category><![CDATA[software development]]></category><category><![CDATA[lifecycle]]></category><dc:creator><![CDATA[Jerry Fitzner]]></dc:creator><pubDate>Tue, 28 Feb 2023 15:56:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/CPs2X8JYmS8/upload/48200817e1ff8cd23c8847fb9c30006b.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-background">Background</h2>
<p>It was a little over a year ago when I embarked on my journey to become a software developer. I knew I wanted to work in this field and I desired to start somewhere so I could grow my skills while in school. Through hard work, and God's direction, I found a local business that was hiring web consultants to help customers create drag-and-drop websites on the company's platform. I loved helping others find solutions when they were struggling with difficult tasks. My desk still has a few gifts on it which were sent by customers as a thank-you for assisting them.</p>
<p>After working a few months as a web consultant, a position in quality assurance opened up. I put in for the opportunity, and after testing and interviewing, I was selected for the promotion in the fall of last year. Since then, I have discovered how much I truly enjoy working with software and creating great products for others to use.</p>
<h2 id="heading-what-i-do">What I Do</h2>
<p>As a quality assurance specialist, I have a few different tasks I am responsible for. My company is small enough, that I oversee many tasks by myself, but large enough that there is a large customer basis from all over the world. Sometimes, others in the company assist me with testing large products. In my role, I get to work closely with other teams and assist them when they might need extra help. I am responsible for mostly manual testing of the software before it is released to the production environment. I am not able to share all the details of my job, as it would violate company policy.</p>
<h3 id="heading-my-primary-role">My Primary Role</h3>
<p>It is my responsibility to be at the center of all of the company teams to ensure a quality product for our customers. However, I work most closely with the developers and designers. I have learned that testing is much easier when I can review the specifications the design team set out for the developers. This helps me locate areas that may be problematic, and communicate issues to the development team. I have also learned that not always can specifications be followed, so sometimes it is best to communicate with the developers about why they crafted an item in a certain way. Thankfully, I work with a great group of people who are alright with challenging one another. A question about why someone took a certain approach is not seen as an insult, but as a learning opportunity that allows us to produce the best product we can.</p>
<p>My second largest role is to respond to issues, or bugs, in the production environment. By way of research and testing, I get to investigate what might be causing the problem, as sometimes the problems are caused by misuse of the product. Other times, there are bugs in the software. It is my role to document these bugs and relay the urgency in which they might need to be fixed to a project manager. For example, it is essential I make sure our customers can receive payments through their websites, as this is the sole source of income for some artists. A day with income can be a huge deal to some of the larger businesses. As a result, a bug in the payment system would likely take priority over all other tasks assigned to the developers.</p>
<h3 id="heading-what-i-have-learned">What I Have Learned</h3>
<p>Quality assurance has given me a great advantage in my software engineering studies. Every day, I get to work with the entire lifecycle of software and see it to production. I have learned areas where issues can hide within the software and how to address these issues. I am grateful the developers are willing to take the time to explain why something is malfunctioning. This has helped me improve my projects, grow my knowledge base and adapt to technologies I have not experienced yet.</p>
<p>Here is a list of some of the most important things I have learned so far:</p>
<h4 id="heading-patience-is-key">Patience is Key</h4>
<p>It can be super easy to overlook a problem if you do not spend time on it. Other times, it can be super easy to make a big deal out of something, when in fact the issue was created by your own doing. Taking the time to slow down and think through problems creates less work for other teams and yourself.</p>
<h4 id="heading-communication-is-needed">Communication is Needed</h4>
<p>Before I even begin testing, I am presented with specifications to assist my testing plan of the software. I have learned that it is essential to ask all the questions I might think of during the specifications meeting to avoid assuming something, and getting it wrong. Even during the testing process, I have learned to be in constant communication with the design team and developers to ensure the software is working as intended.</p>
<h4 id="heading-test-plans-help-you-achieve-more-faster">Test Plans Help You Achieve More, Faster</h4>
<p>It is very easy to get lost in the testing process of a major project. When an issue occurs, it is essential to document what triggered the issue. It is difficult to do this if you can't remember the steps you took to get there. Test plans take time at the start, but they are well worth it. I use Google sheets more than anything else to develop my test plans. They allow me to quickly share the plans with others in cases where I need their help. A simple test plan which allows you to jot down testing scenarios as you think of them can be a huge help in uncovering and solving issues.</p>
<h4 id="heading-be-prepared">Be Prepared</h4>
<p>There are often times when the developers or one of my supervisors will ask me detailed questions about a bug. It is easiest to explain the issue based on its impact vs priority. An issue may have a low impact (misspelling of the company's name on the home page), but this would be a high-priority issue because misspelling of the name might confuse customers. On the other hand, a high-impact bug might be a button that does not click because it impacts all customers, but it is a low priority because there is another easily accessible button that accomplishes the same task. Explaining issues in this sense helps clarify the urgency in which a bug might need to be fixed.</p>
<h4 id="heading-screen-recordings-are-a-must">Screen Recordings are a Must</h4>
<p>It is so much easier to remember the specifics about bugs when you can review screen recordings, or screen captures, of the issue. A screen recording helps the developers in that they can view the issue without needing to re-create all the documented steps in the bug task. It also assists in the testing process once a fix has been provided because it can be easy to forget what a bug looked like if you last looked at it a few weeks ago.</p>
<h2 id="heading-overall">Overall</h2>
<p>This is just a brief overview of what software quality assurance looks like and some things I have learned. If you are interested in this line of work, I would encourage you to try it out. The work is not physically demanding, but it can be mentally challenging at times. For the most part, quality assurance is very rewarding. It allows you to see your work help others succeed. It is always my goal to do the best I can with testing a product to help lighten the load of others. By helping to produce a quality product. I am learning more than I ever have about software engineering and I am very thankful for my experiences.</p>
]]></content:encoded></item><item><title><![CDATA[Redux and React]]></title><description><![CDATA[Intro
Recently, I completed my build of a full-stack application using React on the front end and rails on the backend. This application had the most components out of all of my projects....21 (and counting). In my past applications, I used React sta...]]></description><link>https://blogs.jerryfitzner.dev/redux-and-react</link><guid isPermaLink="true">https://blogs.jerryfitzner.dev/redux-and-react</guid><category><![CDATA[Redux]]></category><category><![CDATA[React]]></category><category><![CDATA[components]]></category><category><![CDATA[State Management ]]></category><category><![CDATA[state]]></category><dc:creator><![CDATA[Jerry Fitzner]]></dc:creator><pubDate>Sun, 26 Feb 2023 21:13:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/xkBaqlcqeb4/upload/9b3ed383881574b32a438ed57342bc46.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-intro">Intro</h1>
<p>Recently, I completed my build of a full-stack application using React on the front end and rails on the backend. This application had the most components out of all of my projects....21 (and counting). In my past applications, I used React state and props to handle <code>state</code>. In these applications, I made sure to add state in the appropriate parent component. I passed it for miles, through props, to the smallest child component. Then, I realized I needed to pass objects from the child component, back to the parent, so off I would go creating a callback function and passing it down the component tree all over again. This process became old, and I was thankful to find Redux (a global state management library) to avoid this endless process. I am far from an expert, but I would like to relay how I used redux in hopes it might help you with your next application.</p>
<h1 id="heading-what-does-redux-allow-you-to-do">What does Redux allow you to do?</h1>
<p>Redux allows the storing of state in a "store." Unlike React state, which is only accessible to children components by way of passing props from their parent components, the store is accessible by any component, at any time. Every component can update <code>state</code>. Greatest of all, Redux eliminates the need to remember which components <code>state</code> was passed through since it is always available to each component.</p>
<p>Redux does not have to eliminate all props, or local <code>state</code>, but it certainly makes global state much easier to handle.</p>
<h1 id="heading-getting-started">Getting Started:</h1>
<h3 id="heading-install-redux">Install Redux</h3>
<p>After setting up a react application, we will need to install redux and react-redux. We can do this with npm by using the following command: <code>$ npm install redux react-redux</code>.</p>
<h3 id="heading-install-middleware-thunk">Install Middleware Thunk</h3>
<p><a target="_blank" href="https://github.com/reduxjs/redux-thunk">Thunk middleware for Redux</a> allows us to write, "functions with logic inside that can interact with a Redux store's <code>dispatch</code> and <code>getState</code> methods." This will help us out in our process. To install this with npm, you can use the following command <code>$ npm install redux-thunk</code>.</p>
<h3 id="heading-set-up">Set Up</h3>
<p>In my react app, I always add a <code>.src</code> file. This file contains all my components, and it is the perfect place to build out our redux items. In the <code>.src</code> file, we first need to create two folders. To keep these straight, title the first folder <code>reducers</code> and the second <code>actions</code>.</p>
<h2 id="heading-reducers-folder">Reducers Folder</h2>
<p>In order to have a physical store (like Walmart), you must have products inside for customers to purchase. In Redux, reducers are what will make up our store. They are the items that will contain and manipulate our state so we can view it on the front end. They give us the ability to move complicated functions from our components to one place where we can handle all requests.</p>
<h3 id="heading-set-up-a-reducer">Set Up a Reducer</h3>
<p>In the <code>reducers</code> folder create a file. It is easiest to name the file with the title of your state, followed by the word "Reducer." This file will be a <code>.js</code> file. In my case, I am going to create <code>state</code> for a user who has logged into my react app. I titled my file <code>userReducer.js</code>.</p>
<p>In this file, we are going to set up a function to return <code>state</code> based on what our component calls for. I will explain this in a little more detail shortly, but let me start by showing you what my a basic outline looks like:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> initialState = <span class="hljs-literal">null</span>

<span class="hljs-keyword">const</span> userReducer = <span class="hljs-function">(<span class="hljs-params">state=initialState, action</span>) =&gt;</span> {
  <span class="hljs-keyword">switch</span>(action.type) {
    <span class="hljs-comment">//If there are no other cases, we will just return state which is curently null. </span>
    <span class="hljs-attr">default</span>:
      <span class="hljs-keyword">return</span> state;
  }

}

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> userReducer;
</code></pre>
<p>I know this might look crazy, but hang in there. Let me go over some basics. This reducer takes in an <code>action</code> that has a <code>type</code> and a <code>payload</code>. We will form our action later, but currently, you can see <code>action</code> is the second item our function takes in. The first is <code>state</code>. Just like when we use <code>useState</code> to set a default state in React components, we can set a default state (like initialState in the example above) and assign it to our state. In the case above, we have set our reducer to always return null if we do not add any other cases to it.</p>
<p>The switch statement above will return a <code>case</code> based on the <code>action.type</code> we pass to it. So, let's add some case statements to our switch to help clarify what we would like the reducer to return:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> initialState = <span class="hljs-literal">null</span>

<span class="hljs-keyword">const</span> userReducer = <span class="hljs-function">(<span class="hljs-params">state=initialState, action</span>) =&gt;</span> {
  <span class="hljs-keyword">switch</span>(action.type) {
    <span class="hljs-comment">//If a user signs in, we want to return the user as state. </span>
    <span class="hljs-keyword">case</span> <span class="hljs-string">"ADD_USER"</span>:
      <span class="hljs-keyword">return</span> [action.payload]
    <span class="hljs-comment">//If a user signs out, we want to delete the user information from state, and return our initial state of null. </span>
    <span class="hljs-keyword">case</span> <span class="hljs-string">"DELETE_USER"</span>:
      state = initialState;
      <span class="hljs-keyword">return</span> state
    <span class="hljs-attr">default</span>:
      <span class="hljs-keyword">return</span> state;
  }
}

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> userReducer;
</code></pre>
<p>In our reducer, we now have a case statement allowing us to add and delete a user. As you might notice, we can use simple JSX and javascript methods to change state based on what we are doing in our component. The <code>payload</code> (<code>action.payload</code>), which is coming through our action, is the data returned from our fetch request in the component.</p>
<p>Now that we have a simple reducer, let's set up an action so we can pass objects to our state. Make sure to remember the case statements declared in the reducer, so we can use them in the action. In the example above, we will remember <code>ADD_USER</code> and <code>DELETE_USER</code>.</p>
<h2 id="heading-actions">Actions</h2>
<p>Actions are what allow us to connect our reducer to the component. They are what we create to pass data to <code>state</code> from a component.</p>
<h3 id="heading-setting-up-an-action">Setting Up an Action</h3>
<p>Next, we need to create a file in the actions folder. It is simple to title this file with the title of the state we are trying to manipulate. This file will be a <code>.js</code> file also. For example, I named my action folder <code>user.js</code>.</p>
<p>In this file, we need to export functions for each of the cases we have in our reducers folder. This will connect the reducer with our component and allow us to update state in the reducer. It might make more sense to describe this as the setState function we use in a component. Before I explain further, let me show you what this looks like:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> addUser = <span class="hljs-function">(<span class="hljs-params">user</span>) =&gt;</span> {
  <span class="hljs-keyword">return</span> {
    <span class="hljs-comment">//Our type must match the case statement from the reducer file. </span>
    <span class="hljs-attr">type</span>: <span class="hljs-string">"ADD_USER"</span>,
    <span class="hljs-comment">//The payload is passed to this function by our component calling this function. </span>
    <span class="hljs-attr">payload</span>: user
  }
}

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> deleteUser = <span class="hljs-function">(<span class="hljs-params">user</span>) =&gt;</span> {
  <span class="hljs-keyword">return</span> {
    <span class="hljs-comment">//Our type must match the case statement from the reducer file.</span>
    <span class="hljs-attr">type</span>: <span class="hljs-string">"DELETE_USER"</span>,
    <span class="hljs-attr">payload</span>: user
  }
}
</code></pre>
<p>In the action above, you can see we have an <code>action type</code> defined for each case in the reducer. For example, in the addUser function, we are sending the <code>ADD_USER</code> case a payload of <code>user</code>. <code>user</code> is the data we are sending from our React component, and we will see this in action in just a second. In order to pass <code>user</code> to our state, we will import the addUser function to the component, and send (or dispatch) our user data to the reducer where <code>state</code> is held.</p>
<p>Now that we have these folders set up, let's connect our state to the front end.</p>
<h2 id="heading-set-up-an-indexjs-file">Set Up an Index.js File</h2>
<p>Your application likely already has an <code>index.js</code> file in the <code>.src</code> folder. We want to create a second one that is different from the first. You can create this file in the reducer folder and title it <code>index.js</code>. The reason we need to create this folder is to combine all of our reducers into the store. Without this folder, you can only have one reducer in the store, and likely this will not work for most applications that need to maintain state for multiple areas of the application.</p>
<p>In the <code>index.js</code> folder, we need to start by importing <code>{ combineReduces } from 'redux'</code>. After, we need to import each of our reducers. I am going to add more reducers to demonstrate this idea:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { combineReducers } <span class="hljs-keyword">from</span> <span class="hljs-string">"redux"</span>;
<span class="hljs-keyword">import</span> userReducer <span class="hljs-keyword">from</span> <span class="hljs-string">"./userReducer"</span>;
<span class="hljs-keyword">import</span> incidentReducer <span class="hljs-keyword">from</span> <span class="hljs-string">"./incidentReducer"</span>;
<span class="hljs-keyword">import</span> personnelReducer <span class="hljs-keyword">from</span> <span class="hljs-string">"./personnelReducer"</span>;
<span class="hljs-keyword">import</span> resourceReducer <span class="hljs-keyword">from</span> <span class="hljs-string">"./resourceReducer"</span>;
</code></pre>
<p>Next, we need to combine all the reducers like so:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { combineReducers } <span class="hljs-keyword">from</span> <span class="hljs-string">"redux"</span>;
<span class="hljs-keyword">import</span> userReducer <span class="hljs-keyword">from</span> <span class="hljs-string">"./userReducer"</span>;
<span class="hljs-keyword">import</span> incidentReducer <span class="hljs-keyword">from</span> <span class="hljs-string">"./incidentReducer"</span>;
<span class="hljs-keyword">import</span> personnelReducer <span class="hljs-keyword">from</span> <span class="hljs-string">"./personnelReducer"</span>;
<span class="hljs-keyword">import</span> resourceReducer <span class="hljs-keyword">from</span> <span class="hljs-string">"./resourceReducer"</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> combineReducers({
  <span class="hljs-attr">user</span>: userReducer, <span class="hljs-comment">//store.user when using the selector</span>
  <span class="hljs-attr">incident</span>: incidentReducer, <span class="hljs-comment">//store.incident</span>
  <span class="hljs-attr">personnel</span>: personnelReducer, <span class="hljs-comment">//store.personnel</span>
  <span class="hljs-attr">resources</span>: resourceReducer <span class="hljs-comment">//store.resources </span>
})
</code></pre>
<p>That's it for this folder. Make sure to include all your reducers so you can access them on the front end!</p>
<h2 id="heading-configure-the-true-indexjs">Configure the True Index.js</h2>
<p>Now, we need to do some configuring inside the <code>index.js</code> file contained in the <code>.src</code> folder. (Different from the one we just created) This would be your normal <code>index.js</code> file.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { Provider } <span class="hljs-keyword">from</span> <span class="hljs-string">'react-redux'</span>;
<span class="hljs-keyword">import</span> { createStore, applyMiddleware } <span class="hljs-keyword">from</span> <span class="hljs-string">'redux'</span>; <span class="hljs-comment">//!!!!createStore is no longer the recommended way to handle state. A strikethrough will strike through this, but it will still work. </span>
<span class="hljs-keyword">import</span> { composeWithDevTools } <span class="hljs-keyword">from</span> <span class="hljs-string">'@redux-devtools/extension'</span>; <span class="hljs-comment">// We can use a chrome extension to provide redux dev tools</span>
<span class="hljs-keyword">import</span> thunk <span class="hljs-keyword">from</span> <span class="hljs-string">'redux-thunk'</span>; <span class="hljs-comment">//Thunk middleware</span>
<span class="hljs-keyword">import</span> rootReducer <span class="hljs-keyword">from</span> <span class="hljs-string">'./reducers'</span>; <span class="hljs-comment">//This is the combination of reducers we created in the other index.js folder</span>
</code></pre>
<p>Once we import the items described above we can implement them by creating a variable for the <code>store</code>, and wrapping our app component in the <code>&lt;Provider&gt;</code>. Lastly, we need to pass our <code>store</code> variable as a prop to the provider.</p>
<p>This will look something like this:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
<span class="hljs-keyword">import</span> { composeWithDevTools } <span class="hljs-keyword">from</span> <span class="hljs-string">'@redux-devtools/extension'</span>;
<span class="hljs-keyword">import</span> { createStore, applyMiddleware } <span class="hljs-keyword">from</span> <span class="hljs-string">'redux'</span>;
<span class="hljs-keyword">import</span> { Provider } <span class="hljs-keyword">from</span> <span class="hljs-string">'react-redux'</span>;
<span class="hljs-keyword">import</span> rootReducer <span class="hljs-keyword">from</span> <span class="hljs-string">'./reducers'</span>;
<span class="hljs-keyword">import</span> thunk <span class="hljs-keyword">from</span> <span class="hljs-string">'redux-thunk'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'materialize-css/dist/css/materialize.min.css'</span>;
<span class="hljs-keyword">import</span> { BrowserRouter } <span class="hljs-keyword">from</span> <span class="hljs-string">'react-router-dom'</span>;
<span class="hljs-keyword">import</span> ReactDOM <span class="hljs-keyword">from</span> <span class="hljs-string">'react-dom/client'</span>;
<span class="hljs-keyword">import</span> App <span class="hljs-keyword">from</span> <span class="hljs-string">'./components/App'</span>;
<span class="hljs-keyword">import</span> reportWebVitals <span class="hljs-keyword">from</span> <span class="hljs-string">'./reportWebVitals'</span>;

<span class="hljs-comment">//Creating a variable for the store</span>
<span class="hljs-keyword">const</span> store = createStore(rootReducer, composeWithDevTools(applyMiddleware(thunk)));

<span class="hljs-keyword">const</span> root = ReactDOM.createRoot(<span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'root'</span>));
root.render(
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">React.StrictMode</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BrowserRouter</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">Provider</span> <span class="hljs-attr">store</span>=<span class="hljs-string">{</span> <span class="hljs-attr">store</span> }&gt;</span> 
        <span class="hljs-tag">&lt;<span class="hljs-name">App</span> /&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">Provider</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BrowserRouter</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">React.StrictMode</span>&gt;</span></span>
);

reportWebVitals();
</code></pre>
<h2 id="heading-connect-with-a-component">Connect With a Component</h2>
<p>This has been a lot of work, but we are super close, so hang in there. Last, but not least, we need to connect our <code>state</code> with our components. We will need two more items to do this.</p>
<h3 id="heading-dispatch">Dispatch</h3>
<p>Dispatch is how we send data through the <code>action</code> to the <code>reducer</code> in order to update <code>state</code>. Always remember, we <code>dispatch</code> data to the <code>store</code>. We <code>select</code> state (more on this in a second) to retrieve state.</p>
<p>First, find a component you would like to dispatch data from. In this component:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { useDispatch } <span class="hljs-keyword">from</span> <span class="hljs-string">'react-redux'</span>;
</code></pre>
<p>Now set <code>useDispatch</code> to a variable:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> dispatch = useDispatch();
</code></pre>
<p>Lastly, you will need to import the function you set up in the reducer for the task you would like to complete. In my example, I wanted to <code>fetch</code> a user's information if they were currently logged in, and assign their information to the <code>user</code> state. I first import the <code>addUser</code> action we set up earlier, then dispatch the <code>user</code> data to the reducer through this function. I know this might be a bit confusing, but it looks like this:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { useDispatch } <span class="hljs-keyword">from</span> <span class="hljs-string">'react-redux'</span>;
<span class="hljs-keyword">import</span> { addUser } <span class="hljs-keyword">from</span> <span class="hljs-string">"../actions/user"</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> dispatch = useDispatch();

  useEffect(<span class="hljs-function">() =&gt;</span> {
    fetch(<span class="hljs-string">'/me'</span>).then(<span class="hljs-function">(<span class="hljs-params">r</span>) =&gt;</span> {
      <span class="hljs-keyword">if</span>(r.ok){
        r.json().then(<span class="hljs-function"><span class="hljs-params">user</span> =&gt;</span> dispatch(addUser(user)))<span class="hljs-comment">//I am dispatching the addUser action to the reducer where the reducer will update state with the users information. </span>
      }
    });
  }, []);

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> App;
</code></pre>
<p>To delete the user, I can simply <code>dispatch(deleteUser(user))</code>to the reducer, which will reset my state.</p>
<h3 id="heading-select">Select</h3>
<p>Now that we have updated our state, we need to access it. We will do this with a selector. The setup process is very similar to setting up dispatch. You can access <code>state</code> in any component by following these steps. <code>State</code> can still be passed down to children props through normal props. For instance, if you have nested data, you may want to use <code>useSelect</code>to grab <code>state</code> and <code>.map</code> nested objects to a different component.</p>
<p>To get state, you will first need to import useSelect into your component:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { useSelect } <span class="hljs-keyword">from</span> <span class="hljs-string">'react-redux'</span>;
</code></pre>
<p>Then, we can assign a variable to select the <code>state</code> we would like to retrieve. Remember, if we have multiple reducers, we need to grab <code>state</code> from the appropriate reducer by using <code>store.ourStateReducer</code>. This looks like this:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> user = useSelector(<span class="hljs-function">(<span class="hljs-params">store</span>) =&gt;</span> (store.user)); <span class="hljs-comment">//Returns our user state.</span>
</code></pre>
<p>Now, we are able to use the <code>user</code> information to set up our app however we might like. Altogether, select and dispatch might look like this:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { useDispatch, useSelector } <span class="hljs-keyword">from</span> <span class="hljs-string">'react-redux'</span>;
<span class="hljs-keyword">import</span> { addUser } <span class="hljs-keyword">from</span> <span class="hljs-string">"../actions/user"</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> dispatch = useDispatch();
  <span class="hljs-keyword">const</span> user = useSelector(<span class="hljs-function">(<span class="hljs-params">store</span>) =&gt;</span> (store.user));

  useEffect(<span class="hljs-function">() =&gt;</span> {
    fetch(<span class="hljs-string">'/me'</span>).then(<span class="hljs-function">(<span class="hljs-params">r</span>) =&gt;</span> {
      <span class="hljs-keyword">if</span>(r.ok){
        r.json().then(<span class="hljs-function"><span class="hljs-params">user</span> =&gt;</span> dispatch(addUser(user)))
      }
    });
  }, []);

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">Navbar</span> /&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">className</span>=<span class="hljs-string">"container"</span>&gt;</span>
        {user ? (
          <span class="hljs-tag">&lt;<span class="hljs-name">Usercard</span> <span class="hljs-attr">props</span>=<span class="hljs-string">{user}/</span>&gt;</span>
        ):(
          <span class="hljs-tag">&lt;<span class="hljs-name">SignIn</span> /&gt;</span>
        )}
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;/&gt;</span></span>
  );
}


<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> App;
</code></pre>
<h1 id="heading-conclusion">Conclusion</h1>
<p>Redux makes handling state much easier. Initially, it can be a little challenging to grasp, but after discovering the flow of data, Redux will become a simple tool of great help to you. Never forget, you can still always handle simple <code>state</code> inside a component, but Redux can handle the state you need multiple components to have access to. I have created a short list of all the steps above should it be helpful. I do not claim to be an expert, but hopefully this will get you started.</p>
<h2 id="heading-review-of-the-steps">Review of the Steps:</h2>
<ol>
<li><p>Install Redux - <code>$ npm install redux react-redux</code></p>
</li>
<li><p>Install Thunk - <code>$ npm install redux-thunk</code></p>
</li>
<li><p>Create reducer and action folders in the .src folder.</p>
</li>
<li><p>Set up the reducer:</p>
<ol>
<li><p>Create a default state.</p>
</li>
<li><p>Create a <code>case</code> to update <code>state</code> in the way you would like.</p>
</li>
</ol>
</li>
<li><p>Set up the action:</p>
<ol>
<li><p>Assign the type to the <code>case</code> in the reducer.</p>
</li>
<li><p>Assign the payload to the payload you will be passing the reducer.</p>
</li>
</ol>
</li>
<li><p>Create an <code>index.js</code> file in the <code>reducers</code> folder and set up this file:</p>
<ol>
<li><p><code>import { combineReducers } from "redux";</code></p>
</li>
<li><p>Import all the reducers you have created to this folder.</p>
</li>
<li><p>Combine them together.</p>
</li>
</ol>
</li>
<li><p>Configure the normal <code>index.js</code> file in <code>.src</code> to work with Redux:</p>
<ol>
<li><p>Import the appropriate tools from redux and thunk (see above).</p>
</li>
<li><p>Create a variable for the store.</p>
</li>
<li><p>Wrap the <code>&lt;App/&gt;</code> component in the <code>Provider</code> component and pass the <code>store</code> variable as a prop.</p>
</li>
</ol>
</li>
<li><p>Depending on if you are dispatching or selecting state:</p>
<ol>
<li><p>Dispatch (updating state):</p>
<ol>
<li><p><code>import { useDispatch } from 'react-redux';</code></p>
</li>
<li><p>Assign <code>useDistpach()</code> to a variable.</p>
</li>
<li><p>Import the function you would like to use from the action.</p>
</li>
<li><p>Dispatch the action with the data(payload) to the reducer.</p>
</li>
</ol>
</li>
<li><p>Select (accessing state):</p>
<ol>
<li><p><code>import { useSelector } from 'react-redux';</code></p>
</li>
<li><p>Assign a variable to get the appropriate state.</p>
</li>
<li><p>Use the variable as <code>state</code> wherever you might like.</p>
</li>
</ol>
</li>
</ol>
</li>
</ol>
<h1 id="heading-bonus">Bonus</h1>
<p>A cool thing about <code>actions</code>, is that you can use them to handle tasks you might repeat in various components. For example, maybe you want various components to fetch data when they render. You can create an action that handles this for you and updates <code>state</code> so you do not have to type the fetch multiple times in multiple components.</p>
<p>Here is an example of my set up, and how I used this in the component upon the pages render:</p>
<h4 id="heading-action">Action:</h4>
<pre><code class="lang-javascript"><span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> loadIncidents = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">return</span> <span class="hljs-function">(<span class="hljs-params">dispatch</span>) =&gt;</span> {
  fetch(<span class="hljs-string">'/incidents'</span>)
  .then(<span class="hljs-function">(<span class="hljs-params">r</span>) =&gt;</span> r.json())
  .then(<span class="hljs-function">(<span class="hljs-params">incidents</span>) =&gt;</span> dispatch({<span class="hljs-attr">type</span>: <span class="hljs-string">"LOAD_INCIDENTS"</span>, <span class="hljs-attr">payload</span>: incidents}))
  }
}
</code></pre>
<h4 id="heading-reducer">Reducer:</h4>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> initialState = []

<span class="hljs-keyword">const</span> incidentReducer = <span class="hljs-function">(<span class="hljs-params">state=initialState, action</span>) =&gt;</span> {
  <span class="hljs-keyword">switch</span>(action.type) {
    <span class="hljs-keyword">case</span> <span class="hljs-string">"LOAD_INCIDENTS"</span>:
        <span class="hljs-keyword">return</span> action.payload
    <span class="hljs-attr">default</span>:
      <span class="hljs-keyword">return</span> state;
    }
}

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> incidentReducer;
</code></pre>
<h4 id="heading-component">Component:</h4>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { loadIncidents } <span class="hljs-keyword">from</span> <span class="hljs-string">"../actions/incidents"</span>;
<span class="hljs-keyword">import</span> { useDispatch } <span class="hljs-keyword">from</span> <span class="hljs-string">"react-redux"</span>;

<span class="hljs-keyword">const</span> Home = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">const</span> dispatch = useDispatch();

  useEffect(<span class="hljs-function">() =&gt;</span> {
    dispatch(loadIncidents());
    dispatch(loadResources())
  }, []);
</code></pre>
]]></content:encoded></item><item><title><![CDATA[FrontEnd vs BackEnd Validations]]></title><description><![CDATA[Introduction
It's official, I have completed another application using REACT as the frontend framework, and Rails on the backend. Inside Rails, I used ActiveRecord as my ORM framework. My project "has many" (no pun intended) forms throughout. A form ...]]></description><link>https://blogs.jerryfitzner.dev/frontend-vs-backend-validations</link><guid isPermaLink="true">https://blogs.jerryfitzner.dev/frontend-vs-backend-validations</guid><category><![CDATA[Ruby on Rails]]></category><category><![CDATA[Ruby]]></category><category><![CDATA[activerecord]]></category><category><![CDATA[form validation]]></category><category><![CDATA[Validation]]></category><dc:creator><![CDATA[Jerry Fitzner]]></dc:creator><pubDate>Sat, 07 Jan 2023 15:11:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/lud4OaUCP4Q/upload/a1697a62232acdfeb9dd9c4a8feb094b.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-introduction">Introduction</h3>
<p>It's official, I have completed another application using REACT as the frontend framework, and Rails on the backend. Inside Rails, I used ActiveRecord as my ORM framework. My project "has many" (no pun intended) forms throughout. A form for a user to log in with a username and password, a form for a user to create new content, a form for a user to create new projects within the new content, and a form for the user to edit a project they already created. To say the least, there are a lot of forms, and I needed validations to prevent a user from submitting bad data. Data that could harm the database, or blow up the frontend. Thus, I wanted to write about validations, why we need them, and which validations are better, frontend or backend.</p>
<h3 id="heading-frontend-validations">FrontEnd Validations</h3>
<p>Frontend validations are great for many reasons, but they also have some downsides. One reason they are great is some frontend validations are easy to implement. For example, in REACT, I simply added the <code>required</code> property to the end of my form input field like so:</p>
<pre><code class="lang-javascript">&lt;form onSubmit={ handleSubmit }&gt;

        <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">placeholder</span>=<span class="hljs-string">"Username"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"username"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{</span> <span class="hljs-attr">signInForm.username</span> } <span class="hljs-attr">onChange</span>=<span class="hljs-string">{</span> <span class="hljs-attr">handleChange</span> } <span class="hljs-attr">required</span>/&gt;</span></span>

        <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">placeholder</span>=<span class="hljs-string">"Password"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"password"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">{</span> <span class="hljs-attr">signInForm.password</span> } <span class="hljs-attr">onChange</span>=<span class="hljs-string">{</span> <span class="hljs-attr">handleChange</span> } <span class="hljs-attr">required</span>/&gt;</span></span>

        <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">button</span>&gt;</span>Sign In<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></span>

&lt;/form&gt;
</code></pre>
<p>This property caused each of my input fields to require data before the form could be submitted.</p>
<p>Another reason why frontend validations are great, is they prevent any need for a request to the backend and this saves a user valuable time. For instance, if the user of our app is at home, hooked up to blazing-fast internet speeds, this might not be an issue. However, as we all know, many people use mobile devices in today's world. Mobile internet speeds have increased, but often slow down due to many factors. A user on a mobile device may become irritated at the slow form submission and give up using our app altogether. To prevent this, it's simple to set up frontend validations so our users can immediately see any errors they might have made.</p>
<p>On the other side of the coin, I have found two large issues with only using frontend validations. First, validations can become very complex and cause our app to not be as optimized as it could be. Second, frontend validations still leave our database exposed to users submitting bad data. For example, we could easily use an application like Postman to submit bad data to our backend without the frontend validations looking at the data. Without backend validations, our database can easily become corrupt.</p>
<h3 id="heading-backend-validations">BackEnd Validations</h3>
<p>As stated above, backend validations have bonuses and drawbacks. The bonuses are that backend validations prevent users on the frontend, and users who circumvent the frontend, from sending bad data to our app's database. The downside is a user must wait for a request to be sent to the database, and returned, before they know if the data they entered will be accepted.</p>
<p>Although there are downsides, backend validations are crucial. Outside of preventing bad data from entering our database, the greatest bonus I found is that they are incredibly simple. I used ActiveRecord as an ORM Framework in Rails and this made the job even easier.</p>
<p>To briefly summarize how easy validations are, let me provide a screenshot of my users model. It is titled contractors since a contractor is the user of the app.</p>
<pre><code class="lang-ruby"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Contractor</span> &lt; ApplicationRecord</span>
  has_secure_password
  has_many <span class="hljs-symbol">:projects</span>
  has_many <span class="hljs-symbol">:houses</span>, <span class="hljs-symbol">through:</span> <span class="hljs-symbol">:projects</span>

  validates <span class="hljs-symbol">:name</span>, <span class="hljs-symbol">presence:</span> <span class="hljs-literal">true</span>
  validates <span class="hljs-symbol">:specialty</span>, <span class="hljs-symbol">presence:</span> <span class="hljs-literal">true</span>
  validates <span class="hljs-symbol">:company</span>, <span class="hljs-symbol">presence:</span> <span class="hljs-literal">true</span>
  validates <span class="hljs-symbol">:city</span>, <span class="hljs-symbol">presence:</span> <span class="hljs-literal">true</span>
  validates <span class="hljs-symbol">:state</span>, <span class="hljs-symbol">presence:</span> <span class="hljs-literal">true</span>
  validates <span class="hljs-symbol">:username</span>, <span class="hljs-symbol">presence:</span> <span class="hljs-literal">true</span>, <span class="hljs-symbol">uniqueness:</span> <span class="hljs-literal">true</span>
  validates <span class="hljs-symbol">:password_digest</span>, <span class="hljs-symbol">presence:</span> <span class="hljs-literal">true</span>
<span class="hljs-keyword">end</span>
</code></pre>
<p>For a contractor(user) to sign up for an account using the form I provided on the frontend, I wanted to verify that all fields contained some sort of data. I did this simply by requiring the <code>presence:</code> to be <code>true</code>. For the username, I desired each user to first have a username, and second, to have a unique username. I simply added <code>uniqueness: true</code> to require this and boom, my validations were created in the backend. No sophisticated logic, or endless functions on the frontend. I could have added many more validations to my app, but for my simple app, I decided to simply validate the presence of data for all of the fields.</p>
<p>A developer could easily validate the number of characters, uniqueness, email, or dates within a specific range. These and so many more validations can be quickly implemented on the backend. Not only is the validation process super easy, but errors can usually be shown on the frontend to a user who may have provided wrong information. Combined, these features show the power of backend validations.</p>
<p>For more ActiveRecord validations, I would encourage you to visit the ActiveRecord validations page.</p>
<h3 id="heading-so-backend-or-frontend-validations">So, BackEnd or FrontEnd Validations?</h3>
<p>Frontend or backend? Which area of validation should you choose? In my opinion, you should use both frontend and backend! At the very least, you should always validate data on the backend to protect your database. Some frontend validations are easy to create. Thus, they are an easy solution to overcome the downside of using backend-only validations. By using both, a user does not need to wait for a server request for most of the validations to appear. However, if the use manages to enter bad data on the frontend, our backend validations should catch any errors.</p>
<p>Give validations a shot, and see what you can come up with to protect your database!</p>
]]></content:encoded></item><item><title><![CDATA[Seeding Data using the Faker Gem]]></title><description><![CDATA[Introduction
Up to this point, I have desired to have an automated process to "seed" a database with user information. Many times in my early stages of programming, I desired to create applications where users would input information. This informatio...]]></description><link>https://blogs.jerryfitzner.dev/seeding-data-using-the-faker-gem</link><guid isPermaLink="true">https://blogs.jerryfitzner.dev/seeding-data-using-the-faker-gem</guid><category><![CDATA[seeding]]></category><category><![CDATA[faker]]></category><category><![CDATA[seed]]></category><category><![CDATA[Databases]]></category><dc:creator><![CDATA[Jerry Fitzner]]></dc:creator><pubDate>Fri, 04 Nov 2022 00:48:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1667522724431/8zW4AxFfm.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>Up to this point, I have desired to have an automated process to "seed" a database with user information. Many times in my early stages of programming, I desired to create applications where users would input information. This information would then be displayed on the application in some way. However, with no data to reference, it was difficult at certain times to visualize what my application would look like or how the data might display. My difficulty was all too evident. I needed to add data to my database, but until I designed a way to input the data, it would be impossible to have the references I desired.  I desired to have realistic data in a database which I would not have to enter manually, one by one. </p>
<p>It wasn't until I learned Ruby, and how to use Active Record, that I learned about great options where I could create a realistic database in a matter of seconds. </p>
<h2 id="heading-set-up">Set-Up</h2>
<p>First, let me show an example from a recent project I created. It was my desire to build a web basic API with Sinatra and Active Record to support a React frontend. My app would allow a leader of a youth group to keep track of fundraising for students attending a group trip. The leader could input a student and each student would have many donors. The app would track how much each donor gave to a particular student and would allow the youth leader to easily see if the donation from a donor was received. A donor could also be deleted or added. </p>
<p>In the back end of my app, I created two models: a student model and a donor model. Each student has many donors. Here is an example of each migration I created:</p>
<pre><code><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CreateDonors</span> &lt; <span class="hljs-title">ActiveRecord</span>::<span class="hljs-title">Migration</span>[6.1]
  <span class="hljs-title">def</span> <span class="hljs-title">change</span>
    <span class="hljs-title">create_table</span> :<span class="hljs-title">donors</span> <span class="hljs-title">do</span> |<span class="hljs-title">t</span>|
      <span class="hljs-title">t</span>.<span class="hljs-title">string</span> :<span class="hljs-title">first_name</span>
      <span class="hljs-title">t</span>.<span class="hljs-title">string</span> :<span class="hljs-title">last_name</span>
      <span class="hljs-title">t</span>.<span class="hljs-title">integer</span> :<span class="hljs-title">donation</span>
      <span class="hljs-title">t</span>.<span class="hljs-title">boolean</span> :<span class="hljs-title">donation_received</span>
      <span class="hljs-title">t</span>.<span class="hljs-title">integer</span> :<span class="hljs-title">student_id</span>
      <span class="hljs-title">t</span>.<span class="hljs-title">timestamps</span>
    <span class="hljs-title">end</span>
  <span class="hljs-title">end</span>
<span class="hljs-title">end</span></span>
</code></pre><pre><code><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CreateStudents</span> &lt; <span class="hljs-title">ActiveRecord</span>::<span class="hljs-title">Migration</span>[6.1]
  <span class="hljs-title">def</span> <span class="hljs-title">change</span>
    <span class="hljs-title">create_table</span> :<span class="hljs-title">students</span> <span class="hljs-title">do</span> |<span class="hljs-title">t</span>|
      <span class="hljs-title">t</span>.<span class="hljs-title">string</span> :<span class="hljs-title">first_name</span>
      <span class="hljs-title">t</span>.<span class="hljs-title">string</span> :<span class="hljs-title">last_name</span>
      <span class="hljs-title">t</span>.<span class="hljs-title">integer</span> :<span class="hljs-title">age</span>
      <span class="hljs-title">t</span>.<span class="hljs-title">timestamps</span>
    <span class="hljs-title">end</span>
  <span class="hljs-title">end</span>
<span class="hljs-title">end</span></span>
</code></pre><p>My dilemma, was that I wanted to create many students and a few donors for each student. I understood how to do this using the .create method like so: </p>
<pre><code>Donor.create(first_name: <span class="hljs-string">"Joe"</span>, <span class="hljs-attr">last_name</span>: <span class="hljs-string">"Smith"</span>, <span class="hljs-attr">donation</span>: <span class="hljs-number">25</span>, <span class="hljs-attr">donation_recieved</span>: <span class="hljs-literal">false</span>, <span class="hljs-attr">student_id</span>: <span class="hljs-number">1</span>)
Student.create(first_name: <span class="hljs-string">"Joe"</span>, <span class="hljs-attr">last_name</span>: <span class="hljs-string">"Smith"</span>, <span class="hljs-attr">age</span>: <span class="hljs-number">25</span>)
</code></pre><p>I could do this in the seeds.rb file for ever single donor and every single student, but quite frankly I did not have the time. More importantly, the data would not be unique to each donor or student because copy and paste would have been my next solution. </p>
<p>Thankfully, I found a gem to create randomized data for me while I was busy learning at Flatiron School. </p>
<h2 id="heading-the-faker-gem">The Faker Gem</h2>
<p>The <a target="_blank" href="https://github.com/faker-ruby/faker">faker gem</a> became my saving grace. Not only would it seed as much data as I desired, it would allow me to create random data. The amount of data generators I could choose from were unreal! For example, Faker can create random addresses, names, video games, military ranks, and so much more! Check out their resource to find out all they offer. However, let me show you how I used this gem to easily seed data into my project. </p>
<h1 id="heading-add-the-gem-to-your-gemfile">Add the gem to Your Gemfile</h1>
<p>First, you must add the gem to your Gemfile. You can easily get access to the most current Faker gem by adding the following to your Gemfile:</p>
<pre><code>gem <span class="hljs-string">'faker'</span>, :<span class="hljs-function"><span class="hljs-params">git</span> =&gt;</span> <span class="hljs-string">'https://github.com/faker-ruby/faker.git'</span>, :<span class="hljs-function"><span class="hljs-params">branch</span> =&gt;</span> <span class="hljs-string">'main'</span>
</code></pre><p>If you want access to all the Faker generators, including the unreleased generators, you will need to use:</p>
<pre><code>gem <span class="hljs-string">'faker'</span>, :<span class="hljs-function"><span class="hljs-params">git</span> =&gt;</span> <span class="hljs-string">'https://github.com/faker-ruby/faker.git'</span>, :<span class="hljs-function"><span class="hljs-params">branch</span> =&gt;</span> <span class="hljs-string">'main'</span>
</code></pre><h1 id="heading-make-sure-you-install-the-gem">Make sure you install the gem</h1>
<p>Using <code>bundle install</code> you can install all the gems in your gem file.</p>
<h1 id="heading-use-the-generators-in-a-seed-file">Use the generators in a seed file</h1>
<p>Using the list of generators provided by Faker, you can now choose which generators you might need to seed data to your database. In the seed file, you simply need to add a generator like <code>Faker::Name</code> for each input like so:</p>
<pre><code>puts <span class="hljs-string">"🌱 Seeding data..."</span>

# Seed your database here

<span class="hljs-number">8.</span>times <span class="hljs-keyword">do</span>

  #Create a list <span class="hljs-keyword">of</span> <span class="hljs-number">8</span> students 
  student = Student.create(
    first_name: Faker::Name.first_name,
    <span class="hljs-attr">last_name</span>: Faker::Name.last_name,
    <span class="hljs-attr">age</span>: rand(<span class="hljs-number">12.</span><span class="hljs-number">.18</span>)
  )

  #Create <span class="hljs-number">1</span><span class="hljs-number">-10</span> donors <span class="hljs-keyword">for</span> each student
  rand(<span class="hljs-number">1.</span><span class="hljs-number">.5</span>).times <span class="hljs-keyword">do</span>
    Donor.create(
      first_name: Faker::Name.first_name,
      <span class="hljs-attr">last_name</span>: Faker::Name.last_name,
      <span class="hljs-attr">donation</span>: rand(<span class="hljs-number">10.</span><span class="hljs-number">.100</span>),
      <span class="hljs-attr">donation_received</span>: Faker::<span class="hljs-built_in">Boolean</span>.boolean,
      <span class="hljs-attr">student_id</span>: student.id
    )
  end
end

puts <span class="hljs-string">"✅ Done seeding!"</span>
</code></pre><p>For my project, I asked Ruby to run a loop for eight times. Each time the loop was ran, I desired for a student to be created. For each student, I desired to create a donor one to five times. Each student was given a random first name from Faker and a random last name. You can see this by the <code>Faker::Name.first_name</code> and <code>Faker::Name.last_name</code> generators I used. The <code>.first_name</code> allowed me to generate names which were strictly first names. </p>
<h2 id="heading-seeding-the-data">Seeding the Data</h2>
<p>Just like with manually entering data, you can simply use <code>bundle exec rake db:seed</code> in the console to seed your database. </p>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>Overall, I would highly recommend using Faker to help seed your database. Especially if you need to create a lot of data fast. By using the Faker gem in your developer environment, it will allow you to have a much more successful launch of your application. I hope this helps you, as much as it did me! </p>
<h2 id="heading-resources">Resources</h2>
<p><a target="_blank" href="https://github.com/faker-ruby/faker">Faker Gem</a></p>
]]></content:encoded></item><item><title><![CDATA[The useEffect Hook in REACT]]></title><description><![CDATA[Introduction
Approximately two months ago, I began using REACT to further my software developing skills. It was the core of my phase 2 curriculum at Flatiron school, and quickly I discovered some incredible benefits to using REACT. However, this blog...]]></description><link>https://blogs.jerryfitzner.dev/the-useeffect-hook</link><guid isPermaLink="true">https://blogs.jerryfitzner.dev/the-useeffect-hook</guid><category><![CDATA[React]]></category><category><![CDATA[useEffect]]></category><dc:creator><![CDATA[Jerry Fitzner]]></dc:creator><pubDate>Mon, 08 Aug 2022 16:42:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1659201868247/X1Mio9WYz.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-introduction">Introduction</h3>
<p>Approximately two months ago, I began using REACT to further my software developing skills. It was the core of my phase 2 curriculum at Flatiron school, and quickly I discovered some incredible benefits to using REACT. However, this blog is not about the entire database of REACT, but one of the powerful features - the useEffect hook. </p>
<h3 id="heading-what-is-the-useeffect-hook">What is the useEffect hook?</h3>
<p>The useEffect hook allows us to run additional code in our REACT component which is not triggered by a user input, like a form submission, or click. The hook allows us to handle side effects when a component is called upon. For example, useEffect might be used to GET information from an API that you would like to display on your page. Rather than making a user click a button to see the information, it can be displayed on the page right from the start of the application. This helps with data, like current weather, or fetching the most up to date user information from an API so it is ready to use within an apps page. Side effects are changes caused in our application outside of a function itself and can be very helpful.  </p>
<p>By using the useEffect hook in a component, it tells REACT to perform another task after rendering all the components and building the DOM elements from the components JSX. (Remember, components return JSX.)  useEffect will be called when a component is rendered and tells REACT our component will need to perform another task after rendering.</p>
<h3 id="heading-starting-with-useeffect">Starting with useEffect</h3>
<p>In order to use the useEffect hook in a component, we must first import it to our component. The following code will import useEffect into our component, just like other hooks. </p>
<pre><code><span class="hljs-keyword">import</span> <span class="hljs-title">React</span>, { <span class="hljs-title">useEffect</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"react"</span>;
</code></pre><p> Now, we need to insert useEffect into our component like so:</p>
<pre><code><span class="hljs-keyword">import</span> <span class="hljs-title">React</span>, { <span class="hljs-title">useEffect</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"react"</span>;

const Component <span class="hljs-operator">=</span> () <span class="hljs-operator">=</span><span class="hljs-operator">&gt;</span> {
  useEffect()

  <span class="hljs-keyword">return</span> (
  <span class="hljs-operator">&lt;</span>div<span class="hljs-operator">&gt;</span>
  <span class="hljs-operator">&lt;</span>div<span class="hljs-operator">&gt;</span>
)}
</code></pre><h3 id="heading-passing-useeffect-a-callback-function">Passing useEffect a Callback Function</h3>
<p>In order to get our useEffect hook running we must pass it a callback function, which will run as a side effect. This function will be the first argument we pass useEffect and can look like this:</p>
<pre><code><span class="hljs-keyword">import</span> <span class="hljs-title">React</span>, { <span class="hljs-title">useEffect</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"react"</span>;

const Component <span class="hljs-operator">=</span> () <span class="hljs-operator">=</span><span class="hljs-operator">&gt;</span> {
  useEffect(() <span class="hljs-operator">=</span><span class="hljs-operator">&gt;</span> {})

  <span class="hljs-keyword">return</span> (
  <span class="hljs-operator">&lt;</span>div<span class="hljs-operator">&gt;</span>
  <span class="hljs-operator">&lt;</span>div<span class="hljs-operator">&gt;</span>
)}
</code></pre><h3 id="heading-the-second-argument-a-dependencies-array">The Second Argument - A Dependencies Array</h3>
<p>If we only use the code we have created above, we can run into an issue. This is because useEffect will run every time our component renders. This can be an issue, for example, if we only need to fetch data from an API when our app or component first renders. It would not make sense to have our app continuously fetching data every time state changes. This could slow down other processes occurring in our app or cause errors. Possibly, we might only want useEffect to run when a specific variable changes. Both of these scenarios are easily solved by placing a dependencies array as a second argument in useEffect. </p>
<p>If we want to tell REACT we only want our side effect to run the first time our component renders, we can simply pass an empty array like so:</p>
<pre><code><span class="hljs-keyword">import</span> <span class="hljs-title">React</span>, { <span class="hljs-title">useEffect</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"react"</span>;

const Component <span class="hljs-operator">=</span> () <span class="hljs-operator">=</span><span class="hljs-operator">&gt;</span> {
  useEffect(() <span class="hljs-operator">=</span><span class="hljs-operator">&gt;</span> {}, [])

  <span class="hljs-keyword">return</span> (
  <span class="hljs-operator">&lt;</span>div<span class="hljs-operator">&gt;</span>
  <span class="hljs-operator">&lt;</span>div<span class="hljs-operator">&gt;</span>
)}
</code></pre><p>If we want to tell REACT to run our side effect when a variable changes, we simply pass the variable into the array like so:</p>
<pre><code><span class="hljs-keyword">import</span> <span class="hljs-title">React</span>, { <span class="hljs-title">useEffect</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"react"</span>;

const Component <span class="hljs-operator">=</span> () <span class="hljs-operator">=</span><span class="hljs-operator">&gt;</span> {
  useEffect(() <span class="hljs-operator">=</span><span class="hljs-operator">&gt;</span> {}, [someVariable])

  <span class="hljs-keyword">return</span> (
  <span class="hljs-operator">&lt;</span>div<span class="hljs-operator">&gt;</span>
  <span class="hljs-operator">&lt;</span>div<span class="hljs-operator">&gt;</span>
)}
</code></pre><p>We can even pass multiple variables, separated by a comma if we would like. </p>
<p>Lastly, if you would like our sideEffect to run every time our component renders (like when state or props change), don't include the dependencies array at all. Here is a brief overview to simplify everything we just explained. </p>
<ul>
<li><code>useEffect(() =&gt; {})</code> No Dependencies Array = We will run the side effect every time our component renders including when state and props change</li>
<li><code>useEffect(() =&gt; {}, [])</code> Empty Dependencies Array = Our side effect will run only the first time our component is rendered. </li>
<li><code>useEffect(() =&gt; {}, [variableOne, variableTwo])</code> Dependency Array with Elements = Our side effect will run any time the variable(s) change. </li>
</ul>
<h3 id="heading-cleaning-up">Cleaning Up</h3>
<p>The last great feature of the useEffect hook which we will cover is the ability to "clean up." Sometimes we might have a component which runs continuous code, like a timer, or clock. We may only want this code to run when we display the component. For example, a user might have the ability to hide or show this component, and we do not want the code to continuously run while it is hidden. This could use memory and resources we would like to have elsewhere in our application. It might also cause a "memory leak" which we will likely get an error message for. Thankfully, we can use clean up in our useEffect hook to prevent our code from continuously running. </p>
<p>In order to cleanup, we simply insert the following code into our callback function: <code>return function cleanup() {clean up code goes here}</code> This will allow us to stop the timer for example when it is hidden from the screen, or when a different component is rendered where we no longer need the timer to continuously count. </p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>Over all, the useEffect hook is very handy and quite simple to use. It allows use to handle side effects outside our components and start/stop tasks from only being handled when certain variables change. </p>
<p>For more information on using the useEffect hook, I would encourage you to visit the REACT Documents <a target="_blank" href="https://reactjs.org/docs/hooks-effect.html">here.</a> </p>
]]></content:encoded></item><item><title><![CDATA[Backtick vs Parenthesis]]></title><description><![CDATA[If you are new to coding Javascript like me, you may not be familiar with very simple concepts, or even keyboard characters like (`) verses (') or ("). If you are uncertain of the difference, let me help! The first is commonly called a backtick (also...]]></description><link>https://blogs.jerryfitzner.dev/backtick-vs-parenthesis</link><guid isPermaLink="true">https://blogs.jerryfitzner.dev/backtick-vs-parenthesis</guid><category><![CDATA[JavaScript]]></category><category><![CDATA[string]]></category><dc:creator><![CDATA[Jerry Fitzner]]></dc:creator><pubDate>Fri, 22 Apr 2022 15:31:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/NomETWcv2Fo/upload/v1650479316374/SD0AozDNa.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you are new to coding Javascript like me, you may not be familiar with very simple concepts, or even keyboard characters like (`) verses (') or ("). If you are uncertain of the difference, let me help! The first is commonly called a backtick (also known by many other names), the second, an apostrophe or single quote, and the third, a double quotation mark. In my first week of learning javascript, I mixed the first two up and it caused my code to fail numerous times before I figured it out. </p>
<h3 id="heading-location-on-the-keyboard">Location On the Keyboard</h3>
<p>My first issue, after learning single quotes were not backticks, was figuring out where they are located on the keyboard. Just to make this as simple as possible, here are the main locations of each character on the keyboard. Although, you will likely need to search your own keyboard or use Google to verify the location on your keyboard. </p>
<p><strong>Backtick (`):</strong> Located on the same key as the "tilde" (~) key, the backtick key is usually located just above the "tab" key, on the left hand side of the keyboard.  </p>
<p><strong>Single Quote ('):</strong> Located on the same key as the double quote, usually two keys right of the "L" key. Press the key once for a single quote. </p>
<p><strong>Double Quote ("):</strong> Located on the same key as the single quote, usually two keys right of the "L" key. Press the key once, while holding the shift key, for a double quote. </p>
<h3 id="heading-how-to-tell-the-difference-between-a-backtick-and-single-quote">How to tell the Difference Between a Backtick (`) and Single Quote (')</h3>
<p>The easiest way to tell the difference between a backtick and single quote when looking at code, is to look at how they are standing. A backtick leans to the left. Thus, the reason for the name backtick. A single quote will usually stand straight, or lean to the right, making it easier to identify. The single quote will also sometimes appear bolder than the backtick character. </p>
<h3 id="heading-the-difference-between-single-quotes-and-backticks">The Difference Between Single Quotes and Backticks</h3>
<p>When I first started to learn to coding in javascript, I was greatly disappointed when I could not get something as simple as interpolation to work. I ended up doing something entirely different until I discovered my error. The reason, I was using single quotes instead of backticks. They looked similar, but according to the computer, they were very different. </p>
<h3 id="heading-how-to-use-backticks-single-quotes-and-double-quotes">How to use Backticks (`), Single Quotes ('), and Double Quotes (')</h3>
<h4 id="heading-single-and-double-quotes">Single and Double Quotes</h4>
<p>Single and double quotes are used in javascript to create strings. Strings store a series of characters between single or double quotation marks. They look something like this:</p>
<pre><code><span class="hljs-keyword">const</span> <span class="hljs-keyword">string</span> = <span class="hljs-string">"String of characters inside double quotes."</span>;
<span class="hljs-keyword">const</span> singleString = <span class="hljs-string">'String of characters inside single quotes.'</span>;
</code></pre><p><strong>Using a Single Quote as an Apostrophe:</strong></p>
<p>What if you wanted to include an apostrophe inside the text in your string? Without some modification, javascript will not differentiate between an apostrophe and a single quote. That's because they are the same character. This is what happens if you try to enter an apostrophe without any other characters. </p>
<pre><code><span class="hljs-keyword">const</span> apostropheString = <span class="hljs-string">'I know the computer'</span>s not going to like <span class="hljs-keyword">this</span>!<span class="hljs-string">';</span>
</code></pre><p>Notice how the string stops at the apostrophe. This is because the computer believes it to be a single quote. In order to show javascript this is intended to be an apostrophe, we must use a backslash () before the apostrophe. </p>
<pre><code><span class="hljs-keyword">const</span> apostropheString = <span class="hljs-string">"The computer\'s going to like this!"</span>;
</code></pre><p><strong>Using Javascript Methods on Strings</strong></p>
<p>A nice feature of using strings in javascript is the fact you can use javascript methods on them. For example, you can have javascript return a specific character (I.e. character 2). </p>
<pre><code>let <span class="hljs-keyword">string</span> <span class="hljs-operator">=</span> <span class="hljs-string">"ABCDEFGH This is the alphabet!"</span>;

console.log(<span class="hljs-keyword">string</span>.charAt(<span class="hljs-number">0</span>)); <span class="hljs-comment">//returns A</span>
console.log(<span class="hljs-keyword">string</span>.charAt(<span class="hljs-number">3</span>)); <span class="hljs-comment">//returns D</span>
console.log(<span class="hljs-keyword">string</span>.charAt(<span class="hljs-number">29</span>)); <span class="hljs-comment">//returns !</span>
</code></pre><p>To reference more javascript methods you can use on strings, visit <a target="_blank" href="https://www.w3schools.com/jsref/jsref_obj_string.asp">W3 Schools</a>.</p>
<h4 id="heading-backticks-and-interpolation">Backticks and Interpolation</h4>
<p>Now, the most important reason to find the backtick key, is that you need it for interpolation. Interpolation is a very useful tool when forming strings. It allows you to embed an expression inside a string. <strong><em>You must use the backtick in place of the double or single quotes, and include ${ expression } inside the backticks in order for this to work. </em></strong> After adding these features, interpolation becomes very useful. </p>
<p>For example, you can add two numbers together:</p>
<pre><code>let <span class="hljs-keyword">string</span> <span class="hljs-operator">=</span> `The sum of <span class="hljs-number">2</span> and <span class="hljs-number">5</span> <span class="hljs-keyword">is</span> ${<span class="hljs-number">2</span> <span class="hljs-operator">+</span> <span class="hljs-number">5</span>}<span class="hljs-operator">!</span>`;

console.log(<span class="hljs-keyword">string</span>); <span class="hljs-comment">//The sum of 2 and 5 is 7!</span>
</code></pre><p>Or, you can add one string expression into another string:</p>
<pre><code>const weather <span class="hljs-operator">=</span> <span class="hljs-string">"cloudy"</span>;
const <span class="hljs-keyword">string</span> <span class="hljs-operator">=</span> `The weather <span class="hljs-keyword">is</span> ${weather} today<span class="hljs-operator">!</span>`;

console.log(<span class="hljs-keyword">string</span>); <span class="hljs-comment">//The weather is cloudy today!</span>
</code></pre><p>The options are really limitless, but make sure to use backticks in order to get interpolation to work. </p>
<h4 id="heading-one-last-tip-merging-strings-using-concatenation">One Last Tip: Merging Strings Using Concatenation</h4>
<p>Strings can also be merged using concatenation. To do this, two or more variables which have been assigned to strings can be placed inside another variable with the plus (+) symbol between them. The return will be one complete string. </p>
<pre><code>const weather <span class="hljs-operator">=</span> <span class="hljs-string">" cloudy"</span>;
const <span class="hljs-keyword">string</span> <span class="hljs-operator">=</span> <span class="hljs-string">"The weather is"</span>;

const theWeather <span class="hljs-operator">=</span> <span class="hljs-keyword">string</span> <span class="hljs-operator">+</span> weather <span class="hljs-operator">+</span> <span class="hljs-string">"!"</span>;

console.log(theWeather); <span class="hljs-comment">//The weather is cloudy!</span>
</code></pre><p>Notice the space between the double quotes and the word 'cloudy' in the first string. This allows for the final string to return like a normal sentence. Spacing can be added in between the quotes and string characters in order to form the string you are looking to create. </p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>Javascript has some great features which make working with strings very easy. By looking into various tips and tricks, these features can be used to create some amazing features in javascript. Don't forget to use the correct characters (double/single quotes, backticks, etc.), because without them a string will not return properly. Have fun and give some of these practices a try! </p>
]]></content:encoded></item><item><title><![CDATA[Beginning a New Trail]]></title><description><![CDATA[The Outdoors
From as far back as I can remember, I enjoyed spending time outdoors. In fact, it was likely the hobby I loved the most. More than warm beaches, coffee shops, roller coasters, entertaining friends, or spending time in cities, I enjoyed t...]]></description><link>https://blogs.jerryfitzner.dev/beginning-a-new-trail</link><guid isPermaLink="true">https://blogs.jerryfitzner.dev/beginning-a-new-trail</guid><category><![CDATA[#codingNewbies]]></category><category><![CDATA[General Programming]]></category><dc:creator><![CDATA[Jerry Fitzner]]></dc:creator><pubDate>Fri, 01 Apr 2022 17:46:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1650474971921/MeHDNk0GZ.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>The Outdoors</strong></p>
<p>From as far back as I can remember, I enjoyed spending time outdoors. In fact, it was likely the hobby I loved the most. More than warm beaches, coffee shops, roller coasters, entertaining friends, or spending time in cities, I enjoyed the great outdoors. I found a love for hiking, and soon, a passion for exploration. Without cell service or GPS, I would often hike trails while using a map to guess where I might be in a vast sea of trees. Hours easily turned into days, and flat trails quickly became steep. I often found myself exhausted. Not knowing where I was going, what I might see, or if I would ultimately get lost. Too often then not, I spent hours, or even days searching for mystical views only to find more trails leading to endless other options. It was in the midst of this exploration that I unleashed a disease in myself which has affected me to this very day. A disease that can be dangerous if not tamed, but powerful if used appropriately. It's difficult to give this disease a specific name, so instead, I will describe its side-effects. </p>
<p><strong>The Challenge</strong></p>
<p>Soon, hiking the usual trails became monotonous. I started to set out to find areas of wilderness barely touched by human kind, where paved trails didn't exist, and majestic sights could be found around every curve in the trail. I desired challenges few had conquered with the need to complete them myself. My ideas started small until I received a phone call from a dear friend. He lived outside of Wyoming (where I currently lived) and he asked if I would be willing to join him on a backpacking journey to Wyoming's Cloud Peak Wilderness. He spoke of summiting a mountain called Cloud Peak, the tallest peak of the Big Horn Mountain range, in the middle of the state of Wyoming. He expressed a desire to climb the 13,171' tall mountain in two days in order to explore it for future backpacking trips with groups. He explained the trail was approximately 24 miles long (round-trip), with a 5,000 foot elevation gain, and it would likely be difficult. Neither of us knew how difficult it would truly be, but for the sake of time, let me say we found it to be extremely difficult....Both of us has to push through limits we had never reached before...I was used to running 7 miles a day, but this mountain, was a much steeper giant to conquer. As we reached false summit after false summit, we became discouraged wondering if we would even reach the top, or if we should have given ourselves more time. Our legs became weak due to the lack of oxygen at that altitude, it felt as though we could not inhale deep enough to fill our lungs with vital oxygen our tired muscles needed. The incredibly steep rock face continued to mock us until we finally reached a ledge where we could see the summit. It still took us two hours to reach the top from this point, but we did, and the reward was well worth it! With 2,000 foot cliffs all around us, we could see from one side of the state to the other. </p>
<p>The hike out was exhausting. When we reached the trailhead, I felt as though I did not have enough strength to press on the brake pedal of my truck. For the next year, I told myself and others I was done, and would never climb such a mountain again......</p>
<p>.....That was until the next summer, when I decided to participate in raising funds for a non-profit group benefiting orphans, missionaries, and teen camps. Only this time, I decided to climb Cloud Peak in ONE DAY. The view, the excitement, the achievement....the disease...begged me to return, to prove to myself this was possible. So, I did it...I climbed the mountain in one day, with great assistance from milky way candy bars. Again, I hated the pain, but loved the wonderful feeling of accomplishing something so difficult.      </p>
<p><strong>The Physical Trail Leads to the Technical Trail</strong></p>
<p>At this point, you might be wondering why I would start my first blog (ever), and more specifically my first technical blog, with a story about hiking in the wilderness and some weird disease infecting me. I understand how this might be confusing, but I think it might help those who read this understand me: I am someone who strives to take on difficult tasks (whether physical or mental) and work at them until I can achieve them. This mindset has allowed me to help others, and solve major technical issues for many church congregations across the United States. </p>
<p>My love for taking on, and solving, tough problems is ultimately the main reason I decided to start a journey of software engineering. The challenge of solving difficult problems, so that others could benefit, excited me. With having just completed my first web-based javascript app in the Flatiron Bootcamp School, I continue today with this faith: that one day I will be able to help others succeed by building critical code to assist in our technological world.  I have never been one to desire fame, and it's another reason why I love software engineering. It gives me the ability to build limitless apps, while letting the app get the credit. In this journey, it is not my desire to earn lots of money, or become famous, but it is my desire to change the world for the better! To find impossible tasks which are around us today, and solve them for the generation tomorrow. </p>
<p>So, this disease that led me to climb mountains in an impossible manner, is now leading me assist in solving impossible tech problems around us. I am excited to see where the journey leads me and the others I will meet along the way. I hope my background shines a light on who I am, and why I decided to take on the challenge of software engineering.  </p>
]]></content:encoded></item></channel></rss>