<?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: Prakirth Govardhanam</title>
    <description>The latest articles on DEV Community by Prakirth Govardhanam (@prakirth).</description>
    <link>https://dev.to/prakirth</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%2F1351995%2F8e3cf5b0-6dc2-4f24-99bf-edd4a242732c.jpeg</url>
      <title>DEV Community: Prakirth Govardhanam</title>
      <link>https://dev.to/prakirth</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prakirth"/>
    <language>en</language>
    <item>
      <title>⚖️FROM Burn-Out TO Balance-Out (2/4)</title>
      <dc:creator>Prakirth Govardhanam</dc:creator>
      <pubDate>Wed, 15 Jan 2025 16:22:40 +0000</pubDate>
      <link>https://dev.to/prakirth/from-burn-out-to-balance-out-3mk3</link>
      <guid>https://dev.to/prakirth/from-burn-out-to-balance-out-3mk3</guid>
      <description>&lt;h2&gt;
  
  
  Handling Anxiety and Learning to De-Stress 🤹
&lt;/h2&gt;

&lt;p&gt;Last week I shared my journey on learning and building a web app and shifting immediately to building a mobile app without a break!&lt;/p&gt;

&lt;p&gt;Of course, I was coerced by my situation to eventually take that 1-week detox break. During that week, I just did what I usually do to relax such as reading a book, listening to a podcast, watching TV, playing with my cats, going for a walk, working out...&lt;/p&gt;

&lt;p&gt;Unfortunately none of them worked!&lt;/p&gt;

&lt;p&gt;All these activities somehow triggered the anxiety center of my brain, since all of these activities were wired into my daily working life and didn't feel like I was taking a break.&lt;/p&gt;

&lt;p&gt;The one thing which did break me out of my anxiety and stress was trying out a new hobby, Cooking!&lt;/p&gt;

&lt;p&gt;The main reasons that Cooking as a hobby helped me out were :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I cooked a long long time ago, like 7 years ago.&lt;/li&gt;
&lt;li&gt;I had to strain the brain's mental capacity to understand the recipe (it was in Finnish) without using the translator.&lt;/li&gt;
&lt;li&gt;I prefer being meticulous with taste, texture and dicing ingredients. Hence, consciously focused on keeping the body posture aligned for performing the meticulous activities. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, picking up Cooking as a hobby after a long time helped me in 2 ways :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;my wife was happy! 👩&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;my brain thanked me for the mutual benefits! 🧠 💞&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hope this helps someone riding on their infinite anxiety spiral as a self-learner.&lt;/p&gt;

&lt;p&gt;Cover image - dish I made as part of the break, "Couscous salad with feta cheese and grilled veggies"&lt;/p&gt;

&lt;p&gt;Cheers and have a good one everyone!  🥂&lt;/p&gt;




</description>
      <category>productivity</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>⚖️FROM Burn-out TO Balance-out (1/4)</title>
      <dc:creator>Prakirth Govardhanam</dc:creator>
      <pubDate>Thu, 09 Jan 2025 13:09:04 +0000</pubDate>
      <link>https://dev.to/prakirth/from-burn-out-to-balance-out-4i4f</link>
      <guid>https://dev.to/prakirth/from-burn-out-to-balance-out-4i4f</guid>
      <description>&lt;p&gt;&lt;strong&gt;TLDR&lt;/strong&gt; As part of learning MERN stack, learnt JavaScript, mastered full-stack concepts and built a full-stack web app for &lt;a href="https://github.com/prak112/ICD11-SymptomChecker" rel="noopener noreferrer"&gt;Symptom Checker&lt;/a&gt; in 6 months. Then tackled the mobile app version of the Symptom Checker, but got overwhelmed by new technologies. Took a break and refocused. Leveraged my existing backend, and used AI tools to accelerate development. Learned the value of strategic planning, efficient tool utilization and a growth mindset.&lt;/p&gt;




&lt;h2&gt;
  
  
  Overview 👀
&lt;/h2&gt;

&lt;p&gt;Planning, building and presenting the full-stack web app for Symptom Checker application in September 2024 was a long journey. &lt;br&gt;
It was a 6-month journey of learning JavaScript, starting off with MERN stack and learning the core technologies and concepts from Full Stack Open. &lt;/p&gt;

&lt;p&gt;All of this while building learning projects, updating CV, applying jobs and networking.&lt;/p&gt;

&lt;p&gt;Right after, I jumped onto my next project - React Native mobile app development for Symptom Checker application. &lt;br&gt;
This rush was induced by the desire to finish the professional courses of the Vocational Degree within 2024.&lt;/p&gt;

