<?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[Harpal On Software]]></title><description><![CDATA[Harpal On Software]]></description><link>https://harpalonsoftware.com</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Apr 2026 21:27:14 GMT</lastBuildDate><atom:link href="https://harpalonsoftware.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Are you a Vibe Coder ?]]></title><description><![CDATA[You're sitting in front of your screen, AI coding assistant ready to go, and you have this brilliant idea for a feature. Your fingers are itching to type that first prompt. Sound familiar?
There's no denying AI tools have become a daily part of our d...]]></description><link>https://harpalonsoftware.com/are-you-a-vibe-coder</link><guid isPermaLink="true">https://harpalonsoftware.com/are-you-a-vibe-coder</guid><category><![CDATA[Visual Studio Code]]></category><category><![CDATA[vibe coding]]></category><category><![CDATA[Model Context Protocol]]></category><category><![CDATA[claude.ai]]></category><category><![CDATA[claude-code]]></category><category><![CDATA[claude]]></category><category><![CDATA[copilot]]></category><category><![CDATA[vscode extensions]]></category><category><![CDATA[vscode]]></category><category><![CDATA[VS Code]]></category><category><![CDATA[VSCode Tips]]></category><category><![CDATA[#ai-tools]]></category><category><![CDATA[ai agents]]></category><category><![CDATA[Productivity]]></category><dc:creator><![CDATA[Harpal]]></dc:creator><pubDate>Sun, 07 Sep 2025 18:01:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757268207116/68b42c4a-76ee-4f3e-83d1-2f88b87c95fa.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You're sitting in front of your screen, AI coding assistant ready to go, and you have this brilliant idea for a feature. Your fingers are itching to type that first prompt. Sound familiar?</p>
<p>There's no denying AI tools have become a daily part of our developer lives. It's become super easy to generate <code>galaxy-sized code-bases</code> within hours. But here's the thing I've noticed after countless vibe coding sessions, you can’t blindly trust what is being generated.</p>
<blockquote>
<p>You can generate code at 10000X speed now with AI-tools but speed doesn’t make you productive !!</p>
</blockquote>
<p>Just like drivers on a highway, there are different types of vibe coders out there. And trust me, the type you are, determines whether you'll reach your destination smoothly or end up in a traffic jam of <em>technical debt.</em></p>
<h2 id="heading-the-three-type-of-vibe-coders">The Three Type of Vibe Coders</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757234217862/d582f2c1-a04d-471c-a80a-7433c591ce75.png" alt class="image--center mx-auto" /></p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text"><strong><em>For Simplicity Lets take one real life example. Think like you are building a task organizer tool ( just like </em></strong><a target="_self" href="https://trello.com/"><strong><em>trello</em></strong></a><strong><em>) with vibe-coding.</em></strong></div>
</div>

<h3 id="heading-1-the-demanding-child">1. The Demanding Child 👶</h3>
<p>Vibe Coder in this category treats AI tool like a magic wand. They simply order without caring how it's being done, then sit around waiting for results. When the result isn't up to the mark, they'll ask again, probably scream, shout, and repeat.</p>
<blockquote>
<p>It's like driving an expensive car but ignoring all traffic rules. Sure, you have the horsepower, but you don't get much mileage and end up violating a lot of rules. <strong><em>The result? The dirtiest context, huge technical debt, and missed deadlines.</em></strong></p>
</blockquote>
<p><strong>The Hidden Reality: 80% time fixing, 20% building</strong> 📉</p>
<p>For example, imagine you're building a task organizer tool, and you've made it so tasks can be moved from one state to another. However, when you refresh, the task returns to its original state. Now, you want to fix this issue. Since you haven't properly planned how your system should behave, fixing one bug can disrupt many flows and patches.</p>
<p><img src="http://cdn-0.plantuml.com/plantuml/png/bPNXRjis4CU_woakBeO1HfDjxH2qHXFKaQEcmu85QRTzfiMJTJ15QkHfSRxjAVO0s_SzL9zaHwhQB3d34i60IUf_n_l_U9BU1bQUkyPaHrnZWz0QHJOBMxAjygg1jIgt6-ywgtDdd8TdnQlYTR7CcDWWp5ROAAl9RY2loMZuYTO8kTFeuHW-rWWhL5p3zywrSAEOqTjPbabgff9QPVaWnGnKW1y3ngsAozFBqx5w-HwM8L1WcIMfB3oxF2rU5iLOc3lBk6FucQnsTqawB4dYOfclnlgFMDPIxRhFAeEaUorNbfsTmNi9zQfaSXQ-WKNobjVA1RZ03Ta0PsTPglhuN4eImQoW7MYlDY3kPE3QeracT-H-qYtW7Lf9oHYWLIoRbu9jo35eFZ0P0slljcXFJawomO8eXk42tfJnQ1REAxl1yq-___dcgxHo3lDveSYWXeY-QNa-pv8p2PV_lLYFMWB_sWkyI7kceYHgYk25XDwagftj1uS0Lk8Ph6EuSrxwQJFrV-qyzjOnJ7slgAhGesLelLiRRCBZtOy1HA5Ncafs_Xx8Lkx_88mvx5Vv08YNyP1AroBa7h4zf72jjWZ4eD4WAx42xDmKnLBh01KgxlmXYmkFQXi0TnHOC3u9n9Z5DUrGWyTVElBOeENm21Ro6-Ei39MnaF_gZMyboorkn4c8qoiqve7cY3Ymx-pqc1oF7f4aYdjr0JMixw5rndGiuxBtE-PtfUHkILP5HN2Yb9sVH6aCQf2NjNAFP3J6bDucEgeRrrbMP7jG--_3on3xWKAD-f3FylRTrH5yrmN9q7TGUeocZPCh-oL3gtn0qEJvVk0pRQ9RR55n0B9GUSdgrTCHJIdT36UondjdOsErYloZSKqRgsbJImpCC-javdv5dpmyJzcolLpp-Qkllm2c1g6YdJJaStWX2-kEZ9RPV3vapyQ6FXjTmCGP37w6EFZqsn_xnG-V20cT-83hpwVypvOP2f3eOFArWz7d9LwzJq-Rci5LlSlSe-BK-B6tVQiC_63XWwluJddyD_TR6NMD-Hi0" alt="PlantUML diagram" /></p>
<h3 id="heading-2-the-lazy-reader">2. The Lazy Reader 📖</h3>
<p>These developers ask the right questions initially but trust blindly whatever the AI tool generates. They don't care to review specs or even the generated code. They're waiting for magic to happen, having no idea what code has been written.</p>
<p>Its like you know the traffic rules, but you choose to ignore them. You're like a lazy passenger who falls asleep and expects to wake up at the destination. Sometimes you get lucky, but more often you end up lost.</p>
<p><strong>The Hidden Reality: 60% time confused, 40% productive</strong> 🤷‍♂️</p>
<p>Returning to the task management tool example, you've planned properly, but now you've started blindly trusting AI tool suggestions. Maybe it's because you're too lazy to read, or you've set your AI to auto-accept mode and gone shopping.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text"><strong><em>In reality your context got so polluted the AI starts suggesting jQuery solutions in a React app</em></strong></div>
</div>

