<?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: Patrick Henry</title>
    <description>The latest articles on DEV Community by Patrick Henry (@hackman78).</description>
    <link>https://dev.to/hackman78</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%2F1227804%2Fd3a0eea8-6804-4f3f-b808-117e433765ee.jpeg</url>
      <title>DEV Community: Patrick Henry</title>
      <link>https://dev.to/hackman78</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hackman78"/>
    <language>en</language>
    <item>
      <title>Git: What happens under the hood</title>
      <dc:creator>Patrick Henry</dc:creator>
      <pubDate>Mon, 24 Jun 2024 14:31:56 +0000</pubDate>
      <link>https://dev.to/hackman78/git-what-happens-under-the-hood-13dc</link>
      <guid>https://dev.to/hackman78/git-what-happens-under-the-hood-13dc</guid>
      <description>&lt;h1&gt;
  
  
  Git: What happens under the hood
&lt;/h1&gt;

&lt;p&gt;What is Git? Git is a open source version control system that has had a stranglehold on the development world since it came out in 2005. Created by Linus Torvalds it is the system that he created to fix some problems with the old version control systems of the day.&lt;/p&gt;

&lt;h2&gt;
  
  
  History
&lt;/h2&gt;

&lt;p&gt;Linus Torvalds created Git because at the time there were many version control systems some open-source and others were not open-source. It was a fractured time for version control of the day. Linus felt forced to make a change in the community when the version control system he was using decided to start charging for the system that they were using and Linus didn't want to pay. He was already a successful engineer already having been the father of the Linux Kernel already and having a team of developers working on it when their version control system decided to start charging for the service. So he got to work and created on of the most influential tools in the developer tools to date.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parts of the .git folder
&lt;/h2&gt;

&lt;p&gt;What is git and how does it work? What &lt;strong&gt;'makes'&lt;/strong&gt; a directory a git repo? What is a repository? Git is an extensive tool that takes alot of time to get used to all of the features and understand what is actual happening under the hood. A git repository is just a folder that has another nested .git folder that holds staged changes in it. The important folders are refs, heads, config, logs, and objects.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it Works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  refs directory
&lt;/h3&gt;

&lt;p&gt;refs holds all the references to the heads of different branches of your git repository. It is important to hold all your branch heads no matter the branch your on so that you can always go back whenever you would like.&lt;/p&gt;

&lt;h3&gt;
  
  
  objects directory
&lt;/h3&gt;

&lt;p&gt;The objects directory is where all of your git changes are actual stored compressed in different folders to hold your changes. The sha1 is the file directory of your current git commit you are on.&lt;/p&gt;

&lt;h3&gt;
  
  
  config
&lt;/h3&gt;

&lt;p&gt;Sets the config of your git repo locally. Things like if you want your pulls to rebase, remote branches, your origin repo, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  logs
&lt;/h3&gt;

&lt;p&gt;Directory to hold your git branch trees to see what your git tree looks like extensively.&lt;/p&gt;

&lt;h3&gt;
  
  
  heads
&lt;/h3&gt;

&lt;p&gt;holds all of the heads to your different head branches in Git.&lt;/p&gt;

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

&lt;p&gt;I haven't learned all of Git and it is definitely not the most intuitive in the world, but I learned something very important. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SOFTWARE I USE IS NOT THAT DIFFICULT TO UNDERSTAND&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All of the technology I use may take some time to get accustomed to, but all software is really just the same techniques I have been using  all throughout my coding career. Control flow, loops, functions, scopes, closures, methods, data structures, algorithms, time complexity, etc. They are all used in every program, because they are  all built on top of the same binary, on top of the same assembly language, all can talk to other computers with the same protocols. Really there are a few differences between code. The syntax, the time  complexity/efficiency, and the design of the system(Database, Client, Server). The small or large decisions that you make when starting up a project are what decides how easy or difficult it will be to iterate on your project.&lt;/p&gt;

&lt;p&gt;I think remembering the concept that all software is built on top of the same systems is the key for me to have a long career in software, mitigate imposter syndrome, and to CI/CD my current knowledge because there is always something else to learn, something else to explore, and something else that will be fun to build. &lt;/p&gt;

&lt;h2&gt;
  
  
  Sources on how to code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://app.codecrafters.io/courses/git/overview"&gt;Code Crafters&lt;/a&gt; &lt;strong&gt;paid&lt;/strong&gt; Any Language&lt;/p&gt;

&lt;h3&gt;
  
  
  Free
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://gitlet.maryrosecook.com/docs/gitlet.html"&gt;gitlet&lt;/a&gt; &lt;strong&gt;Code Git in Javascript&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wyag.thb.lt/"&gt;Git in Python&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://robots.thoughtbot.com/rebuilding-git-in-ruby"&gt;Ruby&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Lua: The Modular Language You Already Know</title>
      <dc:creator>Patrick Henry</dc:creator>
      <pubDate>Mon, 10 Jun 2024 06:02:01 +0000</pubDate>
      <link>https://dev.to/hackman78/lua-the-modular-language-you-already-know-4gop</link>
      <guid>https://dev.to/hackman78/lua-the-modular-language-you-already-know-4gop</guid>
      <description>&lt;h2&gt;
  
  
  What is Lua?
&lt;/h2&gt;

&lt;p&gt;Lua is a programming language that was invented in Brazil in 1993. It is a scripting language known for it's speed and efficiency. It was created as an in-house solution for a data-entry application. It was needed to prepare input data files for simulations regularly throughout the day.&lt;/p&gt;

&lt;p&gt;Lua was originally a slow language and was request to update it's demands on the computer. It was originally loved despite all of it's current issues. So the developers decided to get to work on improving Lua for the computer. It was a very unique language that looked alot like SQL and at the time it was still very nice and easy to work with for that time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Early Lua Code To Create a Table(i.e. Javascript Array)&lt;/span&gt;
  &lt;span class="n"&gt;CREATETABLE&lt;/span&gt;
   &lt;span class="n"&gt;PUSHNUMBER&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;                 &lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;
   &lt;span class="n"&gt;PUSHNUMBER&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;                &lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
   &lt;span class="n"&gt;SETTABLE&lt;/span&gt;
   &lt;span class="n"&gt;PUSHNUMBER&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;                 &lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;
   &lt;span class="n"&gt;PUSHNUMBER&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;                &lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
   &lt;span class="n"&gt;SETTABLE&lt;/span&gt;
   &lt;span class="n"&gt;PUSHNUMBER&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;                 &lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;
   &lt;span class="n"&gt;PUSHNUMBER&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;                &lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
   &lt;span class="n"&gt;SETTABLE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Lua Version 2
&lt;/h2&gt;