&lt;p&gt;I started with planning out the requirements for building the app with my current knowledge. &lt;br&gt;
I was not at my peak performance so I started losing bearings and drifted down the rabbit hole! Here are the wonders I saw :&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges 💪
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Got overwhelmed with tools and technologies that would be required to build the React Native mobile app (TypeScript, GraphQL)&lt;/li&gt;
&lt;li&gt; Assumed that I would need a new backend and could probably use Backend-as-a-Service platform (Supabase, Appwrite) for easing this process.&lt;/li&gt;
&lt;li&gt;However, learning TypeScript, GraphQL, BaaS SDKs AND building the mobile app prootoype within a month was overwhelming, to say the least!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Although these tools &amp;amp; technologies were a good list of items to learn as a Software Developer, BUT the project did not need that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solutions 🔮
&lt;/h2&gt;

&lt;p&gt;To come back to my senses from the overwhelming thoughts, I took a week off to reconcile my thoughts and actions.&lt;/p&gt;

&lt;p&gt;After that little break, everything started to fall in place. I figured that :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;React Native components and their implementation were very similar to React. Hence, I could implement the components with JSX for now with thorough JSdocs for future-migration to TypeScript.&lt;br&gt;
Refer &lt;a href="https://www.typescriptlang.org/docs/handbook/migrating-from-javascript.html" rel="noopener noreferrer"&gt;TypeScript documentation to know how&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Node.js Backend that I developed with such dedication by following Layered Architecture and security principles for scalability could also be extended to be used as a Shared Backend for both the Web Client and Mobile Client of Symptom Checker application.&lt;br&gt;
Check out &lt;a href="https://github.com/prak112/Symptom-Checker-backend" rel="noopener noreferrer"&gt;Node.js Shared Backend&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally, after implementing 1 &amp;amp; 2 from above, I was able to handle the deadline under pressure by :&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;learning key concepts of React Native, React Native Paper, React Navigation from their documentation,&lt;/li&gt;
&lt;li&gt;confirming key takeaways by using assistance from Claude(3.5 Sonnet),&lt;/li&gt;
&lt;li&gt;generating React Native Components by training Pieces Copilot on developed React Components for Symptom Checker web app,&lt;/li&gt;
&lt;li&gt;refactoring the generated React Native Components for expected functionality,&lt;/li&gt;
&lt;li&gt;adding error handling and edge case handling,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach is definetely questionable but consider that I have build the same components in React from scratch. &lt;br&gt;
Now I am validating and reiterating the generated component structure in React Native for faster development.&lt;br&gt;
Check out React Native &lt;a href="https://github.com/prak112/SymptomChecker-frontend-mobile" rel="noopener noreferrer"&gt;mobile app development&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaway 🔑
&lt;/h2&gt;

&lt;p&gt;Never stress yourself out to reach the summit at one go! Relax and rejuvenate between short-term goals. Mind becomes sharper, Goal becomes clearer  :)&lt;/p&gt;

&lt;p&gt;That's all for this post.&lt;br&gt;
In the next upcoming posts, I will share about how I approached each challenge as I dived down the rabbit hole!&lt;/p&gt;

&lt;p&gt;Cheers and have a good one everyone! 🍻&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>learning</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>Prepping for Healthcare Software Development: Seeking advice from Seasoned Pros</title>
      <dc:creator>Prakirth Govardhanam</dc:creator>
      <pubDate>Mon, 10 Jun 2024 11:30:56 +0000</pubDate>
      <link>https://dev.to/prakirth/prepping-for-healthcare-software-development-seeking-advice-from-seasoned-pros-3oje</link>
      <guid>https://dev.to/prakirth/prepping-for-healthcare-software-development-seeking-advice-from-seasoned-pros-3oje</guid>
      <description>&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;I am a biomedical engineer transitioning into software development. As someone with a background in healthcare and a keen interest in coding, I'm eager to learn from experienced developers who have worked on healthcare applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Questions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;What was the last healthcare application you developed and pushed into production?&lt;/li&gt;
&lt;li&gt;During any phase from design to production, what were the top five challenges or problems you faced?&lt;/li&gt;
&lt;li&gt;How did you overcome or address those challenges?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why I'm Asking
&lt;/h2&gt;

