<?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: Gaurav Singh</title>
    <description>The latest articles on DEV Community by Gaurav Singh (@gauraws).</description>
    <link>https://dev.to/gauraws</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%2F283853%2F7914a160-a343-4174-bdb9-8f7159b65681.jpg</url>
      <title>DEV Community: Gaurav Singh</title>
      <link>https://dev.to/gauraws</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gauraws"/>
    <language>en</language>
    <item>
      <title>Git Revert: A Safe Way to Remove Faulty Commits</title>
      <dc:creator>Gaurav Singh</dc:creator>
      <pubDate>Sun, 29 Sep 2024 11:53:09 +0000</pubDate>
      <link>https://dev.to/gauraws/git-revert-a-safe-way-to-remove-faulty-commits-4b04</link>
      <guid>https://dev.to/gauraws/git-revert-a-safe-way-to-remove-faulty-commits-4b04</guid>
      <description>&lt;p&gt;Have you ever faced a situation where you had to undo changes in the master branch because some unwanted code was committed, potentially leading to production bugs?&lt;/p&gt;

&lt;p&gt;Well, we faced a similar issue in our project when a developer accidentally cherry-picked a commit that wasn’t tested and deployed it to production. Luckily, our app is an in-house product used by the company itself, so the impact was minimal.&lt;/p&gt;

&lt;p&gt;Such cases can happen when you have a distributed team spread across a few countries and different time zones. Here's how we removed a particular commit from our master (production) branch and resolved the issue quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Git revert to the rescue&lt;/strong&gt;.&lt;br&gt;
&lt;code&gt;git revert&lt;/code&gt; is used to create new commits that reverse the effects of earlier commits (often just a faulty one).&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;git revert&lt;/code&gt; command can be considered an "undo" type of command, but it is not a traditional undo operation. Instead of removing the commit from the project history, it inverts the changes introduced by the commit and appends a new commit with the resulting inverse content. This prevents Git from losing history, which is crucial for the integrity of your revision history and for reliable collaboration.&lt;/p&gt;

&lt;p&gt;In simple terms, &lt;code&gt;git revert&lt;/code&gt; is used to undo a commit (say hash &lt;code&gt;2afe34&lt;/code&gt;), but it does so by creating a new commit that removes the changes from the commit (&lt;code&gt;2afe34&lt;/code&gt;) you are reverting.&lt;/p&gt;

&lt;p&gt;For example, if you’re tracking down a bug and find that it was introduced by a single commit, instead of manually fixing it and committing a new change, you can use git revert to automatically handle this for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;:&lt;br&gt;
&lt;code&gt;git revert [--options] &amp;lt;commit&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git revert&lt;/code&gt; takes a specified commit from the history, inverts the changes from that commit, and creates a new "revert commit."&lt;/p&gt;

&lt;p&gt;Let's demo it:&lt;br&gt;
I have this index.html file I created for demo purposes. It contains an ordered list of fruits. Below are my commits with the changes made in each one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Fruits&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;h3&amp;gt;Fruits list&amp;lt;/h3&amp;gt;
        &amp;lt;ol&amp;gt;
            &amp;lt;li&amp;gt;Mango&amp;lt;/li&amp;gt;
            &amp;lt;li&amp;gt;Orange&amp;lt;/li&amp;gt;
            &amp;lt;li&amp;gt;Banana&amp;lt;/li&amp;gt;
        &amp;lt;/ol&amp;gt;
        &amp;lt;h3&amp;gt;Other list&amp;lt;/h3&amp;gt;
        &amp;lt;ul&amp;gt;
            &amp;lt;li&amp;gt;Apple&amp;lt;/li&amp;gt;
            &amp;lt;li&amp;gt;Pineapple&amp;lt;/li&amp;gt;
        &amp;lt;/ul&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;7afe5e3 (HEAD -&amp;gt; master) add other list
c8862d9 add banana
8db1cd2 add orange
f4e9e1f add mango
065a354 initial commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My first commit is an initial commit with just the basic HTML structure like &lt;strong&gt;head&lt;/strong&gt; and &lt;strong&gt;body&lt;/strong&gt;. Rest commits are self explanatory. I added mango in commit &lt;code&gt;f4e9e1f&lt;/code&gt;, orange in &lt;code&gt;8db1cd2&lt;/code&gt;, and banana in &lt;code&gt;c8862d9&lt;/code&gt; inside the first ordered list (&lt;code&gt;&amp;lt;ol&amp;gt;&lt;/code&gt;). I then added a second ordered list with more items in commit &lt;code&gt;7afe5e3&lt;/code&gt;, which is the current HEAD commit.&lt;/p&gt;