&lt;p&gt;Lua 2 came out in February of 1995. This is when they made several quality of life changes. This is when Lua made a bold decision that isn't made a lot of other programming languages. They decided that if the team wanted to implement feaetures it was exceptable to have some incompatibilites with earlier versions of Lua. This can be a very bad thing for production code because it can really stop large portions of a companies data entry. Lua decided to go this route while also understanding the risks that they would be taking by doing this.&lt;/p&gt;

&lt;p&gt;They had an idea to also also proviide some tools to convert old code to new versions. This allowed companies to use the tools to update their code and they were able to use the new features.&lt;/p&gt;

&lt;p&gt;Lua also did really well by understanding where they stood in the programming language landscape.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Since the beginning, we designed Lua as an extension language, in the sense that C programs can register their own functions to be called from Lua transparently. In this way, it is easy to extend Lua with domain-specific primitives, so that the end user uses a language tailored to her needs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a quote from Lua's &lt;a href="https://www.lua.org/history.html#10"&gt;website&lt;/a&gt;. They state here that Lua is so that when writing C programs the programmer has access to write functions how they see fit. With this mentatality they decided to also implement a feature in 2.1 called fallbacks which is used when a Lua function doesn't know what to do it falls back onto a predefined function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Index&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"parent"&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;       &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;avoid&lt;/span&gt; &lt;span class="n"&gt;loop&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;
     &lt;span class="k"&gt;end&lt;/span&gt;
     &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parent&lt;/span&gt;
     &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"table"&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;               &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;may&lt;/span&gt; &lt;span class="n"&gt;trigger&lt;/span&gt; &lt;span class="n"&gt;Index&lt;/span&gt; &lt;span class="n"&gt;again&lt;/span&gt;
     &lt;span class="k"&gt;else&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;
     &lt;span class="k"&gt;end&lt;/span&gt;
   &lt;span class="k"&gt;end&lt;/span&gt;

   &lt;span class="n"&gt;setfallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"index"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;-- This code follows a chain of "parents" upwards, until a table has the required field or&lt;/span&gt;
&lt;span class="c1"&gt;-- the chain ends. With the "index" fallback set as above, the code below prints red even&lt;/span&gt;
&lt;span class="c1"&gt;-- though b does not have a color field:&lt;/span&gt;

   &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Window&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"red"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Window&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Lua's exposure
&lt;/h2&gt;

&lt;p&gt;Lua laid low on the scene until 1997 when they got some publicity with articles such as 'Lua in Software: Practice &amp;amp; Experience', Getting posted in academic journals got the attention of some developers such as Bret Mogilefsky who wanted to replace the arcaic scripting language that he used in some of the LucasArts Games (yes, Star Wars company).&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a scripting language and why do you need one.
&lt;/h2&gt;

&lt;p&gt;A scripting language is any programming language that is used to automate manual processes. The most common example that is used by all programmers today is Bash, Zsh, etc. All shell languages that can be used to automate processes that you do everyday. Most higher-level languages are known as scripting languages. Such as Javascript, Lua, Python, Bash, and Ruby.&lt;/p&gt;

&lt;p&gt;These are called higher-level because they deal with more abstraction and are typically used to extend functionality of other functions that may have to do with system architecture. They&lt;br&gt;
are also typically interpreted and used to be short and sweet. This is not always the case like Javascript which has had so much attention that it has been used to create &lt;strong&gt;EVERYTHING!!!&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Lua Extension
&lt;/h2&gt;

&lt;p&gt;So Lua was very useful to be able to extend C and is used everyday even now with companies like Roblox allowing it's users to code games in Lua because of how well it can be implemented with C. C and Lua can actually run in the same file in the current version of Lua.&lt;/p&gt;
&lt;h2&gt;
  
  
  Data Structures
&lt;/h2&gt;

&lt;p&gt;Lua has one Data Structure. A table (that starts at the one index :s ). It is essentially a glorified array, but has some extra features. You can give indexes key value pairs and access them using that key value pair. There are also only two value types. A global and a local variable. A global variable is a variable that is able to be used by all of the other functions and tables in a project. A local variable is only available to the values inside of a code block.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;   &lt;span class="n"&gt;globalVar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s1"&gt;'Lua can has integers, strings, functions, and booleans!'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="s1"&gt;'this is how to create a function'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
           &lt;span class="c1"&gt;-- this is a comment&lt;/span&gt;
           &lt;span class="c1"&gt;-- print is basically console log&lt;/span&gt;
           &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'imma func'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
       &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="n"&gt;patrickTired&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
   &lt;span class="c1"&gt;-- i will put this local var inside of a if statement and it is not availible outside&lt;/span&gt;
   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;patrickTired&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
   &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;localVar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'this val can\'&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;acccesed&lt;/span&gt; &lt;span class="n"&gt;outside&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="s1"&gt;'
   elseif patrickTired == false then
       print('&lt;/span&gt;&lt;span class="n"&gt;let&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s1"&gt;'s have some more fun'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;-- you need end to end the if else chain&lt;/span&gt;
   &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a small code example to get the basic idea. If you want  a bit of a bigger file to play around yourself or ever want to learn about a new language you can use &lt;a href="https://learnxinyminutes.com/"&gt;LearnXinYMinutes&lt;/a&gt; which is a great starting point to learn any language you desire.&lt;br&gt;
LearnXinYMinutes for &lt;a href="https://learnxinyminutes.com/docs/lua/"&gt;Lua&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Lua is a great language that can be used to embed functionality in to many programs. It is fast and easy to learn. I Learned it in a couple ours(Because NeoVim). It is not the most useful language in the world but i still think that it is worth it even if it is just to be able to put on you resume.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Essential Zsh Config for Beginners</title>
      <dc:creator>Patrick Henry</dc:creator>
      <pubDate>Mon, 27 May 2024 03:07:43 +0000</pubDate>
      <link>https://dev.to/hackman78/the-essential-zsh-config-for-beginners-o40</link>
      <guid>https://dev.to/hackman78/the-essential-zsh-config-for-beginners-o40</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The shell is an important tool to learning how to configure your computer because it is what controls how you interact with your computer at a fundemental level.&lt;br&gt;
The shell is what you interact with every time you enter a terminal session so it is important to have a base level understanding so that you can become more productive.&lt;br&gt;
I think that learning some basic commands, customizing your shell for what you need and not being afraid to break your system all are apart of sorftware engineering.&lt;br&gt;
I personally have messed some things up on my computer, but gaining problem-solving skills and going through a bootcamp has given me the tools and confidence to know that I can fix any of the problems at hand. So i wanted to give a simple configuration to jumstart you to a beetter quality of life config that should work for everybody.&lt;br&gt;
There are three simple plugins I recommend plus giving youself a theme to look at and some simple aliases to add to your configuration and thats all you need with no panic&lt;/p&gt;
&lt;h2&gt;
  
  
  Basic Setup
&lt;/h2&gt;

&lt;p&gt;To start off I personally work with node alot and need this line so I just added it to the top of the file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] &amp;amp;&amp;amp; \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] &amp;amp;&amp;amp; \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is to load NVM to your terminal everytime your terminal starts up. If you ever have a message that nvm doesn't exist when you run the command this with make it availble to you&lt;/p&gt;