&lt;p&gt;As I prepare to embark on my journey as a software developer in the healthcare sector, I believe that understanding the real-world challenges and experiences of seasoned professionals in this domain will be invaluable. Your insights and lessons learned can help me better prepare for the unique demands and considerations involved in developing healthcare applications.&lt;/p&gt;

&lt;p&gt;I appreciate you taking the time to share your experiences and perspectives. Your responses will provide me with a more comprehensive understanding of the landscape and equip me with the knowledge to navigate potential challenges more effectively.&lt;/p&gt;

&lt;p&gt;Thank you in advance for your valuable contributions!&lt;/p&gt;




&lt;h3&gt;
  
  
  Credits
&lt;/h3&gt;

&lt;p&gt;Image by &lt;a href="https://www.pexels.com/photo/question-marks-on-paper-crafts-5428836/" rel="noopener noreferrer"&gt;Leelo The First from Pexels&lt;/a&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>help</category>
    </item>
    <item>
      <title>Backend Testing - exciting😀 yet confusing 🤔</title>
      <dc:creator>Prakirth Govardhanam</dc:creator>
      <pubDate>Fri, 24 May 2024 13:55:29 +0000</pubDate>
      <link>https://dev.to/prakirth/backend-testing-exciting-yet-confusing-4k51</link>
      <guid>https://dev.to/prakirth/backend-testing-exciting-yet-confusing-4k51</guid>
      <description>&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I am trying to learn MERN stack in 150 Days, about which I posted a while ago. In this series posts, I will be sharing What and &lt;em&gt;How&lt;/em&gt; I have been learning.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/prakirth" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1351995%2F8e3cf5b0-6dc2-4f24-99bf-edd4a242732c.jpeg" alt="prakirth"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/prakirth/mern-150-days-challenge-27o8" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;MERN - 150 Days Challenge&lt;/h2&gt;
      &lt;h3&gt;Prakirth Govardhanam ・ May 13 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#learning&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#discuss&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;I am open to feedback to make this post better for readability/content quality.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  DAY 17/150   ⏳
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Today, I have brief summaries of concepts which were either unclear/unknown to me, until now. 🏄&lt;/li&gt;
&lt;li&gt;In the below sections, I share the challenges I faced with &lt;em&gt;Context&lt;/em&gt;, &lt;em&gt;Reason&lt;/em&gt; and &lt;em&gt;Solution&lt;/em&gt; wherever relevant.&lt;/li&gt;
&lt;/ul&gt;



&lt;h3&gt;
  
  
  Challenge 1 - Backend Testing fundamentals
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; : Backend-testing using &lt;code&gt;node:test&lt;/code&gt;, &lt;code&gt;node:assert&lt;/code&gt; and &lt;code&gt;supertest&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reason&lt;/strong&gt; : Completely new topic and zero-experience from previous projects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution&lt;/strong&gt; : 

&lt;ul&gt;
&lt;li&gt;After every topic in each section of Part 4, practice tests for 'Notes App' in a different context. For example on the current project in Part 4 exercises, 'Blogs App'&lt;/li&gt;
&lt;li&gt;Seek coding assistance from GitHub CoPilot&lt;/li&gt;
&lt;li&gt;Read through example tests from documentations&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;h3&gt;
  
  
  Challenge 2 - HTTP status codes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; : HTTP Methods use similar status codes&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reason&lt;/strong&gt; :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;HTTP Method&lt;/th&gt;
&lt;th&gt;Response Status Codes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;200, 304, 400, 404, 500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;200, 201, 400, 403, 404, 500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUT&lt;/td&gt;
&lt;td&gt;200, 204, 400, 404, 409, 500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PATCH&lt;/td&gt;
&lt;td&gt;200, 204, 400, 404, 409, 500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;200, 202, 204, 400, 404, 500&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Common status codes happen because HTTP method can have multiple response status codes because the outcome of a request can vary based on different factors.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;200 OK&lt;/code&gt;: The request has succeeded.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;400 Bad Request&lt;/code&gt;: The server could not understand the request due to invalid syntax.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;404 Not Found&lt;/code&gt;: The server could not find the requested resource.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;500 Internal Server Error&lt;/code&gt;: The server encountered an unexpected condition which prevented it from fulfilling the request.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;h3&gt;
  
  
  Challenge 3 - Data re-initialization in test DB using &lt;code&gt;beforeEach&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; : 