<p><img src="http://cdn-0.plantuml.com/plantuml/png/ZPJRRXit48RlzoccAee0gkqUuXZj8dPZovQZ7j0qSfDhQZdU9SGbMSvGidBLfsZlsxi-Lfwa97MmLZ82NUq1SvZ_cvzyHImyXrONdt63BOBJGfc2fieuuKKB4r5DQs-3aGEhhOVFXzyDlnzU5gnO8_H-5XyMy1Q5H0_lr0HXODFhCTmr25TQ6GbtFX336y6CtlIA8jPbLIad37VoUo08VYUCFMxEXizlphgHboEu95B4yIk7nXyvS3Zi1WwiONnWU1-RstaENVsAmm-7buFhRlnFniuroXhXLhWS7fyfzEOipb2SdyCePdjHiR86lYdXrgDW62TmS7vUv96FBz8y9VIkWj8IAjiwZmqQKZC4wKLzBBrrG0jYR7j5Z8qPERE4tuBGYXSnII9y2H9PA8qIyC5fOKHgcvjifGoiMnmxGOmmLzpOmE1HI6Ng8WwV0jEZX9TLMbhfWdSQBpx-_T_Bh_AV2-ZtRnxBWwgDzIZx_JsztwPcvZvG-hZ2MXdQ5_s-MO0YyumXgfufd0CrTXwd-M57Qc_4C1S4oW0tk5GyWbf4I0iRJavEUhjAnwoq1canb_SekbpMcuq9wzUDQkk5gQFgl_xTKlqM7Gf62Ny4f5I2ekXFC-jY-qKH8S4Kqy9CXOxf2MpFIxX6XqQYgHPmvuNRfpQsBN8JAJqZc7WxHNC4z-e15EzH8mgOe6bb44vV76LwE4F3q0WZDVhChbl_nq2yB1WVraEBlGDvTP5TQPk99QUbUdWGiYwrWMsTHaQG6ofFK3ijuGv52sFseQur9gljMLya8sGFABDqK7mkRRSREsgT9KOFj33IHzmmLTKqsQ-BQYnQV3G4Y3gMZa0FfxNlCLQiPhZjrKEfTS4ztaupKONGFa7jnUCLSesr5pAtI-YYkBN4DzxEb4G2KcaJ7eIXENhgEkqwj1EKnzBE3P3L8S_zwIEfKNXpEAazMElmINBPuOYwb5wZZW54wzimQawWZ6K4EqEVHpzAHOjLoOaEUD7ldttz1R1g4QfyoQ4yWjFuotahGvKssE-lsnHTEQkvIzZM1QkpiXdjuv__x8ZOBBI47JtmBczuq-_MMWbihQOZSDPw216y-f2tcmldiw8j8UNnLJfMMA2Ha8Ilv7jLDmpsFeiV-ENbDrcKy5fu9pJyQc1ixtak_7Rgg_WQMlq_" alt="PlantUML diagram" /></p>
<h3 id="heading-3-the-strategic-pilot-my-favorite-planning-first">3. The Strategic Pilot ✈️ (My Favorite!) : <strong>( Planning-First )</strong></h3>
<p>These are the developers who plan well and invest time upfront in understanding the problem. They have minimum <em>3-5 vibe coding sessions just for planning complex features</em>. They have the strong self-control to stop the urge of rushing into coding and asking AI to just start generating code.</p>
<p>They're like civilized drivers who follow traffic rules, stop at signals, and check their maps before starting the journey. The result? Better roadmap, less technical debt, slim context, good design principles, and better results in shorter time.</p>
<blockquote>
<p><strong>Real Vibe discipline would be control the urge of jumping to the code without planning —</strong><a class="user-mention" href="https://hashnode.com/@harpalonsoftware">Harpal</a></p>
</blockquote>
<p><strong>The Hidden Reality: 20% planning, 80% smooth execution</strong> 🚀</p>
<p>Returning to the to-do drag and drop feature, it will be super easy if it's planned properly.</p>
<p><img src="http://cdn-0.plantuml.com/plantuml/png/bPN1SkF44yRlUeh--ryiLQwa25bO5jKch75MjLkmXOiDvDpMjAofZ6RCT2l6Dqwy0iML0m-M9s4qLcIFjOVrpPfyytL_lsufhrdGIzkOx7zIKqEmDgXjnlVQhj5Z0qiixrVUjLRDdN4U_b-yBBujPfbeCGIJ3-9HQALBM6ZZ17xLIuAvK-JX76xhyDiGMbWOj5RR5InGXBoTP5cm5rtgDLePsKm06NvX2kNUl2YADozIzUmTp9Wr2zgTD1nqmkT5aGhdpWhzBd2dhNARAEsFGewBeYWkKlqFrcqCgHN1zyWKzSDHhF1Dg91TNS6YHYRuCeUVwRTM-m3E2iEpVSwhgopsVtxTDPV3v4UIpxcZQq5vN9qhxzR0MnPgOAEb1d_eL6dFCid2rM0GZN88ZDfIMaygrGQ7O2iq5EprDwviTmfw8B-LkkkhD8JURBCUGv0FH79uLNOZpbUUo5u__lNdgo_YmJLCft6CITtfD1lOT3R3mzveQLgwVlpxtmEVVOZ88fZiSLxcCFDbhOMY0cw8zSgEKTxLsB5qQz4D6i33En6bU5HqxggAlqiO9lveeeEptFF7xW7DYEEyTewfLwaUQXm2ikk6_MamnpmzA2erXwgdm4nvtdgqN977fI5G4LZ2z7aExxKX5cV3liAxi2fnV37i6EtmzxYauApPde4G2oofSfwWMziZfaL0mgHsDtHIu1ZbBR4mIEsyQrTrvrswfj4Iu3f_7_VJAVfadXzRqIKo6MtfDA8frBk-cQhxxCKW2TEl3fbUXXQxp1_dELCg8WFZkezRa6n6taSuRpfvrTfojuvQjh1ijL4Stzqma6EeVNs2Yb1QJn7gsbDDblK3nV7nAKnJh4_ZBNUtJkQQeXsQPMVQ4Tcl-w_MiA3Fu2rQvQfgZ7Rk2QLBXmtKlKWDbyTSvmcKH7bCT9_94wejLCxlwaZ_jfr8CmMwy9f5MmhXofx6oL37tu6klQOrejT6byFEMYS4xe5yZ7QsDywIPgVJoulFODt_ypg3b-696-Ua1aPjmjbq-bGilTcdp-4eBpob77fy_EEV9ClGIWv7iU1zduFKK3ICaWMt35oZNqUp6DaGUilnUU6TQkDRqqcNXZAo2Ze2FGUlLxM0gmuex9P8mNARmzjWZ0P-il31LR91Vs3mElng6_CV" alt="PlantUML diagram" /></p>
<h2 id="heading-the-context-death-loop">The Context Death Loop ⚠️</h2>
<p>Here's what happens to your AI assistant as context gets polluted:</p>
<p><strong>Demanding Child Vibe Coder's Polluted Context (After repeated ask ):</strong></p>
<pre><code class="lang-plaintext">Demanding Child: "The drag drop still doesn't work with the new requirements"
AI: "I see you want to implement drag and drop. Here's a jQuery solution..."
Demanding Child: "WE'RE USING REACT! I told you this 10 times!"
AI: "Of course! Let me create a class component with mixins..."
Demanding Child: "HOOKS! WE USE HOOKS!"
</code></pre>
<p><strong>Lazy Reader Vibe Coder’s Bloated Context ( At every AI suggestion):</strong></p>
<pre><code class="lang-plaintext">Lazy Reader: "Why does the drag drop break when users are online together?"
AI: "Let me add another useEffect... Actually, maybe we need Redux... Or perhaps MobX..."
Lazy Reader: "Accepts everything without understanding.."  
&lt;Or worst case : puts vibe-coding session in auto-accept change mode&gt;
</code></pre>
<p><strong>Strategic Pilot Vibe Coder's Clean Context ( After Proper Detailed Planning and Analysis):</strong></p>
<pre><code class="lang-plaintext">Strategic Pilot: "Implement the drag-drop with the state architecture we planned using @PRD-Design.md"
AI: "Based on our requirements analysis, here's the step by step plan implementation with WebSocket sync..."
Strategic Pilot: "Perfect. Let's add the optimistic updates we discussed."
</code></pre>
<h2 id="heading-the-reality-check">The Reality Check</h2>
<p>No doubt if you're in the 1st or 2nd category, you'd want to move to the 3rd category. After all, it's not just about writing code anymore.</p>
<blockquote>
<p>You can't wear the badge of honor of "writing 10k lines/day" when AI is already doing that !!<br />Real mastery is how well you can guide your AI tools to write code that does what you want in the shortest time — <a class="user-mention" href="https://hashnode.com/@harpalonsoftware">Harpal</a> ( Yeah …I can quote myself 😉)</p>
</blockquote>
<p>It's like getting yourself trained to ride a horse if you're good, you'll be a good horse rider. If not, you might get injured if you're not careful.</p>
<h2 id="heading-the-5-point-roadmap-to-strategic-vibe-coding">The 5-Point Roadmap to Strategic Vibe Coding 🛣️</h2>
<h3 id="heading-1-master-the-why-before-how-question">1. Master the "Why Before How" Question</h3>
<p>Complete this sentence before writing any prompt: "As a user, I should be able to..." If you can't finish it clearly, you're not ready to code. Go back to your PRD and revisit your plan. If its not there create one!!</p>
<h3 id="heading-2-resist-the-code-rush">2. Resist the Code Rush</h3>
<p>Stop your inner child from hitting enter immediately. Think like a pilot ,make a checklist, tick every item. Without proper planning, a crash is guaranteed.</p>
<h3 id="heading-3-session-discipline-the-milestone-method">3. Session Discipline : The Milestone Method</h3>
<p>Don't have marathon sessions. Start focused, complete it, commit it, close it. Keep your session short.</p>
<pre><code class="lang-plaintext">Clean Journey:
[Plan] ──▶ [Session 1] ──▶ [Commit] ──▶ [Session 2] ──▶ [Commit] ──▶ [Success]

