<?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: dotbehrens</title>
    <description>The latest articles on DEV Community by dotbehrens (@dotbehrens).</description>
    <link>https://dev.to/dotbehrens</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%2F237346%2Fa75ed507-9282-4859-ab3e-ec9b66c5fb5c.jpeg</url>
      <title>DEV Community: dotbehrens</title>
      <link>https://dev.to/dotbehrens</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dotbehrens"/>
    <language>en</language>
    <item>
      <title>npm install scrum 2</title>
      <dc:creator>dotbehrens</dc:creator>
      <pubDate>Fri, 13 Mar 2020 20:07:32 +0000</pubDate>
      <link>https://dev.to/dotbehrens/npm-install-scrum-2-18kf</link>
      <guid>https://dev.to/dotbehrens/npm-install-scrum-2-18kf</guid>
      <description>&lt;p&gt;This is part two of my two part blog on scrum methodology. &lt;/p&gt;

&lt;h2&gt;
  
  
  Scrum Artifacts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Product Backlog
&lt;/h3&gt;

&lt;p&gt;The Product Backlog is a log that consists of all of the work that needs to be done in a project. This work is split up into tasks and assigned to a sprint.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Sprint Backlog
&lt;/h3&gt;

&lt;p&gt;The Sprint Backlog is a backlog of the work that needs to be done in a particular sprint. This backlog contains what needs to be done, what is in progress, what is in review, and what has been completed. This log is important because it is the way team members know what is going on in the project, and what needs to be done. This helps team members know where they fit into the plan and establishes trust and accountability for the team.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Increment
&lt;/h3&gt;

&lt;p&gt;An Increment is a deliverable portion to the product produced at the end of the sprint. Though the whole product is not complete the sprint should produce a functioning piece of the product that can be demoed to the customer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scrum Events
&lt;/h2&gt;

&lt;p&gt;All scrum events are time-boxed, meaning that they are supposed to occur in an allotted amount of time, with emphasis on efficiency and productivity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sprint
&lt;/h3&gt;

&lt;p&gt;Sprints are typically timeboxed as 2 or 4 week projects that at completion produces an iterative or a functioning piece of the overall product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sprint Planning
&lt;/h3&gt;

&lt;p&gt;Sprint Planning is the phase where the team plans and organizes the sprint and agrees upon a definition of done. As programming product are constantly being improved having a team standard as to what is the desired outcome is extremely important for productivity.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Daily Scrum
&lt;/h3&gt;

&lt;p&gt;The daily scrum, also referred to as standup is a short, typically time-boxed at 15 minutes, meeting where the team shares what they have done, what they are now working on, and what is keeping them from getting their work done. As with all other scrum events the goal is to keep the team on the same page and enable them to work efficiently. This meeting is what I think of as "the meeting that could have been an email." However since it is better for moral to physically see that others are getting things done I do appreciate that the daily scrum is included in this methodology.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sprint Review
&lt;/h3&gt;

&lt;p&gt;A sprint review is held at the end of each sprint to inspect the increment of the product. This is also a change to adapt the product backlog for more accuracy and productivity. This meeting is timeboxed at about an hour per week spent working on the sprint.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sprint Retrospective
&lt;/h3&gt;

&lt;p&gt;A sprint retrospective takes place after the sprint review, but before the next sprints planning session. This event is time boxed at 3 hours for a one month sprint. /in retrospective the team discusses what went well in the sprint, what didn't go well in the sprint, and what the team is going to commit to changing in the upcoming sprint.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Repeat
&lt;/h3&gt;

&lt;p&gt;When these events are over the next step is to start the process over until the product is complete.&lt;/p&gt;

&lt;p&gt;Scrum is a fascinating methodology for project management. Certifications in are offered by scrum.org for someone to become a scrum master, or product owner. The agile development process is extremely useful in software development projects where goals may not always be clear or may be changing constantly. Being able to keep people on the same page is an important ability of any software development team.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>npm install scrum</title>
      <dc:creator>dotbehrens</dc:creator>
      <pubDate>Mon, 10 Feb 2020 19:58:36 +0000</pubDate>
      <link>https://dev.to/dotbehrens/npm-install-scrum-5487</link>
      <guid>https://dev.to/dotbehrens/npm-install-scrum-5487</guid>
      <description>&lt;p&gt;This is part one of my blog on scrum methodology. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Scrum?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FuJ1JoX7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j6bhqcvjdyivtvjpmkgu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FuJ1JoX7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j6bhqcvjdyivtvjpmkgu.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scrum is an agile project management framework, created by Ken Schwaber and Jeff Sutherland. The Agile Manifesto was created by these two along with unspecified others in the early 2000s. Scrum is lightweight and simple to understand but as with anything that require collaboration and organization, difficult to master. Scrum derives its name from rugby, which I would love to explain, but I know nothing of. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--emIhAgLC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fouzbmd3flaikb91acwv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--emIhAgLC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fouzbmd3flaikb91acwv.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Cit0-W7K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/troh9vph31ucpwk59jcm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Cit0-W7K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/troh9vph31ucpwk59jcm.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jsHBPPOz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/x5qba9l7jreyk5525w4q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jsHBPPOz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/x5qba9l7jreyk5525w4q.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Agile vs. Waterfall
&lt;/h2&gt;

&lt;p&gt;For the most part software development project management follows either agile or waterfall methodology. Waterfall is considered the traditional approach. It is linear, delivering a final project at the end of the waterfall. In waterfall each stage is completed before the next stage may begin.&lt;/p&gt;

&lt;p&gt;Agile development is less traditional, and places focus on iterative development. In agile development a deliverable product is produced at the end of each sprint. This is not the final product but a functioning piece of the final product.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EIyzwZr5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/niqn36o6dsk9jwt6pqtz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EIyzwZr5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/niqn36o6dsk9jwt6pqtz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Scrum Roles
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Product Owner
&lt;/h3&gt;

