<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Rajesh khadka]]></title><description><![CDATA[Rajesh khadka, a self taught developer trying to build the crazy stuffs.]]></description><link>https://blog.rajeshkhadka.info.np</link><generator>RSS for Node</generator><lastBuildDate>Sat, 09 May 2026 17:18:13 GMT</lastBuildDate><atom:link href="https://blog.rajeshkhadka.info.np/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How I Ran Regression Tests on Nepal's Biggest Fintech App Using Passmark + Playwright]]></title><description><![CDATA[Introduction
Can AI test Nepal’s biggest fintech platform using plain English? I tried.
Modern web applications move fast, but testing often struggles to keep up. A small UI update, renamed button, or]]></description><link>https://blog.rajeshkhadka.info.np/how-i-ran-regression-tests-on-nepal-s-biggest-fintech-app-using-passmark-playwright</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/how-i-ran-regression-tests-on-nepal-s-biggest-fintech-app-using-passmark-playwright</guid><category><![CDATA[breakingappshackathon]]></category><category><![CDATA[passmark]]></category><category><![CDATA[hackathon]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Wed, 06 May 2026 15:29:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/61320ab436015b2f4e1274c6/86a8b322-b5c9-4c78-8245-7b46fd9bbf3a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Introduction</h2>
<p>Can AI test Nepal’s biggest fintech platform using plain English? I tried.</p>
<p>Modern web applications move fast, but testing often struggles to keep up. A small UI update, renamed button, or layout change can break traditional automation and create unnecessary maintenance work.</p>
<p>That’s where things get interesting.<br />What if testing didn’t require writing complex scripts at all? What if we could just describe what we want to test… in plain English?</p>
<p>That’s exactly what <a href="https://passmark.dev/"><strong>Passmark</strong></a> enables.</p>
<p>For this experiment, I chose <a href="https://esewa.com.np/">eSewa</a>, one of Nepal’s most widely used digital wallet platforms trusted for payments, transfers, and everyday transactions. To make it happen, I used <strong>Passmark</strong> for plain-English AI testing flows and <strong>Playwright</strong> for browser automation.</p>
<p>In case you want to view the demo video directly. 👉 <a href="https://youtu.be/vixWAl4vjq0?si=gaq__e0QnFAaVXRV">Demo Video</a></p>
<hr />
<h2>Before passmark vs After Passmark :</h2>
<p>Traditional browser automation usually requires writing detailed selectors and maintaining fragile UI scripts. Even a small UI change can break the test flow.</p>
<p>For example, in a traditional Playwright test, interactions often look like this:</p>
<pre><code class="language-typescript">await page.locator('#login-btn').click();
await expect(page.locator('.login-modal')).toBeVisible();
</code></pre>
<p>This works, but it tightly depends on selectors, element structure, and implementation details.</p>
<p><a href="https://passmark.dev/"><strong>Passmark</strong></a> changes this approach by allowing tests to be written in plain English using AI driven execution.</p>
<p>For example, while testing <strong>eSewa</strong>, I could simply write:</p>
<pre><code class="language-typescript">steps: [
  { description: "Navigate to https://esewa.com.np" },
  { description: "Click on the Login button" },
],

assertions: [
  { assertion: "Login modal is visible" },
  { assertion: "Phone number and password fields are present" },
]
</code></pre>
<p>Instead of manually targeting selectors, Passmark interprets the intent of the test case, while Playwright handles the browser automation .</p>
<h2>Why I Chose eSewa ?</h2>
<p>When selecting a target for this hackathon, I wanted to work on something practical and meaningful.</p>
<p>The hackathon suggested testing any web app, including demo applications, which is great for experimentation. However, I decided to apply Passmark to a real-world use case instead.</p>
<p>That’s why I chose eSewa, one of Nepal’s most widely used digital wallet platforms. Since it handles real payments, transfers, and daily transactions, it represents a more realistic testing environment.</p>
<p>This made the experiment more interesting: <strong>How well can AI-powered regression testing handle a real production fintech system?</strong></p>
<p>That question became the motivation for this project.</p>
<hr />
<h2>Project Overview</h2>
<p>This project is a <strong>regression testing suite</strong> built using <strong>Passmark + Playwright</strong> to test real user flows of eSewa.</p>
<p>Instead of writing traditional automation scripts with selectors or page objects, I used Passmark to describe test steps in plain English, and Playwright to execute them in a real browser environment. The goal was to validate whether AI-driven testing can reliably handle real-world application flows such as <strong>navigation</strong>, <strong>UI interactions</strong>, and <strong>basic user journeys</strong>.</p>
<p>The test suite focuses on core user facing flows, including:</p>
<ol>
<li><p>Landing page accessibility and navigation</p>
</li>
<li><p>Key UI interactions and button behavior</p>
</li>
<li><p>Basic user flow validation across pages</p>
</li>
<li><p>Regression checks to ensure stability across updates</p>
</li>
</ol>
<hr />
<h2>Tech Stack</h2>
<p>This project was built using a modern testing stack centered around <strong>Passmark</strong>.</p>
<ol>
<li><p><strong>Passmark</strong> : This is AI driven testing framework that interprets natural language test steps and manages execution workflows.</p>
</li>
<li><p><strong>Playwright</strong> : This is used under the hood for browser automation, navigation, and UI interactions.</p>
</li>
<li><p><strong>OpenRouter API</strong> : This provides the AI model gateway for Passmark during test execution</p>
</li>
<li><p><strong>TypeScript</strong> : This is used for writing structured and maintainable test files.</p>
</li>
<li><p><strong>Node.js</strong> : Provide a runtime environment for running the test suite.</p>
</li>
<li><p><strong>GitHub</strong> : This is used for version control.</p>
</li>
</ol>
<blockquote>
<p>In simple terms, Passmark handled the test intent, Playwright handled the browser actions, and the AI layer helped to bridge these two. This made the stack powerful while still keeping the developer experience simple.</p>
</blockquote>
<hr />
<h2>What I Tested ?</h2>
<p>To make this project practical, I focused on real user facing flows across eSewa’s public website. I built regression scenarios around those pages that involves a lot of user interaction and heavy navigation.</p>
<h3>1. Homepage &amp; First Impression Checks</h3>
<p>I started with the landing experience by validating:</p>
<ul>
<li><p>homepage load state</p>
</li>
<li><p>visible eSewa branding and logo</p>
</li>
<li><p>hero section visibility</p>
</li>
<li><p>page title correctness</p>
</li>
<li><p>navigation menu presence</p>
</li>
</ul>
<h3>2. Hero Section</h3>
<p>I tested the hero section to ensure that key first-screen elements like the headline, CTA button, and banner were visible and correctly rendered.</p>
<ul>
<li><p>headline or tagline visibility</p>
</li>
<li><p>call-to-action button presence</p>
</li>
<li><p>hero banner / image rendering</p>
</li>
</ul>
<h3>3. Download App Section</h3>
<p>Since mobile adoption is critical for wallet platforms, I verified:</p>
<ul>
<li><p>App Store download visibility</p>
</li>
<li><p>Google Play download visibility</p>
</li>
</ul>
<h3>4. Featured Services Interaction</h3>
<p>To check how easily services can be found, I tested:</p>
<ul>
<li><p>navigating to service detail pages or modals</p>
</li>
<li><p>service title visibility</p>
</li>
<li><p>description visibility</p>
</li>
<li><p>back / close interaction availability</p>
</li>
</ul>
<h3>5. Footer Integrity</h3>
<p>I also checked important footer content such as:</p>
<ul>
<li><p>contact information</p>
</li>
<li><p>social media links</p>
</li>
<li><p>copyright text</p>
</li>
</ul>
<h3>6. Login Validation Flow</h3>
<p>For authentication UX, I tested empty field submission scenarios to verify:</p>
<ul>
<li><p>login modal presence</p>
</li>
<li><p>phone number field visibility</p>
</li>
<li><p>password field visibility</p>
</li>
<li><p>sign-in button rendering</p>
</li>
<li><p>validation or error feedback for empty inputs</p>
</li>
</ul>
<h3>7. Navigation Regression Checks</h3>
<p>I tested movement between major sections including:</p>
<ul>
<li><p>Services</p>
</li>
<li><p>Merchant / Business</p>
</li>
<li><p>Help / FAQ</p>
</li>
<li><p>About Us</p>
</li>
<li><p>returning back to homepage via logo navigation</p>
</li>
</ul>
<hr />
<h2>Test Architecture &amp; Code Snapshot</h2>
<p>Rather than placing every scenario into a single large file, I structured the suite into smaller focused test groups. This made the project easier to maintain and easier to expand later.</p>
<h3>Example structure:</h3>
<ul>
<li><p><code>esewa-landing.spec.ts</code> → This file includes all the test related to landing page, hero section, footer, download area.</p>
</li>
<li><p><code>esewa-login.spec.ts</code> → This contains all the checks and teste cases related to empty field validation and authentication UI checks.</p>
</li>
<li><p><code>esewa-navigation.spec.ts</code> → This covered tests related to Services, Merchant, Help, About, and navigation back to the homepage flows.</p>
</li>
</ul>
<blockquote>
<p>Example :</p>
</blockquote>
<pre><code class="language-typescript">test("Homepage loads correctly", async ({ page }) =&gt; {
  test.setTimeout(60_000);
  await runSteps({
    page,
    userFlow:
      "Validate eSewa homepage loads with key elements and basic interactions",
    steps: [
      { description: "Navigate to https://esewa.com.np" },
      { description: "Click on the eSewa logo" },
    ],
    assertions: [
      { assertion: "eSewa logo is visible in the header" },
      { assertion: "User remains on or is redirected to homepage" },
      { assertion: "Top navigation menu with multiple items is visible" },
      { assertion: "Page title contains the word eSewa" },
      { assertion: "Hero section displays a headline or key message" },

      {
        assertion:
          "Clicking the eSewa logo keeps or brings the user to the homepage",
      },
      { assertion: "Navigation menu items appear clickable or interactive" },
    ],
    test,
    expect,
  });
});
</code></pre>
<p>All the test suites are available here (I felt it wouldn’t be a good idea to include all the code directly in the blog).</p>
<ol>
<li><p><a href="https://github.com/rajeshkhadka200/passmark-test-hack/blob/main/tests/esewa-landing.spec.ts">esewa-landing.spec.ts</a></p>
</li>
<li><p><a href="https://github.com/rajeshkhadka200/passmark-test-hack/blob/main/tests/esewa-login.spec.ts"><strong>esewa-login.spec.ts</strong></a></p>
</li>
<li><p><a href="https://github.com/rajeshkhadka200/passmark-test-hack/blob/main/tests/esewa-navigation.spec.ts">esewa-navigation.spec.ts</a></p>
</li>
</ol>
<blockquote>
<p>Note: The goal was not to maximize number of tests, but to ensure coverage of meaningful user journeys.</p>
</blockquote>
<hr />
<h2>Challenges I Faced</h2>
<p>One unexpected issue I faced was related to the OpenRouter API key setup.</p>
<p>As mentioned in the hackathon instructions, the API key is sent automatically to the registered email after signing up for the Passmark hackathon. I ended up registering twice and received two separate emails with different keys.Without realizing it, I used the older API key in my project, which caused authentication errors such as <em>“no user found”</em> during execution.</p>
<p>After some debugging, I revisited my email, identified the correct key, updated the configuration, and the issue was resolved immediately.</p>
<img src="https://cdn.hashnode.com/uploads/covers/61320ab436015b2f4e1274c6/f60a5199-ee3c-4ddc-83c9-222790e77bf8.png" alt="When I was running the 1st test suits, I encountered an error." />

<blockquote>
<p>This was a simple mistake, but it highlighted how small configuration issues can completely block a working test suite.</p>
</blockquote>
<hr />
<h2>Running the Tests: What Worked, What Broke, and What Surprised Me</h2>
<p>After running the test suite on eSewa, the results were not perfectly clean , and that’s where the real insights came from.</p>
<h3>1. What Worked ?</h3>
<p>Some tests passed fluently without any modification. This was the great motivation to work on this project.</p>
<p>The homepage validation and app download section tests completed successfully, confirming that Passmark handled basic visibility checks and straightforward flows reliably.</p>
<p>These tests involved minimal navigation and fewer steps, which made execution faster and more predictable.</p>
<img src="https://cdn.hashnode.com/uploads/covers/61320ab436015b2f4e1274c6/4fe17eb5-de5b-4c2f-8e1a-bf4a5ab6c484.png" alt="" style="display:block;margin:0 auto" />

<h3>2. What Broke ?</h3>
<p>The more interesting behavior appeared in slightly more complex flows.</p>
<p>Several tests failed due to timeouts, including:</p>
<ul>
<li><p>hero section content validation</p>
</li>
<li><p>featured service interaction</p>
</li>
<li><p>footer validation</p>
</li>
<li><p>navigation flows like Services, Merchant, and About section.</p>
</li>
</ul>
<p>These weren’t hard failures, they exceeded the default 60 second limit.</p>
<p>This showed that combining multiple steps like scrolling, clicking, and validating content increases execution time significantly in AI driven tests.</p>
<p>I also hit a specific issue on the FAQ page: The page title was visible, but the expected question content was not detected at that moment, causing the assertion to fail.</p>
<img src="https://cdn.hashnode.com/uploads/covers/61320ab436015b2f4e1274c6/eccc2cb4-2a6c-4c27-a1a7-2f6a30373cd1.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/61320ab436015b2f4e1274c6/30a8b0a9-3d22-4566-a1e3-e7a2a52afed5.png" alt="" style="display:block;margin:0 auto" />

<h3>3. What Surprised me ?</h3>
<p>Two things stood out.</p>
<p>First, <strong>navigation heavy tests were slower than expected</strong>.<br />I initially assumed simple UI checks would be trivial, but they required more time because of page transitions and content loading.</p>
<p>Second, <strong>how much wording mattered</strong>.</p>
<p>Small changes in step descriptions, like being more explicit about what to look for, noticeably improved execution reliability.</p>
<hr />
<h2>Video Presentation</h2>
<p>After completing and running the test cases, I decided to create a short demo video to push myself further, as I felt a video would be a better way to showcase what <a href="https://passmark.dev/">Passmark</a> can do.</p>
<p><a class="embed-card" href="https://www.youtube.com/watch?v=vixWAl4vjq0">https://www.youtube.com/watch?v=vixWAl4vjq0</a></p>