Messy Reality:
[Session] ──▶ [More Code] ──▶ [Breaks Previous] ──▶ [Fix] ──▶ [Breaks Again]
    ▲                                                        │
    └──────────── "Why isn't this working?" ◄───────────────┘
</code></pre>
<h3 id="heading-4-document-your-learning-journey">4. Document Your Learning Journey</h3>
<p>Update .md (Knowledge base) files regularly. Document failures , they're gold mines. Your future self will thank you.</p>
<blockquote>
<p>Don’t forget to check-in your knowledge-base (.md) files and don’t let it out of sync.</p>
</blockquote>
<h3 id="heading-5-build-once-use-forever-templates-and-tools">5. Build Once, Use Forever Templates and Tools</h3>
<p>Create templates for repetitive tasks. Each project has its own business rules and patterns. Use Agents, <a target="_blank" href="https://harpalonsoftware.com/5-mcp-servers-i-actually-use-and-why-you-should-too">MCP Servers</a> ( my blog about Top 5 MCP Servers).</p>
<h2 id="heading-the-bottom-line">The Bottom Line</h2>
<p>Remember when coding was about memorizing syntax and fighting with documentation? Now it's about being a great conductor of an AI orchestra. 🎼</p>
<p>The universe always keeps balance, as AI gets smarter at writing code, we need to get smarter at directing it. The discipline required to become a Strategic Pilot might seem harder initially, but it pays off exponentially.</p>
<p>Take your time. Enjoy the process. And don't forget: the best vibe coders aren't the fastest prompters they're the best planners. They create knowledge that transfers, code that lasts, and teams that learn.</p>
<p>Which type of vibe coder are you? And more importantly, which one do you want to become? 🚀</p>
<p>The transition isn't always easy, but here's what I've learned: every Strategic Pilot was once a Demanding Child or Lazy Reader. The difference is they chose to evolve.</p>
]]></content:encoded></item><item><title><![CDATA[5 MCP Servers I Actually Use (And Why You Should Too)]]></title><description><![CDATA[Vibe Coding - MCP MCP MCP… Phew !!!
In the vibe coding era, it's the best time to be a developer. Things which used to take months now just take a couple of vibe coding sessions. Every day new tools are getting introduced. MCP servers are one of them...]]></description><link>https://harpalonsoftware.com/5-mcp-servers-i-actually-use-and-why-you-should-too</link><guid isPermaLink="true">https://harpalonsoftware.com/5-mcp-servers-i-actually-use-and-why-you-should-too</guid><category><![CDATA[mcp server]]></category><category><![CDATA[claude-code]]></category><category><![CDATA[copilot]]></category><category><![CDATA[Vibe Coding Tools]]></category><category><![CDATA[vibe coding]]></category><category><![CDATA[Model Context Protocol]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[#ai-tools]]></category><category><![CDATA[AI]]></category><category><![CDATA[AI Coding Assistant]]></category><category><![CDATA[coding]]></category><category><![CDATA[playwright]]></category><category><![CDATA[claude.ai]]></category><category><![CDATA[Claude 3]]></category><category><![CDATA[context engineering]]></category><dc:creator><![CDATA[Harpal]]></dc:creator><pubDate>Wed, 27 Aug 2025 19:28:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1756322942621/b9001311-be06-4956-8192-0441622ad153.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-vibe-coding-mcp-mcp-mcp-phew">Vibe Coding - MCP MCP MCP… Phew !!!</h2>
<p>In the vibe coding era, it's the best time to be a developer. Things which used to take months now just take a couple of vibe coding sessions. Every day new tools are getting introduced. MCP servers are one of them.</p>
<p>It's easy to get lost as there are endless MCP servers out there which are claiming to be super productive. I'm sharing my favorites that I actually use (not just hype about). Let me break this down for you - what they are, why they matter, and how they'll change your workflow.</p>
<h2 id="heading-my-top-5-mcp-servers">My Top 5 MCP Servers</h2>
<p>Here's my shortlist of MCP servers that actually move the needle:</p>
<ol>
<li><p><a target="_blank" href="https://github.com/oraios/serena"><strong>Serena MCP</strong></a> - The Memory Master</p>
</li>
<li><p><a target="_blank" href="https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking"><strong>Sequential Thinking</strong></a> - The Problem Solver</p>
</li>
<li><p><a target="_blank" href="https://github.com/upstash/context7"><strong>Context7</strong></a> - The Documentation Expert</p>
</li>
<li><p><a target="_blank" href="https://github.com/ref-tools/ref-tools-mcp"><strong>Ref-Tool MCP</strong></a> - The Efficiency Beast</p>
</li>
<li><p><a target="_blank" href="https://github.com/microsoft/playwright-mcp"><strong>Playwright</strong></a> - The Reality Check</p>
</li>
</ol>
<p>Now let me tell you why each one is worth your time...</p>
<h2 id="heading-why-these-5-actually-matter-the-important-part">Why These 5 Actually Matter (The Important Part!)</h2>
<h3 id="heading-1-serena-mcp-the-context-clean-up-champion">1. Serena MCP - The Context Clean-Up Champion</h3>
<p>Let's say you want to add a Lombok dependency to your pom.xml (simple example to make you understand).</p>
<p><strong>Without Serena:</strong> Your prompt sends the entire file to the LLM... it makes context dirtier, burns more tokens, and gives you generic answers.</p>
<p><strong>With Serena:</strong> What if I can just send the relevant portion of my file?</p>
<p><em>Less content → less tokens → context stays clean and slim</em></p>
<p>Here's what actually happens:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756321054786/d05cf64b-89b0-477f-b568-da768b4f62cd.png" alt /></p>
<p><strong><em>Note : Please open image in new tab for more clarity</em></strong></p>
<p><strong>Real numbers:</strong> 42% token reduction (300→175), 75% fewer back-and-forth rounds. That's not just efficiency, it makes you BP low when you get what you want on time ;)</p>
<h3 id="heading-2-sequential-thinking-when-your-brain-needs-backup">2. Sequential Thinking - When Your Brain Needs Backup</h3>
<p>You're building a React drag-and-drop component builder, but your components won't drop into the canvas area. Users can drag, but nothing happens on drop...</p>
<p><strong>Without Sequential Thinking:</strong> Your AI tool will try random solutions, mess with event handlers, still broken. It's like fixing a car by randomly replacing parts.</p>
<p><strong>With Sequential Thinking:</strong> It systematically investigates the drag-and-drop flow, checks each step of the process, and isolates where things break.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756321160231/a3b9fd59-f334-427d-a900-f240758bd076.png" alt class="image--center mx-auto" /></p>
<p><strong><em>Note : Please open image in new tab for more clarity</em></strong></p>
<p>See how Sequential Thinking approaches it? Instead of random fixes, it:</p>
<ol>
<li><p><strong>Analyzes the drag-drop flow</strong> - What should happen vs what's happening?</p>
</li>
<li><p><strong>Investigates each step</strong> - Drag start ✅, Drag over ❓, Drop ❓</p>
</li>
<li><p><strong>Validates the event chain</strong> - Are all required handlers present?</p>
</li>
<li><p><strong>Finds the exact missing piece</strong> - onDragOver with preventDefault()!</p>
</li>
</ol>
<p>This is gold when you're dealing with complex UI interactions where multiple events need to work together. No more "try this random fix", just systematic debugging that actually finds the root cause.</p>
<p>The difference? Generic LLM throws solutions at you. Sequential Thinking helps you understand WHY it's broken, so you actually learn something for next time! 🎯</p>
<p>Trust me you will save a visit to your hair doc <em>😉</em></p>
<h3 id="heading-3-context7-when-your-llm-is-living-in-the-past">3. Context7 : When Your LLM Is Living in the Past</h3>
<p>LLM models get outdated and don't have the latest documentation. You're trying to use the new React 18 features, but your AI is giving you React 16 patterns.</p>
<p><strong>Context7 gives you fresh documentation straight from the source.</strong></p>
<p>Simple use case: You want to implement the new <code>useId</code> hook in React 18.</p>
<p><strong>Without Context7:</strong> "Here's how you generate unique IDs in React... <em>gives you some random uuid library from 2019</em>"</p>
<p><strong>With Context7:</strong> "Here's the official React 18 <code>useId</code> hook documentation with current best practices and real examples."</p>
<p>It's like having the official docs injected directly into your conversation. No more outdated patterns, no more "this used to work but doesn't anymore" moments.</p>
<h3 id="heading-4-ref-tool-mcp-the-smart-efficiency-beast">4. Ref-Tool MCP - The Smart Efficiency Beast</h3>
<p>Same concept as Context7 but smarter, it only sends the relevant portion of documentation. Cost-effective and laser-focused.</p>
<p>Remember our Material-UI slider test?</p>
<ul>
<li><p><strong>Context7:</strong> 2,900 tokens of comprehensive docs</p>
</li>
<li><p><strong>Ref-Tool:</strong> 175 tokens of exactly what you need</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756321189269/dacc1d22-8e35-40d4-8574-f5ce9c2831e6.png" alt class="image--center mx-auto" /></p>
<p><strong><em>Note : Please open image in new tab for more clarity</em></strong></p>
<p>93% token reduction while getting the exact answer. That's the difference between paying for a textbook and paying for just the page you need.</p>
<h3 id="heading-5-playwright-because-it-works-on-my-machine-doesnt-cut-it">5. Playwright - Because "It Works on My Machine" Doesn't Cut It</h3>
<p>You build a beautiful form, test it manually, ship it. Users complain it's broken.</p>
<p><strong>The problem:</strong> You tested in Chrome on your laptop. Users are on Safari mobile, Firefox, Edge...</p>
<p><strong>Playwright MCP:</strong> Tests your stuff in actual browsers, takes screenshots, validates accessibility, checks responsive design.</p>
<p>Use case: You want to test if your login form actually works across browsers.</p>
<p><strong>Without Playwright:</strong> "Looks good to me!" <em>ships broken mobile experience</em></p>
<p><strong>With Playwright:</strong> "Tested on Chrome, Firefox, Safari. Found 2 mobile issues and 1 accessibility problem. Here are the fixes."</p>
<p><em>It's like having a QA team that never sleeps and actually catches the stuff users will complain about.</em></p>
<h2 id="heading-the-how-part-your-exercise">The HOW Part (Your Exercise!)</h2>
<p>I'm not going to spoon-feed you the installation steps as you are pretty smart !! and honestly, it's pretty straightforward. Just follow the steps from each server's docs.</p>
<p>But here's the thing ,this is the really important part. <em>When you finish reading the WHY section and you're like "okay, this makes sense," that's when you need to practice. Treat it as an exercise 😉</em></p>
<h2 id="heading-final-thoughts-dont-be-that-person">Final Thoughts - Don't Be That Person</h2>
<p>Here's my final advice: <strong>Don't load up your vibe coding tool with 100s of MCP servers and make your context fatter.</strong> It will really slow you down.</p>
<p>Choose wisely !! Choose smartly !!</p>
<p>Think about what problems you actually have:-</p>
<ul>
<li><p>Want token efficiency? → Ref-Tool</p>
</li>
<li><p>Need better project context? → Serena</p>
</li>
<li><p>Need real browser testing? → Playwright</p>
</li>
<li><p>Debugging complex issues? → Sequential Thinking</p>
</li>
<li><p>Working with latest frameworks/learning ? → Context7</p>
</li>
</ul>
<p>Because all of this is just words until you get your hands dirty ( read this sentence in bold with caps and twice !!)</p>
<p><strong>Go ahead and try.</strong></p>
<p>Try at least one. Fail. Fix. Run again. Learn. Try the next one !!</p>
<p>That's how you figure out which ones actually work for <em>your</em> workflow, not just mine.</p>
<p>The vibe coding era is here, and these tools are your force multipliers. But they're only as good as your willingness to experiment with them.</p>
<p><strong>What's stopping you from trying one right now?</strong></p>
<hr />
<p><em>P.S. - I'm always curious about which MCP servers you end up loving (or hating). Drop a comment and let me know your experience!</em></p>
]]></content:encoded></item><item><title><![CDATA[Functional Programming Made Easy with Analogies]]></title><description><![CDATA[Introduction
Imagine you are a detective trying to solve a crime. You have a list of suspects, each with different characteristics like age, hair color, height, past criminal records, and so on. Your task is to find the criminal who fits the profile....]]></description><link>https://harpalonsoftware.com/functional-programming-made-easy-with-analogies</link><guid isPermaLink="true">https://harpalonsoftware.com/functional-programming-made-easy-with-analogies</guid><category><![CDATA[Functional Programming]]></category><category><![CDATA[Declarative vs. Imperative Programming]]></category><category><![CDATA[Java]]></category><category><![CDATA[#FunctionalProgramming]]></category><category><![CDATA[LearnWithAnalogy]]></category><dc:creator><![CDATA[Harpal]]></dc:creator><pubDate>Sun, 03 Sep 2023 10:20:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1693726653165/11315847-95aa-4012-b935-248bd50f629e.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-introduction">Introduction</h3>
<p>Imagine you are a detective trying to solve a crime. You have a list of suspects, each with different characteristics like age, hair color, height, past criminal records, and so on. Your task is to find the criminal who fits the profile.</p>
<p>Now, one way to do this is to go through the suspect list one by one, checking each suspect’s characteristics against the profile. <em>This is like following a set of step-by-step instructions</em>.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Finding criminals using step-by-step instructions, we can call this style an imperative style.</div>
</div>

