<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Asutosh Kataruka</title>
    <description>The latest articles on DEV Community by Asutosh Kataruka (@asutoshk_09).</description>
    <link>https://dev.to/asutoshk_09</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3263720%2Fe5cb3506-e380-4e5f-ac68-57048e0783d6.png</url>
      <title>DEV Community: Asutosh Kataruka</title>
      <link>https://dev.to/asutoshk_09</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/asutoshk_09"/>
    <language>en</language>
    <item>
      <title>🚆 Build a Train Station Management App in C++ (Beginner Friendly 🚀)</title>
      <dc:creator>Asutosh Kataruka</dc:creator>
      <pubDate>Tue, 15 Jul 2025 19:57:08 +0000</pubDate>
      <link>https://dev.to/asutoshk_09/build-a-train-station-management-app-in-c-beginner-friendly--3l2b</link>
      <guid>https://dev.to/asutoshk_09/build-a-train-station-management-app-in-c-beginner-friendly--3l2b</guid>
      <description>&lt;p&gt;Have you ever wondered how trains are managed at a busy station? What happens when there are only a few tracks and multiple trains arriving and leaving? In this blog post, I’ll walk you through a fun console-based project I built using &lt;strong&gt;C++&lt;/strong&gt; to simulate train management at a station!&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 What Is It?
&lt;/h3&gt;

&lt;p&gt;This is a &lt;strong&gt;Train Station Management System&lt;/strong&gt; written in C++. It lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add or delete trains 🚉&lt;/li&gt;
&lt;li&gt;Automatically assign tracks based on arrival times and availability 🎯&lt;/li&gt;
&lt;li&gt;Handle delays and reschedule track allocation ⚙️&lt;/li&gt;
&lt;li&gt;View upcoming trains (with filters!) 📅&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔧 What You Need
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Basic knowledge of C++ (OOP, functions, vectors)&lt;/li&gt;
&lt;li&gt;A C++ compiler like &lt;code&gt;g++&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A terminal to run the app&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🏗️ How It Works
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ➕ Adding Trains
&lt;/h4&gt;

&lt;p&gt;You can add new trains by providing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Train name&lt;/li&gt;
&lt;li&gt;Arrival time (e.g., &lt;code&gt;1430&lt;/code&gt; means 2:30 PM)&lt;/li&gt;
&lt;li&gt;Departure time&lt;/li&gt;
&lt;li&gt;Source and Destination&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system will automatically assign the best available track.&lt;/p&gt;

&lt;h4&gt;
  
  
  🕒 Delays? No Problem!
&lt;/h4&gt;

&lt;p&gt;If a train is delayed, the system will &lt;strong&gt;reallocate tracks&lt;/strong&gt; and update the schedule.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔍 View Next Trains
&lt;/h4&gt;

&lt;p&gt;You can see which trains are coming next based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time&lt;/li&gt;
&lt;li&gt;Number of trains&lt;/li&gt;
&lt;li&gt;Specific track&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🗂️ All Trains
&lt;/h4&gt;

&lt;p&gt;Want to see all train details? You can sort them by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arrival time&lt;/li&gt;
&lt;li&gt;Departure time&lt;/li&gt;
&lt;li&gt;Track number&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  👨‍💻 How to Run
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone the repo&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Akataruka/station-management-app.git
&lt;span class="nb"&gt;cd &lt;/span&gt;station-management-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Compile the code&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;g++ &lt;span class="nt"&gt;-std&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;c++17 main.cpp &lt;span class="nt"&gt;-o&lt;/span&gt; station-management-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run it&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./station-management-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  📸 Demo
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WELCOME TO STATION MANAGEMENT APP
1. Create a new Station
Enter station Name: GrandCentral
Enter number of tracks: 2
Station Created ✅

