<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Gl4SS3S</title>
    <description>The latest articles on Forem by Gl4SS3S (@gl4ss3s).</description>
    <link>https://forem.com/gl4ss3s</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%2F726307%2Fbf2ca98e-6e22-4c44-aee8-55b772866668.jpg</url>
      <title>Forem: Gl4SS3S</title>
      <link>https://forem.com/gl4ss3s</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gl4ss3s"/>
    <language>en</language>
    <item>
      <title>Hard Truths about Software Development</title>
      <dc:creator>Gl4SS3S</dc:creator>
      <pubDate>Sat, 29 Apr 2023 12:30:21 +0000</pubDate>
      <link>https://forem.com/gl4ss3s/hard-truths-about-software-development-3ibg</link>
      <guid>https://forem.com/gl4ss3s/hard-truths-about-software-development-3ibg</guid>
      <description>&lt;h2&gt;
  
  
  "Imposter Syndrome" will probably never go away 🥷
&lt;/h2&gt;

&lt;p&gt;When you first enter the workplace, no matter what type of work you do, you'll be nervous to a certain degree. As now you suddenly have new relationships to cultivate and you need to prove you deserve to be there - this I'd argue is normal for the situation.&lt;/p&gt;

&lt;p&gt;Imposter Syndrome is a different beast entirely, that every so often comes out of the dark corners of your mind to make you feel inadequate. With the fact that the Development world has opened up to people without a degree in a way other professions really haven't, is great, but this small fact amplifies the effect of &lt;em&gt;imposter syndrome&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Imposter Syndrome - &lt;strong&gt;the condition of feeling anxious and not experiencing success internally, despite being high-performing in external, objective ways&lt;/strong&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The above definition of &lt;em&gt;imposter syndrome&lt;/em&gt; sums it up nicely...you could feel you're doing quite well...then suddenly take part in a technical discussion at work and someone mentions &lt;em&gt;method A&lt;/em&gt; or &lt;em&gt;framework B&lt;/em&gt; that sounds completely foreign to you and the feeling of doubt starts to slowly creep in.&lt;/p&gt;

&lt;p&gt;It's not the end of the world though when you realise this starting to affect you, this feeling of you're not good enough can be used as the driving force to become better, in a healthy way. Find areas of improvement and learn from colleagues. Discomfort shouldn't be a reason to stop, it should be a reason to become better.&lt;/p&gt;

&lt;p&gt;A way you can manage it better, is by taking part in the Japanese philosophy of &lt;em&gt;Kaizen&lt;/em&gt; - meaning small incremental improvements could make a lasting difference down the line. Don't focus on others and try to become a better you than you were yesterday, even if only by a fraction.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's difficult to keep up sometimes 🫠
&lt;/h2&gt;

&lt;p&gt;Software Development is a ever evolving field with more and more people joining daily with their own ideas and how things should be done and with AI becoming actually usable for the first time ever, so much so that people like Elon Musk and Steve Wozniak signed a petition to stop it's development for the time being, new frameworks are being added, new languages are being built on newer ideas of compilation and sometimes it's just too much information for one person to digest.&lt;/p&gt;

&lt;p&gt;Learning Computer Science is daunting, and &lt;em&gt;Keeping up with the Joneses&lt;/em&gt; so to speak is equally so. Established technologies get overhauled more often than one might think.&lt;/p&gt;

&lt;p&gt;The frameworks and languages you already use could have a major rework and change the fundamentals of how it works. For example, as &lt;em&gt;mostly&lt;/em&gt; a &lt;strong&gt;.Net&lt;/strong&gt; developer, &lt;strong&gt;Microsoft&lt;/strong&gt; has done a tremendous amount of work to make it more accessible for newer devs to pick up, by making the SDK open-source and cross-platform compatible, but I share the sentiment once they switched to yearly releases and a new &lt;strong&gt;LTS&lt;/strong&gt; version every 2 years, that they'll run the risk of becoming more and more bloated in the coming years, making an already complex framework just so much harder to pickup for newer developers. &lt;em&gt;I could be wrong.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  It's a never ending learning journey 📚
&lt;/h2&gt;