&lt;p&gt;The product owner is a single person who is the only person responsible for the product backlog. Changes to the backlog may be changes by other scrum team members, but the end responsibility belongs to the product owner.&lt;/p&gt;

&lt;h3&gt;
  
  
  Development Team
&lt;/h3&gt;

&lt;p&gt;The development team is made up of the people who do the technical development of the product. The development team is self-organizing. They are the ones who decide how long an increment will take this is not supposed to be dictated to them by the product owner nor the scrum master.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scrum Master
&lt;/h3&gt;

&lt;p&gt;The scrum master functions under the concept of servant leadership. They are there to make sure that everyone stays on the same page and that they are all practicing scrum correctly and efficiently. A big part of their role is removing obstacles for the development team and aiding in clear communication between all scrum team members. It is the scrum masters job to ensure that scrum does not become "flaccid". Flaccid Scrum is a term to describe scrum that uses scrum terminology but does not effectively produce incremented content at the end of a sprint.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--olmXYpWh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/96q3exahtyv7gsjjo1i2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--olmXYpWh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/96q3exahtyv7gsjjo1i2.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pillars of Scrum
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Transparency
&lt;/h3&gt;

&lt;p&gt;Scrum encourages transparency between scrum team members. Withholding information does not help productivity and so the backlogs are meant to be clearly visible and all goals are meant to be clearly understood.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspection
&lt;/h3&gt;

&lt;p&gt;Inspection is meant to make sure the the scrum team is always checking in on themselves to discover what can be done better and what is going great. This is clear in the sprint retrospective.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adaptation
&lt;/h3&gt;

&lt;p&gt;Also a major pillar for scrum is adaptation. Scrum is meant to be agile and if something isn't working for your scrum team it can be changed,or improved upon. This is done during retrospective when the team members make commitments to changes. If your scrum team is more efficient with a every other daily scrum, the process allows for that change to be made.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lbR01tb9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pt3t0oxahgwxu2bizlce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lbR01tb9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pt3t0oxahgwxu2bizlce.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Scrum Values
&lt;/h2&gt;

&lt;p&gt;The scrum values are what it takes to have a successful scrum team.&lt;/p&gt;

&lt;h3&gt;
  
  
  Commitment
&lt;/h3&gt;

&lt;p&gt;All team members must be committed to doing the work and achieving the goals of the scrum team.&lt;/p&gt;

&lt;h3&gt;
  
  
  Courage
&lt;/h3&gt;

&lt;p&gt;Scrum team member need to have the courage to work through problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focus
&lt;/h3&gt;

&lt;p&gt;Everyone on the scrum team needs to be focussed on the end goal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Openness
&lt;/h3&gt;

&lt;p&gt;The scrum team agrees to be transparent about the work they are doing and where they are in the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Respect
&lt;/h3&gt;

&lt;p&gt;Respect is the most important scrum value as the process does not work unless.&lt;br&gt;
"Scrum Team members respect each other to be capable, independent people."&lt;/p&gt;

&lt;p&gt;Come back next week for part two where we will further delve into scrum methodology. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Commit Messages</title>
      <dc:creator>dotbehrens</dc:creator>
      <pubDate>Sat, 01 Feb 2020 17:30:40 +0000</pubDate>
      <link>https://dev.to/dotbehrens/commit-messages-31e8</link>
      <guid>https://dev.to/dotbehrens/commit-messages-31e8</guid>
      <description>&lt;p&gt;This monday I decided that my new week resolution is to put more effort in to my commit messages. Previously I considered it a success if I managed to keep profanity out of my messages. &lt;/p&gt;

&lt;p&gt;How to make a better commit message. &lt;/p&gt;

&lt;p&gt;Everyone has a different opinion of how commit messages should be written but there are a few generally agreed upon rules. &lt;/p&gt;

&lt;p&gt;The over all format for a commit message&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type(scope):subject
body 
footer
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Formatting rules include: &lt;/p&gt;

&lt;p&gt;The subject and the body should be separated by a blank line for readability.&lt;/p&gt;

&lt;p&gt;Unnessaccary punctuation marks should be removed from the message.&lt;/p&gt;

&lt;p&gt;The subject line and each paragraph should be capitalized.&lt;/p&gt;

&lt;p&gt;The imperative mood should be used for the subject line. &lt;/p&gt;

&lt;p&gt;The body should be used to state what changes you have made and why you made them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Summarize changes in around 50 characters or less

More detailed explanatory text, if necessary. Wrap it to about 72
characters or so. In some contexts, the first line is treated as the
subject of the commit and the rest of the text as the body. The
blank line separating the summary from the body is critical (unless
you omit the body entirely); various tools like `log`, `shortlog`
and `rebase` can get confused if you run the two together.

Explain the problem that this commit is solving. Focus on why you
are making this change as opposed to how (the code explains that).
Are there side effects or other unintuitive consequences of this
change? Here's the place to explain them.

Further paragraphs come after blank lines.

 - Bullet points are okay, too

 - Typically a hyphen or asterisk is used for the bullet, preceded
   by a single space, with blank lines in between, but conventions
   vary here

If you use an issue tracker, put references to them at the bottom,
like this:

Resolves: #123
See also: #456, #789
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The Imperative mood&lt;/p&gt;

&lt;p&gt;When it comes to moods  in languages I have historically been uninterested in learning the differences. However, there is a wonderful little phrase that helps us format our subject lines. Before every subject line you write imagine the phrase, "if applied, this commit will..." This will force you into the imperative mood.&lt;/p&gt;

&lt;p&gt;if applied, this commit will update getting started documentation&lt;/p&gt;

&lt;p&gt;if applied, this commit will remove deprecated methods&lt;/p&gt;

&lt;p&gt;if applied, this commit will merge pull request #123 from user/branch&lt;/p&gt;

&lt;p&gt;The reason we use the imperative mood is because it continues the pattern that git itself established for commit messages. Consistency is key. &lt;/p&gt;

&lt;p&gt;Types&lt;/p&gt;

&lt;p&gt;Types are used so you can quickly see what kind of change has been made. &lt;/p&gt;