1. Add/Delete trains
2. View Next trains
3. Add delay
4. View all trains
5. Get station details
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ✨ What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Priority Queue Interval Processing&lt;/strong&gt; - Implemented real-time track allocation using min-heaps to efficiently manage overlapping arrival-departure intervals and ensure optimal scheduling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Timestamp-Based Binary Search&lt;/strong&gt; - Used binary search on sorted train schedules to quickly identify the next available train based on a user-defined time query.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Function Overloading&lt;/strong&gt; - Leveraged overloaded functions to support multiple formats of train queries, including time-based, track-based, and count-based filters.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic Memory Allocation&lt;/strong&gt; - Created and managed &lt;code&gt;Train&lt;/code&gt; objects dynamically using heap allocation, with proper cleanup handled in destructors to prevent memory leaks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Encapsulation&lt;/strong&gt; - Encapsulated object properties and behaviors within dedicated classes (&lt;code&gt;Train&lt;/code&gt;, &lt;code&gt;Station&lt;/code&gt;) to maintain modularity and object-oriented integrity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Command-Line Interface Support&lt;/strong&gt; - Designed an interactive CLI for querying and managing station operations, providing a smooth user experience for scheduling and reporting.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  📌 Want to Try It?
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/Akataruka/station-management-app" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🙌 Final Thoughts
&lt;/h3&gt;

&lt;p&gt;This was a fun and rewarding project. It's simple, educational, and can be extended in many ways like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saving data to files&lt;/li&gt;
&lt;li&gt;Real-time simulation with random train traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're learning C++ and want to build something cool — give this a try!&lt;/p&gt;

&lt;p&gt;Feel free to ask questions or suggest features. 😊&lt;br&gt;
Happy coding! 👨‍💻👩‍💻&lt;/p&gt;




&lt;h3&gt;
  
  
  More about Author
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://linktr.ee/asutoshk_09" rel="noopener noreferrer"&gt;Asutoshk - Linktree&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>systemdesign</category>
      <category>lld</category>
      <category>programming</category>
    </item>
    <item>
      <title>🔍 Building a LeetCode Rank Search Chrome Extension — Track Multiple Users in One Click!</title>
      <dc:creator>Asutosh Kataruka</dc:creator>
      <pubDate>Thu, 26 Jun 2025 15:10:05 +0000</pubDate>
      <link>https://dev.to/asutoshk_09/building-a-leetcode-rank-search-chrome-extension-track-multiple-users-in-one-click-1m4c</link>
      <guid>https://dev.to/asutoshk_09/building-a-leetcode-rank-search-chrome-extension-track-multiple-users-in-one-click-1m4c</guid>
      <description>&lt;h2&gt;
  
  
  🧠 Motivation
&lt;/h2&gt;

&lt;p&gt;Have you ever participated in a LeetCode contest and then spent time manually flipping through rank pages just to find where you or your friends placed?&lt;/p&gt;

&lt;p&gt;I did too. And it was painful.&lt;/p&gt;

&lt;p&gt;So, I decided to solve it with code — by building a &lt;strong&gt;Chrome extension&lt;/strong&gt; that automates this entire process!&lt;/p&gt;

&lt;p&gt;In this post, I’ll walk you through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Challenge for data access on LeetCode 🚫&lt;/li&gt;
&lt;li&gt;The idea 💡&lt;/li&gt;
&lt;li&gt;The tech stack ⚙️&lt;/li&gt;
&lt;li&gt;How it works 🧩&lt;/li&gt;
&lt;li&gt;Chrome extension architecture 🧱&lt;/li&gt;
&lt;li&gt;Publishing &amp;amp; usage 🚀&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Overcoming the Challenge of Data Access on LeetCode
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚫 API Blocking by LeetCode
&lt;/h3&gt;

&lt;p&gt;LeetCode has strict anti-bot mechanisms in place that block automated API requests. This makes traditional API-based data retrieval methods unreliable for scraping or automation tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔄 Dynamic Frontend Architecture
&lt;/h3&gt;

&lt;p&gt;LeetCode’s frontend is built on dynamic JavaScript frameworks. The platform frequently updates its internal routing, selectors, and page structures, often breaking static scraping solutions.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Our Adaptive Solution: Real-Time Page Scraping
&lt;/h3&gt;

&lt;p&gt;To overcome these challenges, we implemented &lt;strong&gt;real-time page scraping&lt;/strong&gt; using browser automation. By simulating real user interactions, we dynamically search for usernames on the leaderboard and determine their corresponding pages.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 Smart DOM Traversal for Robustness
&lt;/h3&gt;

&lt;p&gt;Instead of relying on static links or outdated selectors, our method adapts to DOM changes by querying elements intelligently. This makes our solution more robust against frontend updates and layout shifts.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 Result: Resilient and Reliable Data Extraction
&lt;/h3&gt;