&lt;ul&gt;
&lt;li&gt;For Testing purposes, Test-database needs to be re-initialized before each test for executing assertions successfully. &lt;/li&gt;
&lt;li&gt;However, due to differences in the order of execution of the &lt;code&gt;Promise&lt;/code&gt; the data can be initialized in different ways.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reason&lt;/strong&gt; : Depends on the sequence preferences, if any, of execution of &lt;code&gt;Promise&lt;/code&gt;s&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution&lt;/strong&gt; : &lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Using &lt;code&gt;for&lt;/code&gt; loop for control over execution order of &lt;code&gt;Promise&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight javascript"&gt;&lt;code&gt;    &lt;span class="nf"&gt;beforeEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// executed in no specific order&lt;/span&gt;
        &lt;span class="k"&gt;for&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;blog&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;initialBlogs&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;blogObject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Blog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blog&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;blogObject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&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="c1"&gt;// tests to verify HTTP methods &lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;using &lt;code&gt;Promise.all&lt;/code&gt; method to allow the completion of every &lt;code&gt;Promise&lt;/code&gt; in the registered order&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight javascript"&gt;&lt;code&gt;    &lt;span class="nf"&gt;beforeEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// executed in specific order promises registred&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;initialBlogs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blog&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;blogObject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Blog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blog&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="nx"&gt;blogObject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&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="c1"&gt;// tests to verify HTTP methods &lt;/span&gt;
        &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;most ideal method, using &lt;code&gt;mongoose&lt;/code&gt; built-in methods for &lt;code&gt;insert&lt;/code&gt; and &lt;code&gt;delete&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight javascript"&gt;&lt;code&gt;        &lt;span class="nf"&gt;beforeEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;Blog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deleteMany&lt;/span&gt;&lt;span class="p"&gt;({})&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;Blog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;initialBlogs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;

            &lt;span class="c1"&gt;// tests to verify HTTP methods &lt;/span&gt;
            &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;



&lt;h3&gt;
  
  
  Challenge 4 - Password Hashing fundamentals
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; : Hashing passwords (manually) using external libraries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reason&lt;/strong&gt; : Obviously, user data such as passwords must be encrypted, hence an enhanced level of encryption ensures user security&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt; : In the current context (&lt;a href="https://github.com/prak112/FullStackOpen-core-part4.git" rel="noopener noreferrer"&gt;FullStackOpen-core-part4&lt;/a&gt;), for user administration in saving blog posts, we are using &lt;a href="https://github.com/kelektiv/node.bcrypt.js/#nodebcryptjs" rel="noopener noreferrer"&gt;&lt;code&gt;bcrypt&lt;/code&gt;&lt;/a&gt; to ensure password hashing through &lt;em&gt;&lt;a href="https://github.com/kelektiv/node.bcrypt.js/#a-note-on-rounds" rel="noopener noreferrer"&gt;Salt Rounds&lt;/a&gt;&lt;/em&gt;, as simplified below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Purpose&lt;/em&gt; : Salt rounds are used to 'thwart brute force attacks' by making the hashing process slower.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;How It Works&lt;/em&gt; : 

&lt;ul&gt;
&lt;li&gt;Number of salt rounds is the exponent in the calculation of how many times the hashing algorithm is executed. &lt;/li&gt;
&lt;li&gt;More rounds = more hashing iterations, &lt;/li&gt;
&lt;li&gt;Brute force attacks slowed down and more secure.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;em&gt;Example&lt;/em&gt; : If you choose 10 salt rounds, the algorithm will run 2^10 (or 1024) times.&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;em&gt;Balance between Security and Performance&lt;/em&gt; : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Higher salt rounds increase security but also make the hashing process take longer.&lt;/li&gt;
&lt;li&gt;The cost of increasing rounds on 2 GHz core :
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight css"&gt;&lt;code&gt;    &lt;span class="nt"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;8&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;40&lt;/span&gt; &lt;span class="nt"&gt;hashes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;sec&lt;/span&gt;
    &lt;span class="nt"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;9&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;20&lt;/span&gt; &lt;span class="nt"&gt;hashes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;sec&lt;/span&gt;
    &lt;span class="nt"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;10&lt;/span&gt; &lt;span class="nt"&gt;hashes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;sec&lt;/span&gt;
    &lt;span class="nt"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;11&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;5&lt;/span&gt;  &lt;span class="nt"&gt;hashes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;sec&lt;/span&gt;
    &lt;span class="nt"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;12&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;2&lt;/span&gt;&lt;span class="nt"&gt;-3&lt;/span&gt; &lt;span class="nt"&gt;hashes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;sec&lt;/span&gt;
    &lt;span class="nt"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;13&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;1&lt;/span&gt; &lt;span class="nt"&gt;sec&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;hash&lt;/span&gt;
    &lt;span class="nt"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;14&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="err"&gt;5&lt;/span&gt; &lt;span class="nt"&gt;sec&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;hash&lt;/span&gt;
    &lt;span class="nt"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;15&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;3&lt;/span&gt; &lt;span class="nt"&gt;sec&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;hash&lt;/span&gt;
    &lt;span class="nt"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;25&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;1&lt;/span&gt; &lt;span class="nt"&gt;hour&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;hash&lt;/span&gt;
    &lt;span class="nt"&gt;rounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;31&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;2&lt;/span&gt;&lt;span class="nt"&gt;-3&lt;/span&gt; &lt;span class="nt"&gt;days&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;hash&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;