&lt;p&gt;Let’s say I want to remove banana from the list. In this simple example, we could just remove banana from the code and create a new commit reflecting that change.&lt;/p&gt;

&lt;p&gt;However, in a collaborative project with multiple contributors, commit history becomes important to track the project's state at any given point in time. Moreover, manually undoing large code changes wouldn’t be feasible, and git revert becomes an inevitable solution.&lt;/p&gt;

&lt;p&gt;Going back to our demo, to remove banana from the first ordered list, I can simply run &lt;code&gt;git revert c8862d9&lt;/code&gt; and this creates a new commit explaining the reason for the revert. You’ll see that banana is now removed from the list.&lt;/p&gt;

&lt;p&gt;So new index file and commit history will look like below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;Fruits&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;h3&amp;gt;Fruits list&amp;lt;/h3&amp;gt;
        &amp;lt;ol&amp;gt;
            &amp;lt;li&amp;gt;Mango&amp;lt;/li&amp;gt;
            &amp;lt;li&amp;gt;Orange&amp;lt;/li&amp;gt;
        &amp;lt;/ol&amp;gt;
        &amp;lt;h3&amp;gt;Other list&amp;lt;/h3&amp;gt;
        &amp;lt;ul&amp;gt;
            &amp;lt;li&amp;gt;Apple&amp;lt;/li&amp;gt;
            &amp;lt;li&amp;gt;Pineapple&amp;lt;/li&amp;gt;
        &amp;lt;/ul&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commit history after git revert: &lt;em&gt;git log  --oneline&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;828ef17 (HEAD -&amp;gt; master) Revert "add banana"
7afe5e3 add other list
c8862d9 add banana
8db1cd2 add orange
f4e9e1f add mango
065a354 initial commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sometimes, Git is not smart enough to figure out the exact code that needs to be removed, leading to merge conflicts. In these cases, you, as a developer, need to help Git a bit.&lt;/p&gt;

&lt;p&gt;It’s important to understand that &lt;code&gt;git revert&lt;/code&gt; undoes a single commit—it does not "revert" the project to a previous state by removing all subsequent commits like &lt;code&gt;git reset&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Reverting has two important advantages over resetting:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;It doesn’t change the project history, making it a “safe” operation for commits that have already been published to a shared repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;git revert can target an individual commit at any arbitrary point in the history.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Happy coding! 😊&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>devops</category>
      <category>git</category>
      <category>github</category>
    </item>
    <item>
      <title>𝗛𝗼𝘄 𝘁𝗼 𝘂𝗻𝗱𝗲𝗿𝘀𝘁𝗮𝗻𝗱 𝗮 𝗟𝗮𝗿𝗴𝗲 𝗦𝗼𝗳𝘁𝘄𝗮𝗿𝗲 𝗖𝗼𝗱𝗲𝗯𝗮𝘀𝗲</title>
      <dc:creator>Gaurav Singh</dc:creator>
      <pubDate>Fri, 13 Sep 2024 16:55:44 +0000</pubDate>
      <link>https://dev.to/gauraws/-2oih</link>
      <guid>https://dev.to/gauraws/-2oih</guid>
      <description>&lt;p&gt;Have you ever felt overwhelmed by a large and complex software codebase?&lt;/p&gt;

&lt;p&gt;Joining an existing team with a large, unfamiliar codebase can be daunting, especially when there’s little documentation and poor test coverage.&lt;/p&gt;

&lt;p&gt;I was recently tasked with adding a new feature to a project and it took me an unusually long time to complete. I wasn’t struggling because of my knowledge of the framework used or programming language, but because I didn’t fully understand how the project was designed or its various user workflows. It was my first time seeing this codebase and the tight delivery deadline only added to the pressure.&lt;/p&gt;

&lt;p&gt;To get past this, I began searching how to quickly understand large, complex codebases. Here are a few key insights I’ve gathered. I call this 𝗧𝗼𝗽 𝗗𝗼𝘄𝗻 𝗔𝗽𝗽𝗿𝗼𝗮𝗰𝗵&lt;/p&gt;