<p>But what if there was a better way? What if you could ask for the end result you want? What if you could simply describe the profile you’re seeking and simply state, <em>“Find me a suspect who is over 5' 6" feet tall, has black hair, and is under 40 years old,”</em> and get the criminal instantly?</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Finding criminals by just describing the profile, we can call this style a functional style</div>
</div>

<p>Now before you get all Sherlock Homes feeling and get detective let me share the news, <em>"We have to get functional as we have a road trip ahead !!" But before we start, I think we can have a look at the simple definition of both realms. I promise I will not make it bookish and boring so stay with me.</em> Most of us are quite familiar with the imperative style. Let's revisit it once 👓.</p>
<h3 id="heading-imperative-style">Imperative Style</h3>
<p>The imperative style is a step-by-step process of explaining <strong>what</strong> do to and <strong>how</strong> to do it. Programmers must articulate clear steps and conditions to solve any given problem. Here are the steps taken to solve any problem in this style.</p>
<ol>
<li><p><em>Define a detailed step-by-step plan to solve the problem.</em></p>
</li>
<li><p><em>Use loops, conditional, mutable state variables, and statements to solve the problem.</em></p>
</li>
<li><p><em>Focus on the "<strong><strong>what</strong></strong>" and "<strong><strong>how</strong></strong>" of the solution, specifying each operation precisely.</em></p>
</li>
</ol>
<p>You may recall the introduction about finding the criminal using step-by-step instructions !!</p>
<h3 id="heading-functional-style">Functional Style</h3>
<p>Here are the steps taken to solve any problem in this style.</p>
<ol>
<li><p><em>Focus on the "<strong><strong>what</strong></strong>" part of the problem.</em></p>
</li>
<li><p><em>Utilize higher-order functions to process data to solve the problem.</em></p>
</li>
<li><p><em>Compose smaller functions to build a more declarative and reusable solution.</em></p>
</li>
</ol>
<p>Before you start drifting with the doze of definitions, please don't !! We are going on a road trip !! hurray !!. Pack your bag and get some snacks.</p>
<h3 id="heading-a-road-trip-using-both-styles">A Road Trip Using Both Styles 🚗</h3>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">A Trip without GPS: Imperative Style</div>
</div>