&lt;h3&gt;
  
  
  Homebrew
&lt;/h3&gt;

&lt;p&gt;Next this is for Macos users to load homebrew into their terminal you can use this code snippet&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if [[ -f "/opt/homebrew/bin/brew" ]] then
  # If you're using macOS, you'll want this enabled
  eval "$(/opt/homebrew/bin/brew shellenv)"
fi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;HomeBrew is a package manager to install any programs write from your terminal it is really useful and is essential for any developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Zsh Package Manager
&lt;/h3&gt;

&lt;p&gt;Next we need to load a zsh package manager so that we can load the essential things needed so that we can customize our terminal. There are many package managers you can use and their is a big debate about all of them, I personally use Zinit, but their are plenty you can use like oh-my-zsh, zplug, etc.&lt;br&gt;
All of these are just fine to use with different problems with each, I use zinit because it is very lightweight and allows my terminal to startup fairly quickly.&lt;br&gt;
To startup with zinit you will need to add these lines&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Set the directory we want to store zinit and plugins
ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git"

# Source/Load zinit
source "${ZINIT_HOME}/zinit.zsh"

# Download Zinit, if it's not there yet
if [ ! -d "$ZINIT_HOME" ]; then
   mkdir -p "$(dirname $ZINIT_HOME)"
   git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
fi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Core Plugins
&lt;/h2&gt;

&lt;p&gt;Next I setup some of the core plugins that i think have really helped me the most.&lt;br&gt;
Those would be zsh-syntax-highling, zsh-completions, and zsh-autosuggestions. These three allow me to really know what I'm doing in my terminal and allows me to see old commands that i have run and just re-execute better that using my up arrow in the terminal.&lt;/p&gt;
&lt;h3&gt;
  
  
  Zsh-Syntax-Highlighting
&lt;/h3&gt;

&lt;p&gt;It is really a cool plugin it highlights commands when they are actuall commands underlines files when they exist in your current directory and just lets you know when you are actually doing the right thing. This kind of thing is important for a beginner because when you are only looking at a default terminal it is really hard to know what/if you are doing the right thing.&lt;/p&gt;
&lt;h3&gt;
  
  
  Zsh-Completions
&lt;/h3&gt;

&lt;p&gt;This plugin is really nice because it allows the terminal to complete command for you so that you don't have to type your whole command out. This plugin ties in really well with zsh-autosuggestions to really allow you to see all that you are doing in the terminal.&lt;/p&gt;
&lt;h3&gt;
  
  
  Zsh-autosuggestions
&lt;/h3&gt;

&lt;p&gt;It will read your terminal history and suggest commands to you based on your zsh history and allow you to complete &lt;code&gt;npm start&lt;/code&gt;, &lt;code&gt;npm run build&lt;/code&gt;, &lt;code&gt;npm test&lt;/code&gt;. These may seem simple but when your lazy like me its a big deal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zinit light zsh-users/zsh-syntax-highlighting
zinit light zsh-users/zsh-completions
zinit light zsh-users/zsh-syntax-highlighting

# Add in snippets
zinit snippet OMZP::git

# Load completions
autoload -Uz compinit &amp;amp;&amp;amp; compinit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Themes
&lt;/h2&gt;

&lt;p&gt;I personally suggest using powerlevel 10k as it has alot of options but their are many terminals online and it  is very hard to cover all of the options out their so i will show how to install powerlevel 10k but it is really up to you on what you like. To install use&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Add in Powerlevel10k
zinit ice depth=1; zinit light romkatv/powerlevel10k
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and when you get into the terminal and type &lt;code&gt;p10k configure&lt;/code&gt; into your terminal and execute and it will show prompts to guide you to configure your promt how you like it. You may also have to install a nerd font to get this working properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aliases
&lt;/h2&gt;

&lt;p&gt;These steps are optional but i suggest them for a better expierence. I suggest adding these because the allow you to shorten your syntax when doing anything in your terminal. I like shortening things if you haven't noticed&lt;/p&gt;

&lt;p&gt;I also suggest if you use ls to install eza as it gives you a nicer looking ls command with highlighting so you can see clearly which are files vs directories and so on.&lt;br&gt;
to install eza it is &lt;code&gt;brew install eza&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Everyday Aliases
alias ls="eza --icons=always"
alias cl='clear'

## Git Aliases
alias gad='git add'
alias gst='git status'
alias gl='git pull'
alias gp='git push'
alias gc='git commit -v'
## Very Nice looking git log graph, imo
alias glol="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)&amp;lt;%an&amp;gt;%Creset'"

## Zsh Config Aliases [If you ever want to reconfigure this file use these]
alias zconfig="c ~/.config/zsh/.zshrc"
alias rezsh="source $ZSH_HOME"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Don't be intimidated by these steps. Diving into new thing that may seem daunting at first is part of programming but seeing others do it, and realizing the benefits will make it worth it. I know most of you will be like no that's too much I don't want that. It's fine everybody is on their own journey but i promise it is well worth it when you make the jump.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Unpacking the Redis Licensing Controversy: A Critical Examination of Open Source Values</title>
      <dc:creator>Patrick Henry</dc:creator>
      <pubDate>Mon, 22 Apr 2024 14:12:40 +0000</pubDate>
      <link>https://dev.to/hackman78/unpacking-the-redis-licensing-controversy-a-critical-examination-of-open-source-values-423e</link>
      <guid>https://dev.to/hackman78/unpacking-the-redis-licensing-controversy-a-critical-examination-of-open-source-values-423e</guid>
      <description>&lt;p&gt;Redis, a powerful in-memory data structure store known for its speed and versatility, has long been a cornerstone of the open-source community. Its ability to handle various data types with lightning-fast performance has made it a favorite among developers worldwide. However, recent developments in its licensing strategy have sparked intense debate and raised significant questions about the future of the project and the principles of open source.&lt;/p&gt;

&lt;p&gt;At the heart of the controversy are two new licenses: the Server Side Public License (SSPL) and the Redis Source Available License (RSAL) 2.0. These licenses, introduced by the creators of MongoDB and Redis Labs, respectively, aim to address concerns about the commercial use of open-source software. The SSPL, in particular, requires users to release the source code for entire services if they incorporate SSPL-licensed software as part of those services. This move has been met with skepticism and criticism, with some labeling it as a "viral license bomb" that could have far-reaching implications for the open-source ecosystem.&lt;/p&gt;