&lt;h3&gt;
  
  
  Challenge 5 - Process Flow between Backend-Database to Implement new Feature
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; : 

&lt;ul&gt;
&lt;li&gt;In MERN, if every new concept is implemented from the granular level, unlike Django, the sequence of operations to know are essential. &lt;/li&gt;
&lt;li&gt;In current context, we use &lt;code&gt;MongoDB-mongoose&lt;/code&gt; for establishing backend-database communications&lt;/li&gt;
&lt;li&gt;If a new table/&lt;code&gt;collection&lt;/code&gt; is introduced to implement a new feature, such as user administration, then the sequence of actions for an efficient process flow is as shown below.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff86dopwzhnuheq7rbl6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff86dopwzhnuheq7rbl6w.png" alt="Process flow between Backend-Database to implement a new feature" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  Challenge 6 - Generating JSON Web Token
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; : What is included in 'process.env.SECRET'?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reason&lt;/strong&gt; : For user authentication, a &lt;code&gt;jsonwebtoken&lt;/code&gt; (&lt;code&gt;JWT&lt;/code&gt;) must be generated&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt; : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Any string, preferably auto-generated as a cryptic string&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;node&lt;/code&gt; built-in library for auto-generating a cryptic string as follows:
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight javascript"&gt;&lt;code&gt;    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;crypto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randomBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hex&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// SECRET&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;NEVER&lt;/em&gt; save it in the source code. Generate in the terminal. Save it in &lt;code&gt;.env&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;



&lt;h3&gt;
  
  
  Challenge 7 - Authorization Header and Authentication Scheme fundamentals
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; : How to retrieve the 'Authentication Header' value for implementing tests with backend API using Postman/REST Client ?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reason&lt;/strong&gt; : To authenticate the user when a &lt;code&gt;POST&lt;/code&gt; request is generated&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt; : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;HTTP request&lt;/code&gt; has &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization" rel="noopener noreferrer"&gt;&lt;code&gt;Authorization&lt;/code&gt; headers&lt;/a&gt; in the format - &lt;code&gt;&amp;lt;auth-schemes&amp;gt; &amp;lt;auth-parameters&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;There are multiple &lt;code&gt;&amp;lt;auth-schemes&amp;gt;&lt;/code&gt; (&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemes" rel="noopener noreferrer"&gt;Authentication Schemes&lt;/a&gt;) available in a &lt;code&gt;HTTP request&lt;/code&gt; &lt;code&gt;Authorization&lt;/code&gt; header.&lt;/li&gt;
&lt;li&gt;Most common ones are - &lt;code&gt;Basic&lt;/code&gt;, &lt;code&gt;Bearer&lt;/code&gt;, &lt;code&gt;Digest&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;&lt;code&gt;Basic&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;
&lt;code&gt;Bearer&lt;/code&gt;*&lt;/th&gt;
&lt;th&gt;&lt;code&gt;Digest&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SECURITY&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Credentials sent as &lt;code&gt;base64&lt;/code&gt; encoded (plain text)&lt;/td&gt;
&lt;td&gt;Credentials tokenized on server-side and stored on client side. Can be set to expire.&lt;/td&gt;
&lt;td&gt;Password saved on server as plain-text/reversibly-encrypted format for verification with hashed-version.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;USAGE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple, credentials sent with each request&lt;/td&gt;
&lt;td&gt;Simple &amp;amp; safe, token sent with each request&lt;/td&gt;
&lt;td&gt;Complex due to hashing process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;STATE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Stateful&lt;/em&gt;, since credentials required for each request&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Stateless&lt;/em&gt;, request contains credentials-encrypted token to authenticate user for each request&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Stateful&lt;/em&gt;, random new hashed value different for each request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API Suitability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Only simple authentication, Not suitable for modern APIs&lt;/td&gt;
&lt;td&gt;Suitable, specifically for APIs with &lt;code&gt;JWT&lt;/code&gt;s and Single Sign-On (SSO)&lt;/td&gt;
&lt;td&gt;Not Suitable, due to server-side storage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Based on the project (Reading list - Blogs App), the &lt;code&gt;Bearer &amp;lt;auth-scheme&amp;gt;&lt;/code&gt; would be suitable for our User Authentication considering its beginner-friendly secure state of tokenizing user access.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;p&gt;Until next time! ✍️&lt;br&gt;
Live Long and Prosper 🖖&lt;/p&gt;