&lt;p&gt;This adaptive approach ensures that we can consistently retrieve user data from LeetCode, even as the platform evolves. It strikes a balance between compliance and flexibility in a dynamically changing environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 What the Extension Does
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;LeetCode Rank Search&lt;/strong&gt; is a Chrome extension that:&lt;/p&gt;

&lt;p&gt;✅ Lets you enter multiple LeetCode usernames&lt;br&gt;
✅ Automatically flips through contest ranking pages&lt;br&gt;
✅ Finds the page number for each user&lt;br&gt;
✅ Stops when all users are found&lt;br&gt;
✅ Gives you a friendly floating UI to view results&lt;/p&gt;


&lt;h2&gt;
  
  
  ⚙️ Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🧭 &lt;strong&gt;JavaScript&lt;/strong&gt; (Vanilla, for DOM manipulation &amp;amp; search logic)&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🧰 Folder Structure
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;leetcode-rank-search-extension/
├── manifest.json
├── background.js
├── content.js
├── popup.html
├── popup.js
├── styles.css
├── icon16.png
├── icon48.png
├── icon128.png
├── screenshot.png
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🧱 Key Components
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. &lt;code&gt;manifest.json&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;brain&lt;/strong&gt; of the extension, defining permissions, content scripts, icons, and popup.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"content_scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"matches"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://leetcode.com/contest/*/ranking/*"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"js"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"content.js"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"default_popup"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"popup.html"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"icons"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"16"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icon16.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"48"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icon48.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"128"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icon128.png"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. &lt;code&gt;popup.html&lt;/code&gt; + &lt;code&gt;popup.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Provides a simple UI button (&lt;code&gt;Start Search&lt;/code&gt;) that sends a message to the active tab to trigger the rank search.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;content.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompting for user IDs&lt;/li&gt;
&lt;li&gt;Navigating back to the first page&lt;/li&gt;
&lt;li&gt;Looping through rank pages&lt;/li&gt;
&lt;li&gt;Detecting usernames&lt;/li&gt;
&lt;li&gt;Updating the floating dialog&lt;/li&gt;
&lt;li&gt;Handling STOP and Search Again&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔄 How the Flow Works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;You open the &lt;strong&gt;LeetCode contest ranking page&lt;/strong&gt; (e.g., &lt;code&gt;weekly-contest-455/ranking&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Click the extension icon → hit &lt;strong&gt;“Start Search”&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You enter usernames like: &lt;code&gt;alice123, bob_dev, codewarrior&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Extension:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Goes to the &lt;strong&gt;first page&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Starts flipping pages&lt;/li&gt;
&lt;li&gt;Checks for usernames on each page&lt;/li&gt;
&lt;li&gt;Displays found page numbers in a nice floating box&lt;/li&gt;
&lt;li&gt;Stops when done or on your command&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Special Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ Multi-user support&lt;/li&gt;
&lt;li&gt;🛑 Manual STOP at any time&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Search Again&lt;/strong&gt; without reloading&lt;/li&gt;
&lt;li&gt;❌ Close button to dismiss the box&lt;/li&gt;
&lt;li&gt;🧱 Handles dynamically loaded LeetCode pages&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;Special case handled&lt;/strong&gt;: if rank table not found, instructs user to reload the page&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📸 Preview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F81sj3ioapeonq0o2h7z6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F81sj3ioapeonq0o2h7z6.png" alt="LeetCode Rank Search Extension Preview" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A floating UI helps you track user ranks in real-time while flipping pages automatically.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ⚠️ Common Pitfall: Rank Page Not Found?
&lt;/h2&gt;

&lt;p&gt;Sometimes LeetCode uses dynamic loading which makes the table undetectable initially.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔧 &lt;strong&gt;Fix:&lt;/strong&gt; Just reload the contest rank page and try again.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🚀 How to Install Locally
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone the repo or download ZIP&lt;/li&gt;
&lt;li&gt;Go to &lt;code&gt;chrome://extensions&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Developer Mode&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;“Load unpacked”&lt;/strong&gt; and select the folder&lt;/li&gt;
&lt;li&gt;Visit any LeetCode contest rank page and start using it!&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🔓 Open Source
&lt;/h2&gt;

&lt;p&gt;Find the full source code on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/Akataruka/leetcode-rank-search-extension" rel="noopener noreferrer"&gt;GitHub Repo Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to star, fork, or contribute!&lt;/p&gt;




&lt;h2&gt;
  
  
  🙌 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This was a fun weekend project that solved a real annoyance and introduced me to the world of Chrome Extensions + browser scripting.&lt;/p&gt;

&lt;p&gt;If you're into problem-solving, automating workflows, or just love clean tools — consider trying it out!&lt;/p&gt;

&lt;p&gt;Thanks for reading! 💛&lt;/p&gt;




&lt;h3&gt;
  
  
  More about Author
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://linktr.ee/asutoshk_09" rel="noopener noreferrer"&gt;Asutoshk - Linktree&lt;/a&gt;&lt;/p&gt;

</description>
      <category>leetcode</category>
      <category>automation</category>
      <category>javascript</category>
      <category>extensions</category>
    </item>
    <item>
      <title>Crafting Perfect Cold Messages: My AI-Powered Streamlit App Journey 🧊</title>
      <dc:creator>Asutosh Kataruka</dc:creator>
      <pubDate>Fri, 20 Jun 2025 06:40:44 +0000</pubDate>
      <link>https://dev.to/asutoshk_09/crafting-perfect-cold-messages-my-ai-powered-streamlit-app-journey-4i36</link>
      <guid>https://dev.to/asutoshk_09/crafting-perfect-cold-messages-my-ai-powered-streamlit-app-journey-4i36</guid>
      <description>&lt;p&gt;The digital world thrives on connections, and often, those connections start with a "cold" message. Whether it's for a dream job, a collaboration, or just networking, crafting personalized, impactful messages can be a time sink. This challenge inspired me to build the &lt;strong&gt;Cold Message Generator&lt;/strong&gt; – an AI-powered Streamlit application designed to automate and enhance this process.&lt;/p&gt;

&lt;p&gt;In this post, I'll walk you through how this app works, its core functionalities, and the step-by-step workflow that empowers you to create compelling outreach messages in minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Tedious &amp;amp; Time-Consuming Outreach
&lt;/h2&gt;

&lt;p&gt;We've all been there: staring at a blank screen, trying to figure out how to introduce ourselves or pitch an idea to someone we don't know. Manually extracting relevant details from a resume, summarizing key achievements, and then weaving it all into a compelling message is a multi-step process that demands attention to detail and significant time.&lt;/p&gt;

&lt;p&gt;My goal was to create a tool that could significantly reduce this effort, allowing users to focus on the &lt;em&gt;relationship&lt;/em&gt; rather than the &lt;em&gt;drafting&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: A Seamless AI-Powered Workflow
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Cold Message Generator&lt;/strong&gt; automates much of this process using the power of Large Language Models (LLMs) and a friendly Streamlit interface. Here’s a detailed look at the user experience and the underlying processes:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Secure Setup &amp;amp; Resume Upload 🚀
&lt;/h3&gt;

&lt;p&gt;The journey begins when you launch the application.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API Key Input:&lt;/strong&gt; First, you'll provide your Groq API key in the dedicated sidebar section. This ensures the app has the necessary credentials to communicate with the powerful AI models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resume Upload:&lt;/strong&gt; The primary input is your resume. You simply upload your resume in PDF format using the designated file uploader.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once your resume is uploaded, the application immediately gets to work behind the scenes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text Extraction:&lt;/strong&gt; The system rapidly extracts all textual content from your PDF resume.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Initial Link Discovery:&lt;/strong&gt; Simultaneously, it scans the extracted text for any visible URLs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Intelligent Link Classification &amp;amp; Summarization 🧠
&lt;/h3&gt;

&lt;p&gt;This is where the AI and smart processing truly shine, transforming raw data into actionable insights.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hidden Link Classification:&lt;/strong&gt; Beyond simple extraction, the app employs a specialized utility that goes through the discovered links. It intelligently classifies ambiguous or "hidden" links, ensuring that your LinkedIn, GitHub, and personal portfolio URLs are correctly identified and categorized, ready for easy inclusion in your message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-Powered Resume Summarization:&lt;/strong&gt; The full text of your resume is then sent to an advanced LLM. This AI model doesn't just condense text; it analyzes your experience and skills to generate a concise, professional, and impactful summary. This summary is automatically populated into a dedicated text area on the screen, ready for your review. This feature saves you the significant effort of crafting a summary from scratch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, you'll see the AI-generated summary and any automatically detected and classified links pre-filled into input fields, allowing you to easily review and make any minor adjustments or add links if they weren't detected.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Message Tailoring &amp;amp; Template Generation ✍️
&lt;/h3&gt;

&lt;p&gt;With your profile data processed, you guide the AI in crafting the perfect message.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Define Message Type:&lt;/strong&gt; You select the desired message type from a dropdown, such as "Cold Email," "LinkedIn Message," or "Other," indicating the communication channel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specify Target Role:&lt;/strong&gt; You input the specific job title or role you're targeting (e.g., "Software Engineer," "Data Scientist"). This critical piece of information allows the AI to tailor the message's content directly to the context of that role.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trigger Generation:&lt;/strong&gt; With a simple click of the "Generate Template" button, the application sends all your prepared inputs – the refined resume summary, your social links, the chosen message type, and the target job type – back to the LLM.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI then processes this comprehensive input to produce a customized message template. This template is designed for immediate use and includes dynamic placeholders, specifically &lt;code&gt;{{recipient_name}}&lt;/code&gt; and &lt;code&gt;{{company_name}}&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Final Personalization &amp;amp; Send-Ready Message ✨
&lt;/h3&gt;

&lt;p&gt;The last mile of customization is in your hands, leading to a complete, ready-to-send message.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Recipient Details Input:&lt;/strong&gt; You'll see dedicated input fields where you simply type in the specific recipient's name and the company's name for your current outreach.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Final Message Creation:&lt;/strong&gt; Upon clicking "Generate Message," the application seamlessly substitutes your entered recipient and company names into the template's placeholders.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a fully formatted, personalized message displayed in a large text area, ready for you to copy and paste directly into your email client or LinkedIn message window. This entire process significantly reduces manual effort, allowing you to scale your outreach while maintaining a personalized touch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Groq &amp;amp; Streamlit? (Under the Hood Efficiency)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Groq's Blazing Speed:&lt;/strong&gt; The choice of Groq's API for the LLM inference is crucial. Its Language Processing Units (LPUs) provide incredible speed, making the AI summarization and message generation almost instantaneous. This eliminates frustrating wait times, providing a snappy user experience that truly saves time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamlit's User-Friendliness:&lt;/strong&gt; For building interactive Python web applications, Streamlit is a fantastic choice. Its simplicity allowed me to focus primarily on the core AI logic and user workflow, rather than getting bogged down in complex web development frameworks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Robust Backend Logic:&lt;/strong&gt; Leveraging libraries like LangChain helps orchestrate the LLM calls and ensures structured outputs. Pydantic schemas enforce data consistency, guaranteeing that the AI's responses are always in the expected format, leading to reliable processing at every step.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Future Enhancements
&lt;/h2&gt;

&lt;p&gt;I'm always thinking about how to make this tool even better:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Expanded Message Types:&lt;/strong&gt; Introducing options for networking events, informational interview requests, and more diverse outreach scenarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tone Customization:&lt;/strong&gt; Allowing users to specify the desired tone (e.g., formal, friendly, direct, assertive) for their messages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ATS Keyword Optimization:&lt;/strong&gt; Integrating functionality to analyze job descriptions and suggest relevant keywords to include in the message for Applicant Tracking System (ATS) compatibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic CRM Integration:&lt;/strong&gt; Exploring options for simple export functionality to popular Customer Relationship Management (CRM) tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it Yourself!
&lt;/h2&gt;

&lt;p&gt;Ready to automate your outreach and make impactful first impressions?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Experience the Web App:&lt;/strong&gt; &lt;a href="https://akataruka-message-creater-app-razmkn.streamlit.app/" rel="noopener noreferrer"&gt;&lt;strong&gt;Cold Message Generator&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dive into the Codebase:&lt;/strong&gt; Find the full project on &lt;a href="https://github.com/Akataruka/message_creater" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;See More of My Work:&lt;/strong&gt; Check out my portfolio at &lt;a href="https://asutosh-kataruka.vercel.app" rel="noopener noreferrer"&gt;asutosh-kataruka.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm keen to hear your feedback, suggestions, or ideas for future improvements! Drop a comment below or reach out on GitHub.&lt;/p&gt;




</description>
      <category>python</category>
      <category>llm</category>
      <category>steamlit</category>
      <category>langchain</category>
    </item>
    <item>
      <title>🚀 Introduction to System Design: LLD and SOLID Principles</title>
      <dc:creator>Asutosh Kataruka</dc:creator>
      <pubDate>Sun, 15 Jun 2025 17:48:36 +0000</pubDate>
      <link>https://dev.to/asutoshk_09/introduction-to-system-design-lld-and-solid-principles-41df</link>
      <guid>https://dev.to/asutoshk_09/introduction-to-system-design-lld-and-solid-principles-41df</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Introduction to System Design: LLD and SOLID Principles
&lt;/h2&gt;

&lt;p&gt;In the context of system design, &lt;strong&gt;Low-Level Design (LLD) serves as the foundational layer&lt;/strong&gt; that translates high-level architectural decisions into detailed class structures, interfaces, and method definitions. While High-Level Design (HLD) outlines the overall system architecture, components, and technology stack, LLD focuses on the internal logic and object interactions that enable the system to function effectively. A critical component of effective LLD is the application of &lt;strong&gt;SOLID principles, which provide a structured approach to building maintainable, scalable, and extensible software systems&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This blog dives deep into &lt;strong&gt;why LLD matters&lt;/strong&gt;, what &lt;strong&gt;SOLID principles&lt;/strong&gt; are, and how they help create clean, maintainable, and scalable systems—with practical code examples.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Why Low-Level Design (LLD) Matters
&lt;/h2&gt;

&lt;p&gt;LLD is all about &lt;strong&gt;breaking a problem into classes and interactions&lt;/strong&gt; while maintaining principles like reusability, extensibility, and testability. It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bridges the gap between HLD and code&lt;/li&gt;
&lt;li&gt;Helps in better planning of class responsibilities&lt;/li&gt;
&lt;li&gt;Makes systems modular and easier to debug&lt;/li&gt;
&lt;li&gt;Supports clean architecture and future scalability&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔍 What are SOLID Principles?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SOLID&lt;/strong&gt; is an acronym for five key design principles in object-oriented programming that promote better LLD. Introduced by &lt;strong&gt;Robert C. Martin (Uncle Bob)&lt;/strong&gt;, they aim to make code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More readable&lt;/li&gt;
&lt;li&gt;Easier to maintain&lt;/li&gt;
&lt;li&gt;Flexible to change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SOLID stands for:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;S&lt;/strong&gt; – Single Responsibility Principle (SRP)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O&lt;/strong&gt; – Open/Closed Principle (OCP)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;L&lt;/strong&gt; – Liskov Substitution Principle (LSP)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I&lt;/strong&gt; – Interface Segregation Principle (ISP)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;D&lt;/strong&gt; – Dependency Inversion Principle (DIP)&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🧱 Deep Dive into SOLID with Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. ✅ Single Responsibility Principle (SRP)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Definition&lt;/strong&gt;: A class should have one, and only one, reason to change.&lt;br&gt;
&lt;strong&gt;Example&lt;/strong&gt;: A class should either manage user data or send emails—not both.&lt;/p&gt;

&lt;h4&gt;
  
  
  ❌ Bad Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class User {
public:
    void saveUser() {
        // Save user to DB
    }
    void sendEmail() {
        // Send confirmation email
    }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ✅ Good Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class User {
public:
    void saveUser() {
        // Save user to DB
    }
};

class EmailService {
public:
    void sendEmail() {
        // Send confirmation email
    }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Each class now has a single responsibility, improving maintainability.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 🧯 Open/Closed Principle (OCP)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Definition&lt;/strong&gt;: Software entities should be open for extension but closed for modification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: Add new discount types without touching old code.&lt;/p&gt;

&lt;h4&gt;
  
  
  ❌ Bad Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class DiscountCalculator {
public:
    int getDiscount(string type) {
        if (type == "regular") return 10;
        if (type == "vip") return 20;
        return 0;
    }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ✅ Good Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lass Discount {
public:
    virtual int getDiscount() = 0;
};

class RegularDiscount : public Discount {
public:
    int getDiscount() override { return 10; }
};

class VIPDiscount : public Discount {
public:
    int getDiscount() override { return 20; }
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Add new customer types by extending, not modifying existing logic.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. 🧬 Liskov Substitution Principle (LSP)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Definition&lt;/strong&gt;: Subtypes must be substitutable for their base types without altering the correctness of the program.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: A Bird base class should not assume all birds can fly.&lt;/p&gt;

&lt;h4&gt;
  
  
  ❌ Bad Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Bird {
public:
    virtual void fly() { cout &amp;lt;&amp;lt; "Flying" &amp;lt;&amp;lt; endl; }
};

class Ostrich : public Bird {
public:
    void fly() override { throw; } // Ostrich can't fly
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ✅ Good Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Bird {
public:
    virtual void makeSound() { cout &amp;lt;&amp;lt; "Chirp" &amp;lt;&amp;lt; endl; }
};

class FlyingBird : public Bird {
public:
    virtual void fly() { cout &amp;lt;&amp;lt; "Flying" &amp;lt;&amp;lt; endl; }
};

class Sparrow : public FlyingBird {};
class Ostrich : public Bird {};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Child classes behave correctly when used in place of their base class.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. 🧩 Interface Segregation Principle (ISP)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Definition&lt;/strong&gt;: Clients should not be forced to depend on interfaces they do not use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: Not every machine can fax&lt;/p&gt;

&lt;h4&gt;
  
  
  ❌ Bad Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Machine {
public:
    virtual void print() = 0;
    virtual void scan() = 0;
    virtual void fax() = 0;
};

class BasicPrinter : public Machine {
public:
    void print() override {}
    void scan() override {}
    void fax() override { throw; } // Doesn’t support fax
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ✅ Good Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Printer {
public:
    virtual void print() = 0;
};

class Scanner {
public:
    virtual void scan() = 0;
};

class SimplePrinter : public Printer {
public:
    void print() override {}
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Separate interfaces prevent unnecessary method implementations.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Only implement what’s needed. No empty or broken methods.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. 🔄 Dependency Inversion Principle (DIP)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Definition&lt;/strong&gt;:  High-level modules should not depend on low-level modules. Both should depend on abstractions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: Let the app depend on Database abstraction, not directly on MySQL.&lt;/p&gt;

&lt;h4&gt;
  
  
  ❌ Bad Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class MySQL {
public:
    void connect() { cout &amp;lt;&amp;lt; "Connected to MySQL" &amp;lt;&amp;lt; endl; }
};

class App {
    MySQL db;
public:
    void run() {
        db.connect(); // Tightly coupled
    }
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ✅ Good Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Database {
public:
    virtual void connect() = 0;
};

class MySQL : public Database {
public:
    void connect() override { cout &amp;lt;&amp;lt; "Connected to MySQL" &amp;lt;&amp;lt; endl; }
};

class App {
    Database* db;
public:
    App(Database* db) : db(db) {}
    void run() {
        db-&amp;gt;connect();
    }
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;You can easily switch to PostgreSQL or mock the DB for testing.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🌟 Advantages of SOLID Principles
&lt;/h3&gt;

&lt;p&gt;Applying SOLID principles offers several benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;✅ Maintainability: Code becomes easier to modify without unintended side effects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✅ Scalability: New features can be added with minimal changes to existing code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✅ Testability: Modular design improves unit testing capabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✅ Readability: Clear structure and responsibility make the code easier to understand.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✅ Reusability: Decoupled components are easier to reuse across different projects.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Understanding and applying the SOLID principles is a foundational step toward writing clean, scalable, and maintainable software. These principles help in reducing code complexity, enhancing reusability, and ensuring long-term success in system design, especially at the Low-Level Design (LLD) stage.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This blog presents the core understanding in a simplified, practical way with easy-to-follow C++ examples&lt;/em&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  Further Reading &amp;amp; References
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.cleancoder.com/uncle-bob/2020/10/18/Solid-Relevance.html" rel="noopener noreferrer"&gt; SOLID Principles by Uncle Bob (Robert C. Martin)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.geeksforgeeks.org/solid-principle-in-programming-understand-with-real-life-examples/" rel="noopener noreferrer"&gt;SOLID Principles by GFG&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>systemdesign</category>
      <category>oop</category>
      <category>cpp</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