<hr />
<h2>Important Links</h2>
<ol>
<li><p><a href="https://www.linkedin.com/posts/rajeshkhadka200_passmark-software-engineering-activity-7457821328868392960-vI5z?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAADXa7xEBEjfRw5mnw82fGqcMpIaDFTEji2c">Linkedin Post</a></p>
</li>
<li><p><a href="https://github.com/rajeshkhadka200/passmark-test-hack">Github Repo</a></p>
</li>
<li><p><a href="https://esewa.com.np/">Platform under Test</a> (eSewa)</p>
</li>
</ol>
<hr />
<h2>Conclusion</h2>
<p>Firstly, I was really surprised by the announcement of this hackathon, and I kept asking myself, "how is it possible to test an application using just plain English?" I was used to the idea that testing requires writing detailed test cases and automating browsers using tools like Selenium and other frameworks.</p>
<p>But when I went through the Passmark documentation and GitHub repository, I was genuinely amazed. I was able to write meaningful test cases simply by describing user actions, without complex setup.</p>
<p>Overall, this was a completely new experience for me. Testing an application using this approach changed how I think about automation.</p>
<p><strong>My POV :</strong></p>
<blockquote>
<p>AI won’t replace traditional testing overnight, but tools like Passmark show that the future of testing might be less about writing code, and more about describing intent.</p>
</blockquote>
<hr />
]]></content:encoded></item><item><title><![CDATA[Entrance Exam: Changed my career path]]></title><description><![CDATA[The story starts after I finished eighth grade in late 2018. I came to know that the Ministry of Education runs the various Technical stream courses from grade 9 to grade 12. Among all of those, Computer Engineering was also one. This is not a course...]]></description><link>https://blog.rajeshkhadka.info.np/entrance-exam-changed-my-career-path</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/entrance-exam-changed-my-career-path</guid><category><![CDATA[engineering]]></category><category><![CDATA[Computer Science]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Thu, 03 Jul 2025 14:34:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751552014891/987e66c2-b53c-4625-83f7-5c715431e258.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The story starts after I finished eighth grade in late 2018. I came to know that the Ministry of Education runs the various Technical stream courses from grade 9 to grade 12. Among all of those, Computer Engineering was also one. This is not a course going that deep, but provides a certain overview. With only a basic understanding of the course, I took an entrance exam and secured a spot among 48 selected students. Looking back, I feel that this one decision gave me a unique viewpoint on my career path and allowed me to distinguish myself. Moreover, it significantly contributed to my personal development and growth.</p>
<p>At the beginning of my session in 2019, I was pleasantly surprised to learn about computer engineering in class nine. I was introduced to a variety of curricula and unfamiliar subject names that I had not previously encountered. During the ongoing session, In a team of 4 members, we were assigned our first web development assignment. All of the activity was beyond my understanding. The rest of the group members completed the project and demonstrated it well. Although I was involved in the presentation, explaining proved to be a difficult challenge because of my minimal contribution. This incident ignited a flame to learn web development and programming.</p>
<p>Anyone can learn regardless of age, but maintaining discipline is important for better outcomes. I began with the basics of programming. Initially, it was hard to understand, but I started learning web development. The learning curve was gradually taking shape over time. By the end of class 9, I was able to make some good-looking projects. Over time, I started taking part in various online Hackathons and found success in some. These events allowed me to connect with tech experts worldwide and learn how to present myself on a global stage.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D22AQEiSbn6DlNMKA/feedshare-shrink_2048_1536/feedshare-shrink_2048_1536/0/1716357825946?e=1754524800&amp;v=beta&amp;t=9x6NNeRHhH39A-oZNidn2SlWFqALz9w4rCNx7O66leU" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751559687217/8baadfd7-fbbd-4e17-9bb2-2bf084113dab.png" alt class="image--center mx-auto" /></p>
<p>Besides this, some passive income has also become a motivating factor to be consistent in this field. Because I made my first income as a developer by winning an online hackathon, this experience taught me the importance of hard work, effective communication skills, and a positive mindset to attract financial opportunities. Further in class 12, I got the opportunity to participate in the National Level Hackathon. We created a group of 4 people. Additionally, I was allowed to lead our team. Even Though, we didn't win any positions in the hackathon. We gained valuable insights. It taught me how to handle pressure and deliver results within tight deadlines.</p>
<p>In conclusion, one entrance exam designed my career path. This is one of the decisions that keeps a direct relation to my personal growth. Learning programming, and getting the early taste of engineering certainly changed my thinking perspective. It taught me the importance of money. It has also given me a sense of leadership. I believe going to your college will make me grow even more. I see it as an opportunity to try new things and expand my horizons.</p>
]]></content:encoded></item><item><title><![CDATA[Introducing CEO - Just Draw your problem, CEO will solve it.]]></title><description><![CDATA[🎨 Got an idea, a challenge, or just a rough thought?
🌟 Introducing the revolutionary AI CEO!Just grab your virtual pen and draw your thoughts on a blank canvas. Whether it's a business challenge, a creative idea, or a complex dilemma, the AI CEO wi...]]></description><link>https://blog.rajeshkhadka.info.np/ceo</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/ceo</guid><category><![CDATA[ModusHack]]></category><category><![CDATA[hypermode]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Sat, 30 Nov 2024 19:48:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1732996756240/8fd1e35b-6cdc-46f3-993b-7d48aa175df2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>🎨 <strong>Got an idea, a challenge, or just a rough thought?</strong></p>
<p>🌟 <strong>Introducing the revolutionary AI CEO!</strong><br />Just grab your virtual pen and <strong>draw your thoughts on a blank canvas</strong>. Whether it's a business challenge, a creative idea, or a complex dilemma, the AI CEO will:<br />✨ Understand your vision<br />✨ Analyze your problem<br />✨ Provide detailed, innovative solutions</p>
<p>🚀 <strong>No words needed—your drawing speaks, and AI listens!</strong><br />Unleash the power of <strong>visual problem-solving</strong> with the AI CEO. <strong>Your ideas, solved effortlessly.</strong></p>
<h3 id="heading-meet-our-team">Meet our Team :</h3>
<p>Hi, I'm Rajesh Khadka, and together with my skilled video crafter friend <a class="user-mention" href="https://hashnode.com/@bishesh">Bishesh Marasini</a> , we’re excited to introduce <strong>AI CEO – The Ultimate Problem Solver</strong>!</p>
<h3 id="heading-project-overview">Project Overview :</h3>
<p>Sometimes, visuals are the most powerful way to express ideas. You may have a clear thought or a rough idea in mind, but explaining it to others can feel challenging. That’s where AI CEO steps in!</p>
<p>This innovative application can interpret your drawings, analyze your concepts, and chart out a clear path to address your questions. But that’s not all—AI CEO can tackle a wide range of challenges, from basic to advanced math problems to complex business scenarios. In fact, it’s designed to handle virtually any problem you throw at it.</p>
<p>AI CEO is an <strong>open-source web application</strong> that lets you bring your ideas to life on a canvas. Simply draw your thoughts or describe a problem visually, and the app will process your input and provide solutions directly.</p>
<p>Much like a CEO in a company who tackles diverse challenges, AI CEO is equipped to solve problems across domains, offering clarity and actionable insights for whatever you need. <strong>It’s your virtual problem-solving leader—ready to bring your ideas to reality!</strong></p>
<p><strong>Draw it. Express it. Solve it—with AI CEO!</strong></p>
<h3 id="heading-core-features-of-the-app">Core Features of the App :</h3>
<ul>
<li><p>Extracts the image drawn on the canvas.</p>
</li>
<li><p>Analyzes the canvas image along with user-provided descriptions.</p>
</li>
<li><p>Generates a question based on the drawing and user prompt.</p>
</li>
<li><p>Provides a detailed, step-by-step solution to the generated question.</p>
</li>
</ul>
<h3 id="heading-some-snaps">Some Snaps :</h3>
<ol>
<li><p>Hero Page :</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732993887454/c3bcba5d-acae-498a-bf4b-4b882faf4308.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>This is the Landing Page of the application which contains the slogan of the application.</p>
</blockquote>
</li>
<li><p>Canvas Page :</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732999040672/537211b0-e1c7-4d7e-99d5-d88188dec347.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>This is the page where user draw a image on the canvas. It also contains the sidebar which displays the output after analyzing the image.</p>
</blockquote>
</li>
</ol>
<h3 id="heading-development-process"><strong>Development Process :</strong></h3>
<p><strong>1. Ideation:</strong><br />When the hackathon was announced, I was busy with my mid-semester exams, so I couldn't start right away. After the exams, I had a hard time thinking of an idea. A few days later, after talking with my friend, I decided to create something unique and useful, and that's how the idea for AI CEO came about.</p>
<p><strong>2. Choosing Technologies:</strong><br />Since this hackathon was organized by Modus, using Modus was a mandatory requirement. In addition, I incorporated the following technologies to build the application:</p>
<ul>
<li><p><strong>Google Gemini Generative AI:</strong> To process the image, generate a question based on the user prompt and drawing, and feed it into the workflow.</p>
</li>
<li><p><strong>Modus:</strong> To generate detailed answers for the questions created by Gemini.</p>
</li>
<li><p><strong>Node.js:</strong> For building the server that bridges communication between Gemini and the AI CEO app.</p>
</li>
<li><p><strong>React.js:</strong> For developing a responsive and user-friendly frontend.</p>
</li>
</ul>
<p><strong>3. Integrating Modus and Gemini APIs:</strong><br />As a first-time Modus user, working with its APIs was both exciting and challenging. Integrating Modus and Gemini APIs formed the backbone of the application. Exploring Postman and GraphQL playgrounds during this process added an extra layer of fun and learning.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732997851056/1b6a222b-f3b9-408f-ab96-91bf353ea345.png" alt class="image--center mx-auto" /></p>
<p><strong>4. Deployment:</strong><br />Once the application was built, it was time to deploy:</p>
<ul>
<li><p>The frontend was deployed using <strong>Netlify</strong>, using its live integrations.</p>
</li>
<li><p>The Node.js server was deployed on <a target="_blank" href="http://Render.com"><strong>Render.com</strong></a> after running a few simple commands.</p>
</li>
<li><p>Throughout development, I used the hosted Modus app on Hypermode, which made managing everything at the end much smoother.</p>
</li>
</ul>
<p><strong>5. Presentation:</strong><br />We wanted to create an engaging and unique presentation video to showcase the app. Since the app is called AI CEO, we decided to simulate a conversation between a top CEO, Elon Musk, and a podcaster named Lex. To make it even more interactive, we utilized AI to generate Elon Musk’s voice using a pre-trained model. The entire process was both fun and rewarding, pushing the boundaries of creativity.</p>
<p>And here is the final video made after a multiple take : 😅</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=KJiwJefXNVY">https://www.youtube.com/watch?v=KJiwJefXNVY</a></div>
<p> </p>
<h3 id="heading-challenges-and-how-i-overcame-them"><strong>Challenges and How I Overcame Them :</strong></h3>
<p><strong>1. Installation Challenges:</strong><br />I recently switched to Linux (Fedora), so I was still getting used to the new environment. My system wasn’t set up correctly, which caused problems when trying to run the Modus project. After several failed attempts to fix it, I decided to switch back to Windows, where the project ran smoothly.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732994777572/087f34b5-922f-48df-ad29-c3c461b9abfd.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>The images show the Hypermode team members helping me resolve the installation related issue.</p>
</blockquote>
<p><strong>2. Image Processing Challenges:</strong><br />Initially, Modus did not support image processing for generating outputs, making it difficult to work with the canvas-drawn images. To overcome this, I integrated <strong>Google Gemini Generative AI</strong> to extract possible questions from the images. These questions were then fed into the LAMA model via Modus to generate relevant answers. Additionally, members of the Hypermode team provided valuable assistance, helping me navigate and resolve this challenge effectively.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732994827334/81f3f788-9f99-48ee-aefb-f287923acc8a.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>The images show the Hypermode team members helping me resolve the issue related to image processing.</p>
</blockquote>
<h3 id="heading-some-useful-links">Some useful Links :</h3>
<ul>
<li><p>🚀 GitHub: <a target="_blank" href="https://github.com/rajeshkhadka200/CEO">Click Here</a></p>
</li>
<li><p>🎬 YouTube: <a target="_blank" href="https://www.youtube.com/watch?v=KJiwJefXNVY">Click Here</a></p>
</li>
<li><p>🌐 Website: <a target="_blank" href="https://ceo-engineer.netlify.app/">Click Here</a></p>
</li>
</ul>
<h3 id="heading-conclusion">Conclusion :</h3>
<p>Overall, the hackathon was an incredible learning experience. I got hands-on with Hypermode and Modus, gained a solid understanding of working with GraphQL APIs, and even discovered some better ways to search on Google. Most importantly, we developed the valuable skill of being patient when our code didn’t work . The support from the community on Discord was invaluable, and it played a key role in shaping the app. The entire experience was amazing, and if you haven't participated in a hackathon yet, I highly recommend giving it a try!</p>
]]></content:encoded></item><item><title><![CDATA[Introducing gitHash - Let's utilize the power of : 'git push']]></title><description><![CDATA[Project Introduction 🙋‍♂️
GitHash is an open-source web application licensed under MIT that harnesses the power of GitHub actions and gitHub API to effortlessly publish articles on Hashnode. With GitHash, you can seamlessly share detailed insights i...]]></description><link>https://blog.rajeshkhadka.info.np/introducing-githash-lets-utilize-the-power-of-git-push</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/introducing-githash-lets-utilize-the-power-of-git-push</guid><category><![CDATA[APIHackathon]]></category><category><![CDATA[hashnode api]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[hashnodeapihackathon]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Fri, 02 Feb 2024 16:17:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1706858157823/d335f279-df10-4632-89fe-451340520669.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-project-introduction">Project Introduction 🙋‍♂️</h2>
<p><a target="_blank" href="https://githash.netlify.app">GitHash</a> is an open-source web application licensed under MIT that harnesses the power of <strong>GitHub actions</strong> and <strong>gitHub API</strong> to effortlessly publish articles on Hashnode. With GitHash, you can seamlessly share detailed insights into your latest commits on GitHub, <strong>highlighting changes made</strong>, <strong>files added or deleted</strong>, and <strong>showcasing the actual code modifications</strong>. (Perfect for those who want to share their project progress to their audience.)</p>
<p>Furthermore, GitHash offers the <strong><mark>flexibility to configure and publish your custom markdown file</mark></strong> (markdown.md) after each repository push. To get started, simply connect your Hashnode account to GitHash, and let GitHash handle the publishing process for your desired repository.</p>
<blockquote>
<p>I'll be exploring the inner workings of this application in the upcoming section of this blog.</p>
</blockquote>
<hr />
<h2 id="heading-inspiration-idea-and-problem">Inspiration, idea, and problem : 🧐</h2>
<p>While exploring Hashnode, I encountered potential app ideas, yet I found myself uncertain about which elements to include. Following some brainstorming, the idea of automating the blog-sharing process emerged. <mark>Let's harness the capabilities of 'git push'</mark> .</p>
<p>The main idea is : 👇</p>
<p><strong>You can publish article in two ways :</strong></p>
<p>Option 1 : -&gt; Handing over all the responsibilities to gitHash, where your task is to push changes to the repository as you would do on any regular day.</p>
<p>Option 2 : -&gt; Specify the custom markdown file [markdown.md] at the root of repo and then proceed with pushing it to the repo.🚀</p>
<blockquote>
<p>Note : I will be explaining both of these methods in the Features section of this blog.</p>
</blockquote>
<hr />
<h2 id="heading-demo-of-the-website">Demo of the website : 💻</h2>
<ol>
<li><h3 id="heading-home-page"><strong>Home Page :</strong></h3>
<p> When you go to GitHash's website, the first thing you see is some text and buttons. You can login using your Google account. There is also a button that has a link to the app's GitHub repository.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706774482882/b9781311-f499-4bbb-b13e-a59ad6d6ca0c.png" alt class="image--center mx-auto" /></p>
</li>
<li><h3 id="heading-setup-credentials-page">Setup credentials page :</h3>
<p> This is the page where you need to add your <strong>Personal Access Token (PAT)</strong> and the <strong>Publication ID</strong> of your Hashnode account.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706774653814/30b265e3-bc4b-4291-86e7-a0e34c9b0db9.png" alt class="image--center mx-auto" /></p>
</li>
<li><h3 id="heading-repo-tracks">Repo Tracks :</h3>
<p> Here you can find all of your repository under which the blogpost are published after successfully committing the changes into the desired github repo. Additionally, you'll find a "See All" button to access more details.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706774689080/3cebb82b-af48-4a6f-a0cb-1dcbc82e8893.png" alt class="image--center mx-auto" /></p>
</li>
<li><h3 id="heading-blogs-under-specific-repo">Blogs under specific repo :</h3>
<p> Here, you can discover all of your blogposts published within a particular repository. The list includes the <code>commit message</code> along with its corresponding <code>blog post.</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706792662875/8c216440-0717-45bb-a9c0-6a72501c62ec.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<hr />
<h2 id="heading-demo-video">Demo Video : 📺</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/a_rUcsIkN7A">https://youtu.be/a_rUcsIkN7A</a></div>
<p> </p>
<hr />
<h2 id="heading-features-of-application">Features of application : ⚙</h2>
<p>Well, the application starts working when user hits <mark>git push</mark> to the desired repo.</p>
<p>The main function of this application is to look after the user latest commit inside the user selected repo. Then, utilizing the gitHub api to get all the information related to the latest commit. Then, generating the markdown based on the commit and publish the article to the hashnode. (This is pretty straight forward.)</p>
<p>BUT :</p>
<ol>
<li><h4 id="heading-what-if-you-want-to-publish-your-own-markdown-instead-of-publishing-the-the-auto-generated-md-by-our-application-which-includes-all-the-commit-details"><strong>What if you want to publish your own markdown instead of publishing the the auto generated md by our application which includes all the commit details ?</strong></h4>
<p> -&gt; It is not mandatory to publish an article with commit details (such as code changes, file modifications, additions, deletions) every time you push to the repository. However, you have the option to publish your own markdown file. <strong>Simply add a markdown[.]md file to the root of the repository and include the specific phrase "my md" in the commit message while pushing into repo.</strong></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706726029482/3bb2efc2-ec5e-4ad7-94d3-9fa6cfd9569d.png" alt class="image--center mx-auto" /></p>
<p> Then workflow starts reading the markdown file located at the root of the repo.👇</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706729452375/06ea6b8f-2322-45e9-a0a7-4e8e6b1c3e2b.png" alt class="image--center mx-auto" /></p>
</li>
<li><h4 id="heading-what-if-you-want-to-skip-publishing-article-but-still-want-to-push-the-change-to-repo"><strong>What if you want to skip publishing article but still want to push the change to repo ?</strong></h4>
<p> -&gt; Publishing the article with every commit to the repository is not obligatory. You have the flexibility to skip the publishing step. When providing the commit message, include the specific phrase <code>"avoid publish"</code> and GitHub actions will handle your choice accordingly.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706724625810/4224ab3b-ae7a-40e3-9c68-25583b002132.png" alt /></p>
</li>
<li><h4 id="heading-access-to-dashboard-to-track-the-publishing-process"><strong>Access to Dashboard to track the publishing process :</strong></h4>
<p> -&gt; Well it's not only about triggering the actions. It's necessary to get the update Whether the blogpost is published or not for better user experience. So, I made a minimal dashboard in order to keep the tracks and identify under which repo articles are published.</p>
<h4 id="heading-inside-the-dashboard-user-can"><strong>Inside the dashboard user can :</strong></h4>
<ul>
<li><p>Add the hashnode credentials. (PAT and Publication Id)</p>
</li>
<li><p>View the tracked repos</p>
</li>
<li><p>View the published blogpost under the specific repo.</p>
</li>
</ul>
</li>
</ol>
<hr />
<h2 id="heading-how-githash-works">How gitHash works ? 💁‍♀️</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1707327495530/6f9611bb-5070-43b4-8159-40114d72e9f2.png" alt class="image--center mx-auto" /></p>
<p><strong>Conclusion :</strong></p>
<ol>
<li><p>Git push with commit message -&gt; <code>git commit -m"added the changes"</code> and <code>git push</code></p>
</li>
<li><p>Triggers the github action -&gt; It extracts all the commit information and send it to the express server (commit name, repo URL, gitHash token from repo secrets)</p>
</li>
<li><p>Express server gets the repo information sent from actions into the <code>req.body</code></p>
</li>
<li><p>Then, Express server sends req to Github api with the github URL.</p>
</li>
<li><p>Github api returns the information for latest commit details.</p>
</li>
<li><p>Express server craft the raw markdown based on commit details.</p>
</li>
<li><p>Then, Express server sends the crafted raw markdown to mindsdb model.</p>
</li>
<li><p>Model returns the fully fleshed markdown.</p>
</li>
<li><p>Then finally, Express server req to hashnode graphql api along with fully fleshed markdown to <code>PublishPost</code> mutation.</p>
</li>
<li><p>Then, React App consumes the rest api to showcase the tracked repo along with the blogpost in respective commits.</p>
</li>
</ol>
<blockquote>
<p>Note: This architecture is applicable if the user wants to publish the article including the commit details (fetched from the github api). If User wants to publish own markdown then the <strong><mark>github api and mindsdb part are excluded </mark></strong> from the architecture diagram. Rest of the process is same.</p>
</blockquote>
<p>View the Architecture more clearly : 👉 <a target="_blank" href="https://excalidraw.com/#room=f689bcc0682c36362356,zdUaDetN8F96Yy234hWj2A">Here</a>.</p>
<p>As the MindsDB Cloud Editor is currently unavailable for use so I have utilized its local Python installations to conduct testing on my local machine. However, when publishing the application, I chose to comment out the section that involves MindsDB.</p>
<hr />
<h2 id="heading-use-cases-of-this-app">Use cases of this app : 👥</h2>
<p><strong>Craft the project documentation :</strong> Developers have the ability to create project documentation and choose when to share it with their audience. This involves adding a markdown (.md) file to the working repository. As developers implement new features into the project, they can update the markdown file locally and make a final push when the project is completed, ultimately publishing a comprehensive article on Hashnode.</p>
<hr />
<h2 id="heading-how-to-use-githash"><strong>How to use gitHash ?🔁</strong></h2>
<p>In this section, I will provide a brief overview of the necessary steps to utilize this application.</p>
<ol>
<li><p><strong>Visit website :</strong> Head towards the <a target="_blank" href="https://githash.netlify.app/">gitHash</a> website.</p>
</li>
<li><p><strong>Login :</strong> Authenticate via Google account.</p>
</li>
<li><p><strong>Add GitHash Token:</strong> Include the GitHash token (generated by the application) in the repository secrets labeled as <code>Githash_API_TOKEN</code>.</p>
</li>
<li><p><strong>Add Hashnode Credentials :</strong> Connect GitHash with Hashnode by adding the <code>publication ID</code> and <code>Personal Access Token.</code></p>
</li>
<li><p><strong>Workflow Setup:</strong> Add the provided <a target="_blank" href="https://github.com/rajeshkhadka200/gitHash/blob/main/README.md#yaml-file-copy-and-paste-into-your-workflow">YAML script</a> to the your repository actions inside 👉 <code>(.github/workflows)</code></p>
</li>
<li><p><strong>Push Changes:</strong> Test the application functionality by making changes to your codebase, adding a commit message, and pushing changes to the repository.</p>
<p> <code>(In case you want to publish the custom markdown, just prepare your markdown file and push to the repository including "my md" phrase anywhere in the commit message).</code></p>
<blockquote>
<p>The moment you hit the command <strong><mark>"git push"</mark> ,</strong> the github actions running in your repository starts working for you, based on your commit message.</p>
</blockquote>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706729452375/06ea6b8f-2322-45e9-a0a7-4e8e6b1c3e2b.png" alt class="image--center mx-auto" /></p>
<p> In the above screenshot the commit message is "<strong>my md - added the final test</strong>". It includes <strong><mark>"my md"</mark></strong> inside the commit message. So, gitHub action read the custom markdown file present at the root of the repo and curl to express server.</p>
</li>
</ol>
<hr />
<h2 id="heading-how-did-i-build-the-application"><strong>How did I build the application ?</strong></h2>
<p>I used react js for frontend, express for backend, mongodb for database and github actions to automate the flow.</p>
<h3 id="heading-tech-stack-used"><strong>Tech Stack used : 👩‍💻</strong></h3>
<p><strong>Development :</strong></p>
<ol>
<li><p>React JS -&gt;  Frontend</p>
</li>
<li><p>MongoDB Atlas -&gt; For mongoDB database</p>
</li>
<li><p>Express JS -&gt; For Rest API</p>
</li>
<li><p>Mindsdb -&gt; For generating overview and summary from the markdown.</p>
</li>
<li><p>Github API -&gt; For getting the details of latest commit.</p>
</li>
<li><p>Hashnode GraphQL API -&gt; To communicate with hashnode to perform mutations.</p>
</li>
<li><p>Ngrok -&gt; To expose the local express server to the public in order to use it in the github action. <mark>(As, it is not possible to curl to express server running on localhost from workflow.)</mark></p>
</li>
</ol>
<p><strong>Deployment :</strong></p>
<ol>
<li><p><a target="_blank" href="https://netlify.app">Netlify</a> -&gt; To deploy frontend.</p>
</li>
<li><p><a target="_blank" href="https://render.com">Render.com</a> -&gt; To deploy backend.</p>
</li>
</ol>
<h3 id="heading-process"><strong>Process :</strong></h3>
<p>No, it's not a whole tutorial here on how to make the whole website. Better you can think of it as a general idea and steps.</p>
<p><strong>1.🏠 Frontend :</strong> I am quite familiar with react so it wasn't that hard to start. I started with create-vite-app. And I have written some custom CSS also.</p>
<p><strong>2.📝 Rest API :</strong> As I was creating the frontend, somehow I had to communicate with the backend. So, I created an express server to listen on port 5000 and when I hit different endpoints. I was able to perform different tasks.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706796734275/ee158024-6db1-419e-8fbb-ce012b80d0b5.png" alt class="image--center mx-auto" /></p>
<p><strong>3.🛢️ Setting Database</strong> : I used mongoDB, if I have to be more specific, I used mongoDB atlas to store the information related to the <strong>user, repo and commits with respective blogpost</strong>. I made different models and only allowed the server to communicate.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706869101176/782f8aa4-5faf-47d3-96c4-e2af646352fa.png" alt class="image--center mx-auto" /></p>
<p><strong>4.🔁 Configuring GitHub workflow in Actions :</strong> This task was challenging as I was new to it. After numerous unsuccessful attempts 😓, I finally created the YAML action file.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706870140759/bab259c9-f11c-4c4e-be7a-2ff8af898375.png" alt class="image--center mx-auto" /></p>
<p><strong>5.🐘 Setting up mindsDB :</strong>  I have used mindsdb to generate the blog summary and blog introduction to attach it into the final markdown in the hashnode.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706738347562/01189761-4d27-4ba9-a45c-0d72630cffbd.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-yaml-script-used">Yaml script used :</h2>
<p>If I elaborate on the entire YAML file here, the article's length will unnecessarily extend. Therefore, I will provide a concise overview of the YAML scripts utilized during the hackathon period. 👉 <a target="_blank" href="https://github.com/rajeshkhadka200/gitHash/blob/main/README.md#full-explanation-">(Full Explanation)</a>.</p>
<h3 id="heading-brief-explanation">Brief Explanation :</h3>
<p>The YAML file configures a GitHub Actions workflow triggered on each push to the main branch. Workflow contains extracting repository information <strong>(URL, name, username),</strong> and extracting the <strong>commit message</strong> from the latest commit.</p>
<p>Additionally, it checks the commit message for specific keywords, and based on conditions, it sends data including repository details, commit message, repository secrets and, if applicable, markdown content to a backend API for further processing. The workflow handles scenarios where certain commit messages trigger <strong>skipping the publishing process</strong>.</p>
<p>-&gt; I plan to release this action on the GitHub Marketplace as soon as my hectic semester exams are over. 😅</p>
<h3 id="heading-actual-script">Actual Script :</h3>
<pre><code class="lang-yaml"><span class="hljs-comment"># Trigger the workflow on each push to the main branch</span>
<span class="hljs-attr">on:</span>
  <span class="hljs-attr">push:</span>
    <span class="hljs-attr">branches:</span> [<span class="hljs-string">main</span>]