&lt;p&gt;The licensing changes have also raised questions about the motivations behind them. Some speculate that pressure from investors seeking returns on their investment may have influenced Redis Labs' decision to introduce the new licenses. This has led to concerns about the role of major players like AWS and Alibaba, who may stand to benefit from the changes at the expense of smaller users and contributors.&lt;/p&gt;

&lt;p&gt;The controversy has been further fueled by the departure of key contributors, including the co-founder of Redis, from their roles within the project. This has led to speculation about internal tensions and disagreements over the direction of the project. Amidst these developments, there have been calls for transparency and accountability from Redis Labs' leadership, with critics urging them to reconsider their approach and engage with the community more openly.&lt;/p&gt;

&lt;p&gt;The licensing changes have reignited debates about the values of open source and the balance between commercial interests and community collaboration. Many within the open-source community see Redis as a symbol of the principles of openness, transparency, and collective innovation. However, the recent developments have cast doubt on whether these values can be upheld in an increasingly commercialized landscape.&lt;/p&gt;

&lt;p&gt;Despite the uncertainty surrounding its future, Redis remains a powerful tool for developers seeking high-performance data storage solutions. Its ease of use, scalability, and rich feature set make it an attractive option for a wide range of use cases, from caching and session management to real-time analytics and messaging.&lt;/p&gt;

&lt;p&gt;As the debate over its licensing continues to unfold, it is clear that Redis occupies a central position in the ongoing conversation about the future of open source. Whether it can navigate the challenges posed by commercial pressures while staying true to its roots remains to be seen. In the meantime, developers and users alike will be closely watching to see how the situation evolves and what it means for the broader open-source community.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The XZ Utils Backdoor: A Cautionary Tail with High Stakes</title>
      <dc:creator>Patrick Henry</dc:creator>
      <pubDate>Mon, 15 Apr 2024 03:22:45 +0000</pubDate>
      <link>https://dev.to/hackman78/the-xz-utils-backdoor-a-cautionary-tail-with-high-stakes-2929</link>
      <guid>https://dev.to/hackman78/the-xz-utils-backdoor-a-cautionary-tail-with-high-stakes-2929</guid>
      <description>&lt;h2&gt;
  
  
  What is a Supply Chain Attack
&lt;/h2&gt;

&lt;p&gt;We've all seen the movies where we see a hacker in a dark room who hacking away at a mainframe(what even is a "mainframe"). It's the troupe that prevails to this day. And that is why hackers aren't that. Those are the people that we watch out most for. Now attacks are becoming more sophisticated. The XZ Utils Backdoor is a prime example of the other attacks. &lt;/p&gt;

&lt;h2&gt;
  
  
  First What is XZ Utils....
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;"It is an Open-Source Compression library used in many Linux Distributions that allows for XZ Utils can compress and decompress the xz and lzma file formats. Since the LZMA format has been considered legacy,[2] XZ Utils by default compresses to xz. --Wikipedia&lt;/li&gt;
&lt;li&gt;In most cases, xz achieves higher compression rates than alternatives like gzip and bzip2. Decompression speed is higher than bzip2, but lower than gzip. Compression can be much slower than gzip, and is slower than bzip2 for high levels of compression, and is most useful when a compressed file will be used many times. " -- Wikipedia 
Used to compress certain file formats, highly efficient, GitHub repo included into Linux distros and favored for how small files can be compressed into. It is run by a solo developer like many open-source projects. It is often that utilities like this are maintained by one person. It is cool that the open-source community can have individual people run full projects like this. But, don't get it twisted it is HARD WORK. Especially when so many rely on this technology. You want to fight to implement new features and like how the reality of software is. SOMETHING WILL BREAK... Always. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the maintainer( Lassie Collin) of XZ Utils wanting to produce a good project worked on this outside of his regular job(we assume this because you don't get paid for maintaining projects like this). So you can imagine the amount of work it is and working this hard can lead to burnout. So in comes the hacker. He started getting involved in 2022 and was a truly helpful developer to solve bugs, implement new features, etc. The Hacker(Jia Tan) worked hard to help out and it seemed to gain the maintainer's trust. It seems the Hacker was more sophisticated in the Hacking than we've seen before as some people online started complaining that features were not being updated as the maintainer "no longer cared about the project." This caused Lassie Colling to respond and in the thread, it gets quite said as the maintainer is berated and Lassie tries to de-escalate the situation, at the same time mentioning that Jia Tan has been helping and maybe helping more in the later future. Some suspect that this was the Hacker making issues to burn out Lassie Colling.  It works... Jia Tan is made a co-maintainer and soon helping out a lot with the project. &lt;/p&gt;

&lt;p&gt;It seems Jia was still patient in the hack as he slowly disables ifunc(07-08-2022) which helps with finding malicious changes. Then in March of 2024, Jia gets ready to release the backdoor as he puts a binary backdoor into the testfiles of xz utils. This change affects 5.6 and 5.6.1. of XZ utils. This attack was only used when a computer used when SSH was used. The hacker wanted to hide these files as it was pushed to dev as binary and also git ignored from the src. The backdoor wasn't in for more than a month when a Microsoft engineer and gotten rid of it. He looked into it when he noticed his SSH connections were taking significantly more CPU resources than usual and he looked it. &lt;/p&gt;

&lt;h2&gt;
  
  
  How did the backdoor work
&lt;/h2&gt;

&lt;p&gt;Well, it is a wonder how can a compression library take over SSH and that is answered by the fact that individual distributions of software can ask for a dependency like xz utils, and xz utils in turn has access to systemd which is something that contains a lot of information about your computer. According to Wired the backdoor, 'allows someone with the right private key to hijack sshd, the executable file responsible for making SSH connections, and from there to execute malicious commands. The backdoor is implemented through a five-stage loader that uses a series of simple but clever techniques to hide itself. It also provides the means for new payloads to be delivered without major changes being required.' &lt;/p&gt;

&lt;p&gt;This exploit is so sophisticated on the coding and social engineering side that it is thought that it could be a malicious state action or even a threat actor ransomware software. This threat needs to be taken seriously because we got lucky that software like this ran undetected and possibly could have for a long time. allows someone with the right private key to hijack sshd, the executable file responsible for making SSH connections, and from there to execute malicious commands. The backdoor is implemented through a five-stage loader that uses a series of simple but clever techniques to hide itself. It also provides the means for new payloads to be delivered without major changes being required.&lt;/p&gt;