&lt;p&gt;feat: is used for changes that pertain to feature updates.&lt;/p&gt;

&lt;p&gt;fix: is used for bug fixes&lt;/p&gt;

&lt;p&gt;style: is used to fix code styling such as indentations&lt;/p&gt;

&lt;p&gt;refactor: is used for when code has been refactored&lt;/p&gt;

&lt;p&gt;chore: is used for regular code maintenance.&lt;/p&gt;

&lt;p&gt;perf: is used for an update that addresses the performance of the code &lt;/p&gt;

&lt;p&gt;docs: is used for any change that has to do with documentation of the code &lt;/p&gt;

&lt;p&gt;test: is used for changes made to tests. &lt;/p&gt;

&lt;p&gt;This method of commit messages may be a bit extensive for smaller project or if you are going to rebase your commits and the smaller messages will be lost in the git void. &lt;/p&gt;

&lt;p&gt;The short form of commit messages would be just the type, scope and subject line.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;type&amp;gt;([optional file name]): &amp;lt;short description&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;A way to format the subject line when using a shorter commit message would be&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Remove the X &amp;amp; Add the Y to allow Z&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;This phrase addresses everything that is needed to make your commit messages easy to understand by an outsider.&lt;/p&gt;

&lt;p&gt;There are three things to remember about commit messages if nothing else. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do not assume that the reader knows what the original problem was.
2  Your code is not self-explanatory. &lt;/li&gt;
&lt;li&gt;Follow the convention set by your team. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Consistency is important for keeping commit messages understandable, especially when working in a team. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building an MVP pt 1</title>
      <dc:creator>dotbehrens</dc:creator>
      <pubDate>Mon, 27 Jan 2020 03:41:50 +0000</pubDate>
      <link>https://dev.to/dotbehrens/building-an-mvp-pt-1-5bil</link>
      <guid>https://dev.to/dotbehrens/building-an-mvp-pt-1-5bil</guid>
      <description>&lt;p&gt;MVP stands for Minimal Viable Product. The goal is to create a web application that functions on a basic level. MVPs do not focus on front end design. &lt;br&gt;
Here is a lovely link that will send you to a MERN stack repo. This repo is for a Mongo DB but I have faith in you to switch it to MySQL. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dotbehrens/fullstacktemplate.git" rel="noopener noreferrer"&gt;https://github.com/dotbehrens/fullstacktemplate.git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before you start writing your first line of code you need to decide what you are building, and what you will use to build out your app. For this MVP I will be using a MERN stack. &lt;br&gt;
M: I will use MySQL for my database&lt;br&gt;
E: my server will use express&lt;br&gt;
R: My front end will be rendered in React.&lt;br&gt;
N: and My runtime environment will be node.js&lt;/p&gt;

&lt;p&gt;I will be using the OwlBot Dictionary API, which requires an API Key. My app will consist of a search bar for the user to type in words and look them up from the API.&lt;/p&gt;

&lt;p&gt;Now that I know what I plan to do. My first step will be to get an API key and check if it will work on Postman. It is important to look at the documentation for your API as it will tell you how it likes to be spoken to. Think of this as the API's love language.&lt;/p&gt;

&lt;p&gt;Luckily Owlbot is pretty clear about what it wants from this relationship &lt;/p&gt;

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

&lt;p&gt;Owlbot will ask for your email address and send you an API Token to use to access its database. For security reasons, it is best not to share your API key. This includes not pushing it up to Github for public view. We will cover how to do that a little further on. For the sake of examples, I am going to pretend my API_Token is 'koalakoala'.&lt;br&gt;
The best practice is to test our API key before we start coding.&lt;/p&gt;

&lt;p&gt;Using Postman we will create a get request setting the headers as below. &lt;/p&gt;

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

&lt;p&gt;Now let's open our coding environment and create a .env file. Inside of this file, we will declare an API_TOKEN environmental variable.&lt;/p&gt;

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

&lt;p&gt;This is only half the battle to keep our API_TOKEN secure. Next, we need to make a .gitignore file so that when we push up our projects the computer knows not to push up the files in the .gitignore. &lt;/p&gt;

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

&lt;p&gt;In my .gitignore file, I reference the bundle.js, which is a file that compiles my code, my node modules, and my .env file. Now my API_TOKEN is safe and sound.&lt;/p&gt;

&lt;p&gt;Alright, next up we are going to render our front end. Our front end needs an input text box for our search queries and a submit button.&lt;br&gt;
We should also add in a title so that our user knows what they are looking at. In a separate component, we should render a result from the query.&lt;/p&gt;

&lt;p&gt;There isn't really a need to mess with the index.jsx file right now but let's take a look at it anyway.  &lt;/p&gt;

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

&lt;p&gt;Here we import the necessary react files including REact and react-dom as well as the root react component we are creating. We re also importing a CSS file to style our app. Finally, we are using React.DOM.render to render our component to the DOM.&lt;/p&gt;

&lt;p&gt;We will leave it there for now. Part 2 next week. &lt;/p&gt;

</description>
    </item>
    <item>
      <title> Linux Terminal Commands With Cowsay</title>
      <dc:creator>dotbehrens</dc:creator>
      <pubDate>Mon, 20 Jan 2020 03:40:14 +0000</pubDate>
      <link>https://dev.to/dotbehrens/linux-terminal-commands-with-cowsay-515g</link>
      <guid>https://dev.to/dotbehrens/linux-terminal-commands-with-cowsay-515g</guid>
      <description>&lt;p&gt;This is an extension to my previous blog: Linux Terminal Commands. &lt;br&gt;
Throughout this blog I will be using the extension cowsay. This extension is available on both mac and linux. &lt;/p&gt;

&lt;p&gt;To install cowsay type in cowsay to your terminal and follow the directions. If that is unsuccessful here is a link to find the version of cowsay you are looking for.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pkgs.org/download/cowsay" rel="noopener noreferrer"&gt;https://pkgs.org/download/cowsay&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All cowsay does is prints the text you tell the cow to say in a lovely little speech bubble. It is super cute. &lt;/p&gt;

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