<span class="hljs-comment"># Define the jobs to be executed</span>
<span class="hljs-attr">jobs:</span>
  <span class="hljs-comment"># Job for publishing the blog post</span>
  <span class="hljs-attr">publish-post:</span>
    <span class="hljs-comment"># Operating system for the job</span>
    <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span>

    <span class="hljs-comment"># Steps to be executed in the job</span>
    <span class="hljs-attr">steps:</span>
      <span class="hljs-comment"># Step to checkout the code</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Checkout</span> <span class="hljs-string">code</span>
        <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/checkout@v2</span>

      <span class="hljs-comment"># Step to extract repository information</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Extract</span> <span class="hljs-string">Repo</span> <span class="hljs-string">Info</span>
        <span class="hljs-attr">env:</span>
          <span class="hljs-attr">SECRET_API_KEY:</span> <span class="hljs-string">${{</span> <span class="hljs-string">secrets.Githash_API_TOKEN</span> <span class="hljs-string">}}</span>
        <span class="hljs-attr">id:</span> <span class="hljs-string">repo-info</span>
        <span class="hljs-attr">run:</span> <span class="hljs-string">|
          # Extract GitHub repository URL
          REPO_URL="https://github.com/${GITHUB_REPOSITORY}"
          echo "GitHub Repo URL: $REPO_URL"
</span>
          <span class="hljs-comment"># Get GitHub repository name</span>
          <span class="hljs-string">REPO_NAME=$(echo</span> <span class="hljs-string">$GITHUB_REPOSITORY</span> <span class="hljs-string">|</span> <span class="hljs-string">awk</span> <span class="hljs-string">-F/</span> <span class="hljs-string">'{print $2}'</span><span class="hljs-string">)</span>
          <span class="hljs-string">echo</span> <span class="hljs-string">"Repository Name: $REPO_NAME"</span>

          <span class="hljs-comment"># Get GitHub username</span>
          <span class="hljs-string">USER_NAME=$(echo</span> <span class="hljs-string">$GITHUB_REPOSITORY</span> <span class="hljs-string">|</span> <span class="hljs-string">awk</span> <span class="hljs-string">-F/</span> <span class="hljs-string">'{print $1}'</span><span class="hljs-string">)</span>
          <span class="hljs-string">echo</span> <span class="hljs-string">"GitHub Username: $USER_NAME"</span>

          <span class="hljs-string">API_KEY=$SECRET_API_KEY</span>
          <span class="hljs-string">echo</span> <span class="hljs-string">"API Key: $API_KEY"</span>

          <span class="hljs-comment"># Set output for later steps</span>
          <span class="hljs-string">echo</span> <span class="hljs-string">"::set-output name=repo-url::$REPO_URL"</span>
          <span class="hljs-string">echo</span> <span class="hljs-string">"::set-output name=repo-name::$REPO_NAME"</span>
          <span class="hljs-string">echo</span> <span class="hljs-string">"::set-output name=user-name::$USER_NAME"</span>
          <span class="hljs-string">echo</span> <span class="hljs-string">"::set-output name=secret-api-key::$API_KEY"</span>

      <span class="hljs-comment"># Step to extract commit message</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Extract</span> <span class="hljs-string">Commit</span> <span class="hljs-string">Message</span>
        <span class="hljs-attr">id:</span> <span class="hljs-string">extract-commit-message</span>
        <span class="hljs-attr">run:</span> <span class="hljs-string">|
          COMMIT_MESSAGE=$(git log --format=%B -n 1)
          echo "Commit Message: $COMMIT_MESSAGE"
          echo "::set-output name=commit-message::$COMMIT_MESSAGE"
</span>
      <span class="hljs-comment"># Step to check commit message and send data to backend accordingly</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Check</span> <span class="hljs-string">Commit</span> <span class="hljs-string">Message</span> <span class="hljs-string">and</span> <span class="hljs-string">Send</span> <span class="hljs-string">Data</span>
        <span class="hljs-attr">run:</span> <span class="hljs-string">|
          # Retrieve outputs from previous steps
          REPO_URL="${{ steps.repo-info.outputs.repo-url }}"
          REPO_NAME="${{ steps.repo-info.outputs.repo-name }}"
          USER_NAME="${{ steps.repo-info.outputs.user-name }}"
          SECRET_API_KEY="${{ steps.repo-info.outputs.secret-api-key }}"
          COMMIT_MESSAGE="${{ steps.extract-commit-message.outputs.commit-message }}"
</span>
          <span class="hljs-comment"># Check if commit message contains "avoid publish"</span>
          <span class="hljs-string">if</span> [[ <span class="hljs-string">$COMMIT_MESSAGE</span> <span class="hljs-string">==</span> <span class="hljs-string">*"avoid</span> <span class="hljs-string">publish"*</span> ]]<span class="hljs-string">;</span> <span class="hljs-string">then</span>
            <span class="hljs-string">echo</span> <span class="hljs-string">"Commit message contains 'avoid publish'. Skipping publishing."</span>
            <span class="hljs-string">exit</span> <span class="hljs-number">0</span>  <span class="hljs-comment"># Skip the rest of the steps</span>
          <span class="hljs-string">fi</span>

          <span class="hljs-comment"># Check if commit message contains "own md"</span>
          <span class="hljs-string">if</span> [[ <span class="hljs-string">$COMMIT_MESSAGE</span> <span class="hljs-string">==</span> <span class="hljs-string">*"my</span> <span class="hljs-string">md"*</span> ]]<span class="hljs-string">;</span> <span class="hljs-string">then</span>
            <span class="hljs-string">MARKDOWN_CONTENT=$(cat</span> <span class="hljs-string">markdown.md</span> <span class="hljs-string">|</span> <span class="hljs-string">jq</span> <span class="hljs-string">-s</span> <span class="hljs-string">-R</span> <span class="hljs-string">'.'</span> <span class="hljs-string">|</span> <span class="hljs-string">sed</span> <span class="hljs-string">-e</span> <span class="hljs-string">'s/^"//'</span> <span class="hljs-string">-e</span> <span class="hljs-string">'s/"$//'</span><span class="hljs-string">)</span>
            <span class="hljs-string">echo</span> <span class="hljs-string">"Markdown Content: $MARKDOWN_CONTENT"</span>
          <span class="hljs-string">else</span>
            <span class="hljs-string">MARKDOWN_CONTENT=""</span>
          <span class="hljs-string">fi</span>

          <span class="hljs-comment"># Include the secret, commit message, and markdown content in the payload</span>
          <span class="hljs-string">curl_data="{\"githubRepoUrl\":</span> <span class="hljs-string">\"$REPO_URL\",</span> <span class="hljs-string">\"repoName\":</span> <span class="hljs-string">\"$REPO_NAME\",</span> <span class="hljs-string">\"userName\":</span> <span class="hljs-string">\"$USER_NAME\",</span> <span class="hljs-string">\"secretApiKey\":</span> <span class="hljs-string">\"$SECRET_API_KEY\",</span> <span class="hljs-string">\"commitMessage\":</span> <span class="hljs-string">\"$COMMIT_MESSAGE\",</span> <span class="hljs-string">\"markdownContent\":</span> <span class="hljs-string">\"$MARKDOWN_CONTENT\"}"</span>
          <span class="hljs-string">echo</span> <span class="hljs-string">"Data to be sent: $curl_data"</span>

          <span class="hljs-comment"># Use curl to send data to the backend API</span>
          <span class="hljs-string">if</span> <span class="hljs-string">!</span> <span class="hljs-string">curl</span> <span class="hljs-string">-X</span> <span class="hljs-string">POST</span> <span class="hljs-string">'https://githash-server.onrender.com/api/publish'</span> <span class="hljs-string">\</span>
              <span class="hljs-string">-H</span> <span class="hljs-string">"Content-Type: application/json"</span> <span class="hljs-string">\</span>
              <span class="hljs-string">-d</span> <span class="hljs-string">"$curl_data"</span><span class="hljs-string">;</span> <span class="hljs-string">then</span>
            <span class="hljs-string">echo</span> <span class="hljs-string">"Error: Failed to send data to the backend."</span>
            <span class="hljs-string">exit</span> <span class="hljs-number">1</span>
          <span class="hljs-string">fi</span>