&lt;p&gt;This goes hand-in-hand with the above point, with everything changing constantly you need to keep up with newer technologies and learn completely new things in the process not to become completely irrelevant , and this usually comes at the expense of you're free time.&lt;/p&gt;

&lt;p&gt;You will need to make time to keep your skills sharp, if you want to stay competitive on the technical side of things, not all people are meant to be managers, me included.&lt;/p&gt;

&lt;p&gt;This can be dealt with by just spending an hour or two everyday learning, working on personal project, or anything that will push you forward and keep up to date. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;If a person will spend one hour a day on the same subject for five years, that person will be an expert on that subject&lt;/em&gt;&lt;/strong&gt; - Earl Nightingale.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  It's not meant for everyone 🤷🏻
&lt;/h2&gt;

&lt;p&gt;When looking at Software development as a career, you usually see something along the lines of&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"&lt;em&gt;How I learned to code in 6 MONTHS and got a $300K+ job at [Insert a FAANG] company&lt;/em&gt;"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or maybe my favourite&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How to learn programming in the FASTEST way&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One thing to note as mentioned above as well, you can learn at best basic programming in 6 months, this covers things like a quick CRUD application, maybe an API, some front-end framework, throw some DS &amp;amp; Algorithms in the mix - unless you are a genuine genius, you are going to struggle, there is no getting around that.&lt;/p&gt;

&lt;p&gt;Programming is the lowest common denominator when it comes to the field of Computer Science in my opinion, it's only a tool to get the idea stuck in someone's head onto the computer, nothing more, nothing less.&lt;/p&gt;

&lt;p&gt;The reality of the situation is not many people get to work for a FAANG company, some of us, including myself, isn't even based in the USA, where those types of salaries are available. If you work for any other company as a developer, it's highly unlikely they are going to have the same atmosphere as Google, it's usually just a normal job, possibly some nice benefits, and all the challenges that come with it.&lt;/p&gt;

&lt;p&gt;When you see these "&lt;em&gt;a day in the life...&lt;/em&gt;" videos, those aren't representative of the majority of the people that's working in the field.&lt;/p&gt;

&lt;p&gt;And not all people should move into the field, no matter if the pay check is good at the end of the day, just like not everyone should become an actor, a lawyer, etc. Not everyone thinks in a way a developer should, or it just doesn't fascinate them enough to put in the extra effort to learn an improve. It's a mentally intensive job and will probably continue to be so.&lt;/p&gt;

&lt;h3&gt;
  
  
  TL;DR
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Learn Computer Science if you truly enjoy the subject, not for the money, unless you want to spend a lot of your day you were doing something else.&lt;/li&gt;
&lt;li&gt;Depending on where you are, you are not going to get paid the &lt;em&gt;$300K&lt;/em&gt; that the influencers tell you.&lt;/li&gt;
&lt;li&gt;You will have imposter syndrome, but can use it as motivation to become better.&lt;/li&gt;
&lt;li&gt;You will need to make time to stay relevant.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  References
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;Imposter Syndrome (4, 2023) Definition taken form: &lt;a href="https://en.wikipedia.org/wiki/Impostor_syndrome"&gt;Impostor syndrome - Wikipedia&lt;/a&gt;&lt;/em&gt;   &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Microsoft and Amazon have cut their AI ethics teams as Elon Musk and Steve Wozniak call for a moratorium on tech companies’ ‘out-of-control race’ (29-03, 2023) Taken from: &lt;a href="https://fortune.com/2023/03/29/tech-companies-ai-ethics-teams-elon-musk-steve-wozniak-open-letter/"&gt;Elon Musk calls for cautious AI approach as companies cut ethics teams | Fortune&lt;/a&gt; by **Tristan Bove&lt;/em&gt;**&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devjournal</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>3 Best AI powered VSCode extension</title>
      <dc:creator>Gl4SS3S</dc:creator>
      <pubDate>Tue, 21 Mar 2023 05:43:26 +0000</pubDate>
      <link>https://forem.com/gl4ss3s/3-best-ai-powered-vscode-extension-1bh2</link>
      <guid>https://forem.com/gl4ss3s/3-best-ai-powered-vscode-extension-1bh2</guid>
      <description>&lt;h3&gt;
  
  
  If you can't beat them... 👀