&lt;p&gt;The threat actors started contributing to the XZ project almost two years ago, slowly building credibility until they were given maintainer responsibilities. Such long-term operations are usually the realm of state-sponsored threat actors, but specific attribution does not currently exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  In conclusion
&lt;/h2&gt;

&lt;p&gt;The XZ Utils backdoor incident underscores a critical vulnerability in the open-source software ecosystem: reliance on small, often solo, development teams for widely used utilities can lead to significant security risks. This particular case illustrates how a well-integrated hacker can exploit trust and goodwill within the community to execute a sophisticated supply chain attack. By gaining the trust of the main maintainer and gradually increasing their involvement, the hacker managed to embed a malicious backdoor in a critical compression tool, compromising numerous systems through its SSH functionalities.&lt;/p&gt;

&lt;p&gt;The sophistication and patience of the attack suggest possible state sponsorship or a highly organized criminal entity aiming for long-term infiltration rather than immediate gain. This incident serves as a stark reminder of the need for rigorous security practices in software development and maintenance, including regular code audits, diversified maintainer teams, and heightened scrutiny of contributions to critical infrastructure components. As reliance on open-source software continues to grow, the community must strengthen its defenses against such insidious threats to prevent exploitation of its foundational elements.&lt;/p&gt;

&lt;p&gt;In light of these revelations, organizations and individuals alike should reevaluate their security strategies, particularly around the integration and updating of open-source software, to safeguard against similar vulnerabilities in the future.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.techrepublic.com/article/xz-backdoor-linux/"&gt;https://www.techrepublic.com/article/xz-backdoor-linux/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.akamai.com/blog/security-research/critical-linux-backdoor-xz-utils-discovered-what-to-know"&gt;https://www.akamai.com/blog/security-research/critical-linux-backdoor-xz-utils-discovered-what-to-know&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=0pT-dWpmwhA&amp;amp;pp=ygUHdGhlbyB4eg%3D%3D"&gt;https://www.youtube.com/watch?v=0pT-dWpmwhA&amp;amp;pp=ygUHdGhlbyB4eg%3D%3D&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=jqjtNDtbDNI&amp;amp;pp=ygUMeHogcHJpbWVnZWFuhttps://www.youtube.com/watch?v=vV_WdTBbww4&amp;amp;pp=ygUMeHogcHJpbWVnZWFu"&gt;https://www.youtube.com/watch?v=jqjtNDtbDNI&amp;amp;pp=ygUMeHogcHJpbWVnZWFuhttps://www.youtube.com/watch?v=vV_WdTBbww4&amp;amp;pp=ygUMeHogcHJpbWVnZWFu&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=LaRKIwpGPTU&amp;amp;t=3238s&amp;amp;pp=ygUMeHogcHJpbWVnZWFu"&gt;https://www.youtube.com/watch?v=LaRKIwpGPTU&amp;amp;t=3238s&amp;amp;pp=ygUMeHogcHJpbWVnZWFu&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=H_XNSDneR5g&amp;amp;pp=ygUWeHogcHJpbWVnZWFuIGxvdyBsZXZlbA%3D%3D"&gt;https://www.youtube.com/watch?v=H_XNSDneR5g&amp;amp;pp=ygUWeHogcHJpbWVnZWFuIGxvdyBsZXZlbA%3D%3D&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My Company Stack</title>
      <dc:creator>Patrick Henry</dc:creator>
      <pubDate>Mon, 08 Apr 2024 13:53:57 +0000</pubDate>
      <link>https://dev.to/hackman78/my-company-stack-oo5</link>
      <guid>https://dev.to/hackman78/my-company-stack-oo5</guid>
      <description>&lt;h2&gt;
  
  
  The Tech and Culture Chronicles: A Comparative Analysis of Google, Netflix, and Amazon
&lt;/h2&gt;

&lt;p&gt;In the dynamic landscape of technology giants, few companies have shaped the digital world as profoundly as Google, Netflix, and Amazon. These titans not only dominate their respective sectors but also stand out for their unique tech stacks and corporate cultures. Let's delve into the intricacies of their technology stacks, explore the ethos of their cultures, and discern the similarities and differences between these industry juggernauts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google: The Innovator's Haven
&lt;/h2&gt;

&lt;p&gt;Google's tech stack lies in an array of programming languages and frameworks, allowing it to innovate and pivot with the whims of the tech world. Python, Java, and Golang power many of Google's products, from their state-of-the-art search engine to Android applications. AngularJS and Dart facilitate web development as front-end frameworks allowing for precise control of web and mobile apps alike, while C++ remains integral for performance-critical tasks. Google's Material Design philosophy ensures a consistent user experience across platforms again speaks to how cohesive Google products feel to use, underpinned by technologies like LevelDB and Preact as their react framework for some implementations.&lt;/p&gt;

&lt;p&gt;Google's culture fosters a spirit of curiosity and exploration, epitomized by its famous "20% time" policy, encouraging employees to dedicate a portion of their work hours to personal projects. This emphasis on autonomy and creativity fuels a culture of innovation, where bold ideas are not just encouraged but expected. I love the idea of also being able to work on personal projects as a part of your time working for a company. I think that if you only professionally interact with code it can lead to burnout as you can lose sight of where and how you came to love coding in the first place. &lt;/p&gt;

&lt;h2&gt;
  
  
  Netflix: The Streaming Pioneer
&lt;/h2&gt;

&lt;p&gt;Netflix revolutionized the entertainment industry with its on-demand streaming platform, powered by a tech stack optimized for scalability and performance. Python and Node.js form Netflix's backend services, while React dominates front-end development. Java, MySQL, and PostgreSQL handle data storage and processing, complemented by cloud services like Amazon S3 and EC2. I think that I can thrive here later on when I have some more years under my belt because they hire engineers who can be senior engineers anywhere. This is why they pay so much, but I also like the level of autonomy they give their engineers. &lt;/p&gt;

&lt;p&gt;Netflix's culture prioritizes freedom and responsibility, granting employees autonomy to make decisions and take calculated risks. The company's famous "Freedom and Responsibility" culture encourages employees to act in the best interest of the company without excessive oversight, fostering a culture of trust and accountability. I love that Netflix allows for more autonomy because a lot of the time you can really create an MVP from your head and sometimes it can get convoluted. I think input on an idea always helps, but it also leads you down a path that you aren't sure where to go sometimes. &lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon: The E-Commerce Behemoth
&lt;/h2&gt;