&lt;p&gt;&lt;a href="https://www.pexels.com/photo/motivational-simple-inscription-against-doubts-5238645/" rel="noopener noreferrer"&gt;&lt;em&gt;Cover Photo by 'Leeloo The First' from Pexels&lt;/em&gt;&lt;/a&gt; &lt;/p&gt;

</description>
      <category>learning</category>
      <category>beginners</category>
      <category>mern</category>
      <category>testing</category>
    </item>
    <item>
      <title>Hosting platform procrastination 😵‍💫</title>
      <dc:creator>Prakirth Govardhanam</dc:creator>
      <pubDate>Fri, 24 May 2024 13:04:33 +0000</pubDate>
      <link>https://dev.to/prakirth/hosting-platform-procrastination-4oil</link>
      <guid>https://dev.to/prakirth/hosting-platform-procrastination-4oil</guid>
      <description>&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I am trying to learn MERN stack in 150 Days, about which I posted a while ago. In this series posts, I will be sharing What and &lt;em&gt;How&lt;/em&gt; I have been learning.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/prakirth" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1351995%2F8e3cf5b0-6dc2-4f24-99bf-edd4a242732c.jpeg" alt="prakirth"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/prakirth/mern-150-days-challenge-27o8" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;MERN - 150 Days Challenge&lt;/h2&gt;
      &lt;h3&gt;Prakirth Govardhanam ・ May 13 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#learning&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#discuss&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;





&lt;p&gt;Did you ever have to deal with yourself in a similar situation as this ? How did you deal with it ? Let me know in the comments 💬&lt;/p&gt;

&lt;p&gt;This is &lt;em&gt;how&lt;/em&gt; I dealt with it. 🤹‍♂️&lt;/p&gt;

&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DAY 9/150&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Until &lt;a href="https://fullstackopen.com/en/part3/deploying_app_to_internet" rel="noopener noreferrer"&gt;Part 3 - Deploying app to Internet&lt;/a&gt; part of the course, the course was not very challenging.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reason
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;I always dreaded deployment. Last I tried I failed. &lt;br&gt;
Then, I mastered &lt;em&gt;procrastinating&lt;/em&gt; this particular aspect of Software Development 😐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Obviously, the procrastination comes from my insecurities as a non-traditional Developer, such as :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;What if I do something wrong and my code gets deleted ?!&lt;/em&gt; 🤨&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;TMI! Where do I even start ?!&lt;/em&gt; 😬&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It took me a whole day to reason with myself and find options which satisfy one simple condition - &lt;em&gt;No Credit Card required&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The answer was right in that part of the course - &lt;a href="https://render.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Render&lt;/strong&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Learnings
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Procrastination&lt;/em&gt; or &lt;em&gt;Impostor Syndrome&lt;/em&gt; is quite common for folks coming from &lt;em&gt;non-traditional&lt;/em&gt; backgrounds to Software Development&lt;/li&gt;
&lt;li&gt;Deal WITH it. Do NOT give in. 🦾&lt;/li&gt;
&lt;li&gt;Sometimes the solution is right in front of You. Just breathe 😌&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Along the way, I found some nice aggregated resources 🤩 :&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;List of services for Web Hosting, Database, File Storage, User Identity and Monitoring&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="https://medium.com/@minianter/top-free-services-to-deploy-full-stack-applications-2023-fb11489aa9b9" class="ltag__link__link" rel="noopener noreferrer"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afill%3A88%3A88%2F1%2AWm7QcdfqDYszPJO7sTqAxg.jpeg" alt="Minianter"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://medium.com/@minianter/top-free-services-to-deploy-full-stack-applications-2023-fb11489aa9b9" class="ltag__link__link" rel="noopener noreferrer"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Top Free Services To Deploy Full-Stack Applications (2023) | by Minianter | Medium&lt;/h2&gt;
      &lt;h3&gt;Minianter ・ &lt;time&gt;Jan 11, 2024&lt;/time&gt; ・ 
      &lt;div class="ltag__link__servicename"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fmedium-f709f79cf29704f9f4c2a83f950b2964e95007a3e311b77f686915c71574fef2.svg" alt="Medium Logo"&gt;
        Medium
      &lt;/div&gt;
    &lt;/h3&gt;
&lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;List of softwares with free-tiers for Developers&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://free-for.dev/#/?id=web-hosting" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fripienaar%2Ffree-for-dev%2Fmaster%2Flogo.webp" height="250" class="m-0" width="250"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://free-for.dev/#/?id=web-hosting" rel="noopener noreferrer" class="c-link"&gt;
          Free for Developers
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Developers and Open Source authors now have a massive amount of services offering free tiers, but it can be hard to find them all to make informed decisions.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ffree-for.dev%2Flogo.webp" width="250" height="250"&gt;
        free-for.dev
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Until next time! ✍️&lt;br&gt;
Live Long and Prosper 🖖&lt;/p&gt;




&lt;p&gt;&lt;a href="https://www.pexels.com/photo/motivational-simple-inscription-against-doubts-5238645/" rel="noopener noreferrer"&gt;&lt;em&gt;Cover Photo by 'Leeloo The First' from Pexels&lt;/em&gt;&lt;/a&gt; &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>MERN - 150 Days Challenge</title>
      <dc:creator>Prakirth Govardhanam</dc:creator>
      <pubDate>Mon, 13 May 2024 16:04:40 +0000</pubDate>
      <link>https://dev.to/prakirth/mern-150-days-challenge-27o8</link>
      <guid>https://dev.to/prakirth/mern-150-days-challenge-27o8</guid>
      <description>&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ambitious Software Developer from non-traditional background (Bio-Medical Engineering)&lt;/li&gt;
&lt;li&gt;Journey officially and purposefully started on March 2023 with Savon Ammattiopisto (Local Vocational College in Finland)&lt;/li&gt;
&lt;li&gt;Self-learning and self-guiding through experiences 🤔&lt;/li&gt;
&lt;li&gt;I believe I managed to understand and implement :

&lt;ul&gt;
&lt;li&gt;Fundamentals of programming, data-structures and object-oriented programming. Hence, Backend engineering is my favorite part!&lt;/li&gt;
&lt;li&gt;Databases (relational) using SQL syntax was free-flowing. If possible, &lt;em&gt;I would replace English with SQL to communicate with people&lt;/em&gt; 😆&lt;/li&gt;
&lt;li&gt;Frontend engineering was smooth but relating components and their functionalities between &lt;code&gt;frontend &amp;lt;--&amp;gt; backend &amp;lt;--&amp;gt; databases&lt;/code&gt; was a journey! 🛤️&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;I wish to deduce my understanding of Software Development and start learning in public based on the advice from this wonderful post from &lt;a href="https://dev.to@get_pieces"&gt;Pieces&lt;/a&gt; 🛫 &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/get_pieces" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F923151%2Fac173cfa-ce16-4b45-9597-92403b976e77.jpg" alt="get_pieces"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/get_pieces/how-to-build-in-public-as-a-tech-professional-2epl" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How to Build in Public as a Tech Professional&lt;/h2&gt;
      &lt;h3&gt;Pieces 🌟 ・ May 2 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
 

&lt;p&gt;I am open to suggestions and collaborations along this wonderful journey! 🤝&lt;/p&gt;




&lt;h2&gt;
  
  
  🦾 The Challenge
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The &lt;em&gt;What&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Currently I am learning &lt;strong&gt;MERN&lt;/strong&gt; stack from &lt;a href="https://fullstackopen.com/en/about/" rel="noopener noreferrer"&gt;FullStackOpen&lt;/a&gt;, an Open University course from the University of Helsinki, Finland.&lt;br&gt;
My progress so far : &lt;a href="https://github.com/prak112/fullstack-open-core" rel="noopener noreferrer"&gt;FullStack-open-core&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  About the Course
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Course has 7 core parts and 7 extension parts for learning Full Stack Development. &lt;/li&gt;
&lt;li&gt;Course is very detailed and gives adequate set of instructions, exercises and material to follow along without any confusion. (&lt;em&gt;sometimes the instructions are so elaborate, that it starts to be confusing!&lt;/em&gt; 😵‍💫)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Networking&lt;/em&gt; 🕸️ I have heard about this course from a peer and thanks to him, I could plan out the curriculum for my Vocational college degree.🕸️&lt;/p&gt;