&lt;/h3&gt;

&lt;p&gt;With the arrival of ChatGPT, it seems like AI is all the hype now, at first like any software developer, I wasn't to much at first, "How could it replace me, surely the AI overlord doesn't consider the X, Y and Z...", I asked myself over my daily cup of coffee?&lt;/p&gt;

&lt;p&gt;After I sniffed enough &lt;em&gt;copium&lt;/em&gt; to feel good about myself, I read a quote which put it in perspective quite quickly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI might not be fully be able to replace a human, but a Human using AI will&lt;br&gt;
&lt;em&gt;- some random guy on the internet&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So instead of fighting the rise of new tools like ChatGPT and the newly Released GPT-4 multi-modal, it's time to start integrating these into your workflow and become a better developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. GitHub Copilot 🧑🏻‍💻
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G6J1sksc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kepz9r67vcf544dfacig.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G6J1sksc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kepz9r67vcf544dfacig.gif" alt="GitHub Co-Pilot" width="800" height="411"&gt;&lt;/a&gt;&lt;br&gt;
Now...this will probably not be of any surprise, GitHub Co-pilot is possibly one of the more well known AI tools out there and after playing around with it for about a month, I do have some gripes with it, but it did streamline my workflow, especially when it came to repetitive tasks,&lt;/p&gt;

&lt;p&gt;Some times the things it recommend are completely wrong, but often times it gives you just enough boilerplate logic to be useful.&lt;/p&gt;

&lt;p&gt;Try Github Co-Pilot &lt;a href="https://github.com/features/copilot"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Mintlify Writer ✍🏻
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l9Sl34n3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/thurling/image/upload/v1679287598/Blog%2520Posts/5%2520Best%2520AI%2520tools/Mintlify_Writer.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l9Sl34n3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/thurling/image/upload/v1679287598/Blog%2520Posts/5%2520Best%2520AI%2520tools/Mintlify_Writer.png" alt="Mintlify Writer" width="800" height="489"&gt;&lt;/a&gt;&lt;br&gt;
During some point in your career, you will be asked to Document your code and that's when you soul slowly dies inside, for the following reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You might be fired 👀 (...)&lt;/li&gt;
&lt;li&gt;Other Devs are moving onto your project and you don't want them touching your stuff&lt;/li&gt;
&lt;li&gt;It's one long an boring process&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Enter Mintlify Writer, you can select a code snippet and it will analyse what the code's doing and generate a nice comment with the required parameters, with a nice explanation about what it's doing.&lt;/p&gt;

&lt;p&gt;Try Mintlify Writer &lt;a href="https://writer.mintlify.com/"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Code Attendant 👩🏻‍✈️
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Fm4_TzT7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://res.cloudinary.com/thurling/image/upload/v1679288695/Blog%2520Posts/5%2520Best%2520AI%2520tools/Code_attendant.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fm4_TzT7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://res.cloudinary.com/thurling/image/upload/v1679288695/Blog%2520Posts/5%2520Best%2520AI%2520tools/Code_attendant.gif" alt="Code Attendant" width="800" height="428"&gt;&lt;/a&gt;&lt;br&gt;
So I'll be honest most of the AI tools currently are mostly focused on generating code, "but, Mr., you already have  Github Co-pilot on the list, why to I have another one?".  &lt;/p&gt;

&lt;p&gt;And to that I say, &lt;em&gt;Code Attendant&lt;/em&gt; is for those annoying code snippets you always need to google because you possibly forgot about the feature that was already built into the language. Haven't worked with JavaScript in a while, you possibly forgot how to get all specific elements using the &lt;code&gt;querySelector&lt;/code&gt;, this is where this is extremely useful, I am not dragging my browser out and searching something I forgot for the millionth time and break my state of &lt;em&gt;flow&lt;/em&gt;, instead I can do everything while I am busy developing.&lt;/p&gt;

&lt;p&gt;Try it &lt;a href="https://codeattendant.com/"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;AI is here to stay and tools like these should be used and learned as it combines the best of both world and makes one much more productive, and stay in the state of flow for longer and easier.&lt;/p&gt;