</code></pre>
<hr />
<h2 id="heading-future-plans">Future plans :</h2>
<p>I'm uncertain whether I'll integrate these features in the future, but I have some interesting plans in mind. Hopefully, I'll implement these features once my semester exams are over. 😅</p>
<ol>
<li><p><strong>Realtime notification to frontend on publishing blog :</strong> Since the primary request was signaled by the GitHub action, successful responses are also relayed back to GitHub actions. However, in the future, I plan to integrate a real-time notification system for clients upon article publication.</p>
</li>
<li><p><strong>All the logs of github actions showed in the UI itself :</strong> It's not always the same case. Sometimes, publishing the blogpost may be interrupted due to various reasons. So, in this case, I will be integrating showing all the logs to the user account in the gitHash Dashboard.</p>
</li>
<li><p><strong>Enable to add the custom cover image:</strong> I have integrated the app to use a static blog cover image at the moment (<a target="_blank" href="https://firebasestorage.googleapis.com/v0/b/mero-room-f06e5.appspot.com/o/images%2FREPO%20UPDATE%20\(1\).png?alt=media&amp;token=cdd1985e-4239-4187-852f-9b196627a513">view here</a>). However, I plan to introduce a feature in the future that will enable users to incorporate their own custom blog cover images. This might involve allowing users to input an image URL in the repository secrets or specifying it directly in the markdown file using a label such as "coverimg". This way, I can programmatically extract the cover image to incorporate it within the mutation.</p>
</li>
</ol>
<hr />
<h2 id="heading-what-i-learned"><strong>What I learned : 💡</strong></h2>
<p>I've done a few projects before, but this one was different. During the hackathon, I learned to use <strong>GraphQL API</strong> to perform queries and mutations. I also got good command at <strong>GitHub Actions</strong>, figuring out how to handle <strong>workflows, jobs, and steps</strong>. But I can summarize my outcomes here as follows:</p>
<ul>
<li><p><strong>Using Graphql :</strong> I was able to make some queries and mutations.</p>
</li>
<li><p><strong>GitHub actions :</strong> From complete beginner to being able to use it conveniently.</p>
</li>
<li><p><strong>GitHub API :</strong> I got to know how flexible GitHub API is. 😊</p>
</li>
</ul>
<hr />
<h2 id="heading-important-links"><strong>Important links : 🔗</strong></h2>
<ol>
<li><p><a target="_blank" href="https://github.com/rajeshkhadka200/gitHash">gitHash code</a></p>
</li>
<li><p><a target="_blank" href="https://githash.netlify.app/">Website</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/rajeshkhadka200/project-one/actions/">Repo used for Testing</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/rajeshkhadka200/gitHash/blob/main/README.md">Yaml Script</a></p>
</li>
<li><p><a target="_blank" href="https://inforajesh.hashnode.dev">Sample articles shared during the development process</a></p>
</li>
</ol>
<hr />
<h2 id="heading-resources-that-helped-me"><strong>Resources that helped me 🎁</strong></h2>
<ol>
<li><p><a target="_blank" href="https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/GitHub-Actions-Secrets-Example-Token-Tutorial">Access the repo secrets in workflow</a></p>
</li>
<li><p><a target="_blank" href="https://docs.github.com/en/rest/quickstart?apiVersion=2022-11-28">Set up secrets to repo.</a></p>
</li>
<li><p><a target="_blank" href="https://stackoverflow.com/questions/76423423/how-to-fix-the-your-account-is-limited-to-1-simultaneous-ngrok-agent-session-n">Ngrok session Error fix</a></p>
</li>
</ol>
<hr />
<h2 id="heading-final-words">Final Words : 🎙</h2>
<p>The hackathon was an excellent learning experience. I explored GraphQL API, GitHub Actions, the developer console's network tab, and improved my Google search skills. Collaborating with the community on Discord to shape the app made the journey truly enjoyable. Thanks to <a class="user-mention" href="https://hashnode.com/@test-favourite">Favourite Jome</a> for amazing discord support. 🙂</p>
<p>Feel free to leave a comment if you have any questions - I'd be more than happy to respond. 😊</p>
<p>Connect with me on Twitter <a target="_blank" href="https://twitter.com/rajeshkhadka200">@rajeshkhadka200</a></p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Debugging Feb #2 : Cannot set headers after they are sent to the client]]></title><description><![CDATA[In the series of debugging Feb, I am explaining the different types of errors that I encountered while working on a different project which ultimately became the reason to stay long hours in front of my laptop screen. Wrapping up the project was the ...]]></description><link>https://blog.rajeshkhadka.info.np/debugging-feb-2-cannot-set-headers-after-they-are-sent-to-the-client</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/debugging-feb-2-cannot-set-headers-after-they-are-sent-to-the-client</guid><category><![CDATA[DebuggingFeb]]></category><category><![CDATA[Node.js]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Tue, 07 Mar 2023 04:24:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1678162883525/8a786230-6240-4c9d-b0c4-56cf60dc9578.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the series of debugging Feb, I am explaining the different types of errors that I encountered while working on a different project which ultimately became the reason to stay long hours in front of my laptop screen. Wrapping up the project was the main target but these types of errors which I had never seen before pushed me into the world of debugging.</p>
<p>In the previous article of this series, I discussed the cors error and how I solved the problem after long hours of debugging. In this article, I'm here to discuss the popular error message <mark>"Cannot set headers after they are sent to the client"</mark> which I faced while using node, express.</p>
<hr />
<h3 id="heading-overview">Overview</h3>
<p>Errors are something that developers run into frequently. However, the "Cannot set headers after they are sent to the client" error can be particularly frustrating, as it can be challenging to pinpoint the root cause of the problem. In this blog post, I will share my experience with this error and the steps I took to fix it.</p>
<p>I've been using Node.js for more than two years, and I am comfortable on making the controllers and routes. But as I was working on my <strong>"YODIO"</strong> project, a YouTube-to-audio converter, I came across this error message that I had never seen before.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678153803273/84758f06-a63c-44f7-9719-7e2f2b7b4c66.png" alt class="image--center mx-auto" /></p>
<hr />
<h3 id="heading-problem">Problem: <strong>❓</strong></h3>
<p>While sending <code>HTTP</code> request to the express server <code>/api/convert</code>, I encountered this error message. The controller associated with this route was handling a bit long and asynchronous task whose job was to accept the URL of the youtube video, extract the audio from the video and save the filename in the database after saving the audio files in the desired directory.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678080970257/ceda8aa2-c16c-45aa-80d5-2bf6a4d90739.gif" alt class="image--center mx-auto" /></p>
<hr />
<h3 id="heading-the-investigation"><strong>The Investigation: 👮‍♂️</strong></h3>
<p>This time, the investigation was simple; after submitting an HTTP request to my API route, my application crashed. The app crashed regardless of whether it was sent through Postman or the app itself.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678080526662/e0d65b8e-0463-48e2-b3a4-c8e1c3618e27.png" alt class="image--center mx-auto" /></p>
<hr />
<h3 id="heading-the-breakthrough"><strong>The Breakthrough: ✅</strong></h3>
<p>After a lot of debugging the code and googling, I was finally able to sort out the problem. The mistake was in my code itself. After some code review, I came to know that, I was sending multiple responses and was trying to modify headers after it has been already been sent to the client. At the same time, I was trying to send the response inside the for loop which is not appreciable. Later on, I modified and the problem was solved.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678154803687/8dd227a1-530e-48af-93c9-c87513ead517.gif" alt class="image--center mx-auto" /></p>
<p>So, if you see this error, try to look for anything that tries to send a header after some of the body has already been written. For example, look for callbacks that are accidentally called twice, or any event that happens after the body is sent.</p>
<hr />
<h3 id="heading-the-root-cause-of-the-problem-in-short">The root cause of the problem (in short) : ✨</h3>
<ol>
<li><p>Improperly written asynchronous code that allows multiple branches to send a response.</p>
</li>
<li><p>Not returning from the request handler to stop further code in the request handler from running after you've sent a response.</p>
</li>
<li><p>Calling <code>next()</code> when you've already sent a response.</p>
</li>
<li><p>Improper logic branching allows multiple code paths to execute an attempt to send a response.</p>
</li>
</ol>
<hr />
<h3 id="heading-demonstration">Demonstration: 🖥</h3>
<p>Here is an example that demonstrates some possible causes to pop out this error message.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> convertVideo = <span class="hljs-function">() =&gt;</span> {
   <span class="hljs-keyword">let</span> isSaved = <span class="hljs-literal">true</span>; 
   <span class="hljs-keyword">if</span> (isSaved) {
        res.json({<span class="hljs-attr">mesg</span> : <span class="hljs-string">"Saved suvvessfully.."</span>});
    } <span class="hljs-keyword">else</span> {
        res.status(<span class="hljs-number">500</span>).json({<span class="hljs-attr">error</span>: <span class="hljs-string">'video not saved !!'</span>});
    }
    res.send(<span class="hljs-string">'This is another response !!'</span>);
}
</code></pre>
<p>The code snippet above features an if-else block where, each time, either the if or else block will execute and send a response to the client, regardless of whether the condition is true or false. But Later on, we are again trying to modify the response that has been already sent to the client. Due to this, we got an error message: <mark>"Cannot set headers after they are sent to the client"</mark></p>
<p>If you use the return keyword in your else condition your code will run properly.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> convertVideo = <span class="hljs-function">() =&gt;</span> {
   <span class="hljs-keyword">let</span> isSaved = <span class="hljs-literal">true</span>; 
   <span class="hljs-keyword">if</span> (isSaved) {
        <span class="hljs-keyword">return</span> res.json({<span class="hljs-attr">mesg</span> : <span class="hljs-string">"Saved suvvessfully.."</span>});
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> res.status(<span class="hljs-number">500</span>).json({<span class="hljs-attr">error</span>: <span class="hljs-string">'video not saved !!'</span>});
    }
    <span class="hljs-keyword">return</span> res.send(<span class="hljs-string">'This is another response !!'</span>);
}
</code></pre>
<p>☝ This stops the execution of the program after sending the response to the client.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> convertVideo = <span class="hljs-function">() =&gt;</span> {
    <span class="hljs-keyword">for</span>(<span class="hljs-keyword">let</span> i=<span class="hljs-number">0</span>; i&lt;<span class="hljs-number">5</span>; i++) {
    res.json({<span class="hljs-attr">mesg</span> : <span class="hljs-string">"Saved suvvessfully.."</span>});
  }
}
</code></pre>
<p>With the code above, we're attempting to send the response within the for loop, which will send the response four times in a row. When the code is initially executed, the client receives the response. But, we are attempting to change the response in its further execution once more. So, that we will encounter the same error message.</p>
<hr />
<h3 id="heading-nature-of-https-req-and-response">Nature of <code>HTTPS</code> req and response 🌐</h3>
<p>HTTP follows a request-response cycle where the client sends a request to the server and the server responds with a single response. Once the response is sent, the connection between the client and the server is closed, making it impossible to send multiple responses without opening a new connection.</p>
<p>In Node.js and any other HTTP server, it is not allowed to send multiple responses to a single HTTP request because the HTTP protocol specifies that each request can only have one response.</p>
<hr />
<h3 id="heading-conclusion">Conclusion: 👋</h3>
<p>Debugging can be a challenging process, but with patience and persistence, even the most complex issues can be resolved. In the case of this error, I was able to overcome this error and improve the application's functionality. By sharing my experience, I hope to help other developers facing similar issues.</p>
<hr />
<h3 id="heading-call-to-action"><strong>Call-to-Action:</strong></h3>
<p>Have you encountered a similar problem when developing your application? I invite you to share your troubleshooting experiences in the comments area below. Also, consider using <a target="_blank" href="https://yodio.netlify.app">YODIO</a> to enjoy the YouTube audio.</p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Debugging Feb #1: How I Overcame a CORS Error when posting to Dev.to API.]]></title><description><![CDATA[Introduction: 🙋‍♀️
As a developer, debugging is an inevitable part of the development process. Recently, while working on my project Easy Blog, I encountered a CORS error  when attempting to post content to the Dev.to API. In this post, I'll share m...]]></description><link>https://blog.rajeshkhadka.info.np/debugging-feb-1-how-i-overcame-a-cors-error-when-posting-to-devto-api</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/debugging-feb-1-how-i-overcame-a-cors-error-when-posting-to-devto-api</guid><category><![CDATA[DebuggingFeb]]></category><category><![CDATA[CORS]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[React]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Fri, 24 Feb 2023 19:24:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1677266585374/e14c13b0-4287-44fa-be4a-cab08cecc013.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-introduction">Introduction: 🙋‍♀️</h3>
<p>As a developer, debugging is an inevitable part of the development process. Recently, while working on my project Easy Blog, I encountered a <strong><mark>CORS error </mark></strong> when attempting to post content to the Dev.to API. In this post, I'll share my journey of investigating and resolving the issue.</p>
<hr />
<h3 id="heading-about-easy-blog">About Easy Blog:</h3>
<p>Easy Blog is a platform that enables users to publish their blog posts simultaneously on different platforms without the hassle of rewriting their content in various formats. It utilizes the Hashnode <strong>GraphQL API</strong> to post content to Hashnode and the <strong>Dev.to REST</strong> API to post to dev.to.</p>
<p>Simplify your blogging process with <a target="_blank" href="https://easyblogs.netlify.app/">Easy Blog</a> - it's always there to help you automate.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677301199837/d2a3bd67-0243-4094-b43d-b39679b6b581.png" alt class="image--center mx-auto" /></p>
<hr />
<h3 id="heading-the-problem">The Problem: ❓</h3>
<ol>
<li>When I attempted to post my content to the dev.to rest API directly from the client side of my Easy Blog application, I ran into a <strong><mark>CORS error</mark></strong>.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677265546020/88d9a68a-035d-4df8-9005-3bbe4c8f51ec.gif" alt class="image--center mx-auto" /></p>
<h3 id="heading-the-investigation">The Investigation: 👮‍♂️</h3>
<p>To solve <mark>this cors</mark> issue, I started investigating the problem by looking at the code. I tested the Dev.to API using Postman, which worked perfectly fine, and I also messed up my Axios post request by including different request headers, but nothing worked.</p>
<h3 id="heading-the-breakthrough">The Breakthrough: ✅</h3>
<p>After several hours of investigation and Googling, I finally discovered the root cause of the problem. I figured out that the CORS error occurs when a web page hosted on one domain tries to access a resource hosted on a different domain. As my client was running on <code>http://localhost:3000</code> which was requesting the API hosted on a different domain i.e <code>https://dev.to/api</code>. And also I realized that the client-side application was making an unsecured request <strong><mark>(HTTP)</mark></strong> to an API that required a secure request <strong><mark>(HTTPS)</mark></strong>.</p>
<p>Additionally, the client-side app may be sending custom headers along with requests that may not be accepted by the resources that I was trying to access. Following several hours of investigation and research, To address this problem, I decided to send my request to a custom Node.js server first, and then handle the Dev.to API from there. This solution <strong><mark>resolved the CORS error</mark></strong> and allowed me to successfully post my content to dev.to from the Easy Blog application.</p>
<h3 id="heading-why-this-aproach-worked">Why this aproach worked ?</h3>
<p>Solving the issue was possible through this approach because certain APIs may permit requests originating from the server but not from the client. Moreover, some APIs are programmed to authorize only particular headers in requests.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677265583990/b08655f0-ee15-4dd9-9702-a4c65a26cc4c.gif" alt class="image--center mx-auto" /></p>
<blockquote>
<p>Thanks to Hashnode, it did not give me such a frustrating error. 😄</p>
</blockquote>
<hr />
<h3 id="heading-the-lessons-learned">The Lessons Learned: 😅</h3>
<p>From this experience, I learned that it's important to thoroughly investigate and test the code when encountering an error, and not to assume that the code is correct. Additionally, it's important to ensure that the <code>client-side application is making secure requests to APIs</code> that require security, and custom headers are accepted by the resources being accessed.</p>
<hr />
<h3 id="heading-conclusion">Conclusion: 👋</h3>
<p>Debugging can be a challenging process, but with patience and persistence, even the most complex issues can be resolved. In the case of Easy Blog, I was able to overcome a <strong><mark>CORS error</mark></strong> and improve the application's functionality. By sharing my experience, I hope to help other developers facing similar issues.</p>
<hr />
<h3 id="heading-call-to-action">Call-to-Action:</h3>
<p>Have you encountered a similar issue while developing your application? Share your debugging tales in the comments section below. And don't forget to try out <a target="_blank" href="https://easyblogs.netlify.app/">Easy Blog</a> to streamline your blogging process!</p>
<p>And also don't forget to keep an eye out for the upcoming posts in our #debuggingfeb series, where I'll be sharing more insightful articles on debugging and problem-solving. Stay tuned!</p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Code & Progress: A Development Blog]]></title><description><![CDATA[When I talk about development, I usually get more comfortable talking about website development and app development. But development is not only about the development of web apps and mobile apps, it refers to the development of desktop applications t...]]></description><link>https://blog.rajeshkhadka.info.np/code-progress-a-development-blog</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/code-progress-a-development-blog</guid><category><![CDATA[WeMakeDevs]]></category><category><![CDATA[development]]></category><category><![CDATA[chrome extension]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Sun, 29 Jan 2023 19:08:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1675192057759/8c08869b-2e7d-4bb1-a0fb-0e8aa2b7494f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I talk about development, I usually get more comfortable talking about <strong>website development</strong> and <strong>app development</strong>. But development is not only about the development of web apps and mobile apps, it refers to the development of desktop applications too.</p>
<p>But in this blog, I am covering the sector of <strong>web development</strong> and <strong>app development.</strong></p>
<p>________________________________________________________________________________</p>
<h3 id="heading-my-some-projects">My some projects</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>App Name</strong></td><td>Live Demo</td><td>Description</td></tr>
</thead>
<tbody>
<tr>
<td>Mero Room (mobile application)</td><td><a target="_blank" href="https://expo.dev/@rajeshkhadka200/mero_room">Visit App</a> <a target="_blank" href="https://github.com/rajeshkhadka200/mero-room-app">View on GitHub</a></td><td>This is a mobile application that is useful to search for a room or House for rent in your location</td></tr>
<tr>
<td>Easy Blog (web app)</td><td><a target="_blank" href="https://easyblogs.netlify.app/">Visit Website</a> <a target="_blank" href="https://github.com/rajeshkhadka200/easy-blog">View on GitHub</a></td><td>It open a source project from where you can easily publish your articles on different blogging platforms at once. (<a target="_blank" href="https://dev.to/rajeshkhadka/introducing-easyblog-for-mongodb-atlas-hackathon-2gbk">Read the article on Dev</a>)</td></tr>
<tr>
<td>Collab (web app)</td><td><a target="_blank" href="https://collabb-app.netlify.app/">Visit Website</a> <a target="_blank" href="https://github.com/rajeshkhadka200/collab">View on GitHub</a></td><td>Collab is a real-time code sync tool where one user can collaborate with any other user to write code at the same time. (<a target="_blank" href="https://blog.rajeshkhadka.info.np/meet-my-latest-project-realtime-code-collaboration-tool">Read the article on Hashnode</a>)</td></tr>
<tr>
<td>Suryaghat Library</td><td><a target="_blank" href="http://suryaghatlibrary.com/">Visit Website</a> <a target="_blank" href="https://github.com/rajeshkhadka200/suryaghat-library">View on GitHub</a></td><td><strong>Suryaghat Library</strong> is a nonprofit organization established with the motive of providing free online book service to readers through an application and website.</td></tr>
</tbody>
</table>
</div><p>Feel free to visit my GitHub to see my projects: <a target="_blank" href="https://github.com/rajeshkhadka200">Visit</a></p>
<h3 id="heading-some-development-tips">Some Development tips :</h3>
<ol>
<li><p>Write clean, readable code</p>
</li>
<li><p>Automate repetitive tasks</p>
</li>
<li><p>Continuously learn and improve your skills</p>
</li>
<li><p>Collaborate with others</p>
</li>
<li><p>Test your code thoroughly</p>
</li>
<li><p>Utilize version control</p>
</li>
</ol>
<h3 id="heading-building-a-chrome-extension-to-disable-the-youtube-shorts-on-the-web">Building a chrome extension to disable the youtube shorts on the web.</h3>
<p>Here in this section of the blog, I am explaining How we can disable the shorts on YouTube web because these shorts are the most distracting videos and time-consuming content which sucks you badly. You scroll down but never end up. So this is the most time-killing content that auto decreases productivity.</p>
<p>So, folks let's disable the youtube shorts programmatically.</p>
<ol>
<li><p>First set up the <mark>manifest.json</mark> file</p>
<pre><code class="lang-json"> {
   <span class="hljs-attr">"name"</span>: <span class="hljs-string">"reels remover"</span>,
   <span class="hljs-attr">"description"</span>: <span class="hljs-string">"reels remover is the chrome extension which saves a lot of time by removing the youtube reels."</span>,
   <span class="hljs-attr">"version"</span>: <span class="hljs-string">"1.0"</span>,
   <span class="hljs-attr">"manifest_version"</span>: <span class="hljs-number">3</span>,
   <span class="hljs-attr">"content_scripts"</span>: [
     {
       <span class="hljs-attr">"matches"</span>: [<span class="hljs-string">"https://www.youtube.com/"</span>],
       <span class="hljs-attr">"js"</span>: [<span class="hljs-string">"content.js"</span>]
     }
   ]
 }