&lt;p&gt;first lets learn about pipes. Pipes are a single vertical line that lets the computer know that the outcome of the previous command is the input of the next command. &lt;/p&gt;

&lt;p&gt;To demonstrate I will use another fun extension called fortune. When I type fortune into the console a fortune is returned.&lt;/p&gt;

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

&lt;p&gt;Now what if I wanted to be told my fortune by a cow. Well then I could probably use a pipe.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;fortune | cowsay&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;A pipe will let your function know that the output of what comes before the pipe is meant to be the input of what comes after the pipe. The output of our fortune ( the fortune) will be what the cowsays. &lt;/p&gt;

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

&lt;p&gt;For the next part we are going to venture a little further into cowsay. I you type in the command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cowsay -l&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;you will get back a list of the different cowsay options. &lt;/p&gt;

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

&lt;p&gt;To use the options in cowsay, simply use the command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cowsay -f &amp;lt;option&amp;gt; &amp;lt;whatcowsays&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

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

&lt;p&gt;Now lets think about using grep. "grep" will search through text to find matching characters say we want to find all of the letter k's in the list of cowsay options to do this we would use :&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cowsay -l | grep k&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The output of cowsay -l becomes the input for grep.&lt;/p&gt;

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

&lt;p&gt;Lets say we wanted only to find the whole word koala. We would then use the command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cowsay -l | grep -w koala&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

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

&lt;p&gt;The -w searches for the whole word if we were to use the command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cowsay -l |grep -w koal&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;nothing would be returned.&lt;/p&gt;

&lt;p&gt;Personally my terminal is a little cluttered right now. Use the command&lt;br&gt;
&lt;/p&gt;

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


to clear the terminal and start with a clean slate.

If you would like to make your cow more vocal try the command:



```espeak &amp;lt;words&amp;gt; | cowsay &amp;lt;words&amp;gt;```



Be sure to turn up your computer volume.

Now that we have some experience with pipes and grep, lets try and figure out what the command below is telling the computer to do.



```history | awk '{print $2}' | sort | uniq -c | sort -rn | head -10```



As we know history will print out the previously used commands, but what is awk? Good question

The time has come for me to introduce you to another one of my favorite terminal commands "whatis". "whatis" is wonderful as it tells you what a command is. This may keep you from doing all sorts of horrible things to your computer. Try the command:



``` whatis whatis```



![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/8yqr100gos1hya4aljfl.png)

So what is awk? "awk" is a pattern scanning programming language. We can then deduce that we are looking for the things within history that match the pattern. The {'print $2'} is dealing with the fields we are putting into the command. For the most part lets ignore that complexity for now. 
We then take the outcome and sort it, then look for the unique values, then sort it again by a different criteria. Then we will ask for only the top ten or ten items from the head. 

We can test it to further figure out what this command is doing now that we are fairly sure it is not going to corrupt all of our files. 

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/lsvc787xtptup6u9sbiw.png)

As you can see the command prints out our most used commands and how many times we have used them. Handy? Maybe.. I don't know, but can a cowsay it?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Linux Terminal Commands</title>
      <dc:creator>dotbehrens</dc:creator>
      <pubDate>Wed, 15 Jan 2020 01:09:47 +0000</pubDate>
      <link>https://dev.to/dotbehrens/linux-terminal-commands-13c7</link>
      <guid>https://dev.to/dotbehrens/linux-terminal-commands-13c7</guid>
      <description>&lt;p&gt;My special skill is breaking things so I often find myself digging through the internet to find terminal commands having no idea if they will help or cause my computer to self destruct. A recent disaster led me to decide it was time to learn what these commands were actually commanding. I've put together a collection of commands I have run across and some that have helped me diagnose what is going on. &lt;/p&gt;

&lt;p&gt;Something that has come up a lot is the file path "/etc". As someone who plays a lot of HOTS (Heroes of the Storm) I immediately think of E.T.C. (Elite Tauren Chieftain)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s7qg1XkX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/tafxd9xn4xspq4nmvks3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s7qg1XkX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/tafxd9xn4xspq4nmvks3.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Though some may think of it as et cetera this file is really where the configurations for the applications on your computer are stored.&lt;/p&gt;

&lt;p&gt;Another thing that has come up a bunch is daemons. Daemons, sometimes pronounced demons, are processed that run in the background. As a naming convention daemons typically end in the letter "d". This is why, while stumbling though mysql all of the sudden mysqld made an appearance. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4yN468HX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/iiafb8cctvn1bnrogxbu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4yN468HX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/iiafb8cctvn1bnrogxbu.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;pwd:&lt;/strong&gt; This command stands for "print working directory". It prints what the absolute file from root is. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;/:&lt;/strong&gt;  is the root file. if you "cd /", You will change directories to the root. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ps:&lt;/strong&gt; "Process Status" prints a snapshot of the current running processes to the terminal. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;free:&lt;/strong&gt; This really handy command tells you how much space is free on your machine. On its own free will return the space in bits, which becomes overwhelming if you are working with larger files. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jSgIg2ub--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ma7ulj23yoct1riei5kq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jSgIg2ub--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ma7ulj23yoct1riei5kq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If "free" is paired with "-h", which stands for human readable, then the file sizes are returned in bytes which are more manageable. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;kill:&lt;/strong&gt; Will kill a process. Processes are usually preceded with a number if you use kill in conjunction with that number you will kill that specific process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;df:&lt;/strong&gt; Similar to free but prints out how much space a file is using. Remember to add "-h" for friendlier units. &lt;/p&gt;

&lt;p&gt;Two commands that I have run across that have led me to say things like "I guess I just have to trust you stack overflow" are chmod and chown.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo chown -R _mysql:mysql /usr/local/var/mysql&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;chown:&lt;/strong&gt; Will change the ownership of the specific file.  &lt;em&gt;CHange OWNer&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;chmod:&lt;/strong&gt; will change the read and write permissions for a file. &lt;/p&gt;