&lt;p&gt;TL:DR&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Github Co-Pilot&lt;/li&gt;
&lt;li&gt;Mintlify Writer&lt;/li&gt;
&lt;li&gt;Code Attendant&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Check out my blog &lt;a href="https://www.jacquesthurling.com/"&gt;here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tooling</category>
      <category>vscode</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Setup SSH on GitHub</title>
      <dc:creator>Gl4SS3S</dc:creator>
      <pubDate>Sat, 18 Feb 2023 09:56:29 +0000</pubDate>
      <link>https://forem.com/gl4ss3s/how-to-setup-ssh-on-github-26k6</link>
      <guid>https://forem.com/gl4ss3s/how-to-setup-ssh-on-github-26k6</guid>
      <description>&lt;h1&gt;
  
  
  How to setup SSH key for Github
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;This will focus on macOs/Linux operating systems&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Generating a SSH key
&lt;/h2&gt;

&lt;p&gt;On unix operating systems the ssh keys that you generate will generally be in the &lt;em&gt;.ssh&lt;/em&gt; folder.&lt;br&gt;
To get to the folder use the following command:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cd ~/.ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Once you are inside the folder you can now generate the SSH key:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ssh-keygen -o -t rsa -C "{your@email.com}"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;This will prompt you where to save the file, since we want it in this folder just hit &lt;code&gt;return&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It will then prompt you for a passphrase which isn't necessary, (if you want to add it that's fine), just hit &lt;code&gt;return&lt;/code&gt;&lt;br&gt;
Will then prompt for confirmation, just hit &lt;code&gt;return&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It should return the following&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The key fingerprint is:
SHA256:NnATrRJrSpO1nIjhekAd2uvcfsRBVIoBec9O+5ezyRk example@example
The key's randomart image is:
+---[RSA 3072]----+
|  .o+...oo       |
| .+o .=....      |
|.o +.*=*o.       |
|. o * BB..       |
| o o ++.S        |
|. + o  * .       |
| . o .. .  E.    |
|    .  . ..++    |
|     ..   .=o    |
+----[SHA256]-----+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can verify that it generated a key by using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cat id_rsa.pub
=== Output ===
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCfqFBsoAoCVRxRSrUjCKK0Rb1Y+siJwCuuPdELgBgS2v7PO8av3tOFkvXMcr5SSw+02AP2LtqcC/jf9q31ppN0NmzZrysvifG8LxEdmjYvcU28PlgneQ+1Dambno6pmxhDWjTbMscVwVhJzy1kYkTJ4205YC9LBgPLRggLps6dJHdHAfM0pIN1j5SstRt3gyOQKX1VZovM1212ENYttLDl6BC8xcUZLmdKZdIPEAJKjh13xro/iBk/S7EbP8EkNVrIkvIHvaEWxWk9KdOxRhv+h4FxFqf9qQy8sKP/yZtkFAjSrAULB8CFBFWfb9EGalJh4rWbTFCaMcM59Uz2Cie9Qna6BviGWnHX+/02ide3HYfFCa4F79LiikssdcS9XqK4x1KchrA0aQqLnBy/aixNfXO7FKPvKf5kKCbCWoxz3s2A0U1gZsK8mwqhd5H+yRgoKJNc/8ASxnb6gpGX7tUuamQrEjBw8Dn/dHckBHQ0kPl2wCCEViPR2Pk+rL75whk= example@example
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you verified that the key is generated now we can add it to GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding to GitHub
&lt;/h2&gt;

&lt;p&gt;Once you have logged into you GitHub account, click on your Profile Image -&amp;gt; Settings:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U2OFOtW9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mfzddt3ncetae3swkguf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U2OFOtW9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mfzddt3ncetae3swkguf.png" alt="Image description" width="204" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can then on the left find the SSH and GPG Keys:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ihMpw0y6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v9janwee04qzmwh8h5yj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ihMpw0y6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v9janwee04qzmwh8h5yj.png" alt="Image description" width="297" height="775"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once there Click on the &lt;code&gt;New SSH Key&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cbIO2QMf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9u4pp5up1jrtk86bj0rc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cbIO2QMf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9u4pp5up1jrtk86bj0rc.png" alt="Image description" width="794" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And you can then Copy &amp;amp; Paste the value you outputted previously:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zLXOjG4_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rzifknu3sst7vtffp71z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zLXOjG4_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rzifknu3sst7vtffp71z.png" alt="Image description" width="788" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And you can then click &lt;code&gt;Add SSH Key&lt;/code&gt;, this might prompt you some MFA code or password input, that's fine.&lt;/p&gt;