&lt;p&gt;Amazon's tech stack is as vast and diverse as its sprawling e-commerce empire, encompassing a multitude of languages, frameworks, and cloud services. Java(programming language), MySQL(database), and AngularJS(framework) are pillars of Amazon's infrastructure, supported by cloud services like Amazon S3, EC2, and RDS. React powers Amazon's web interfaces, while DynamoDB and Redshift handle massive-scale data storage and analytics. I think that looking at all of Amazon's tech stack I would like to work with these technologies... except angular. I wish that Amazon had more of an emphasis on design because a lot of their websites are not cohesive or they just have a terrible UX/UI feel and experience. They are more than a big enough company to fix these issues&lt;/p&gt;

&lt;p&gt;Amazon's culture is famously customer-centric, prioritizing long-term thinking and relentless optimization. The company's leadership principles, codified in its "Day 1" philosophy, emphasize customer obsession, innovation, and operational excellence, driving a culture of continuous improvement and customer-focused innovation. I like how they focus on the customer, but I don't think they follow through on this ideal as they think they are. Amazon the website feels cohesive, but I think many improvements can be made, more than other faang websites, I think they expand more than they worry about feel, with an emphasis on features rather than functionality. &lt;/p&gt;

&lt;h2&gt;
  
  
  Comparative Analysis
&lt;/h2&gt;

&lt;p&gt;While Google, Netflix, and Amazon each possess unique tech stacks and corporate cultures, they share common threads of innovation, scalability, and customer-centricity. Python and Java emerge as ubiquitous languages across all three companies, reflecting their versatility and industry-wide adoption. React also features prominently, underscoring its dominance in modern web development.&lt;/p&gt;

&lt;p&gt;Culturally, Google's emphasis on experimentation and creativity contrasts with Amazon's relentless focus on customer obsession and operational excellence. Netflix occupies a middle ground, championing autonomy and innovation within a framework of responsibility and accountability.&lt;/p&gt;

&lt;p&gt;In conclusion, while Google, Netflix, and Amazon differ in their approaches to technology and culture, they all exemplify the transformative power of innovation, adaptability, and customer-centricity in the digital age. As pillars of the tech industry, they continue to shape the future of technology and redefine the boundaries of possibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sources
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.comparably.com/blog/study-faang-culture-showdown/"&gt;https://www.comparably.com/blog/study-faang-culture-showdown/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackshare.io/amazon/amazon"&gt;https://stackshare.io/amazon/amazon&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackshare.io/netflix/netflix"&gt;https://stackshare.io/netflix/netflix&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackshare.io/google/google"&gt;https://stackshare.io/google/google&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What is this Difference between Game Development and Web Development</title>
      <dc:creator>Patrick Henry</dc:creator>
      <pubDate>Mon, 26 Feb 2024 14:55:07 +0000</pubDate>
      <link>https://dev.to/hackman78/what-is-this-difference-between-game-development-and-web-development-1g2p</link>
      <guid>https://dev.to/hackman78/what-is-this-difference-between-game-development-and-web-development-1g2p</guid>
      <description>&lt;h1&gt;
  
  
  What is Game Development
&lt;/h1&gt;

&lt;p&gt;Game Development is a section of the tech sector for creating Triple AAA games, indie games, and even games on the web. It has its distinction because game development is so vast there are the same principles between all programming, but the intricacies between all the different types of development require someone who is trained to make games vs websites. Typically made with C++ or other lower-level languages. Games are also really hard to make without some of the libraries that most games are made with. Such as Unity, Unreal Engine, and many other libraries. These are important systems that take a lot of the complexity out of finding algorithms that will render the proper shading, or render characters correctly. These functions need to be very effective in their processes because they really can slow a game down and make it not fun to play if it is too inefficient. &lt;/p&gt;

&lt;h1&gt;
  
  
  What is Web Development
&lt;/h1&gt;

&lt;p&gt;Web Development is creating anything that can be opened and used on the World Wide Web in your browser. It is such a vast field because of how quintessential the internet has become since its inception. If you search any term up on the internet billions of results come up when that happens. Who do you think coded all of those websites? It has millions and millions of pages on the World Wide Web. When you learn javascript you gain access to all of this technology to be able to make anything online and spread whatever information you want. &lt;/p&gt;

&lt;h1&gt;
  
  
  How to get into Game Development?
&lt;/h1&gt;

&lt;p&gt;Game Development is really hard to get into without a really good education there are bootcamps out there online, but sometimes it can be hard to find a bootcamp that is reliable.&lt;br&gt;
You are learning a much more difficult language, whether it be C#, C++, or Java. These are all much harder than Javascript and it is not recommended to start with low-level languages as your first language. &lt;/p&gt;

&lt;h1&gt;
  
  
  How to get into Web Development?
&lt;/h1&gt;

&lt;p&gt;It is a little easier to get into Web Development as you can get most places in Web Development with just Javascript. It is not the best to try and do back-end development with JavaScript as it is just a slower language in general. Some good back-end languages are, Ruby on Rails, Php, Go, Rust, and many other languages. You can use just about any language for a back-end of an application because the client doesn't need to read the backend and Javascript can interact with any server that is needed to interact with. &lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;Would I suggest getting into Game Development? Yes, I would if you think that you would have a passion for making games over Web Development. I think this because to get anywhere in  Tech you need to have the drive to learn new things daily. This is unique to the tech sector because it moves so damn fast all the time. There is no time to not learn. New better things are coming out all the time and there will always be someone to learn it. If you get too lazy and lag too much then someone will be there to take your place. So I suggest whatever you do, that you find your niche and specialize. It is great to have a specialist on any team and provide something that others can not necessarily provide. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Advanced Command-Line Tools: The Transition to becoming a power user</title>
      <dc:creator>Patrick Henry</dc:creator>
      <pubDate>Mon, 19 Feb 2024 06:16:01 +0000</pubDate>
      <link>https://dev.to/hackman78/advanced-commad-line-tools-the-transition-to-becoming-a-power-user-408f</link>
      <guid>https://dev.to/hackman78/advanced-commad-line-tools-the-transition-to-becoming-a-power-user-408f</guid>
      <description>&lt;h2&gt;
  
  
  Utility Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  awk
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;awk is a Data-Driven scripting language. It is used for data extraction and other string-based processing use Cases. It can be chained together with many other programs to create a killer workflow with a pipe operator and other command-line tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  fzf
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Stands for Fuzzy Finder is a command like find that allows you to find any file without having to find the exact file that you are looking for. It runs in Rust which is seen as a great programming language, but it is super complicated. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  rip grep
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Rip grep is a search tool that searches to find any string you give to it to be able to recursively search your entire directory for any string in any files. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  the f*ck
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The f*ck is a cool command-line tool that allows you to immediately fix the command that you accidentally mistyped and fixes your command by you typing 'fuck' when you mess up and it can be set to immediately fix a command that is mistyped which can also come really in handy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  jq
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;jq is an awesome tool to process JSON objects in the terminal without having to bring it into a separate program. Allowing you to search for certain keys, properties, prettier layouts and many other perks that you could use to make your life easier&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  tldr
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;tldr is a program that allows the latest git changes to be summarized for you. It is not actual bots writing the summary of the code written, but more so because it is super hard to find all the changes and show how they interact with the existing code. tldr shows all of the lines change and you can just look at the tldr to be able to extrapolate what code is useful or not. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  zoxide
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;zoxide is a better cd command that allows your terminal to remember what directories you use the most and allows you to keep those on 'speed dial' allowing you to speed up navigation and being able to start coding. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Productivity Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  khal
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;khal is a terminal-based calendar application and can synchronize many other calendar applications such as Google Calendar and iCloud. It is nice to be able to handle and import events from your terminal and to have to only navigate with the overhead of having to use a mouse. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  cmus
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;small yet powerful console-based music player available on UNIX base systems. It accepts the most widely available music files. and allows for shuffling, playlists, streaming, and more. It can live filter through your playlists quickly. Instant startup even with thousands of songs. Can navigate through files with vim bindings. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  browsh
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;browsh dubs itself as a fully modern text-based browser. allows you to render anything a modern browser can. allows you to search the internet on a remote ssh server. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  taskwarrior
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;taskwarrior is a free and open-source program that allows you to manage your TODO list from your terminal. It is lightning-fast and allows you to navigate quickly and be able to use it very quickly. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  tuir
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;a text-based interface for Reddit. Allowing you. to fully use Reddit from the terminal. Why? I don't know but it's cool. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  lazygit
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;a terminal UI for git commands. This allows you to discern what rebates and merges are correct. One-line commands are used to add commit and push allowing for a super-fast workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  dstask
&lt;/h3&gt;