&lt;p&gt;𝟭. 𝗨𝗻𝗱𝗲𝗿𝘀𝘁𝗮𝗻𝗱 𝘁𝗵𝗲 𝗣𝗿𝗼𝗷𝗲𝗰𝘁’𝘀 𝗣𝘂𝗿𝗽𝗼𝘀𝗲: This may sound obvious, but sometime even experienced developers lack a basic understanding of what the system's main purpose is. Focus on understanding the business concepts before diving into the technology. Ask questions like: Who is using the software? What are their main objectives? &lt;em&gt;𝘊𝘰𝘥𝘦 𝘪𝘴 𝘮𝘦𝘳𝘦𝘭𝘺 𝘢 𝘮𝘦𝘢𝘯𝘴 𝘵𝘰 𝘢𝘯 𝘦𝘯𝘥 𝘢𝘯𝘥 𝘸𝘪𝘵𝘩𝘰𝘶𝘵 𝘬𝘯𝘰𝘸𝘪𝘯𝘨 𝘵𝘩𝘦 𝘦𝘯𝘥 𝘢𝘭𝘭 𝘤𝘰𝘥𝘦 𝘪𝘴 𝘦𝘴𝘴𝘦𝘯𝘵𝘪𝘢𝘭𝘭𝘺 𝘮𝘦𝘢𝘯𝘪𝘯𝘨𝘭𝘦𝘴𝘴&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;𝟮. 𝗙𝗮𝗺𝗶𝗹𝗶𝗮𝗿𝗶𝘇𝗲 𝗬𝗼𝘂𝗿𝘀𝗲𝗹𝗳 𝘄𝗶𝘁𝗵 𝘁𝗵𝗲 𝗔𝗿𝗰𝗵𝗶𝘁𝗲𝗰𝘁𝘂𝗿𝗲: Start with the high-level architecture before getting into the details of the each implementation. Understand the different layers, such as the web tier, business tier, and database tier, as well as front-end and back-end. You don’t need to know every technical detail, just enough to get a general understanding of the system’s structure. This can help to create a map of how different piece of technology work together.&lt;/p&gt;

&lt;p&gt;𝟯. 𝗗𝗶𝘃𝗲 𝗶𝗻𝘁𝗼 𝘁𝗵𝗲 𝗖𝗼𝗱𝗲: Begin with the specific code or component you’re working on. Understand what’s its purpose? What functionality does it provide? If available, unit tests can be helpful in understanding how a component works. In well-structured projects, good naming conventions for variables and methods often provide hints about many code flows.&lt;/p&gt;

&lt;p&gt;It’s important to remember that this process isn’t immediate - understanding a codebase is iterative. The more you dig into these concepts and understand user journey flows, the easier it gets. &lt;/p&gt;

&lt;p&gt;Don’t hesitate to ask for help if you are stuck. Happy coding!😊&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>LLMs Two Big Limitations: Stochastic Responses &amp; Fabrication</title>
      <dc:creator>Gaurav Singh</dc:creator>
      <pubDate>Sun, 04 Aug 2024 17:06:13 +0000</pubDate>
      <link>https://dev.to/gauraws/llms-two-big-limitations-stochastic-responses-fabrication-1fp6</link>
      <guid>https://dev.to/gauraws/llms-two-big-limitations-stochastic-responses-fabrication-1fp6</guid>
      <description>&lt;p&gt;We all by now has heard the term &lt;strong&gt;Prompt Engineering&lt;/strong&gt; but ever guessed why do we need it? The answer lies in the fact that current LLMs pose a number of challenges that make &lt;em&gt;reliable and consistent completions&lt;/em&gt; more challenging to achieve without putting effort into prompt construction and optimization.&lt;/p&gt;

&lt;p&gt;Currently LLM models face two big challenges - &lt;strong&gt;Stochastic and Fabrications&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model responses are stochastic:&lt;/strong&gt;&lt;br&gt;
This means if you ask the model a question and provide a text input, there is no guarantee that it will give you the same response every time. There is no guarantee that the response will be correct, and there is no guarantee that the response will be what you expected.&lt;/p&gt;

&lt;p&gt;For example, the prompt: &lt;code&gt;“Tell me about the element Calcium”&lt;/code&gt; gives different responses in different models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With GPT-4o:&lt;/strong&gt;&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;GPT-4o mini:&lt;/strong&gt;&lt;/p&gt;

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

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

&lt;p&gt;Clearly responses are not same, i.e. different model can produce different responses for same prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Models can fabricate responses:&lt;/strong&gt;&lt;br&gt;
LLMs are trained on massive text datasets, but they don't understand the meaning of the words in the prompt or tokens; they just recognize patterns they can "complete" with their next prediction. &lt;/p&gt;