&lt;p&gt;After all this is done you can now use SSH with you Repos&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloning a Repo
&lt;/h2&gt;

&lt;p&gt;Once you are done you can go to any repo you want and add select the SSH value instead of HTTPS:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5N1nIrX6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ng5k5ithvdt59dbg39te.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5N1nIrX6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ng5k5ithvdt59dbg39te.png" alt="Image description" width="399" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you enter the SSH value, it will prompt you to add the SSH fingerprint you can just enter &lt;code&gt;yes&lt;/code&gt; and hit &lt;code&gt;return&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;$ git clone git@github.com:Gl4SS3S/MyRepo.git
=========
Cloning into 'MyRepo'...
The authenticity of host 'github.com (140.82.121.3)' can't be established.
{Your_Value} key fingerprint is SHA256: {Your Fingerprint}
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you should be good to go!&lt;br&gt;
Happy Coding.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>github</category>
      <category>programming</category>
      <category>linux</category>
    </item>
    <item>
      <title>Back to School</title>
      <dc:creator>Gl4SS3S</dc:creator>
      <pubDate>Tue, 14 Feb 2023 20:57:53 +0000</pubDate>
      <link>https://forem.com/gl4ss3s/back-to-school-2bmm</link>
      <guid>https://forem.com/gl4ss3s/back-to-school-2bmm</guid>
      <description>&lt;p&gt;Considering the rise of self-taught developers, which about a third of them not being officially taught in university where I am from, to the celebration of many (or dismay), the landscape has changed quite a bit, but now with the invention of AI tools, like ChatGPT and soon-to-be Bard AI from Google (if it doesn't cost them a few billion), it seems the foundations of our profession seems to be on shaky ground.&lt;/p&gt;

&lt;p&gt;Now AI won't replace Software Developers anytime soon. OpenAI, the makers of ChatGPT have begun hiring more developers to train their supreme AI overlord to one day replace us all. This has had the anxiety inducing affect on me of realising that upskilling is even more important than it ever was, in an already competitive market, trying to compete against an AI isn't something I envisioned myself doing.&lt;/p&gt;

&lt;p&gt;I started going through the OSSU curriculum to get a solid foundations of the principles of computer science. As a self-taught developer as well, it's easy to fall into a comfort zone, as you get to a certain level of expertise and think you are fine, and you probably will be for the most part. But the foundations are lacking and that is something I found myself needing to learn them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This will be the first in a series I'll dedicate to the process of going through the curriculum and my struggles and personal revelations along the way, of which I am sure will be many.&lt;br&gt;
I have been busy with the OSSU curriculum for about a month or two and I have learn a lot of things I probably wouldn't have thought of on my own as it never truly occured to me.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The first &lt;strong&gt;&lt;em&gt;course&lt;/em&gt;&lt;/strong&gt; that I did was the &lt;strong&gt;Introduction to Computer Science (CS50x)&lt;/strong&gt; by Harvard, which is great, but I found that all the interesting bits was more in the first few weeks of the course, like working with WAV files, building photo filters, and then some manual memory management concepts, which I found surprisingly fun (probably because I hate myself). Soon after the course focused on python which re-hashes the same ideas learned earlier and isn't necesarrily something new and then focuses on HTML, CSS, JavaScript and Flask for web applications, which wasn't something that interested me.&lt;/p&gt;

&lt;p&gt;At the end of the day, would I recommend the course? &lt;strong&gt;Yes...yes, I would&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On a side note, one problem set you complete is quite fun, the spell checker.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Implements a dictionary's functionality&lt;/span&gt;
&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;ctype.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdbool.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;"dictionary.h"&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;span class="c1"&gt;// Represents a node in a hash table&lt;/span&gt;
&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;LENGTH&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="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Add a index for garbage words&lt;/span&gt;
&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;)&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="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&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;// Hash table&lt;/span&gt;
&lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;RecurseFree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns true if word is in dictionary, else false&lt;/span&gt;
&lt;span class="n"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;check&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// TODO&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;hash_index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&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="n"&gt;hash_index&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;hash_index&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="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&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;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;compare&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;temp_buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
                &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;word&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="sc"&gt;'\0'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;temp_buffer&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;tolower&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&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="p"&gt;}&lt;/span&gt;
                &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;compare&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;strcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;temp_buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                    &lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&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="n"&gt;compare&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="n"&gt;free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temp_buffer&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;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="n"&gt;free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temp_buffer&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;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&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;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Hashes word to a number&lt;/span&gt;