&lt;p&gt;Another terminal-based personal tracker and TODO list. This app also allows you to use git to sync lists and to keep your devices up to date. allows for git sync without having to set up your server. &lt;/p&gt;

&lt;h2&gt;
  
  
  Extra Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  navi
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Allows you to navigate through man pages of all your current command line tools and allows you to find what function you need. It also allows you to fzf through all of the commands on the system and find the appropriate line. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  transfer.sh
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Easy file sharing from the command line. It is like a drop box from the command line allowing you to just curl a proper link and receive everything that the sender wanted you to have straight from your system. It is easier than having to open up your email uploading and sending the appropriate files. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  neofetch
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Neofetch is a command-line system information tool written in bash 3.2+. Neofetch displays information about your operating system, software, and hardware in an aesthetic and visually pleasing way.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The overall purpose of Neofetch is to be used in screen-shots of your system. Neofetch shows the information other people want to see. There are other tools available for proper system statistics/diagnostics.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/lissy93/cli-tools-you-cant-live-without-57f6"&gt;https://dev.to/lissy93/cli-tools-you-cant-live-without-57f6&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What is Vim?</title>
      <dc:creator>Patrick Henry</dc:creator>
      <pubDate>Mon, 05 Feb 2024 06:16:05 +0000</pubDate>
      <link>https://dev.to/hackman78/what-is-vim-56gc</link>
      <guid>https://dev.to/hackman78/what-is-vim-56gc</guid>
      <description>&lt;h2&gt;
  
  
  What is Vim?
&lt;/h2&gt;

&lt;p&gt;Vim, short for "Vi Improved," and created by Bram Moolenaar is an amazing stand-out tool in the world of command-line editors. Vim contains features such as syntax highlighting and support for plugins and is also widely available on most UNIX-based systems, Vim represents a great choice for developers seeking a powerful editing environment. In the lineup of obscure and comparatively hard-to-use command-line editors(Nano, Helix, Vim), Vim is more well-known than the rest. &lt;/p&gt;

&lt;h3&gt;
  
  
  Why Vim?
&lt;/h3&gt;

&lt;p&gt;Vim is a tool renowned for its efficiency, speed, and mastery of keyboard shortcuts. Operating as a modal editor(insert, normal, visual). This means that Vim has different modes where you have different keyboard shortcuts based on what mode you are in. Normal mode allows you to traverse the text quicker than any other method allowing you to use [j, k, l,;, w, e, b, t, f, ...etc] as means to traverse your code, allowing your hands to stay on the home row and at the ready to enter insert mode. Insert mode tends to be the most recognizable mode to new Vim users as it has any features a normal text editor like VsCode would have allowing you to enter text. Visual mode is the last mode that Vim has that allows the user to highlight text swiftly and copy and paste with [y, c, p, ...etc] to be able to insert and take code out fast without having to use the mouse which can feel very clunky, especially for those who can touch type, which most developers can. However, its setup requires a hands-on approach, with users needing to manually install and configure plugins, in contrast to more user-friendly alternatives like VSCode.&lt;/p&gt;




&lt;h2&gt;
  
  
  Community and Plugins
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Core Plugins
&lt;/h3&gt;

&lt;p&gt;NeoVim ships with a selection of core plugins, providing essential features right out of the box. From text editing utilities to version control integration, these core plugins enhance Vim's functionality and usability, laying a solid foundation for users to build upon and customize. While Vim comes out of the box with plenty of plugins out of the box that can be configured, you would be foolish to think that you could hop into Vim and be right at home. Vim is known to have a steep learning curve not only because of the shortcuts, and not knowing how to leave Vim but also because &lt;strong&gt;YOU HAVE TO CODE YOUR EDITOR&lt;/strong&gt;, meaning that you have to make sure that all of your plugins work and play well together, use a plugin manager and figure out how to install it. Expert Vimmers sometimes spend hours and days configuring and reconfiguring their setup and even re-iterating it consistently. While this may seem like a hassle it provides a unique opportunity to create a &lt;a href="https://www.youtube.com/watch?v=QMVIJhC9Veg"&gt;PDE&lt;/a&gt;. A term that means that you can feel at home in your editor. &lt;/p&gt;

&lt;h3&gt;
  
  
  Creating a Personalized Development Environment (PDE)
&lt;/h3&gt;

&lt;p&gt;One of NeoVim's strengths lies in its vibrant community and extensive ecosystem of plugins and tools. This community fosters collaboration and empowers users to create personalized development environments created for unique workflows and requirements. This allows every Vimmer to have their take on their setup and allows them to code at the speed of thought. This is only possible because Vimmer's put an incredible amount of thought into their setup. &lt;br&gt;
Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should I use XYZ as a command for the x plugin&lt;/li&gt;
&lt;li&gt;Do I need this plugin&lt;/li&gt;
&lt;li&gt;Will this plugin slow down my Vim startup&lt;/li&gt;
&lt;li&gt;and many other nuanced topics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This may feel trivial for many and make you wonder why, but every user has their reasons. Some say that it can make coding feel like a game and they have to find the most efficient way at the moment to traverse the code base. It allows them to have a setup that works for them. Whatever the reason. It's up to the Vimmer themselves and no one can force anything upon them. Vim has even been so popular that a new Vim has popped up in recent years called Neovim which has even more features out of the box while staying true to its roots of DIY.&lt;/p&gt;