&lt;p&gt;We use the term &lt;strong&gt;Fabrication&lt;/strong&gt; to refer to the phenomenon where LLMs sometimes generate factually incorrect information due to limitations in their training or other constraints. This means they can generate realistic responses that are not factually accurate.&lt;/p&gt;

&lt;p&gt;For example, with GPT-4o, the prompt: &lt;br&gt;
&lt;code&gt;“Who won the Player of the Match award for the ICC Men's T20 World Cup final 2026?”&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;As we can see, the two responses for the same prompt vary. The first one is close to being accurate, but the second response has made up a fictional award that hasn't happened yet.&lt;/p&gt;

&lt;p&gt;Prompt engineering techniques like &lt;em&gt;metaprompting&lt;/em&gt; and &lt;em&gt;temperature configuration&lt;/em&gt; may reduce model fabrications to some extent.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>githubcopilot</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>GitHub Copilot has its quirks</title>
      <dc:creator>Gaurav Singh</dc:creator>
      <pubDate>Mon, 15 Jul 2024 14:23:37 +0000</pubDate>
      <link>https://dev.to/gauraws/github-copilot-has-its-quirks-34o1</link>
      <guid>https://dev.to/gauraws/github-copilot-has-its-quirks-34o1</guid>
      <description>&lt;p&gt;I've been using &lt;strong&gt;&lt;a href="https://github.com/features/copilot" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt;&lt;/strong&gt; with our production codebase for the last 4 months, and here are some of my thoughts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Good:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explains Complex Code&lt;/strong&gt;: It’s been great at breaking down tricky code snippets or business logic and explaining them properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unit Tests&lt;/strong&gt;: Really good at writing unit tests and quickly generating multiple scenario-based test cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Snippets&lt;/strong&gt;: It can easily generate useful code snippets for general-purpose use cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Error Fixes&lt;/strong&gt;: Copilot is good at explaining errors in code and providing suggestions to fix them.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The Not-So-Good:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Context Understanding&lt;/strong&gt;: It’s hard to explain the context to a GenAI tool, especially when our code is spread across multiple files/repos. It struggles to understand larger projects where changes are required in multiple files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inaccurate Suggestions&lt;/strong&gt;: Sometimes it suggests installing npm libraries or using methods from npm packages that don’t exist. This is called &lt;a href="https://en.wikipedia.org/wiki/Hallucination_(artificial_intelligence)" rel="noopener noreferrer"&gt;Hallucination&lt;/a&gt;, where AI-generated code looks convincing but is completely wrong.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Complex Code&lt;/strong&gt;: Occasionally, the code it generates is confusing and complex, making debugging harder. In those moments, I wish I had written the logic myself and let Copilot check for errors or bugs.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Overall, GitHub Copilot has been a useful tool, but it has its quirks. When using large language models, the responsibility always stays with the programmer.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>github</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Creating tech blog using MERN stack. Help!</title>
      <dc:creator>Gaurav Singh</dc:creator>
      <pubDate>Sat, 23 Jan 2021 15:22:57 +0000</pubDate>
      <link>https://dev.to/gauraws/creating-tech-blog-using-mern-stack-help-17li</link>
      <guid>https://dev.to/gauraws/creating-tech-blog-using-mern-stack-help-17li</guid>
      <description>&lt;p&gt;I am fairly new to blogging sites architecture and planning to create one in MERN stack.&lt;/p&gt;

&lt;p&gt;I am good with MERN tech, but never built something of production level. There is lot of decision that I think I have to take before starting with code. &lt;/p&gt;

&lt;p&gt;For starter... &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What are some best practices to store each of the articles, is 
it in database(Mongodb)? &lt;/li&gt;
&lt;li&gt;How static assets like images and videos are stored for 
blogging sites? &lt;/li&gt;
&lt;li&gt;Do I need to implement some caching for api calls?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I want to built it from beginning and publish it as I know the tech but systems design is kinda daunting me!&lt;/p&gt;

&lt;p&gt;Has anyone faced such challenge? What are your advice?&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>help</category>
      <category>blogging</category>
    </item>
    <item>
      <title>Need help with deciding right track.</title>
      <dc:creator>Gaurav Singh</dc:creator>
      <pubDate>Mon, 16 Dec 2019 14:11:18 +0000</pubDate>
      <link>https://dev.to/gauraws/need-help-with-deciding-right-track-246b</link>
      <guid>https://dev.to/gauraws/need-help-with-deciding-right-track-246b</guid>
      <description>&lt;p&gt;I am beginner in python and JavaScript. What is the right path to move to AI and ML or data science? &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>python</category>
      <category>help</category>
    </item>
  </channel>
</rss>