&lt;p&gt;While we have the example above lets talk about sudo. &lt;br&gt;
Coming from Mac I was a little confused as to why my commands need to start with sudo. sudo is real nice in that it makes you the root user for that command. It is quicker than changing directories to root and changing back. &lt;/p&gt;

&lt;p&gt;One of my current favorite commands is history. I should have known that it was an option but I just didn't. History will print a list of your command history. This is especially helpful when you have done so many things to try to fix a problem that you have forgotten what they are. Or when someone does magic on your computer and you want to know what happened. &lt;/p&gt;

&lt;p&gt;A few fun commands to try: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cal:&lt;/strong&gt; prints a mini calendar to the terminal&lt;br&gt;
&lt;strong&gt;yes:&lt;/strong&gt; just try it! Or, tell a friend to do it!&lt;br&gt;&lt;br&gt;
&lt;strong&gt;rev:&lt;/strong&gt; will reverse the string given to it&lt;br&gt;
&lt;strong&gt;cmatrix:&lt;/strong&gt; will display a really nice matrix in your terminal. &lt;/p&gt;

&lt;p&gt;Stay tuned for part two: Practicing Linux Terminal Commands with Cowsay!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Ceaser Cipher Toy Problem Walkthrough</title>
      <dc:creator>dotbehrens</dc:creator>
      <pubDate>Wed, 18 Dec 2019 23:05:37 +0000</pubDate>
      <link>https://dev.to/dotbehrens/ceaser-cipher-toy-problem-walkthrough-6ig</link>
      <guid>https://dev.to/dotbehrens/ceaser-cipher-toy-problem-walkthrough-6ig</guid>
      <description>&lt;p&gt;In cryptography, the Ceasar cipher is a shift cipher. It is a simple encryption technique that is named after Julius Ceaser who used the cipher to communicate with his generals. The concept behind a Ceaser cipher is that it is still a message written in plain text but every letter is shifted down the alphabet by a chosen number. While at first sight, this is an effective way to encrypt a message Ceaser ciphers are fairly easy to break. All it takes is to find the encryption method is looking for commonly used words and letter patterns. Once you crack one word of the code the rest falls into place.&lt;/p&gt;

&lt;p&gt;Say our message is "Marsupials are the future" let's make our offset 6 meaning every character will be shifted down the alphabet 6 letters. The encoded message would then be "Sgxyavogry gxk znk lazaxk". &lt;/p&gt;

&lt;p&gt;In order to make our cipher more secure, we are going to change up the alphabet available this will make the pattern a little less predictable to the code breakers waiting around every corner. &lt;br&gt;
If we were to use the same message and encode it with the alphabet "mfutrip" the new message would be "patsfirals ate uhe mfufte".&lt;/p&gt;

&lt;p&gt;Alright, let's get down to some code.&lt;br&gt;
first let's start off with a shell of a function and some variables to work with.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const ceasarCipher = (options) =&amp;gt; {
  let { alphabet, offset, message, command } = options;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's decide our IOCE:&lt;br&gt;
Inputs: &lt;br&gt;
In this Ceasar cipher, we are using the following parameters,&lt;br&gt;
alphabet: the letters we are shifting in the cipher&lt;br&gt;
offset: the number of letters we are shifting&lt;br&gt;
message: the message we are trying to decode/encode&lt;br&gt;
command: whether we are going to encode or decode&lt;br&gt;
Outputs:&lt;br&gt;
We want to output a new string.&lt;br&gt;
Constraints: N/A&lt;br&gt;
Edge cases: N/A&lt;/p&gt;

&lt;p&gt;To start let's make a container to hold our new string. Because I prefer to use array methods to string methods I am going to use an empty results array. You could also use a string and concat the new letters into the string. &lt;/p&gt;

&lt;p&gt;Next, we are going to do a little cheat. We are going to add the alphabet string parameter to itself so that if the letter we are shifting is towards the end of the alphabet, it can still be shifted. &lt;/p&gt;

&lt;p&gt;I call this cheating because this will only work if the number we are shifting by is less than the length of the alphabet. If someone wants to shift by a number larger than that, they are trying too hard anyway. &lt;/p&gt;

&lt;p&gt;Since we know we are intending to return a string we can return result joined into a string. &lt;/p&gt;