<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1693707728558/36720fc9-b3d5-444d-9aa3-a114e8c50620.jpeg" alt class="image--center mx-auto" /></p>
<p>You are on a road trip from Bangalore to Pune. It's a route you have never traveled before. You don't have a phone or GPS with you...wait, wait..you might ask, why in the name of GOD I don't have a GPS? Let's just say you traveled back in time using the time machine for some crazy reason when GPS wasn't invented or your battery is dead or you lost your phone, who cares 😉!!</p>
<p>Now, coming back to our trip, without GPS, you might have to rely on roadside signs or you might ask locals for directions and make decisions along the way based on available information. Your trip totally depends on the decisions you might be making !! One wrong turn and you have to start your journey all over again. This is what you do mostly when you work with imperative style. When you have to solve a problem using imperative style, you follow steps and use conditions to take decisions. For each given condition you define a different flow of handling the situation. It focuses on what and how part of the problem.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">A Trip with GPS: Functional Style</div>
</div>

<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690110714749/01ae867a-fcf3-4257-9ba9-ba1228b882ba.jpeg" alt class="image--center mx-auto" /></p>
<p>Note: Don't worry if you are viewing this image on a laptop and wondering if this could have been adjusted better. Forgive me, I am not perfect !!</p>
<p>Let's get ready for the next road trip. What if you had a GPS device? You might have it in your pocket right now or using it currently !! As you know, it's a long trip so I am trying to crack some jokes, clearly, I failed !! Let's just focus on the driving.</p>
<p>How do you make use of GPS while traveling, if I may ask? Easy peasy right, Before you start your journey, you set your current location, enter the destination, and let GPS handle the rest. It provides clear directions, turn-by-turn instructions, and the ETA of the trip. You can explore unknown territory without relying on external cues or directions. There is no risk of accidentally taking a wrong turn due to some wrong decision. Similarly, in functional-style programming, there is no risk of accidental errors in the code as functions are pure. You can just focus on what you are trying to solve and how part will be handled by higher-order functions. Since I have introduced two new terms i.e. pure-functions and higher-order functions, it's time to know some basic concepts of functional style.</p>
<h3 id="heading-concepts-of-functional-style-programming">Concepts of Functional Style Programming</h3>
<p><strong>Pure</strong> <strong>Functions</strong> :</p>
<ul>
<li><p>Always returns the same output for the same input. For example, a pure function that calculates the distance between two points on a map will always give the same answer for the same pair of points, no matter what time of day, weather, or traffic conditions are.</p>
</li>
<li><p>Do not have any side effects. For example, a pure function that converts miles to kilometers will not change the value of the original miles variable, nor will it print anything to the screen or save anything to a file.</p>
</li>
<li><p>Make the code easier to debug, test, and parallelize. For example, a pure function that finds the shortest path between two locations on a map can be easily tested by comparing its output with the expected output, and it can be run in parallel.</p>
</li>
</ul>
<p><strong>Higher</strong>-<strong>Order</strong> <strong>Functions</strong></p>
<ul>
<li><p>Accept one or more functions as arguments or return a function. For example, a higher-order function takes a function and a list of locations as arguments and applies the function to each location. Just like a GPS device that takes a route preference (such as fastest, shortest) and a list of destinations as inputs and calculates the best route for each destination according to the preference.</p>
</li>
<li><p>Enable abstraction and composition of functions. For example, a higher-order function that takes two functions and returns a new function that combines them. It's like a GPS device that takes two route preferences (such as fastest and scenic) and returns a new preference.</p>
</li>
<li><p>Provide common patterns such as map, filter, and reduce. For example, a GPS device takes filter criteria (such as distance, rating, or category) and a list of nearby attractions as inputs and returns a new list that matches the criteria.</p>
</li>
</ul>
<p><strong>Transformers</strong> :</p>
<ul>
<li><p>Take a function and return a modified version of it. For example, a GPS device takes a route calculation function and returns a new function that remembers the routes it has already calculated and reuses them if possible.</p>
</li>
<li><p>Allow changing the behavior or output of a function without changing its source code For example, a GPS device that takes a route calculation function and returns a new function that records the start and end points of each route it calculates.</p>
</li>
</ul>
<p>Hope this gives you a clear idea of functional programming concepts. Now we know how to use a functional style toolkit to solve any problem, why not just try one in both styles?</p>
<h3 id="heading-lets-solve-a-problem-using-both-styles">Let’s Solve a Problem Using Both Styles</h3>
<p>Imagine you have a list of tweets <em>(whatever X-blah-weets people are calling it now)</em>, and you want to count all the spam tweets. Let's dive into both styles and handle a common programming task.</p>
<p><strong>Mental modal of Imperative style Problem-Solving</strong> <code>(How and What Part)</code></p>
<ul>
<li><p>Pass a list of tweets to a loop</p>
</li>
<li><p>Initialize a spam counter</p>
</li>
<li><p>For each iteration:</p>
<ul>
<li><p>If a tweet is spam, increase the counter</p>
</li>
<li><p>else do nothing</p>
</li>
</ul>
</li>
<li><p>End of the loop</p>
</li>
<li><p>Return spam counter.</p>
</li>
</ul>
<pre><code class="lang-java"><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getTotalSpamTweetsCount</span><span class="hljs-params">(List&lt;Tweet&gt; tweets)</span> </span>{
    <span class="hljs-keyword">int</span> totalSpamTweets = <span class="hljs-number">0</span> ;
    <span class="hljs-keyword">for</span>(Tweet tweet : tweets) { 
    <span class="hljs-keyword">if</span>(tweet.isSpam()) {
        totalSpamTweets++;
      } 
    } 
    <span class="hljs-keyword">return</span> totalSpamTweets;
}
</code></pre>
<blockquote>
<p>Don't worry if you don't understand the java code. This is just to give you an idea. The basic principle remains the same no matter what language you are using!!</p>
</blockquote>
<p><strong>Here’s an explanation of the Java code snippet :</strong></p>
<ol>
<li><p>The method <code>getTotalSpamTweetsCount</code> takes in a list of <code>Tweet</code> objects as an argument.</p>
</li>
<li><p>It initializes a counter-variable <code>totalSpamTweets</code> to 0.</p>
</li>
<li><p>The method uses a for-each loop to iterate through each <code>Tweet</code> object in the list.</p>
</li>
<li><p>Inside the loop, it checks if the current tweet is spam by calling the <code>isSpam()</code> method on the <code>Tweet</code> object.</p>
</li>
<li><p>If the tweet is spam, then <code>totalSpamTweets</code> , the counter is incremented by 1.</p>
</li>
<li><p>After the loop finishes, the method returns the value of <code>totalSpamTweets</code>, which represents the total number of spam tweets in the list.</p>
</li>
</ol>
<p><strong>Functional style Problem-Solving Mental modal</strong> <code>(What Part)</code></p>
<ul>
<li><p>Get the count of all the spam tweets or</p>
</li>
<li><p>Filter all the spam tweets and get the count.</p>
</li>
</ul>
<pre><code class="lang-java"><span class="hljs-keyword">int</span> totalSpamTweets = tweets.stream().filter(Tweet::isSpam).count();
</code></pre>
<p><strong>Here’s an explanation of the Java code snippet :</strong></p>
<ol>
<li><p>The <code>stream()</code> method is called on the <code>tweets</code> list to create a stream of <code>Tweet</code> objects.</p>
</li>
<li><p>The <code>filter()</code> method is used on the stream to filter out only those tweets that are spam. It uses the <code>Tweet::isSpam</code> method reference to check if a tweet is spam.</p>
</li>
<li><p>The <code>count()</code> method is then called on the filtered stream, which counts the number of elements in it (which are the spam tweets) and returns it as a long.</p>
</li>
<li><p>This count is then stored in the <code>totalSpamTweets</code> variable.</p>
</li>
</ol>
<p><strong>Adding New Feature: Count Spam Tweets Posted in the Last 24 hours</strong></p>
<p><em>Now, let's say we want to count only the spam tweets that were posted in the last 24 hours. Let's see how to do it using the imperative style</em></p>
<pre><code class="lang-java"><span class="hljs-keyword">int</span> totalRecentSpamTweets = <span class="hljs-number">0</span>;
Instant twentyFourHoursAgo = Instant.now().minus(Duration.ofHours(<span class="hljs-number">24</span>);

<span class="hljs-keyword">for</span> (Tweet tweet : tweets) {
    <span class="hljs-keyword">if</span> (tweet.isSpam() &amp;&amp; tweet.getTimestamp().isAfter(twentyFourHoursAgo)) {
        totalRecentSpamTweets++;
    }
}
</code></pre>
<p><strong>Here’s an explanation of the Java code snippet :</strong></p>
<ol>
<li><p>The code initializes a counter-variable <code>totalRecentSpamTweets</code> to 0.</p>
</li>
<li><p>It then gets the current time and subtracts 24 hours from it to get the time 24 hours ago, which is stored in the <code>twentyFourHoursAgo</code> variable.</p>
</li>
<li><p>The code uses a for-each loop to iterate through each <code>Tweet</code> object in the <code>tweets</code> list.</p>
</li>
<li><p>Inside the loop, it checks if the current tweet is spam by calling the <code>isSpam()</code> method on the <code>Tweet</code> object and having a condition to check if the tweet was posted in the last 24 hours.</p>
</li>
<li><p>If both conditions are met, the <code>totalRecentSpamTweets</code> , the counter is incremented by 1.</p>
</li>
<li><p>After the loop finishes, the value of <code>totalRecentSpamTweets</code> represents the total number of spam tweets in the list that were posted in the last 24 hours.</p>
</li>
</ol>
<p>As you can see, <strong>to add one more condition here, we had to do a lot of rituals &amp; ceremonies. If this method is being used by many callers then all callers would have been impacted.</strong></p>
<p><em>Now let's see the power of functional style</em></p>
<pre><code class="lang-java"><span class="hljs-keyword">long</span> totalRecentSpamTweets = tweets.stream()
    .filter(Tweet::isSpam)
    .filter(tweet -&gt; tweet.getTimestamp().isAfter(Instant.now().minus(Duration.ofHours(<span class="hljs-number">24</span>))))
    .count();
</code></pre>
<p><strong>Here’s an explanation of the Java code snippet :</strong></p>
<ol>
<li><p>The <code>stream()</code> method is called on the <code>tweets</code> list to create a stream of <code>Tweet</code> objects.</p>
</li>
<li><p>The <code>filter()</code> method is used twice on the stream to filter out only those tweets that are spam and were posted in the last 24 hours. The first <code>filter()</code> uses the <code>Tweet::isSpam</code> method reference to check if a tweet is spam, while the second <code>filter()</code> uses a lambda expression to check if the tweet’s timestamp is after the time 24 hours ago.</p>
</li>
<li><p>The <code>count()</code> method is then called on the filtered stream, which counts the number of elements in it (which are the recent spam tweets) and returns it as a long.</p>
</li>
<li><p>This count is then stored in the <code>totalRecentSpamTweets</code> variable.</p>
</li>
</ol>
<p>As you can see, <strong>we have just added a condition saying to filter all tweets within the last 24 hours.</strong> This is more concise and readable than the imperative style. It makes it so easy to add new requirements or any possible changes in the future without heavy lifting.</p>
<p><strong>Adding New Feature: Total Spam Tweets &gt; 10 Retweets</strong></p>
<p>Let’s say we want to add a feature to only count tweets that have more than 10 retweets. Here’s how we can do it in both styles:</p>
<pre><code class="lang-java"><span class="hljs-keyword">long</span> totalRecentPopularSpamTweets = <span class="hljs-number">0</span>;
<span class="hljs-keyword">for</span> (Tweet tweet : tweets) {
    <span class="hljs-keyword">if</span> (tweet.isSpam() &amp;&amp; tweet.getRetweetCount() &gt; <span class="hljs-number">10</span>
        &amp;&amp; tweet.getTimestamp().isAfter(Instant.now().minus(Duration.ofHours(<span class="hljs-number">24</span>))))
        totalRecentPopularSpamTweets++;
    }
}
</code></pre>
<p>In functional style, it's much easier</p>
<pre><code class="lang-java"><span class="hljs-keyword">long</span> totalRecentPopularSpamTweets = tweets.stream()
    .filter(Tweet::isSpam)
    .filter(tweet -&gt; tweet.getTimestamp().isAfterInstant.now().minus(Duration.ofHours(<span class="hljs-number">24</span>))))
    .filter(tweet -&gt; tweet.getRetweetCount() &gt; <span class="hljs-number">10</span>)
    .count();