&lt;h2&gt;
  
  
  NeoVim
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://denisrasulev.medium.com/comparing-vim-and-neovim-for-python-developer-3baa1b4dbd8f#:~:text=Neovim%20is%20a%20more%20modern,development%20workflows%20and%20improved%20performance."&gt;Differences with Vim&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;NeoVim emerges as a modernized fork of Vim, introducing several key improvements over its predecessor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enhanced Stability and Performance:

&lt;ul&gt;
&lt;li&gt;NeoVim provides stability and offers
a smooth editing experience.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Asynchronous Plugin Support:

&lt;ul&gt;
&lt;li&gt; NeoVim supports asynchronous plugins, enabling faster and 
a responsive editing workflow.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Improved Terminal Integrations and UI:

&lt;ul&gt;
&lt;li&gt;NeoVim provides better terminal integrations creating a better command-line environment.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Native Debugging Capabilities:

&lt;ul&gt;
&lt;li&gt;One notable feature absent in Vim but present in NeoVim 
is native debugging, facilitating easier troubleshooting and 
code inspection.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Lua Integration:

&lt;ul&gt;
&lt;li&gt;NeoVim embraces Lua as a scripting language, empowering 
users to customize and extend their editing environment with 
greater flexibility and ease.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Lua Integration
&lt;/h3&gt;

&lt;p&gt;NeoVim's integration of Lua opens up new possibilities for users, allowing for sophisticated customization far beyond what was previously available with Vim's VimScript. Neovim's allowance of using a well-known and actual programming language, instead of a bespoke and thrown-together scripting language just increased Neovim's capabilities ten-fold. With Lua's expressive syntax and powerful features, users can tailor NeoVim to suit their specific needs and preferences, further enhancing productivity and workflow efficiency.&lt;/p&gt;




&lt;p&gt;In summary, while Vim remains a great choice for command-line editing with its speed and efficiency, NeoVim excels at being a competent alternative while still keeping Vim's core functionality and soul alive, offering a vast plugin ecosystem. Vim's customizability whether you choose  Vim's simplicity or NeoVim's advanced features, both editors provide powerful tools to streamline your workflow. Vim is a recommended choice for any developer. If you don't want to take a deep dive into the Vim world(it's quite a deep hole) consider using Vim motions in your favorite editor all of the most common editors have them and they can all elevate your coding experience. There are plenty of resources to get started using Vim motions and eventually take the plunge if you ever want to go to the dark side I would suggest looking at the resources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/playlist?list=PLm323Lc7iSW_wuxqmKx_xxNtJC_hJbQ7R"&gt;Vim As Your Editor - Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=jXud3JybsG4"&gt;Vim Crash Course For Beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=bshMXXX40_4"&gt;Vim Can Save You Hours Of Work&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Functional Programming vs Object-Oriented Programming: a Beginner Perspective</title>
      <dc:creator>Patrick Henry</dc:creator>
      <pubDate>Wed, 20 Dec 2023 00:26:53 +0000</pubDate>
      <link>https://dev.to/hackman78/functional-programming-vs-object-oriented-programming-a-beginners-perspective-6lg</link>
      <guid>https://dev.to/hackman78/functional-programming-vs-object-oriented-programming-a-beginners-perspective-6lg</guid>
      <description>&lt;p&gt;Functional programming and object-oriented programming (OOP) represent two approaches in the world of software development, each with its own way of solving common coding problems. I think that it is really up to the developer to decide whether or not one approach is greater than another.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;hometowns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;students&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;curr&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;curr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hometown&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;curr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hometown&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;age19Count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;recurse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="c1"&gt;//recursion&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;recurse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;recurse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are two examples I am working on right now that are great examples of functional programming where making first-class functions that are then used to transform pieces of data into new structures. It allows us to parse the data that we actually need and what we don't need.&lt;/p&gt;

&lt;p&gt;Functional programming functions as first-class functions and is used to solve all the problems in the code. Functions are treated as reusable pieces of data, allowing for a more understandable coding style. Key features include immutability and the avoidance of side effects. This makes for a lot of predictability in your code and is easy to test. I find it a better approach for beginners because of its ease of understanding and like I said earlier the predictability of what is coming out of a function. It also is a great practice to not be able to hard-code systems. I might also feel this way because I have not worked with OOP systems yet.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Object of one individual dog&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;rufus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Rufus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;birthday&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2/1/2017&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;birthday&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;attendance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//Object of second individual dog&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;fluffy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fluffy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;birthday&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1/12/2019&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;birthday&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;attendance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.educative.io/blog/object-oriented-programming"&gt;Example via Educative.io&lt;/a&gt;&lt;br&gt;
The above example shows how object-oriented programming is implemented in real-life. we can create many objects with the same information very easily by executing the &lt;code&gt;new Obj()&lt;/code&gt;&lt;br&gt;
class allowing for ease of use. &lt;/p&gt;

&lt;p&gt;Object-oriented programming revolves around the idea of objects, bucketing data and behavior into units. Objects interact with each other through defined interfaces(this), fostering reusable code. OOP emphasizes the principle of inheritance providing a structured way to model modular systems. In preparation for this essay, I looked at a lot of OOP in real-world situations and I found myself struggling to understand and having to jump all over the page to define different parts of the program. While this is the case for functional programming it feels as though you have to do more of Functional programming often fairs in terms of maintenance better due to its focus on unchangeable variables. This can lead to more predictable code and easier debugging. However, OOP shines in scenarios where modeling real-world entities and their relationships is crucial, as it provides a natural way to structure and organize code. I say that it fits better in real-world situations because I can think of a lot of cases where I'd rather use object-oriented programming to write some systems like initializing objects with new user info and other systems, while I'd rather use functional programming to maintain functions in the background and be able to keep track of multiple practices&lt;/p&gt;

&lt;p&gt;In conclusion, the choice between Functional programming and OOP depends on the nature of the project and the scenarios demanding simplicity, predictability, and parallelism, while object-oriented programming provides an effective means of modeling complex systems with real-world relationships. Both ways of programming have their pros and cons, and the decision rests on the demands and goals of the software development project that you intend to build. I think I will need a lot more practice with both approaches as I am still a beginner. Maybe I'll look back on this essay and realize how silly I am being. But, I am ready to learn more. &lt;/p&gt;

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