&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;hash_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;toupper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&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="o"&gt;-&lt;/span&gt; &lt;span class="sc"&gt;'A'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;toupper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&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="o"&gt;-&lt;/span&gt; &lt;span class="sc"&gt;'A'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// TODO: Improve this hash function&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;hash_value&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;-&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;hash_value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Loads dictionary into memory, returning true if successful, else false&lt;/span&gt;
&lt;span class="n"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;dictionary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// TODO&lt;/span&gt;
    &lt;span class="kt"&gt;FILE&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;chosen_dictionary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dictionary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"r"&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="n"&gt;chosen_dictionary&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&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;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;fseek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chosen_dictionary&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="n"&gt;SEEK_END&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// seek to end of file&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ftell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chosen_dictionary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// get current file pointer&lt;/span&gt;
    &lt;span class="n"&gt;fseek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chosen_dictionary&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="n"&gt;SEEK_SET&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;//Holds word temporarily in memory&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;LENGTH&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="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buffer_i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//Holds word temporaroly&lt;/span&gt;
        &lt;span class="n"&gt;fread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;buffer_i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;chosen_dictionary&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="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;buffer_i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;hash_table_index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&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="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;hash_table_index&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Adds a new node to the hash table is there isn't a value&lt;/span&gt;
                &lt;span class="c1"&gt;// Allocates memory for a word&lt;/span&gt;
                &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;new_node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
                &lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;strcspn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sc"&gt;'\0'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="n"&gt;strcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_node&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;new_node&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="c1"&gt;// Adds node to the hash table&lt;/span&gt;
                &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;hash_table_index&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new_node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Gets first item&lt;/span&gt;
                &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;hash_table_index&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
                &lt;span class="c1"&gt;// Adds item to the front&lt;/span&gt;
                &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;new_node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
                &lt;span class="c1"&gt;//printf("Got Here\n");&lt;/span&gt;
                &lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;strcspn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sc"&gt;'\0'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="n"&gt;strcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_node&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;new_node&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;head&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="n"&gt;new_node&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&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;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;hash_table_index&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new_node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="n"&gt;buffer_i&lt;/span&gt; &lt;span class="o"&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;// Continue to next word&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;buffer_i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chosen_dictionary&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;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Returns number of words in dictionary if loaded, else 0 if not yet loaded&lt;/span&gt;
&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&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="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Unloads dictionary from memory, returning true if successful, else false&lt;/span&gt;
&lt;span class="n"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;unload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;RecurseFree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;table&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="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;RecurseFree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;)&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="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&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="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;RecurseFree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr&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;After the completion of the CS50 course I went to the next two in the OSSU Curriculum:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to Code: Simple data.&lt;/li&gt;
&lt;li&gt;How to Code: Complex Data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, I decided to skip these two as most of the problems and practical assignments were behind a paywall and simply provided no benefit other that watching some videos.&lt;/p&gt;

&lt;p&gt;I moved on to the &lt;strong&gt;Programming Languages part A&lt;/strong&gt; on Coursera, which I am still currenly busy with and will update further when I have completed the course.&lt;/p&gt;




&lt;p&gt;If you've come this far, thank you for reading, I appreciate it and I wish you all the best on your coding adventures. Till next time.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>career</category>
      <category>github</category>
    </item>
  </channel>
</rss>