</code></pre>
<p>As you can see, we just had to add a simple condition of retweet count &gt; 10. By now you would have got clear idea about which approach is cleaner, easier, and more precise. We just have to add the required condition or in simple terms, <em>we have just to tell what to do</em> in a functional style and avoid step-by-step rituals.</p>
<h3 id="heading-rewire-yourself-with-functional-style">Rewire Yourself with Functional Style</h3>
<p>If you are still reading, I am glad you managed to survive this trip of analogies and my poor jokes!! I hope you haven't been overwhelmed by the amount of code snippets I have shared with explanations. If you are coming from an imperative style of programming, it can take some time to get used to the functional style. In imperative style, you are habitual in solving a problem in a series of steps, whereas in functional style you have to rewire your mind. Functional style of programming is a powerful tool that can help you write more concise, readable, and maintainable code. It’s particularly well-suited for solving problems that involve data processing and manipulation, such as filtering, mapping, and reducing collections of data. Another benefit of the functional style is its ability to abstract away low-level details and focus on the “what” part rather than the “how” part of a problem. This can make your code more readable and easier to understand, especially for complex problems.</p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>In this blog post, we’ve only scratched the surface of what’s is functional programming and how to change your way of thinking if you are trying to solve a problem using a functional style. Trust me, it's so much fun if you start thinking functionally. There are many more concepts to explore, such as immutability, pure functions, and transformers. These concepts can help you write even more robust and efficient code. If I managed to introduce you to functional programming through my unconventional analogies, then perhaps I will try to think of some more crazy way to explain functional stuff in detail and put it in a blog, hope you have enjoyed the trip, and I will leave you alone and let you to be Sherlock 🕵️‍♂️.</p>
]]></content:encoded></item><item><title><![CDATA[My Journey to the Software World]]></title><description><![CDATA[When you want something, all the universe conspires in helping you to achieve it.- Paulo Coelho, The Alchemist
Celebration
It was 2009, mid-noon and the crowd was cheering for me. I was getting kicked on my butt by my fellow friends, who were making ...]]></description><link>https://harpalonsoftware.com/my-journey-to-the-software-world</link><guid isPermaLink="true">https://harpalonsoftware.com/my-journey-to-the-software-world</guid><category><![CDATA[job search]]></category><category><![CDATA[fresher]]></category><category><![CDATA[#technology #jobs #freshers #careeropportunities #training #learning #jobs #devops #certification #linux #community #redhatlinux #ubuntu #tech #data]]></category><category><![CDATA[Software Engineering]]></category><category><![CDATA[software development]]></category><dc:creator><![CDATA[Harpal]]></dc:creator><pubDate>Sun, 09 Jul 2023 11:48:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1688893127564/a0adb1f0-5bd9-44ec-a38f-bc03ce3a0515.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>When you want something, all the universe conspires in helping you to achieve it.-</em> <strong><em>Paulo Coelho,</em></strong> <a target="_blank" href="https://www.goodreads.com/work/quotes/4835472"><strong><em>The Alchemist</em></strong></a></p>
<h3 id="heading-celebration"><strong>Celebration</strong></h3>
<p>It was 2009, mid-noon and the crowd was cheering for me. I was getting kicked on my butt by my fellow friends, who were making sure I stayed in the air. I had a big smile on my face, with my eyes closed. I opened my arms wide and felt like a rock star falling back from the stage and a crowd waiting to catch me. What a feeling !!</p>
<p>Suddenly I heard a faint voice in the distance, "Lab has started!". Everyone began rushing around, leaving me suspended in mid-air. Just as I was about to fall to the ground, I was abruptly jolted back to reality. Snap !! Boom !! I found myself sitting alone in the college campus garden. A distant, muffled voice echoed in the background, "<em>It's time, let's go to the lab...Harpal !! ..bro !!"</em></p>
<p>I was daydreaming. I drifted while watching a bunch of senior folks celebrating their selection for a big tech company. My friend Amit was calling me, "Let's go". I stood up, nodding my head with a short smile, and started walking. As I made my way toward the lab, I was still thinking about the dream I just had. Being a third-year graduate student pursuing a B.Tech in IT, I always wanted to get a job before completing graduation. Sometimes I used to wonder if I had a genie who could help me how to get a job in the software world or tell me the magic recipe or secret ingredient to get a job. I used to think people working for tech companies are celebrities. I was fascinated by an unknown world called software !!</p>
<h3 id="heading-college"><strong>College</strong></h3>
<p>I had a love-hate relationship with the academic college curriculum. In college, I used to love computer labs and hated the stress of mugging up and feeling overwhelmed during exams, like trying to vomit everything the very next day. I was a favorite student of my professor as I was good at experimenting with stuff in the computer lab. I didn't have a personal laptop back then. I had installed Java on each computer in our college library. I used to practice writing code in Notepad whenever I used to get time. There are so many stories close to my heart. I promise, will try to share all of it someday. Well !! Let's not get bored with my belaboring and get back to the story. It was the period of 2009-10, following the recession, but only two major companies visited our college campus. For one, I couldn't clear the aptitude test and for the second one, I was not qualified as I was not having enough % criteria. Time flew by. I completed my graduation in mid-2010 and still was jobless. My best friends eagerly awaited the day when I would get a job so that we could all celebrate it together, but it never happened during my college years !!</p>
<h3 id="heading-after-college"><strong>After College</strong></h3>
<p>I was sitting at home applying for jobs on Naukri, Monster, or whatever job portal I could search to ship my resume. No matter what shiny, fancy lab experiment I did in college and highlighted in my resume, nobody even bothered to open it. If they had, I would have gotten a call. For the first 3 months, I continuously applied but had no results. Since Truecaller had not been invented yet, I used to pick up every call in anticipation. However, all I would hear were messages about winning the lottery, being eligible for credit cards, or brokers wanting to showcase properties. I used to mug up my introduction for the interviews. Oh sorry wait !! didn't I tell you !! English was not my native language. You can imagine the rest !! I was surrounded by negativity but one thing kept me going. Something inside me was telling me to try again, I will get it someday, I just need one job. I never stopped learning &amp; practicing.</p>
<p>One day I convinced my family and landed in Silicon Vally of India i.e. Bangalore for a job search. You must be thinking why I had to convince my family !! Well, Let's just say when I entered this world, God must have played a prank on me by choosing my hometown about ~2500km away from Bangalore! Talk about a long-distance relationship with the IT hub! Jokes apart I love my hometown very much, and I can still trade it for an IT hub.</p>
<h3 id="heading-bangalore-days">Bangalore Days</h3>
<p>I still remember the day, September 22, 2010, when I landed in Bangalore. I had a lot of dreams as I picked up my luggage and boarded a city bus. Like me, many graduates come here every year with the hope of finding a job. After settling down, I started planning about job search. I made a lot of friends who were also job seekers like me. I used to start my day early. I would purchase a bus pass for the entire day. Job seekers had a vast network and I would often receive numerous SMS messages at night about potential recruitment drives the following day. During that time, WhatsApp didn't exist, so we relied on SMS or emails for communication. There were days when I would return empty-handed because the shared information turned out to be false. I used to stand in long queues just to submit my resume. Some recruitment drives were well-organized, but often we would leave early due to limited job openings. To manage the crowd, people were instructed to drop their resumes at the reception. Getting a job on campus is much easier as there is less competition. However, securing an off-campus job is tough, my friend! It requires a great deal of effort to stand out from the crowd and showcase your skills.</p>
<h3 id="heading-first-call">First Call</h3>
<p>On October 4th, 2010, I learned about a recruitment drive taking place on October 9th, in Cochin (Kerala). Without hesitation, I applied and received my hall ticket. I embarked on an overnight train journey to reach Cochin. Standing in queues and seeing a crowd holding folders had become a familiar sight to me. The first round was a written test, which I completed and submitted. On the evening of October 18th, I received an email stating that I had cleared the test. For the next interview round, they provided two dates, the 19th and the 25th. Without a second thought, I boarded a train to face the interview. Though in a rush, my friend Mahendra helped me secure a decent seat on the train and even packed dinner for me. Overwhelmed with joy, I had lost my appetite. Sleep eluded me that night on the train. Upon arriving, I booked a hotel room near the railway station. It was raining due to the monsoon season. After dropping off my luggage, I got ready for the battle.</p>
<h3 id="heading-finally"><strong>Finally</strong></h3>
<p>I arrived at the IT park where the interview was scheduled, completely drenched from the rain. It took some time for me to regain a normal state after reaching the location. They instructed us to wait and provided us with a form to fill out. I waited for serval hours for my interview round. Around 4 pm my technical round started. I don't recall the exact questions asked, but they mostly focused on fundamental knowledge. Finally, around 7 pm, it was time for the HR round. I managed to get through it with my mugged introduction and a few inquiries about my future aspirations! The moment of truth, for which I had been waiting so long, finally arrived. A man came forward and announced a few names, and to my joy, mine was among them. I couldn't contain my excitement and hugged him. I called everyone in my phonebook, starting with my parents. Even back at the hotel, I remained on continuous calls. It had slipped my mind that I hadn't eaten in the past 24 hours. In a tiny hotel room, surrounded by my best friends celebrating over the phone, I realized how long we had all been anticipating this day. I still vividly remember every single detail of that remarkable day.</p>
<h3 id="heading-dream-come-true">Dream come true</h3>
<p>It hadn't even been a month since I arrived in Bangalore, but I managed to secure a job! I have experienced the difficult days of being jobless, standing in queues with hope in my eyes. Perhaps those struggles shaped me into the person I am today. Now, I strive to assist others who are searching for a job. To all the job seekers out there, I have only one message: Never lose hope. All it takes is one opportunity, so don't give up. Pay no attention to what others say about you. Every effort you make brings you one step closer to your destiny. When the day arrives, your lucky stars will align automatically in the right direction. It's only you who can change the direction of your lucky stars with your dedication !! There is no star in this world that can't be moved with hard work and dedication. So keep trying till you move it !!</p>
<p>The night I received the job offer, I found myself drifting back to the same dream I had while in college. The only difference was this time, I deliberately closed my eyes and imagined it happening !!</p>
<blockquote>
<p><strong><em>PS: This was my personal experience please use my advice at your own risk ;) !!</em></strong></p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Are you a Social Media Addict?]]></title><description><![CDATA["The world's best minds are working to keep you busy on social media" - somewhere I read on the internet.

Do you have an addiction?
Social media addicts are everywhere. Look around, your brother, sister, wife, kids, friends, colleagues every single ...]]></description><link>https://harpalonsoftware.com/are-you-a-social-media-addict</link><guid isPermaLink="true">https://harpalonsoftware.com/are-you-a-social-media-addict</guid><category><![CDATA[social media]]></category><category><![CDATA[social media addiction]]></category><category><![CDATA[Software Engineering]]></category><category><![CDATA[software development]]></category><category><![CDATA[reading]]></category><dc:creator><![CDATA[Harpal]]></dc:creator><pubDate>Sun, 18 Jun 2023 09:27:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/NZeMMrsUu7M/upload/da96db89162301c5b6ed987fa8c24fd9.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p><em>"The world's best minds are working to keep you busy on social media</em>" - somewhere I read on the internet.</p>
</blockquote>
<h3 id="heading-do-you-have-an-addiction"><strong>Do you have an addiction?</strong></h3>
<p>Social media addicts are everywhere. Look around, your brother, sister, wife, kids, friends, colleagues every single one !! Ok, I exaggerated a bit !! In general old age, people don't have much addiction to phones, for instance, my mom &amp; dad still uses a phone with a keypad only to call someone. But in general, most of us are busy staring at ~6-inch screen. Be it watching:-</p>
<ul>
<li><p>Some crazy guy sharing a live feed of driving his new car at 180km/hr</p>
</li>
<li><p>A flying man in pajama rescues his friend who is intentionally lying down on a railway track knowing there won't be any train coming for the next 4 hrs.</p>
</li>
</ul>
<blockquote>
<p>Shorts and reels are the new trends, we have more watchers than readers!!</p>
</blockquote>
<h3 id="heading-whats-wrong-with-it"><strong>What's wrong with it?</strong></h3>
<p>Nothing wrong with getting yourself entertained and having some dopamine released in your brain. Everybody needs some kind of enjoyment in their free time. Nothing is wrong with it until it's done in excess. But again what's wrong with social media? Let's fast-forward some time in the future to a <em>social media rehab center</em>, where Bob is about to share his confession about his addiction, pay attention !!</p>
<p>"<em>Hi, I am Bob and I am a social media addict. I have had it for 10 years. I try to hide it but I can't. You will be surprised to know my thumb takes a long walk every day on a 6-inch mobile screen. He's so aware of his fitness that he doesn't care if it's day or night. I keep track of my thumb steps and count calories burnt daily in my thumb fitness tracker but it is always 10x times more than the threshold.</em></p>
<p><em>My neck reminds me that it's time to go to my physiotherapist who also likes to post his therapy tips on social media. Sometimes I wonder where would he go if he get muscle pain !! My eyes don't complain much as they have the superpower to see the world. I just have to sit in one special pose &amp; I can forget what is happening outside. It's like going to the quantum world in the AntMan movie. I don't care what is happening outside.</em></p>
<p><em>I may leave the gas stove on, forget to tie my shoe, forget to turn off the lights, may not look up but still can walk as I have secret eyes on my head when I walk around staring at my phone. I may get on the wrong train, forget to get down on the 6th floor, and can wait till the lift goes all the way to the last (20th) floor and come back when someone is also getting down on the 6th floor. Otherwise, It's ok to go to the basement and wait till some fellow press the 6th-floor button. If I am traveling I may forget my brush but the phone charger never. I have a daily competition with my phone about who sleeps first and my phone always wins because of the damn battery</em> !! I am so relieved to let it out, thank you for listening."</p>
<p>Snap🫰 !! Hello !! Let's get back to reality, we don't have to wait till Bob gets a Newcomer Chip !!</p>
<p>Now take a pause and think for a moment about what Bob confessed. Does something similar to this happen to you? If yes, congrats my friend you are not alone!!</p>
<h3 id="heading-what-about-you-are-you-a-saint-didnt-you-use-social-media"><strong>What about you? Are you a saint? Didn't you use social media?</strong></h3>
<p>Officially I quit social media around 2016 when my friend Anurag told me how addicted I was. I would be lying if I say I don't use it. I use it whenever I need to search for someone or a school friend, but I do not have any mobile app related to social media except Twitter (the reason I will reveal it in a while). Whenever I have to use social media, I go to the browser and type my password and log out once done. Surprisingly it's 2023 and after all these years I am still alive and people know I still exist without social media.</p>
<p>I still use Twitter but for a different purpose. After quitting social media in 2016, I wanted to form a good habit (thanks to James Clear's Atomic Habits). I am a software developer by profession and from the beginning, I like reading about tech stuff. So Ironically after quitting social media, I unfollowed all the celebrities on Twitter and started following all the tech experts so that I could keep myself up to date. I started using Twitter to follow the latest trends. But again I was a bit careful as I didn't want to get into the trap of overusing it. So I fixed half an hour in the evening after work &amp; half an hour in the morning. I thought anyway I am good at scrolling let's scroll some good shit!!</p>
<p>It helped me in so many ways. I have had the pleasure to find so many humble Tech Gods from whom I have learned so much. The more I read the more I grew. I can honestly say I have an addiction and it has helped me find my true passion i.e. reading, writing, mentoring, and sharing knowledge. It's until recently that I got the courage to start writing myself and sharing my thoughts on Twitter. Honestly writing gives me so much satisfaction and thought clarity to share something out in the open. I still want to thank my friend, Anurag, if it weren't for him maybe you might have found me somewhere on the internet as a flying man saving someone on the railway track !!</p>
<p>All this Twitter shit I just explained, I just created self-defense for myself in case after reading this post, you find me on Twitter and call me a hypocrite !!</p>
<h3 id="heading-what-makes-you-an-expert"><strong>What makes you an expert?</strong></h3>
<p>You are right, I can't play an actor who drinks regularly &amp; advise his audience to stop drinking. As I mentioned earlier I still use Twitter to keep myself surrounded by passionate people. That disqualifies me to give you any advice on how to avoid social media addiction. So if you are hoping to get any advice sorry to disappoint you. I am not qualified to give you any advice, but I am qualified enough to let you know how you can find out if you are addicted !!</p>
<p>First and foremost you have to accept you have an addiction, that's the first step to recovery!! If I wanted, I could have shared a few copied steps from chatGPT about how to avoid social media addictions, but that's not the reason I wrote the whole crap of ~1100 words. You are the best judge for yourself. Everyone has a unique talent and hidden creativity. You will have to just find it yourself so that It won't get dusted under the endless tsunami of shorts &amp; reels. Who knows you may find a hidden writer inside you ? or maybe a painter or an inventor or a CEO. If you still don't believe me take a pause and ask yourself, "Am I an addict ?"</p>
<blockquote>
<p>PS : This post is not generated by chatGPT because I didn't want to waste gallons of water 😉 !! This is my first blog post so forgive me If I was out of the line or my grammar hurted you in some way.You can use my advice at your own risk !!</p>
</blockquote>
]]></content:encoded></item></channel></rss>