&lt;p&gt;The basic setup without logic is below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const caesarCipher = (options) =&amp;gt; {
  let { alphabet, offset, message, command } = options;
  let result = [];
   alphabet += alphabet;
      return result.join('');
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are out of excuses, now for logic. &lt;br&gt;
Since our message input is a string and we are stubborn and prefer working with arrays we will first split the message into an array. Then we will loop over the array, and declare the variable index which will be the result of the indexOf the letter in the given alphabet. This indexOf method is great because if the letter is not found in the given alphabet indexOf returns -1. We can use this tool to make sure those characters stay the same. Spaces will now be accounted for. &lt;/p&gt;

&lt;p&gt;Now that we have handled the letters we don't need to change we can change the letters we do need to change. If the command is "encode" we will shift the letters forward by the offset number.&lt;/p&gt;

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

&lt;p&gt;Else if the command is "decode" we will shift the letters backward by the offset number.&lt;/p&gt;

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

&lt;p&gt;Let's take a look at the final code for our Ceaser cipher.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const ceasarCipher = (options) =&amp;gt; {
  let { alphabet, offset, message, command } = options;
  let result = [];
   alphabet += alphabet;
  message.split('').forEach(letter =&amp;gt; {
    let index = alphabet.indexOf(letter);
        if(index === -1){
        result.push(letter);
        } else if(command === 'encode'){
           result.push(alphabet[index + offset]);
        } else {
          result.push(alphabet[index - offset]);
        }
  });
      return result.join('');
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>EsoSlang</title>
      <dc:creator>dotbehrens</dc:creator>
      <pubDate>Wed, 18 Dec 2019 23:05:04 +0000</pubDate>
      <link>https://dev.to/dotbehrens/esoslang-2ok1</link>
      <guid>https://dev.to/dotbehrens/esoslang-2ok1</guid>
      <description>&lt;p&gt;Esoteric Programming Languages or esoSlang is created by programmers that want to test the bounds of what can be done with programming languages. Often they are not designed for any practical reasons and are downright impractical or difficult to use. Sometimes though esoSlang influences more practical languages with their popular features. Below I am going to talk about an esoteric programming language I have been pretty excited about lately. &lt;/p&gt;

&lt;p&gt;Perhaps my favorite is Whitespace. This language was released on April Fools day in 2003. It was developed by Edwin Brady and Chris Morris, who thought that programming languages should no longer ignore white space. White space only takes in spaces, tabs and line feed. The rest of the characters input are completely ignored. Whitespace is an imperative programming language. Imperative programming languages are languages that use statements to change the program's state. &lt;/p&gt;

&lt;p&gt;Below is how to write "hello world" in Whitespace. You may notice it is a little bit impractical.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 

 &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 

 &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 

 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; 

 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;space&amp;gt; 
 &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;space&amp;gt; 
 &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 

 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;space&amp;gt; 

 &amp;lt;space&amp;gt; 

 &amp;lt;tab&amp;gt; 

 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;space&amp;gt; 
 &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;space&amp;gt; 

 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;space&amp;gt; 
 &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 

 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;space&amp;gt; 

 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; 

 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; 
 &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;tab&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;tab&amp;gt; 
 &amp;lt;space&amp;gt; &amp;lt;space&amp;gt; &amp;lt;tab&amp;gt; 
 &amp;lt;space&amp;gt; &amp;lt;space&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Whitespace does have a pretty interesting theoretical concept with it. It could be possible to write code in a more practical language and in between the characters have the white-space characters run an entirely different bit of code. No one would even have to know. &lt;/p&gt;

&lt;p&gt;In conclusion esoteric programming languages are a fun way for programmers to test themselves and the bounds of computer programming. They can result in improvements to more main stream coding languages, but ultimately they are not meant to be used for more than their novelty.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Git</title>
      <dc:creator>dotbehrens</dc:creator>
      <pubDate>Mon, 16 Dec 2019 01:10:27 +0000</pubDate>
      <link>https://dev.to/dotbehrens/git-2pn1</link>
      <guid>https://dev.to/dotbehrens/git-2pn1</guid>
      <description>&lt;p&gt;This blog will be a brief overview of helpful git commands to make your coding life a little simpler and more organized. First, what is Git? Git is a  distributed version control system. Git was originally developed in 2005 by Linus Torvalds, the creator of the Linux operating system kernel. Other version control systems include CVS and Subversion, or SVN. Though both CVS and SVN are not distributed. &lt;/p&gt;

&lt;p&gt;Git saves and allows access to previous changes in your code. This means if you have broken code that wasn't broken before you can go back to the commit where things are working. Also, Git is especially helpful when coding in groups so that you can make changes to your branch of the code, while the main branch remains unchanged. &lt;/p&gt;

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

&lt;p&gt;Git has been widely adopted through its criticism is that it is difficult to learn. Its commands are not the same as the commands of SVN or CVS. &lt;/p&gt;

&lt;p&gt;If you are anything like me you have run into a problem or 500 using git. My problems often become a hot plate of git spaghetti, and me running down the hall cradling my laptop hoping to find someone, anyone who can help me figure out what Frankenstein git monster I have made and how to put it down, for the good of humanity. &lt;/p&gt;

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

&lt;p&gt;I've made a shortlist of git commands I wish I had committed to memory the first 3 or 4 times they were shown to me. &lt;/p&gt;

&lt;h4&gt;
  
  
  $ git init
&lt;/h4&gt;

&lt;p&gt;creates a new local repository for you to code in. &lt;/p&gt;

&lt;h4&gt;
  
  
  $ git merge
&lt;/h4&gt;

&lt;p&gt;is a command I recently learned I was using all along. When you use the git pull command that enacts two commands. The first is a merge where the new data is merged into the old data. The second is the commit command. A commit is made of the new merged file right away. I believe the first time I was told this I said, "hmm, well that's super thoughtful of git.."&lt;/p&gt;

&lt;h4&gt;
  
  
  $ git log
&lt;/h4&gt;

&lt;p&gt;Much like git hist, git log gives the history of the current branch. &lt;/p&gt;

&lt;h4&gt;
  
  
  $ git status
&lt;/h4&gt;

&lt;p&gt;Shows the files you have changed that still need to be staged for commit. &lt;/p&gt;

&lt;h4&gt;
  
  
  $ git remote add 
&lt;/h4&gt;

&lt;p&gt;creates a remote repository that you can push and pull from.&lt;/p&gt;

&lt;h4&gt;
  
  
  $ git checkout
&lt;/h4&gt;

&lt;p&gt;is used to switch between branches in your project. &lt;/p&gt;

&lt;h4&gt;
  
  
  $ git diff
&lt;/h4&gt;

&lt;p&gt;will show the merge conflicts of a file&lt;/p&gt;

&lt;h4&gt;
  
  
  $ git diff  
&lt;/h4&gt;

&lt;p&gt;will show the merge conflicts before merging. &lt;/p&gt;

&lt;h4&gt;
  
  
  $ git branch
&lt;/h4&gt;

&lt;p&gt;You can use to see what branches you can change to, the use git checkout or often the shortcut git co to move into the chosen branch. &lt;/p&gt;

&lt;h4&gt;
  
  
  $ git blame
&lt;/h4&gt;

&lt;p&gt;is a handy little command that shows the most recent author and revision of each line in the file. It lets us know who is to blame for the infinite loop that just crashed your machine.&lt;/p&gt;

&lt;h4&gt;
  
  
  $ git rebase
&lt;/h4&gt;

&lt;p&gt;rebasing, in general, makes for a cleaner and more linear project history &lt;br&gt;
it adds the commits of a branch to the head of the branch so that the project is more linear.&lt;/p&gt;

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

&lt;h4&gt;
  
  
  $ git rebase -i Head~4
&lt;/h4&gt;

&lt;p&gt;before pushing you can squash tiny commits down into one change to create a more concise commit This command will rebase the top 4 commits from the head.&lt;/p&gt;

&lt;p&gt;There are many more useful git commands out there, and I encourage you to read into them before you start boiling that water for more git spaghetti.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Callbacks and Promises</title>
      <dc:creator>dotbehrens</dc:creator>
      <pubDate>Thu, 12 Dec 2019 15:03:36 +0000</pubDate>
      <link>https://dev.to/dotbehrens/callbacks-and-promises-5eai</link>
      <guid>https://dev.to/dotbehrens/callbacks-and-promises-5eai</guid>
      <description>&lt;p&gt;Before diving into the difference between callbacks and promises first we need to talk about what synchronous and asynchronous code is. Typically javascript runs synchronous code meaning it executes the code from top to bottom. Asynchronous code allows us to run functions simultaneously in javascript. Callbacks and Promises are both ways to write asynchronous code. Asynchronous code is useful when writing code whose response time is unknown, such as HTTP requests to an outside API. It allows for the code to go about doing other things as it waits for the response to the async code.&lt;/p&gt;

&lt;p&gt;Callbacks are the classic way to write asynchronous code in Javascript.  Callbacks are created when a function has another function as an argument. They are commonly seen in higher-order functions and further utilized in async code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HOZe-Qmq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/g9qepwxn9ur6tq2uovbx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HOZe-Qmq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/g9qepwxn9ur6tq2uovbx.png" alt="Alt Text"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;A callback is called a callback because it is a function that is only called when the outer function calls it back.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function one() {
 setTimeout(() =&amp;gt; {
   console.log('1. First thing setting up second thing');
   setTimeout(() =&amp;gt; {
     console.log('2. Second thing setting up third thing');
     setTimeout(() =&amp;gt; {
       console.log('3. Third thing setting up fourth thing');
       setTimeout(() =&amp;gt; {
         console.log('4. Fourth thing');
       }, 2000);
     }, 2000);
   }, 2000);
 }, 2000);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Callback Hell occurs when you have callbacks calling callbacks that callback callbacks. While in small doses callback hell isn’t too daunting or worrisome, when code gets more involved callback Hell starts to become more real.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jyK2RDaU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/k9e0coxnz62c2mkabaeb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jyK2RDaU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/k9e0coxnz62c2mkabaeb.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Callback hell is a symptom of a bigger problem in your code. If you are entering the fiery pits of callback hell there is probably an opportunity to break your code up and make it more modular and less dependable upon other functions and therefore easier to debug. &lt;/p&gt;

&lt;p&gt;Promises are a way to make callbacks easier to read. They do not change what the callbacks are doing, nor do they change the time complexity of your code. If in callback hell promises will only shove your coding problems in the closet so guests can visit. &lt;/p&gt;

&lt;p&gt;Promises are instantiated by using the new keyword and the promise constructor. Promises, in essence, say “I promise to do this whenever that is true. If it isn’t true, then I won’t.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let promise = new Promise(function(resolve, reject) {
   // things to do to accomplish your promise

   if(/* everything turned out fine */) {
       resolve('Stuff worked')
   } else { // for some reason the promise doesn't fulfilled
       reject(new Error('it broke'))
   }
})
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Promises have three states, solid, liquid and gas. Just checking if you are paying attention. Promises have three states, pending, fulfilled, and rejected. The initial state of a promise is pending this is before the promise operation begins. When an operation is completed the promise is considered fulfilled. If an operation did not complete it is referred to as Rejected. Usually when a promise is rejected an error is thrown. &lt;/p&gt;

&lt;p&gt;The fun thing about promises is that they can be chained using the then() function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let promise = new Promise(function(resolve, reject) {
   // things to do to accomplish your promise

   if(/* everything turned out fine */) {
       resolve('Stuff worked')
   } else { // for some reason the promise doesn't fulfilled
       reject(new Error('it broke'))
   }
})
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The important thing to remember is that promises and callbacks accomplish the same thing, but promises are prettier and easier to read and keep you out of callback hell. They do not, however, fix your code and you should still make it your goal to write more modular code. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>React Parents and Children</title>
      <dc:creator>dotbehrens</dc:creator>
      <pubDate>Mon, 02 Dec 2019 01:57:34 +0000</pubDate>
      <link>https://dev.to/dotbehrens/react-parents-and-children-3anf</link>
      <guid>https://dev.to/dotbehrens/react-parents-and-children-3anf</guid>
      <description>&lt;p&gt;I've recently been given the opportunity to work with React while practicing building the front ends of small web apps. This article will be a brief overview of how data is passed between parent and children components in React. React is an extremely popular Javascript library that was created by Facebook in 2011. Developers use React to create functionality in the front end of web applications. It works in tandem with HTML to create components that make up the pieces of an application, such as a search bar, or timeline. These different components are children of the parent App component. Components are self-contained modules that render and output. They help to make our code more composable so that the parts of our code work together.&lt;/p&gt;

&lt;p&gt;React is definitely worth learning as there are many large companies that use react in their web development. In addition to Facebook, other companies that utilize react are Instagram, Netflix, and DropBox.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XFGDuPky--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ynsqpthwtz1e7oevq3ta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XFGDuPky--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ynsqpthwtz1e7oevq3ta.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My own experience with react has been a mixed bag. On the one hand, React is very intuitive. I enjoy being able to place the function I write right in the HTML-like code, where you want it to render on the page. This is awesome and a huge improvement over what I had previously been using, jquery. On the other hand, trying to get your search function to change the information on your parent app component via the component of the search bar. That takes some getting used to when you are starting on your react journey.&lt;/p&gt;

&lt;p&gt;Components can be either stateless or stateful. Stateful components modify the underlying data whereas stateless components respond to data. States is basically an object within the component. It holds data that the state needs and that may need to be passed to or changed by child components. State can be declared by assigning an object to this.state. State is mutable, meaning it can be changed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PSkgSjQM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/j0eplqte4o03p9pcdtys.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PSkgSjQM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/j0eplqte4o03p9pcdtys.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Data can be passed from parent to child using props. Props are also an object however they, unlike state, are immutable. They do not change between parent and child components. They can be retrieved with the expression this.props.dataFromParent, which will retrieve the existing props and allow the developer access to them within a child component.&lt;br&gt;
Props are properties passed from parent to child components that are immutable. They are passed as properties within the HTML-like react upon return.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eqxz_6Rt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/vhy671277oqpsu5r7h49.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eqxz_6Rt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/vhy671277oqpsu5r7h49.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hYvyj341--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/fbnhcquvrl60c9p36ul6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hYvyj341--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/fbnhcquvrl60c9p36ul6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Passing data from the child component to the parent component is a little bit more complicated. To do this data must be passed through callback functions. The parent component declares a function that is then passed down to the child component through props. The child component then passes in an argument to the callback function giving the parent function access to the data. Children components can also pass callbacks to parents by putting it on the state. In React state can be changed in the parent function by using the function setState().&lt;/p&gt;

&lt;p&gt;In short, React is a nifty library to learn and is capable of many things, once you learn how the components need to communicate.  Data is passed from parent to children components through props and passed from children to parents using callbacks. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Making a bootable file to install Linux. </title>
      <dc:creator>dotbehrens</dc:creator>
      <pubDate>Mon, 25 Nov 2019 17:46:32 +0000</pubDate>
      <link>https://dev.to/dotbehrens/making-a-bootable-file-to-install-linux-34h4</link>
      <guid>https://dev.to/dotbehrens/making-a-bootable-file-to-install-linux-34h4</guid>
      <description>&lt;p&gt;I recently made the giant leap into the world of Linux and had to sift through many tutorials to create a bootable file. Each tutorial would lead me to another tutorial and would bring up about 3 things I had never heard of. What follows is a summation of my experience and all of the decisions I had to make. &lt;/p&gt;

&lt;p&gt;The first thing I had to decide what if I wanted to dual boot or not.&lt;br&gt;
Dual-booting is when you partition your hard drive to load more than one operating system onto it. Your other option is to wipe your whole hard drive and start over with an all Linux system. I switched to Linux using a brand new computer so switching the whole machine to Linux wasn’t an issue. &lt;/p&gt;

&lt;p&gt;The next step is to download a Linux ISO. There are many many options when it comes to what Linux version to download. I will give you the advice I was given. Go with the one that is most well documented. That way if you have problems you have the resources to solve them. I was advised that Ubuntu was the tried and true method for programming on Linux. From most of what I’ve seen Linux coding tutorials mostly use Ubuntu. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7PV7byR5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/mqn9erisurblow59ujyq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7PV7byR5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/mqn9erisurblow59ujyq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I decided not to use Ubuntu. Instead, I chose Linux mint. My main reason is that the people I know who use Linux on a regular basis have been using it without major problems. The difference between Linux Mint and Ubuntu is that Ubuntu is made to work more similarly to Mac and Mint works more similarly to a windows desktop. Ubuntu also takes up more memory than mint. Ubuntu unity takes almost twice the amount of space that Mint Cinnamon requires. Mint is also faster.&lt;/p&gt;

&lt;p&gt;I’m afraid that isn’t the end of the decisions that I needed to make. &lt;br&gt;
Linux Mint has three desktop options you can download. Xfce, MATE, and Cinnamon.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VHbjYwTA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/rac27msud9j06rbdm3fc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VHbjYwTA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/rac27msud9j06rbdm3fc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://linuxmint.com/download.php"&gt;https://linuxmint.com/download.php&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I chose Cinnamon. It has a more full-featured desktop and as someone who is new to Linux, I thought starting here would be less frustrating.  MATE is more stable and faster. Xfce is lightweight and stable. I didn't worry too much over this choice because the desktop theme can be switched without having to reinstall.&lt;/p&gt;

&lt;p&gt;Now to choose which size to download. &lt;br&gt;
Older computers might need to run the 32-bit installation, but if your computer can run the 64-bit it is recommended.&lt;/p&gt;

&lt;p&gt;Next up was picking which mirror I wanted to use. Mirrors are just sources to copy and download from. The best bet is to choose the one that is closest geographically, that way it will take less time to download. There is some fear that you may get a malicious ISO. Don’t worry too much there is a step for that. I chose the Oklahoma University option. Mostly because I knew where Oklahoma was. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2b22AUTb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ab3zo3kwdygczn24a0e4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2b22AUTb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ab3zo3kwdygczn24a0e4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a link to how to verify your ISO. I personally skipped this step and nothing bad has come from this … yet. &lt;/p&gt;

&lt;p&gt;Next, I needed to find a flash drive. This was probably the most time-consuming step as I needed an empty or empty-able flash drive with at least 2GB of space on this flash drive. As I found out, A 2GB flash drive likely does not have 2GB of available space. I had 1.83 GB of available space on my flash drive and needed 1.87 GB. It was a very sad realization.  I also tried to partition an external hard drive and use it.  The utility I used to make a bootable drive, Rufus did not recognize partitions as separate devices and wanted to rewrite both partitions. I elected not to do that. &lt;/p&gt;

&lt;p&gt;Let’s talk about Rufus. Rufus helps create a bootable file that will allow you to install Linux.  It’s much like unzipping a .zip file, just a different file type. Rufus is your friend. This is a link to the download. &lt;a href="https://www.techspot.com/downloads/6062-rufus.html"&gt;https://www.techspot.com/downloads/6062-rufus.html&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6YXewitl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ww4p9fmwt82aguaxfsp3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6YXewitl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ww4p9fmwt82aguaxfsp3.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I made sure to switch my file system to FAT32 as I read it was more flexible and uses space more efficiently. The rest of the settings I left as default.&lt;/p&gt;

&lt;p&gt;Finally, I was ready to install Linux.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