</code></pre>
</li>
</ol>
<p>This is the manifest.json file which is the most essential if you are working on a chrome extension.</p>
<ol>
<li><p>Set up the content_script file <mark>content.js</mark></p>
<pre><code class="lang-javascript"> <span class="hljs-built_in">document</span>.addEventListener(<span class="hljs-string">"DOMContentLoaded"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
   <span class="hljs-keyword">let</span> elem = <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">".style-scope ytd-guide-entry-renderer"</span>);
   elem.parentNode.removeChild(elem);
 });
</code></pre>
</li>
</ol>
<p>This code simply finds the shorts on the tab and removes the element from the DOM.</p>
<ol>
<li>After this, you can simply load these files to chrome to get up and running.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1675191565743/7189fab9-17d0-4f7d-a145-bfd345761ba9.png" alt class="image--center mx-auto" /></p>
<p>Make sure that the developer option is always on when you test the extension on your local machine.</p>
<p>_________________________________________________________________________________________</p>
<h3 id="heading-wrap-up">Wrap up</h3>
<p>I had this much to share but we can stay connected on <a target="_blank" href="https://twitter.com/rajeshkhadka200"><strong>Twitter</strong></a> for sure. Thanks for bearing be till the point.</p>
]]></content:encoded></item><item><title><![CDATA[2022 for me as a developer ! - Dev Retro 2022 🔥]]></title><description><![CDATA[Introduction 🙋‍♂️

Before starting my journey, it's really important to understand who am I. So, let me introduce myself first, Hi there👋 I'm just a student carrying a bag on his back and going to the community school. Apart from this, I'm a boy tr...]]></description><link>https://blog.rajeshkhadka.info.np/2022-for-me-as-a-developer-dev-retro-2022</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/2022-for-me-as-a-developer-dev-retro-2022</guid><category><![CDATA[#DevRetro2022]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Learning Journey]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Fri, 30 Dec 2022 06:14:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1672380693544/80b8e8f5-14cb-4eff-8e21-761ad3d92634.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction 🙋‍♂️</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672279652551/fc1b7a12-046a-403f-b1d4-0d3bec6d348d.png" alt class="image--center mx-auto" /></p>
<p>Before starting my journey, it's really important to understand who am I. So, let me introduce myself first, Hi there👋 I'm just a student carrying a bag on his back and going to the community school. Apart from this, I'm a boy trying to learn Full Stack Development on my own, besides the pressure of <strong>Physics, Chemistry and Math</strong>.</p>
<blockquote>
<p>Ley Readers: Why didn't he mention his name 🙄 ?</p>
<p>✅ On a serious note, My name is <strong>Rajesh Khadka. 😂</strong></p>
</blockquote>
<p>Whether it's creating an app that helps people stay organized or building a website that connects people with a common interest, I find joy in using my skills to improve the world around me.</p>
<p>_________________________________________________________________________________</p>
<h2 id="heading-my-experience-in-2022">My experience in 2022: 🚀</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672280084177/d0627a63-8930-40ab-b54f-a2231913930e.png" alt class="image--center mx-auto" /></p>
<p>Heading back toward 2022, this year provided me with a lot of fun and good opportunities with some rejections, which I am going to discuss Later on in this blog. I believe that 2022 was a standout year for me as a developer because I had the chance to work on some interesting ideas and also received some quality projects from my clients. This thing I can't explain is that some people (clients) are not wise.. haha 😂. It was a bad experience for me as a developer in 2022.</p>
<blockquote>
<p>Come on, you know exactly what kind of clients I'm referring to. 😂</p>
</blockquote>
<p>_________________________________________________________________________________</p>
<h2 id="heading-projects">Projects 🖥</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672281710352/9a2c6cc5-69db-44d1-8be6-c3aa4010a5cc.png" alt class="image--center mx-auto" /></p>
<p>I believe that technology has the power to change the world and make a positive impact on people's lives. That's why I'm so passionate about using my skills as a developer to build meaningful and useful products that solve real problems. ✅</p>
<blockquote>
<p>Even though I don't consider myself to be exceptionally skilled, I really enjoy the process of building projects.</p>
</blockquote>
<p>Here I have some few projects that I'd like to share with you :</p>
<h3 id="heading-1-mero-room">1. Mero Room</h3>
<p>This is an application that makes the connection between the room seeker and the room owner. The app aims to help address the difficulties that people can encounter when searching for a place to live. The application is not launched yet in the play store but we are planning to launch this app at the very beginning of 2023. I'm referring to <code>we</code> because this is the group project done by me and my friend.</p>
<ul>
<li><p>Download: <a target="_blank" href="https://expo.dev/artifacts/eas/hUFxGeMKvJivaLAeRLPkhS.apk">Mero Room</a>)</p>
</li>
<li><p>Source code: view on <a target="_blank" href="https://github.com/rajeshkhadka200/mero-room-app">GitHub</a></p>
</li>
</ul>
<h4 id="heading-learnings">Learnings:</h4>
<p>Maybe this project is the turning point of my 2022. This was the first mobile application that I built in my entire four years of programming Journey. Although, it was challenging to set up <mark>React Native</mark> for me and tough to understand the <mark>gigantic error</mark> it throws but this project provided me a path to explore Mobile Development too.</p>
<p>_________________________________________________________________________________</p>
<h3 id="heading-2-collab">2. Collab</h3>
<p>Collab is a Real-time code sync tool where one user can collab with any other user to write code at the same time. Besides this, users can save written code snippets to the website by creating a profile on the website. <code>Why don't you try it yourself 👉 ?</code> <a target="_blank" href="https://collabb-app.netlify.app/">open website.</a></p>
<ul>
<li><p>Visit: <a target="_blank" href="https://collabb-app.netlify.app/">Collab</a></p>
</li>
<li><p>Source code: <a target="_blank" href="https://github.com/rajeshkhadka200/collab">view on GitHub</a></p>
</li>
</ul>
<h4 id="heading-learnings-1">Learnings:</h4>
<p>This was the first project where I used <mark>socket io</mark> and <mark>redis</mark> together. Here in this project, I learned all about emitting data to clients and listening to the events from at server side. It was really fun.</p>
<p>I was really excited and motivated when I saw this from Hashnode: <a class="user-mention" href="https://hashnode.com/@eleftheriabatsou">Eleftheria Batsou</a>. I'm really happy about their post of appreciation. ♥</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672254833267/c50afc09-9bd0-4f03-be6c-6618c9c7c3d8.png" alt class="image--center mx-auto" /></p>
<p>_________________________________________________________________________________</p>
<h3 id="heading-3-suryaghat-library">3. Suryaghat Library</h3>
<p>This is the project that I built for my client in 2022. It is a web application that was developed with the motive of providing books for free.</p>
<ul>
<li><p>Visit: <a target="_blank" href="https://suryaghatlibrary.com/">Suryaghat Library</a></p>
</li>
<li><p>Source code: private repo - security concern 😂</p>
</li>
</ul>
<h4 id="heading-learnings-2">Learnings:</h4>
<p>This project was based on uploading <mark>files</mark> to the server and <mark>serving those files</mark> to the frontend. So, it was my very first experience with such operations and I enjoyed the process.</p>
<blockquote>
<p>If you didn't notice, this project belongs to the same client which I previously mentioned.</p>
</blockquote>
<p>_________________________________________________________________________________</p>
<h3 id="heading-4-easy-blog">4. Easy Blog</h3>
<p>Easy blog is an open source project from where you can easily publish your articles on different blogging platforms at once. You just need to add some keys of the different blogging platforms like (<a target="_blank" href="http://Dev.to">Dev</a>, Hashnode) and you are ready to publish your article.</p>
<ul>
<li><p>Visit: <a target="_blank" href="https://easyblogs.netlify.app/">Easy Blog</a></p>
</li>
<li><p>Source code: <a target="_blank" href="https://github.com/rajeshkhadka200/easy-blog">view on GitHub</a> 😂</p>
</li>
</ul>
<h4 id="heading-learnings-3">Learnings:</h4>
<p>This is only one project which taught the very basics of <mark>graphql </mark> because the API endpoint by Hashnode was served via graphql. I was really excited to learn about <mark>mutations, queries</mark> and many more.</p>
<p>_________________________________________________________________________________</p>
<h2 id="heading-achievements">Achievements 🏆</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672379294254/dd4f2989-ecf4-4cdc-a181-c464e9ac99ca.png" alt class="image--center mx-auto" /></p>
<p>One of the things I am most proud of in my journey as a developer in 2022 is working on good projects and interesting ideas which lead me towards achieving something that I always wanted to. Here in this section, I will be discussing some of my achievements.</p>
<p>Here are some achievements :</p>
<ol>
<li><p>I was one of the <strong>runner up</strong> in the Hashnode blogging competition.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672375815180/76e76d81-dd80-4dcc-be22-06ca3149e1c5.jpeg" alt /></p>
</li>
<li><p><strong>Runner up</strong> in notJust.hack hackathon on building App <strong>Mero Room.</strong></p>
</li>
</ol>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://twitter.com/VadimNotJustDev/status/1597292800323846146?s=20&amp;t=qW79FYtu4rzXTTUjfuHIfw">https://twitter.com/VadimNotJustDev/status/1597292800323846146?s=20&amp;t=qW79FYtu4rzXTTUjfuHIfw</a></div>
<p> </p>
<p>______________________________________________________________________________</p>
<h2 id="heading-rejections">Rejections 👑</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672379399504/06ff4437-a0c7-4b93-bea9-77f5ce072f2b.png" alt class="image--center mx-auto" /></p>
<p>As I already mentioned, 2022 was a standout year for me. Although there are few Achievements inside my pocket this year, I participated in many events in 2022 which I failed to win. Rather it's perfect to say the result was not in my favor. Simply, I can say I was <strong>rejected</strong>.</p>
<p>I participated in <mark>Redis x dev</mark> hackathon in May where I got only a participation badge hanging on my <a target="_blank" href="http://dev.to">dev.to</a> profile. Similarly, I participated in <mark>mongo DB x dev</mark> Hackathon and the result was the same "badge <strong>hanging on profile</strong>". I also failed to win the title of <mark>#4articles4week</mark> of hashnode this year only. I also failed the <mark>netlify x Hashnode</mark>Hackathon.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672471347259/5ee35a6a-8ff4-42f4-b628-5521d1e87ba1.png" alt /></p>
<p>Even though I didn't win the hackathon prize, I feel like I came away from the experience with a lot of new insights and skills that will be useful to me as a developer in the future.</p>
<p>_________________________________________________________________________________</p>
<h2 id="heading-learnings-from-2022">Learnings from 2022 🍀</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672379512183/d9a17086-735d-4441-a8c6-3fd1d3a4a4b5.png" alt class="image--center mx-auto" /></p>
<p>As I look back on the past year, I am filled with a sense of gratitude and accomplishment for all that I have learned and achieved as a developer. Here, I'd like to share some of the key lessons that have shaped me in 2022.</p>
<h3 id="heading-1-working-with-clients">1. Working with clients</h3>
<p>In 2022, I learned the importance of working with clients as a developer. I gained valuable experience in communication, collaboration, and problem-solving, which have helped me to better understand the needs of my clients and deliver high-quality products and services.</p>
<h3 id="heading-2-working-on-a-team">2. Working on a team</h3>
<p>One of the most valuable lessons I learned as a developer in 2022 was how to work effectively in a team. I learned how to communicate clearly, listen actively, and contribute my skills and expertise to the group to achieve our shared goals. This has been crucial in helping me to build successful projects and relationships with my clients and colleagues. 👨‍👩‍👦</p>
<h3 id="heading-3-staying-current-with-industry-trends">3. Staying current with industry trends</h3>
<p>It's really important to stay up to date with the current industry trend and it's really hard to do. But this 2022 taught me to stay current with new trends and good practices used in this field. This has helped me to stay ahead of the curve and stay relevant in a constantly evolving industry. 📈</p>
<blockquote>
<p>Apart from this, 2022 taught me to manage time efficiently and this was important because I know How tough it is to manage time parallelly with <mark>PCM</mark> <strong>(Physics, Chemistry and Maths).</strong></p>
<ul>
<li><p>Time Management</p>
</li>
<li><p>Communication skills</p>
</li>
</ul>
</blockquote>
<p>_________________________________________________________________________________</p>
<h2 id="heading-final-words">Final words 💖</h2>
<p>As I bring this blog to a close, I am filled with a sense of gratitude and accomplishment. Looking back on everything that has happened in 2022, I am overwhelmed by the love and support of my family, friends, and colleagues, who have helped me to navigate the ups and downs of the past year. Despite the challenges and setbacks that I faced, I am grateful for the lessons and experiences that 2022 has brought me</p>
<p>I am excited about all that the future holds. Whether it's continuing to grow as a developer, building new relationships, or exploring new opportunities, I am confident that the skills and resilience that I have gained in 2022 will serve me well in the years ahead. Thank you for following along on my journey, and I hope that my experiences have inspired you in some way.</p>
<p>My Dm's are always open on <a target="_blank" href="https://twitter.com/rajeshkhadka200">Twitter</a> .</p>
<p>_________________________________________________________________________________</p>
]]></content:encoded></item><item><title><![CDATA[Vs code for developers !]]></title><description><![CDATA[Overview
IDE ( integrated development environment) is one of the tool you uses daily as a developer and of course it is one of the most opened  window in your computer system. And for sure, it should be good looking, clean and productive too. So, in ...]]></description><link>https://blog.rajeshkhadka.info.np/vs-code-for-developers</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/vs-code-for-developers</guid><category><![CDATA[4articles4weeks]]></category><category><![CDATA[#week4]]></category><category><![CDATA[vscode extensions]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Sat, 10 Sep 2022 14:55:25 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1662798291554/V5fYEOF8p.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-overview">Overview</h1>
<p><a target="_blank" href="https://www.google.com/search?q=ide+full+form&amp;oq=IDE+f&amp;aqs=chrome.1.69i57j0i19l4j69i60l3.2676j0j7&amp;sourceid=chrome&amp;ie=UTF-8">IDE ( integrated development environment)</a> is one of the tool you uses daily as a developer and of course it is one of the most opened  window in your computer system. And for sure, it should be good looking, clean and productive too. So, in this article I'm sharing some  useful <a target="_blank" href="https://code.visualstudio.com/download">vscode's</a> extensions  for a developer which makes you more productive. And of course I'll be sharing the theme I love most !!</p>
<hr />
<h2 id="heading-some-useful-extensions">Some useful extensions</h2>
<h4 id="heading-1-thunder-client">1. Thunder Client</h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662800032755/cjlaxr2ny.png" alt="image.png" /></p>
<p>I know, being as a developer it is sure that you will be consuming the  <a target="_blank" href="https://www.google.com/search?q=what+isrest+api&amp;sxsrf=ALiCzsZJdhIbQQkMyrS03Xraz7dpDfKo_Q%3A1662799151027&amp;ei=Lk0cY8XSO9K48QOvvZH4Dw&amp;ved=0ahUKEwjFoejF6Yn6AhVSXHwKHa9eBP8Q4dUDCA4&amp;uact=5&amp;oq=what+isrest+api&amp;gs_lcp=Cgdnd3Mtd2l6EAMyCAgAEB4QBxATMggIABAeEAcQEzIICAAQHhAHEBMyCAgAEB4QBxATMggIABAeEAcQEzIICAAQHhAHEBMyCAgAEB4QBxATMggIABAeEAcQEzIICAAQHhAHEBMyCAgAEB4QBxATSgQIQRgASgQIRhgAUABYxAZgyQdoAHABeACAAa4BiAHdB5IBAzAuNpgBAKABAcABAQ&amp;sclient=gws-wiz">rest api</a>,for that I'm sure, you will use <code>postman</code> to test api. But, my friend there is one popular extension called <code>thunder client</code> a lightweight Rest API Client Extension for Visual Studio Code for Testing APIs.</p>
<h5 id="heading-demo">Demo :</h5>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662800058305/mM32xAV33.png" alt="screenshotr_2022-9-10T14-37-39.png" /></p>
<h5 id="heading-download-click-herehttpswwwthunderclientcom">Download: 🔗 <a target="_blank" href="https://www.thunderclient.com/">Click here</a></h5>
<hr />
<h4 id="heading-2-markdown-preview-github-styling">2. Markdown Preview GitHub Styling</h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662801361775/6scTpRH3A.png" alt="image.png" /></p>
<p>Styling the readme may be one of the challenging task for the developer. We all have the habit of viewing the output of the code side by side, but what about the readme ? but don't worry, we have another powerful and again useful extension from where we can preview the readme while generating it, simply just by clicking one button  at the top right corner .</p>
<h5 id="heading-demo">Demo :</h5>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662801656305/Dw0VEBRjD.png" alt="screenshotr_2022-9-10T15-5-49.png" /></p>
<h5 id="heading-download-click-herehttpsmarketplacevisualstudiocomitemsitemnamebiernermarkdown-preview-github-styles">Download: 🔗 <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=bierner.markdown-preview-github-styles">Click here</a></h5>
<hr />
<h4 id="heading-3-prettier-code-formator">3. Prettier - code formator</h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662800393360/EsajC7ldW.png" alt="image.png" /></p>
<p>What usually happens people actually spend a lot of time and mental energy for formatting their code. With Prettier extension integration, you can just press that magic key, the code is formatted. This is an eye opening experience if anything else.</p>
<h5 id="heading-demo">Demo :</h5>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662801777749/eOcKN70Y-.png" alt="screenshotr_2022-9-10T15-7-46.png" /></p>
<h5 id="heading-download-click-herehttpsprettierio">Download: 🔗 <a target="_blank" href="https://prettier.io/">Click here</a></h5>
<hr />
<h4 id="heading-4-gitlens">4. GitLens</h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662817804372/GyA02j6gN.png" alt="image.png" /></p>
<p>I know it's really confusing when you don't know when this particular line was committed to github, who committed that particular line, what was the changes. So, now the problem is solved due to the powerful extension called <a target="_blank" href="https://www.gitkraken.com/gitlens">GitLens</a>  which Quickly glimpse into whom, why, and when a line or code block was changed .</p>
<h5 id="heading-demo">Demo :</h5>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662817981482/IeoBLy54A.png" alt="Screenshot (364).png" /></p>
<h5 id="heading-download-click-herehttpsmarketplacevisualstudiocomitemsitemnameeamodiogitlens">Download: 🔗 <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens">Click here</a></h5>
<hr />
<h4 id="heading-5-todo-highlight">5. TODO Highlight</h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662818514408/bg82YAidW.png" alt="image.png" /></p>
<p>Sometimes, in a big project where there are tons of needs to be implemented, you usually forget adding which features is completed and which one is remaining, so here where a TODO Highlight comes in which allows you to mark the todo in any file you are working on simply writing <code>TODO: Add new features</code> .  </p>
<h5 id="heading-demo">Demo :</h5>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662818670011/YxMALvB9g.png" alt="image.png" /></p>
<h5 id="heading-download-click-herehttpsmarketplacevisualstudiocomitemsitemnamewayouvscode-todo-highlight">Download: 🔗 <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight">Click here</a></h5>
<hr />
<h4 id="heading-6-codesnap">6. CodeSnap</h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662819067639/iYkAy5Un1.png" alt="image.png" /></p>
<p>It's really trouble to share the picture of the specific part of the code to social media, to your friends.. in a good and in organized way. Here where, the codeSnap comes in which allows you to share the code of the specific part of the codebase by generating a beautiful photo in just a single click. </p>
<h5 id="heading-demo">Demo :</h5>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662819313884/QBW0aX7Ue.png" alt="image.png" /></p>
<h5 id="heading-download-click-herehttpsmarketplacevisualstudiocomitemsitemnameadpykecodesnap">Download: 🔗 <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=adpyke.codesnap">Click here</a></h5>
<hr />
<h4 id="heading-6-live-server">6. Live server</h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662819461187/PY5waBQnO.png" alt="image.png" /></p>
<p>Are you bored reloading the browser after changing some code to see the changes, then my friend here is a simple extension called Live server which auto reloads the browser after you change some code in the HTML, CSS, JS file of your project . The all things you should is, install the extension, press a small button which appears at the bottom right of your HTML file named as <code>Go Live</code> which auto starts a project in <code>localhost</code>. </p>
<h5 id="heading-demo">Demo :</h5>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662819825416/Onyt73OmF.png" alt="image.png" /></p>
<h5 id="heading-download-click-herehttpsmarketplacevisualstudiocomitemsitemnameritwickdeyliveserver">Download: 🔗 <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer">Click here</a></h5>
<hr />
<h4 id="heading-6-material-icon-theme">6. Material Icon Theme</h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662819914597/2zEJrBP3L.png" alt="image.png" /></p>
<p>This is the cool extension I love most in vs code which auto detects the file extension and folder name inside of your project and enable a small icons relatable at the beginning of the file or folder name, which creates more professional looks and of Course helps to  understand the purpose of file and folders. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662820224422/6YcX8WC91.png" alt="image.png" /></p>
<h5 id="heading-download-click-herehttpsmarketplacevisualstudiocomitemsitemnamepkiefmaterial-icon-theme">Download: 🔗 <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme">Click here</a></h5>
<hr />
<h4 id="heading-7-rainbow-brackets">7. Rainbow Brackets</h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662820319345/c8d_E7n7E.png" alt="image.png" /></p>
<p>As your codebase becomes larger and larger it is really difficult to identify which one is opening brackets and which one is closing brackets. Here where a  Rainbow Brackets comes in which automatically provides a same color for the pair of brackets which makes helps you to debug the code easily . </p>
<h5 id="heading-demo">Demo :</h5>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662820574725/K2XzZVudy.png" alt="image.png" /></p>
<h5 id="heading-download-click-herehttpsmarketplacevisualstudiocomitemsitemname2guarainbow-brackets">Download: 🔗 <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=2gua.rainbow-brackets">Click here</a></h5>
<hr />
<h2 id="heading-theme-i-use">Theme I use</h2>
<p>I'm using vs code since 2019, and I had tried more that 20 themes so far. But among all of the themes I used two of them are my favorite on which I keeps switching. You can also give a try to them. </p>
<ul>
<li>Andromeda  <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=EliverLara.andromeda">Download</a> </li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662821170866/AqPQVMF_p.png" alt="image.png" /></p>
<ul>
<li>Atom one Dark theme  <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=akamud.vscode-theme-onedark">Download</a> </li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662821219903/xTKJyuGv9.png" alt="image.png" /></p>
<hr />
<h2 id="heading-wrap-up">Wrap up</h2>
<p>It always feels great when I reach the end of writing a blog. I had this much to share but we can stay connected on <a target="_blank" href="https://twitter.com/rajeshkhadka200">Twitter</a> for sure. And also I highly recommend you guys to drop the name of extensions that I missed to mention above. </p>
<p>I'm using vs code since many years and I have a kind of nice attachments with it. Thank you <a target="_blank" href="https://code.visualstudio.com/">microsoft vs code team</a> and for those people who has published their extensions into a vs code. It helps a lot !! 😊 And again thanks to <a class="user-mention" href="https://hashnode.com/@eleftheriabatsou">Eleftheria Batsou</a> for a big support in discord and in the email throughout the period of <code>4weeks4articles</code> ! ♥</p>
<blockquote>
<p>keep helping, Keep exploring  !! 😁</p>
</blockquote>
<hr />
]]></content:encoded></item><item><title><![CDATA[Meet my latest project - Realtime code collaboration tool]]></title><description><![CDATA[Introduction 🎤
Collab is a Realtime code sync tool where one user can collaborate with any other user to write code at the same time. Beside this, users can save written code snippets to the website by creating a profile in the website. Why don't yo...]]></description><link>https://blog.rajeshkhadka.info.np/meet-my-latest-project-realtime-code-collaboration-tool</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/meet-my-latest-project-realtime-code-collaboration-tool</guid><category><![CDATA[4articles4weeks]]></category><category><![CDATA[#week3]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[iwritecode]]></category><category><![CDATA[Web Development]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Sat, 03 Sep 2022 09:44:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1662197975991/JMSSoi4TI.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction 🎤</h2>
<p>Collab is a Realtime code sync tool where one user can collaborate with any other user to write code at the same time. Beside this, users can save written code snippets to the website by creating a profile in the website. <code>Why don't you try it yourself 👉 ?</code> <a target="_blank" href="https://collabb-app.netlify.app/">open website</a></p>
<p>In this article I'm not walking through all the code I wrote during the development time, but I will be explaining, <strong>How I developed the project</strong>, <strong>what I learned </strong> and also share some starter code (redis connection, socket connection ) also some query<br />to communicate with the redis databse.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/KlFQWcBmkCQ">https://youtu.be/KlFQWcBmkCQ</a></div>
<hr />
<p>Let's start with a simple question  !</p>
<h2 id="heading-what-is-the-need-of-the-project">What is the need of the project ?</h2>
<ul>
<li><h5> problem </h5>


</li>
</ul>
<p>I don't know if it's a problem or not but, I have seen a lot of people writing code in google docs while appearing for the interview (specially while performing coding round). So, I was thinking of building a project to address this problem. At the same time my college was off due to some reason &amp; I thought this would be the right time to build the project which ultimately gave birth to <a target="_blank" href="https://collabb-app.netlify.app">collab</a>.</p>
<ul>
<li><h5> Fun fact : </h5>

</li>
</ul>
<p>It's same thing  writing code in paper or in a google docs. 😂</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662029439795/Lc32YPqAF.png" alt="Image inside Blog.png" /></p>
<hr />
<h2 id="heading-what-i-used-to-build-it">What I used to build it ? 👩‍💻</h2>
<p>There is not any drought, to say I used <code>javaScript</code> (React, Node - Express) to build the project but  this time JavaScript is not only in the picture. Alternatively, I used <code>Redis</code> as a database. Ultimately, my tech stack for the project is <code>RERN</code> (Redis, Express, React, Node).</p>
<p>As the application is all about broadcasting the code to all the clients at the same time, syncing all clients  so I used <a target="_blank" href="socket.io">socket.io</a> for the real time communication between the browsers.
React, Node &amp; express are the usual things for me, I have pretty much worked on it multiple times, but socket.io and <a target="_blank" href="redis.io">redis</a> were totally new to me for this project. So, I will be talking more about redis and socket.io in this blog.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662030783643/BIKhc5Bxj.png" alt="Image inside Blog (1).png" /></p>
<hr />
<h2 id="heading-why-did-i-choose-the-rern-stack">Why did I choose the <code>RERN</code> stack ?</h2>
<p>As redis is the one of the fastest database databases and It would be the perfect choice for the real time application where users want to save and retrieve the code within a second. Also, redis allows us to cache the api response so, maybe in future I'll be implementing the redis cache .</p>
<hr />
<h2 id="heading-learnings">Learnings 📰</h2>
<p>As I already mentioned, redis and socket io were completely  new for me, so It was very fun exploring them. The one word answer for the question is <code>redis and web-socket</code> - Oh !  those two words .. BTW, in this section I'm  not just limiting myself to only those two words. I'll be  throwing more than 2 big paragraphs . </p>
<ul>
<li><h4 id="heading-web-sockets">🌐 web sockets</h4>
</li>
</ul>
<p>Web Socket is bidirectional, a full-duplex protocol that is used in the scenario of client-server communication, unlike HTTP it starts from ws:// or wss://. It is a stateful protocol, which means the connection between client and server will keep alive until it is terminated by either party (client or server). After closing the connection by either of the client and server, the connection is terminated from both ends.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662061647843/oHjKNDEsS.png" alt="Image inside Blog (2).png" /></p>
<p><a target="_blank" href="https://www.youtube.com/embed/1BfCnjr_Vjg">You can refer this to study in detail</a></p>
<p>The main thing is in the web socket (socket) is emitting the event or action from the client. listening to the event in the backend (server) and performing the query logic based on that and more importantly, these all things happen in a real-time.</p>
<ul>
<li><h5 id="heading-1-initialize-the-socket">1. Initialize the socket</h5>
</li>
</ul>
<p><code>socket.js</code></p>
<pre><code class="lang-js"><span class="hljs-comment">// first point out the backend server</span>
<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> initSocketClient = <span class="hljs-keyword">async</span> () =&gt; {
  <span class="hljs-keyword">let</span> url = <span class="hljs-string">"http://localhost:5000"</span>;
  <span class="hljs-keyword">const</span> options = {
    <span class="hljs-string">"force new connection"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">reconnectionAttempt</span>: <span class="hljs-string">"Infinity"</span>,
    <span class="hljs-attr">timeout</span>: <span class="hljs-number">10000</span>,
    <span class="hljs-attr">transports</span>: [<span class="hljs-string">"websocket"</span>],
  };
  <span class="hljs-keyword">return</span> io(url, options);
};
</code></pre>
<ul>
<li><h5 id="heading-2-emit-data-to-server">2. Emit data to server</h5>
</li>
</ul>
<p><code>sendData.js</code></p>
<pre><code class="lang-js"><span class="hljs-comment">// emit the data from here, using the socket instance created above</span>

<span class="hljs-keyword">import</span> {initSocketClient } <span class="hljs-keyword">from</span> <span class="hljs-string">"./socket.js"</span> ;
<span class="hljs-keyword">import</span> React,{useRef} <span class="hljs-keyword">from</span> <span class="hljs-string">"react"</span> ;
<span class="hljs-keyword">const</span>  socketRef = useRef();
<span class="hljs-comment">// now using this you can emit </span>
<span class="hljs-keyword">const</span>   socketRef.current = initSocketClient (); 
<span class="hljs-comment">// emit data</span>
  socketRef.current.emit(<span class="hljs-string">"join"</span>, { <span class="hljs-comment">// join is the custom event</span>
    <span class="hljs-attr">room_id</span> : <span class="hljs-number">458582584842</span>,
    <span class="hljs-attr">username</span> : <span class="hljs-string">"Rajesh Khadka"</span>,
  });
</code></pre>
<ul>
<li><h5 id="heading-3-listen-to-event">3. Listen to event</h5>
</li>
</ul>
<p><code>server.js</code></p>
<pre><code class="lang-js"> <span class="hljs-keyword">import</span> http <span class="hljs-keyword">from</span> <span class="hljs-string">"http"</span>;
<span class="hljs-keyword">import</span> { Server } <span class="hljs-keyword">from</span> <span class="hljs-string">"socket.io"</span>;
<span class="hljs-keyword">const</span> server = http.createServer(app);
<span class="hljs-keyword">const</span> io = <span class="hljs-keyword">new</span> Server(server);

io.on(<span class="hljs-string">"connection"</span>,<span class="hljs-function">(<span class="hljs-params">socket</span>)=&gt;</span>{
    socket.on(<span class="hljs-string">"join"</span>, <span class="hljs-function">(<span class="hljs-params">{ username, room_id }</span>) =&gt;</span> {
    <span class="hljs-built_in">console</span>.log({username, room_id})
}
})
</code></pre>
<hr />
<ul>
<li><h4 id="heading-redis">🛢️ Redis</h4>
</li>
</ul>
<p>Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. This definition is according to the official website itself. </p>
<p>I haven't used all of their services but if I have to answer this question from my own experience then I will probably say Redis is a database that facilitates us to store the data in memory in JSON format and also enables us to intelligently search for the data stored inside of the database. I mean their search feature is so cool that it even returns us the result that matches the synonyms of our query, of course only if we ask for it. </p>
<hr />
<h2 id="heading-how-does-the-application-works">How does the application works⚙</h2>
<p>Firstly the user joins the new room by entering room ID and username. Then it gets sent to the backend which  checks if the room is currently present or not with the same roomID, if yes it pushes the user to the existing room with the same roomID if not then it creates the new room with the same roomID and then pushes the user to the newly created one . Also I have already discussed the working model of the application <a target="_blank" href="https://youtu.be/KlFQWcBmkCQ?t=286">at this part of the video</a>. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662196549044/aRsUCyONkW.png" alt="yj586hrq0u0o1xkzreee.png" /></p>
<hr />
<h2 id="heading-additional-information">Additional Information ℹ</h2>
<ul>
<li><h5 id="heading-1-lets-connect-to-redis-databse">1. Let's connect to Redis Databse</h5>
</li>
</ul>
<pre><code class="lang-js"><span class="hljs-keyword">import</span> { Client } <span class="hljs-keyword">from</span> <span class="hljs-string">"redis-om"</span>; 
<span class="hljs-comment">// You need to install   `redis-om` npm package to get started.</span>

<span class="hljs-keyword">const</span> url = process.env.REDIS_HOST;
<span class="hljs-keyword">const</span> client = <span class="hljs-keyword">new</span> Client();
<span class="hljs-keyword">try</span> {
  <span class="hljs-keyword">const</span> res = <span class="hljs-keyword">await</span> client.open(url);
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Connected to redis !"</span>);
} <span class="hljs-keyword">catch</span> (error) {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"failed connecting redis"</span>, error);
}
<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> client;
</code></pre>
<ul>
<li><h5 id="heading-2-add-stuff-to-the-database">2. Add stuff to the database</h5>
</li>
</ul>
<pre><code class="lang-js"><span class="hljs-keyword">import</span> { codeRepository } <span class="hljs-keyword">from</span> <span class="hljs-string">"../schema/code.schema.js"</span>;
  <span class="hljs-comment">// like model in mongoDB you need to create schema in redis</span>

<span class="hljs-keyword">const</span> postCode = <span class="hljs-keyword">async</span> (req, res) =&gt; {
  <span class="hljs-keyword">const</span> code = codeRepository.createEntity(req.body);
  <span class="hljs-keyword">const</span> id = <span class="hljs-keyword">await</span> codeRepository.save(code);
  <span class="hljs-keyword">if</span> (!id) {
    <span class="hljs-keyword">return</span> res.status(<span class="hljs-number">404</span>).json({
      <span class="hljs-attr">message</span>: <span class="hljs-string">"Something went wrong !"</span>,
    });
  }
  res.status(<span class="hljs-number">201</span>).json({
    <span class="hljs-attr">message</span>: <span class="hljs-string">"Posted !!"</span>,
  });
};
</code></pre>
<ul>
<li><h5 id="heading-3-read-the-data-from-database">3. Read the data from Database</h5>
</li>
</ul>
<pre><code class="lang-js">  <span class="hljs-keyword">import</span> { codeRepository } <span class="hljs-keyword">from</span> <span class="hljs-string">"../schema/code.schema.js"</span>;
  <span class="hljs-comment">// like model in mongoDB you need to create schema in redis</span>
  <span class="hljs-keyword">const</span> getMycode = <span class="hljs-keyword">async</span> (req, res) =&gt; {
  <span class="hljs-keyword">const</span> myCode = <span class="hljs-keyword">await</span> codeRepository
    .search()
    .return.all();
  res.status(<span class="hljs-number">200</span>).json(myCode);
};
</code></pre>
<ul>
<li><h5 id="heading-4-delete-the-data-from-database">4. Delete the data from Database</h5>
</li>
</ul>
<pre><code class="lang-js">  <span class="hljs-keyword">import</span> { codeRepository } <span class="hljs-keyword">from</span> <span class="hljs-string">"../schema/code.schema.js"</span>;
  <span class="hljs-comment">// like model in mongoDB you need to create schema in redis</span>
  <span class="hljs-keyword">const</span> deleteCode = <span class="hljs-keyword">async</span> (req, res) =&gt; {
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">await</span> codeRepository.remove(req.params.code_id);
    res.status(<span class="hljs-number">200</span>).send(<span class="hljs-string">"Deleted"</span>);
  } <span class="hljs-keyword">catch</span> (error) {
    res.status(<span class="hljs-number">400</span>).send(error);
  }
};
</code></pre>
<hr />
<h2 id="heading-some-important-links">Some Important Links 🔗</h2>
<p>🔗 <a target="_blank" href="https://github.com/rajeshkhadka200/collab">main repository</a></p>
<p>🔗 <a target="_blank" href="https://github.com/rajeshkhadka200/collab/tree/main/client">frontend part of the repository</a></p>
<p>🔗 <a target="_blank" href="https://github.com/rajeshkhadka200/collab/tree/main/server">backend part of the repository</a></p>
<hr />
]]></content:encoded></item><item><title><![CDATA[What  I do ?  I stuck as a developer]]></title><description><![CDATA[Overview
Getting errors and getting stuck for a long hours is not a new thing in the life of software engineer / developer. Getting gigantic errors and problem to add a single new features is really a troubling situation & all people have a different...]]></description><link>https://blog.rajeshkhadka.info.np/what-i-do-i-stuck-as-a-developer</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/what-i-do-i-stuck-as-a-developer</guid><category><![CDATA[4articles4weeks]]></category><category><![CDATA[#week2]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Sun, 28 Aug 2022 10:36:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1661855763717/oMyl9JC1j.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-overview">Overview</h2>
<p>Getting errors and getting stuck for a long hours is not a new thing in the life of software engineer / developer. Getting gigantic errors and problem to add a single new features is really a troubling situation &amp; all people have a different way to sort out theirs problems which I am going to explain, <strong>"What I do if I stuck as a developer ?"</strong></p>
<hr />
<h3 id="heading-1-i-visit-stack-to-overflow">1. I Visit Stack to overflow</h3>
<p>Stack overflow is one of the big and great platform for all kind of developers who faces errors and get stuck during the project. I also use stack overflow if I stuck as a developer.   </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661847100613/LuHa2VPKD.png" alt="stackoverflow_2022-8-30T13-56-31.png" /></p>
<p>🛠 <strong>Fun fact :</strong></p>
<p>Sometimes, I get errors; I copy the error ; paste it in google, and I find the solution in stack overflow which I had not seen before, I don't understand but I copy it and it works.  </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661847468083/eiuedC1lT.png" alt="screenshotr_2022-8-30T14-2-44.png" /></p>
<p>Beside stack overflow, there are also amazing sites which helps me to figure out the problem !</p>
<hr />
<h3 id="heading-2-i-consultant-with-my-friends">2. I consultant with my  friends</h3>
<p>Since, I'm a computer student and there is a small circle of coders who are very active on helping each others. And I talk to the circle to sort out the problem. You can also reach out to <a class="user-mention" href="https://hashnode.com/@aashishpanthi">Aashish Panthi</a>, <a class="user-mention" href="https://hashnode.com/@utsavbhattarai">Utsav bhattarai</a> and <a class="user-mention" href="https://hashnode.com/@SarojRegmi">SR code</a>. They all are my classmates.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661848870278/OZzY9l_cE.png" alt="Image inside Blog (3).png" /></p>
<p>But, who helped me through different platform are also my friends !!</p>
<hr />
<h3 id="heading-3-i-create-post-to-different-facebook-groups">3. I create post to different Facebook groups</h3>
<p>Since, these days there are different active fb groups with large community handled by the different tech peoples. These groups also helps (sometimes) ! 😂</p>
<p>🛠 <strong>Funny moment:</strong></p>
<p>Once I posted some silly things saying <code>Guys subscribe to my YouTube channel</code>. And the hate I got in comments was like😨</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661851101210/O7zK4S14X.png" alt="Image inside Blog (4).png" /></p>
<p>I prefer these groups : </p>
<ul>
<li><a target="_blank" href="https://www.facebook.com/groups/4581896951875053">Lama Dev</a></li>
<li><a target="_blank" href="https://www.facebook.com/groups/517689422131634">React Developers</a></li>
<li><a target="_blank" href="https://www.facebook.com/groups/1697154313677271">HTML CSS &amp; JS </a>  </li>
</ul>
<hr />
<h3 id="heading-4-i-also-go-through-an-online-articles">4. I also Go through an online articles</h3>
<p>Finding solution after reading articles written by different tech persons is the most required skills required for software developer. <code>Speak less, read more</code> should be the moto of software developer !</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661853651934/XXCcCf6wc.png" alt="info_2022-8-30T15-45-41.png" /></p>
<p>When it comes about online platform for reading articles, I mostly prefer these platform to sort out the problems.</p>
<ul>
<li>Hashnode <a target="_blank" href="https://blog.rajeshkhadka.info.np/">blog</a></li>
<li>Medium     <a target="_blank" href="https://medium.com/@rajeshkhadka200">visit</a></li>
<li>DEV community <a target="_blank" href="https://dev.to/rajeshkhadka">DEV profile</a></li>
</ul>
<p>These platform are the first priority, but sometimes some random articles ranked on 3rd, 4th page of google search also helped me. So, big shutouts to those random articles !! ❤ </p>
<hr />
<h2 id="heading-things-to-say">Things to say</h2>
<p>It always feels great when I reach the end of writing a blog. I had this much to share but we can stay connected on <a target="_blank" href="https://twitter.com/rajeshkhadka200">Twitter </a> for sure. And I would like to say, <code>Errors are the part of life of software developer</code>, so stay relaxed all the time, think more to solve the problem. Keep learning and keep exploring !!</p>
<p>In <a target="_blank" href="https://blog.rajeshkhadka.info.np/lessons-i-learned-from-a-failed-interview">previous article</a>, I talked about my failed interviews, make sure you check that too !! 😂</p>
<blockquote>
<blockquote>
<p>Make sure you drop a beautiful comment and drop heart for article, If this helped you learn something in anyways.</p>
</blockquote>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Lessons I learned from a failed interview !!]]></title><description><![CDATA[Overview
Hello everyone, I'm Rajesh. You would probably call me a failure Rajesh today if I hadn't overcome the failure which I faced for a multiple time. 
I'm not a pro programmer, not a pro developer but I have a good experience for building resume...]]></description><link>https://blog.rajeshkhadka.info.np/lessons-i-learned-from-a-failed-interview</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/lessons-i-learned-from-a-failed-interview</guid><category><![CDATA[week1]]></category><category><![CDATA[4articles4weeks]]></category><category><![CDATA[interview]]></category><category><![CDATA[Programming Tips]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Sun, 21 Aug 2022 17:55:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1661104225849/jpJtwtlVr.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-overview">Overview</h2>
<p>Hello everyone, I'm Rajesh. You would probably call me a failure Rajesh today if I hadn't overcome the failure which I faced for a multiple time. </p>
<p>I'm not a pro programmer, not a pro developer but I have a good experience for building resume, appearing interviews and failing them. I'm not too much old guy who had appeared a ton's of interviews. I just  appeared 3 interviews so far for a local startup in my region and I failed all of them. But, before appearing in the 4th interview I think will I have a quite enough  lessons that I learnt  from them.</p>
<blockquote>
<blockquote>
<p>Readers be like :  enough 😨</p>
</blockquote>
</blockquote>
<p>Oh common don't do this😨, I ensure that I have enough lesson which  can be  shared here. I'm a developer not pro but I'm. You might be thinking I'm here to explain a code or something like that but that not the thing !!</p>
<h2 id="heading-what-i-leant-after-failing">What I Leant after failing ??</h2>
<p>I'm not demotivating you guys it's true that, <strong>"failing is not a bad thing, but not learning anything from the failure is obviously a bad thing."</strong>  - Rajesh khadka </p>
<p>I know exactly how it feels to face rejections in the mail for the job you’ve so desperately wanted. But my friend, learn these things from the failure, It would be better for next time : </p>
<h2 id="heading-1-to-accept-the-truth">1.  To accept the truth</h2>
<p>I used to think, I know the concepts very well. I can work for company or any startup but I was wrong at that moment. So, after failing in these interviews, I learnt to accept the the truth that </p>
<ul>
<li>"<strong> I need to work hard </strong>"</li>
<li>"<strong>I need to push myself to learn !</strong>"</li>
<li>"<strong>Remember that you aren't perfect</strong>"</li>
</ul>
<h2 id="heading-2-to-look-after-the-resume">2. To look after the resume</h2>
<p>Since, Resume is also one of the affecting  factor for your selection. Job Recruiter or Hiring manager is not going to  thoroughly study your resume. So there should be some unique points or keyword related to the job title due to which the possibility  of getting hired increases. </p>
<p>In my case the resume was too much random. But for the 4th interview the scenario is something different, resume is good looking . I will share my resume some other day !  😂  </p>
<p>✅Tips : You can refer to this website to build resume :</p>
<ul>
<li><a target="_blank" href="https://buildresume.learncodeonline.in/">LCO resume Builder</a></li>
</ul>
<h2 id="heading-3-i-learned-not-to-be-over-confident">3. I learned,  " not to be over confident "</h2>
<p>Probably, over confident is not a perfectly fitted word for this situation. But the thing is, any individual should not be more confident for his/her job. If interviewer asked,  <strong>What do you think, Will you get selected for the role you applied ? </strong>, Probably the answer should be , <strong>"Let's see !! .. How far it goes !"</strong></p>
<p>Usually, the interviewer ask you the question, <strong>"What fits you perfect for this job ?"</strong> </p>
<p>✅ Tips for the answer : </p>
<ul>
<li>The answer shouldn't be fancy.</li>
<li>Be loyal for this question.</li>
<li><p>Just don't try to copy the answers from others, all have their own thought !</p>
<blockquote>
<p>PS : Your selection for the role doesn't depend only on the answer you gave. There may be all the factors lying on the same line which caused unselection for the job. But the way of answering the question is also one of them .</p>
</blockquote>
</li>
</ul>
<h2 id="heading-4-we-still-have-room-for-improvement">4. We still have room for improvement.</h2>
<p>Learning lessons the hard way sucks, and so does getting negative feedback. However, they’ll ultimately help you become better at interviewing. So when you’re lucky enough to hear back from the hiring manager with a specific reason for rejecting you, take the time to think about how you’ll improve next time.</p>
<p>Remember :</p>
<blockquote>
<p>“Failure is not the opposite of success, it is a part of success.”</p>
</blockquote>
<p>Oh common, Looking these quotes, don't think that this guy (Rajesh) has achieved a lot and He's successful. I don't know, just these quotes boost my motivation to next level ! 😊</p>
<hr />
<h2 id="heading-one-interview-made-me-to-build-the-product">One interview made me to build the product</h2>
<p>It was a time of covid, Randomly I applied for a post of React developer through Linked in. All the meeting was scheduled for a next day. I was  mentally prepared for the interview. After all the interviewer invited me on the zoom meeting and shared a link to write a code on that platform. Which was not really good. I don't remember the exact name of the platform.</p>
<p> May be due the platform on which I was writing code 😂 and many other  circumstances, I could not perform well on that interview, <strong>which triggered me to build the  own product for collaborating for interview purpose. 
</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661101814397/jCCQDEPh_.png" alt="screenshotr_2022-8-21T22-54-11.png" /></p>
<blockquote>
<p>I will be launching the bare minimum version of app in few days, and surly I will publish the blog on it's launch !!</p>
</blockquote>
<h2 id="heading-things-to-say">Things to say</h2>
<p>Any experience brings something valuable to the table regardless of the outcome, so don’t feel sad instead, try learning from those job interviews to avoid the same mistakes in the future.</p>
<p> I had this much to share but we can stay connected on <a target="_blank" href="https://twitter.com/rajeshkhadka200">Twitter </a> for sure. And forgive me for not including any images (related to interview), I don't have real images and illustrations don't truly depict the emotions. 🙂</p>
<blockquote>
<p>If this story helped you learn something in anyways please make sure you clap for it.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[All the things you need to know about database 📰🚀]]></title><description><![CDATA[Introduction
A database is an organized collection of structured information, or data, typically stored electronically in a computer system. 
Oh. common it's just a definition, nothing more to do with this. Let's give a few minutes to understand data...]]></description><link>https://blog.rajeshkhadka.info.np/all-the-things-you-need-to-know-about-database</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/all-the-things-you-need-to-know-about-database</guid><category><![CDATA[Databases]]></category><category><![CDATA[db]]></category><category><![CDATA[MySQL]]></category><category><![CDATA[MongoDB]]></category><category><![CDATA[Oracle]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Wed, 03 Aug 2022 12:19:50 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1659458810627/nvDywZRO6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>A database is an organized collection of structured information, or data, typically stored electronically in a computer system. </p>
<p>Oh. common it's just a definition, nothing more to do with this. Let's give a few minutes to understand database much more practically and lets feel it .. 🔥</p>
<ul>
<li>Let's take an example, you just opened Facebook and you wanted to make a post saying , "Hey !! developers'' and if it gets posted successfully,</li>
</ul>
<blockquote>
<p><em>Where does that post go and stay ?</em></p>
</blockquote>
<ul>
<li>You upload videos to the YouTube, and again if its uploaded successfully,</li>
</ul>
<blockquote>
<p><em>where does that information regarding video goes and saved ?</em></p>
</blockquote>
<p>These all of the questions has a single answer "<strong>Database</strong>".</p>
<hr />
<h2 id="heading-disclaimer">Disclaimer ⚠</h2>
<p>This blog is totally for beginners, so my request 🙏 for experienced developer please, don't leave a comment saying, <strong>"This is the bare minimum and basics"</strong> 😂 </p>
<hr />
<h2 id="heading-types-of-database">Types of database 📰</h2>
<p>If I'm not wrong, you have frequently heard about <strong>sequel</strong> and <strong>non sequel</strong> databases. People are really making these things super complex for the beginners. So, let's break these terms  into the easiest one !! </p>
<p>Okay, again lets pick up an example of “uploading YouTube video”. And we all know that a video has a certain attribute i.e. <strong>id</strong> ,<strong>Title</strong>, <strong>Description</strong>, <strong>likes</strong>, <strong>comments</strong>, <strong>uploaded date </strong> and many more. Let's think for a while, <strong><em>How do these actually get visible as a piece of data ? And here where a sequel and non sequel databases comes in</em></strong>.</p>
<h2 id="heading-the-above-attributes-looks-like-in-sequel-database">The above attributes looks like in sequel database :</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1659496319554/efJtXhA9E.png" alt="image.png" />
Here, we can say that, the sequel database stores the data in the table as rows and columns. 
Some popular sequel databases are :</p>
<ul>
<li>MySQL</li>
<li>Oracle </li>
<li>Postgrace</li>
</ul>
<h2 id="heading-and-again-these-same-attributes-looks-like-in-non-sequel-database">And again, these same attributes looks like in non-sequel database :</h2>
<pre><code>{
    <span class="hljs-attribute">id </span>: _2525252155,
    <span class="hljs-attribute">title  </span>: <span class="hljs-string">"All the things You need to know about DB to get started"</span>,
    <span class="hljs-attribute">description </span>:  <span class="hljs-string">"Description goes here !"</span>,
    <span class="hljs-attribute">likes </span>: <span class="hljs-number">1250</span>,
    <span class="hljs-attribute">comments </span>: <span class="hljs-string">"Nice Video ! ❤ "</span>
};
</code></pre><p>It also may have some nested data :</p>
<pre><code>{
    ....,
    comments : [<span class="hljs-string">"Nice blog"</span>, <span class="hljs-string">"Amazing"</span> ]
};
</code></pre><p>Here, we can say that the non-sequel database stores the data in the JSON or BSON format .
Some popular non-sequel databases are :</p>
<ul>
<li>MongoDb</li>
<li>Firebase</li>
</ul>
<hr />
<h2 id="heading-what-to-use-for-your-next-project">What to use for your Next Project ?</h2>
<p>Okay ! It's not a simple or too much easy to say use <strong>"MySQL"</strong> (sequel) or <strong>"MongoDB"</strong> (non-sequel). The answer is <strong>It depends </strong> ! in most of the cases, Choosing the database is based on what type of project you are working on. If it is just a simple <strong>todo app</strong> feel free choose any db you like the most without thinking about it. But if the project is more than todo app, serves a millions of users then My suggestion would be use Non-sequel db's because they are more scalable and flexible . </p>
]]></content:encoded></item><item><title><![CDATA[Stop blindly following coding tutorials !!]]></title><description><![CDATA[During my early days of programming I used to watch a lot of YouTube project / coding tutorials. I was doing nice, just by splitting two windows, vs code on the left side and YouTube on the right side. 

Just shown above.
I was doing good but was  no...]]></description><link>https://blog.rajeshkhadka.info.np/stop-blindly-following-coding-tutorials</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/stop-blindly-following-coding-tutorials</guid><category><![CDATA[THW Web Apps]]></category><category><![CDATA[THW Web3]]></category><category><![CDATA[THW Cloud Computing]]></category><category><![CDATA[THW Mobile Apps]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Thu, 19 May 2022 14:01:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1652843017913/bTdQ1BXUv.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>During my early days of programming I used to watch a lot of YouTube project / coding tutorials. I was doing nice, just by splitting two windows, vs code on the left side and YouTube on the right side. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1652838891010/pmSdTsPHW.png" alt="image.png" /></p>
<p>Just shown above.</p>
<p>I was doing good but was  not able to make any progress, and believe me you won't  get any output if you  are blindly following the YouTube tutorials. I agree, Contents creator in YouTube are really really doing amazing Job but here are some reason that <strong>Why should slow down watching YouTube Tutorials ?</strong> or you should find <strong>Better ways of watching YouTube Tutorials</strong></p>
<h2 id="heading-1-decreases-problem-solving-capacity">1.  Decreases  problem solving capacity</h2>
<p>For any developer or a programmer, it's really necessary to think outside of the box to solve a problem. And think to yourself, if you are watching the tutorial for every single problem you face, then How can you increase your problem solving capacity ? So, it's better to read a blog or a documentation or ask help online rather than following the YouTube tutorials blindly.</p>
<ul>
<li>And, those tutorials are edited so you won't find How they actually solve errors !!  </li>
</ul>
<h2 id="heading-2-fear-of-stating-a-new-project">2.  Fear of stating a new project</h2>
<p>Think, the project you made earlier just by following the videos, and suddenly you got a new project. Then, I can say that, the fear starts troubling you. And you starts to think, <strong>"weather, I can complete this project or not ? 😓"</strong>. But Listen, if you develop an older project on your own, you will have extra energy to complete a  project, Although the project is completely new for you. </p>
<h2 id="heading-3-impact-in-self-learning-curve">3. Impact in self learning curve</h2>
<p>When you watch tuts, you follow your instructor and just code what he/she codes. Here, the whole game ends up. If you follow them coding, you probably do not need to  research any concepts or topics and ultimately,  you will lose the capacity to learn new things on your own. So, again it's better to read a blog or a documentation or ask help online rather than following the YouTube tutorials blindly. 😂</p>
<h4 id="heading-fun-fact">Fun fact</h4>
<blockquote>
<p>I know your favorite YouTube instructor is about to complete a whole project, but till now you are continuing watching videos, even without setting up the project !! 😓</p>
</blockquote>
<hr />
<p>Saying these things, I'm not demotivating you guys. But, I'm trying to make a reminder that following YouTube tuts blindly is somehow not  a good idea. But wait, I'm not here only to share the <strong>cons</strong>  of watching the tuts. But in the same article I'll share some better ways to watch tuts. 🙋‍♀️ </p>
<h2 id="heading-learn-the-concept-and-apply-yourself">✅ Learn the concept, and apply yourself</h2>
<p>Yes, you can watch tutorials to learn the concepts but until and unless you won't try yourself or apply those concepts on your project, probably you won't get the expected outcome. So, you should not only watch but you should try at least once.</p>
<h2 id="heading-summary">Summary</h2>
<p>So, guys if you want to make progress in the programming journey, you must come out of the comfort zone and work hard, believe in your self, and I know that you can do it !!  ❤
Additionally, In every new Year, every single YouTube Instructor make a video on the topic of <strong>"Best programming language for this year"</strong>. These types of videos make a perfect sense but wait, they rank the languages based on their experience. So, I think it is not a good idea to blindly follow these videos. But it's totally up to you. </p>
<p>Guys, I know it sounds so rude, explaining these things but it was really necessary to say because I don't want you guys to repeat the mistake I did in the past. It's my duty to  make aware if any other  people are doing something really not good. 😓</p>
]]></content:encoded></item><item><title><![CDATA[Build a better mobile application in 2022 ! 📱]]></title><description><![CDATA[Introduction
 Mero Room or (My Room) is a simple and pretty straight forward mobile application that creates a communication channel between room seeker and room owner.
Here, in this article I'm not going to describe the code I wrote during the devel...]]></description><link>https://blog.rajeshkhadka.info.np/build-a-better-mobile-application-in-2022</link><guid isPermaLink="true">https://blog.rajeshkhadka.info.np/build-a-better-mobile-application-in-2022</guid><category><![CDATA[React Native]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Learning Journey]]></category><category><![CDATA[THW Mobile Apps]]></category><dc:creator><![CDATA[Rajesh Khadka]]></dc:creator><pubDate>Sun, 15 May 2022 05:28:36 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1652586441563/l1ZhsGv-g.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introduction"><strong>Introduction</strong></h1>
<p> <strong>Mero Room</strong> or <strong>(My Room)</strong> is a simple and pretty straight forward mobile application that creates a communication channel between room seeker and room owner.</p>
<p>Here, in this article I'm not going to describe the code I wrote during the development, 😁  But my primary goal would be that <strong>How we can build a better mobile apps in 2022 ? </strong> and secondly <strong>What challenges did I faced during the whole development process, and How we can overcome such challenges ?</strong> </p>
<h1 id="heading-how-we-can-build-a-better-mobile-apps-in-2022"><strong>How we can build a better mobile apps in 2022 ?</strong></h1>
<p>In this competitive market, Building a mobile is not so really easy, but is can be made super simple by considering few thing  :</p>
<h2 id="heading-1-your-idea-is-everything"><strong>1. Your Idea is Everything</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1652587138060/K3758v3ZX.png" alt="Choose a best and unique idea (2).png" />
The most important thing behind a successful app is a solid idea. You should be able to describe your app in only one sentence.  Apps are pretty disposable — if something doesn’t meet a user’s needs, they have no qualms about deleting it off their phone or tablet. So, your idea is the backbone of your application.</p>
<h2 id="heading-2-identifying-your-audience"><strong>2. Identifying Your Audience</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1652587281567/pH3Y2OcKo.png" alt="Choose a best and unique idea (3).png" />
To build a successful app, you need to know who is your target audience . First we need to analysis the market shortly and then proceed to the next one !</p>
<h2 id="heading-3-important-vs-nice-to-have"><strong>3. Important vs. Nice to Have</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1652587469651/0daz8IG14.png" alt="Choose a best and unique idea (4).png" /></p>
<p>Being as a developer, we all have the habit of including all the features in the current project. But it's really necessary to understand , the feature you are going to include in the product / project is <strong>Important </strong>or <strong>"Nice to have"</strong> . Each additional feature you includes in your app during  development time, increases costs, increases complexity, and if executed poorly, can impact your users’ experiences negatively.</p>
<h2 id="heading-4-designing-your-workflow-and-prototyping"><strong>4. Designing your workflow and prototyping.</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1652291238735/gxDCQ1q1L.png" alt="prototyping.png" />
Now, you know what you're building, for whom you're building, and what features you are going to include in your app. So, it’s time to map your flow and build your prototypes.</p>
<p>When I say “map your flow,” I'm  referring to the flow of actions taken by your users. <em>Common you know that ! 😂</em></p>
<h1 id="heading-challenges-that-i-faced-and-way-to-overcome-such-challenges"><strong>Challenges that I faced , and way to overcome such challenges  </strong></h1>
<p>I think, I have prettily discussed that, How we can build mobile app efficiently above. Lol 😂. Now in this section I'm here to discuss what challenges I faced at the time of building app so called <strong>"Mero Room"</strong> </p>
<h2 id="heading-prototyping-and-designing-the-product"><strong> ⚡prototyping and Designing the product.</strong></h2>
<p>Yes, I totally agree that <em>Design sucks</em>. And designing a product from the scratch is really a challenging job. I had suffered a lot through this problem in my designing and development Journey. and there is no way to say that I didn't passed through this problem in this app development project. I faced a lot of problem while choosing the colors, theme, How the screens of the app is going to look and all of these things. !! But, in the same time <strong>google</strong> and <strong>Dribble</strong> helped me a lot. My recommendation is </p>
<ul>
<li>"<em>You should take  reference from these amazing platform</em>" . </li>
<li>"<em>There are a lot of Instagram account that provides you an amazing design solutions along with tips and trick </em>" Simply, search for <a target="_blank" href="https://www.instagram.com/ui_gradient/"><strong>ui_gradient</strong></a>, <a target="_blank" href="https://www.instagram.com/ux_spring/"><strong>ux_spring</strong></a> or <a target="_blank" href="https://www.instagram.com/twineuidesign/"><strong>twineuidesign</strong></a>.  oh, common I'm not promoting them 😂..</li>
</ul>
<h4 id="heading-with-these-all-messed-up-i-finally-completed-designing-some-screens">With these all messed up, I finally completed Designing some  screens..</h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1652553021473/7AE1cO7QQ.png" alt="image.png" /></p>
<h2 id="heading-choosing-the-tech-stack"><strong> ⚡Choosing the tech stack</strong></h2>
<p>When it comes to choosing the tech stack, continuously it hits my head. And in this case, I was literally confused in choosing the stack because <strong><em>React Native</em></strong> and <strong><em>Flutter </em></strong>  were standing in front of me. Some how I was attracted towards the React native because I was quite familiar with JavaScript and React JS but  it took me a time to take the decision <em>thinking which one is best</em> , but trust me, none of these frameworks is best, they all have their own purposes.</p>
<ul>
<li><h4 id="heading-pro-tips-always-select-a-stack-that-you-are-familiar-with">✅ Pro tips : Always select a stack that you are familiar with.</h4>
</li>
</ul>
<h2 id="heading-challenging-authentication-task"><strong> ⚡Challenging Authentication task</strong></h2>
<p>In the world of browser i.e <strong>(web development)</strong>, Some of these terms like <em>cookies</em>, <em>LocalStorage</em>  were quite popular and understandable terms. But when it comes to virtual Emulator and simulator these all things are gone and sounds really confusing. Storing the tokens, some local data was some how challenging for me. </p>
<ul>
<li><h4 id="heading-so-who-are-new-to-react-native-dont-think-anything-just-open-google-and-search-for-asyncstorage-if-you-want-to-store-some-data-locally-and-save-your-time">✅ So, who are new to React Native, don't think anything, just  open google and search for <strong><em>AsyncStorage</em></strong> if you want to store some data locally and save your time !! 👌😂</h4>
</li>
</ul>
<h2 id="heading-managing-a-large-codebase"><strong> ⚡Managing a large codebase</strong></h2>
<p>Since, project "<strong>Mero Room</strong>" is a business driven project and has a lots of files, folders and  sub folders so, it was really hard to manage those files. And in my case, the name of the folders and files were not too meaningful and context fixable. So it was more tough to manage. But it may not be same for others.   </p>
<h4 id="heading-pro-tip">✅ Pro tip :</h4>
<ul>
<li>Always break down the project in folders and sub folders.</li>
<li>Give a meaningful name to the files.   </li>
<li>Follow the same naming and coding convention throughout the project. Some popular naming convention are <strong>Bem convention</strong> and <strong>camelCase convention</strong> .</li>
</ul>
<h2 id="heading-managing-silly-merge-conflict-in-git"><strong> ⚡Managing silly merge conflict in git</strong></h2>
<p>Since, I was working with my team, so I had a headache while managing those merge conflicts in git.  It's well said that, <strong>"Little knowledge is dangerous"</strong> and my little knowledge regarding some git commands pushed me into a world of unmerged code. </p>
<h4 id="heading-pro-tip">✅ Pro tip :</h4>
<ul>
<li>Always use branching system in  any code hosting platform. such as <strong>GitHub, Bitbucket or GitLab</strong>.  </li>
<li>Always give meaningful commit name while, pushing, the code to repository. (<strong><em>Helps a lot while reverting a code to the previous commit </em></strong>)</li>
</ul>
<h2 id="heading-summary"><strong> Summary </strong></h2>
<p>Yes, the whole process was tough for me, but it was so much interesting, full of fun and Learnable.  Working hours and hours just to add a single new features and facing the gigantic error was not too much joyful. But, result after a long hours made me very happy and emotional too. My hands on keyboard and my minds on  <strong>PCM</strong>  (<strong>Physics</strong>, <strong>Chemistry</strong> and <strong>Maths </strong>) was  really painful for me. But, In my case study also equally important , because I'm not a <strong>zuckerberg</strong>,  <strong>larry</strong> who is going to the MIT and Harvard. I'm Just a student carrying bag on his back and going to the community school. Managing a valuable time for these subject beside the project was really tough job. Although there were so many challenges, always I tried to give best from my side. </p>
<p>So, guys never loose hope, be optimistic and believe in yourself and change the entire world. Always be supportive so that any others developers can be benefited. With that said, at last I want to say that, The <strong>IT</strong> world is so much <strong>gigantic</strong> always be ready to learn a new things !! ❤</p>
]]></content:encoded></item></channel></rss>