&lt;h3&gt;
  
  
  The &lt;em&gt;Why&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;I get to learn the most popular tech-stack and start applying for jobs as soon as I have a static portfolio in both &lt;strong&gt;MERN&lt;/strong&gt; and &lt;strong&gt;Django&lt;/strong&gt;     🗽&lt;br&gt;
More importantly, the course has a nice reward if completed as a whole package! Here is my core reason :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To qualify for the "&lt;a href="https://fullstackopen.com/en/part0/general_info#interview-promise" rel="noopener noreferrer"&gt;Interview Promise&lt;/a&gt;"

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://fullstackopen.com/en/part0/general_info#parts-and-completion" rel="noopener noreferrer"&gt;Core course&lt;/a&gt; - 7 parts&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://fullstackopen.com/en/part0/general_info#the-course-exam" rel="noopener noreferrer"&gt;Course exam&lt;/a&gt; - after completing parts 0-7&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://fullstackopen.com/en/part0/general_info#parts-and-completion" rel="noopener noreferrer"&gt;Extended course&lt;/a&gt; - 7 parts&lt;/li&gt;
&lt;li&gt;Course project - &lt;a href="https://fullstackopen.com/en/part0/general_info#full-stack-project" rel="noopener noreferrer"&gt;Full stack project (10 ECTS)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  The &lt;em&gt;How&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;My self-study happens full-time, hence I am able to dedicate &lt;em&gt;6-8 hours/day&lt;/em&gt; for &lt;em&gt;5 days/week&lt;/em&gt;. Based on what I know and what I have (&lt;em&gt;time&lt;/em&gt;) so far I believe I can complete the entire course including the course project within 150 Days.&lt;br&gt;
To make myself accountable, I will be posting (&lt;em&gt;1 post/week&lt;/em&gt;) my progress and key takeaways from what I have learnt. &lt;/p&gt;




&lt;h2&gt;
  
  
  Interested ? 🤠
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;If you are also new and a beginner from a non-traditional background, I would welcome you to join me in exploring &lt;strong&gt;MERN&lt;/strong&gt; stack or any stack together.&lt;/li&gt;
&lt;li&gt;Learning together can always be confidence boosting and make the journey less lonelier 😁&lt;/li&gt;
&lt;li&gt;Let me know in the comments below. We can connect via Discord 📬&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Credits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Cover Image : &lt;a href="https://www.pexels.com/photo/motivational-simple-inscription-against-doubts-5238645/" rel="noopener noreferrer"&gt;Photo by Leeloo The First&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>learning</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Document Object Model (DOM) : One Byte Explainer</title>
      <dc:creator>Prakirth Govardhanam</dc:creator>
      <pubDate>Fri, 29 Mar 2024 19:47:21 +0000</pubDate>
      <link>https://dev.to/prakirth/document-object-model-dom-one-byte-explainer-4eef</link>
      <guid>https://dev.to/prakirth/document-object-model-dom-one-byte-explainer-4eef</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for DEV Challenge v24.03.20, One Byte Explainer: Browser API or Feature.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Explainer
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Tree&lt;/strong&gt; represents a structure with &lt;em&gt;branches, nodes and leaves&lt;/em&gt; manipulated by &lt;em&gt;Nature&lt;/em&gt; to change its layout every season. Similarly, &lt;strong&gt;DOM&lt;/strong&gt; represents a web page structure where elements, attributes and text are manipulated by a &lt;em&gt;Developer&lt;/em&gt;'s genius.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Context
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;To access and manipulate the DOM content, &lt;em&gt;JavaScript&lt;/em&gt; is fundamentally used. &lt;em&gt;React&lt;/em&gt; framework with JSX (&lt;em&gt;JavaScript XML&lt;/em&gt;) abstracts DOM access through a virtual DOM. Finally, &lt;em&gt;TypeScript&lt;/em&gt; provides static typing for advanced capabilities.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Apologies, if the post seems inappropriate in any sense 😥 . This is my first post and my first challenge in the process of becoming part of a Developer community.&lt;br&gt;
This is the summary of what I have learnt from &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/DOM" rel="noopener noreferrer"&gt;MDN Documentation&lt;/a&gt; and &lt;a href="https://chat.openai.com/share/932ee054-8024-4317-adf7-ef1f8c8d40c7" rel="noopener noreferrer"&gt;discussions with Chat GPT&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thank you for this wonderful challenge ! 😍&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
