<?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: Nihal Rajpal</title>
    <description>The latest articles on DEV Community by Nihal Rajpal (@nihalrajpal).</description>
    <link>https://dev.to/nihalrajpal</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%2F3235557%2F09001252-ccbe-4ce6-97cc-6fd236262cbc.jpeg</url>
      <title>DEV Community: Nihal Rajpal</title>
      <link>https://dev.to/nihalrajpal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nihalrajpal"/>
    <language>en</language>
    <item>
      <title>GSoC 2025 - Week 8: Designing Serial Port Component and Real Hardware Demo</title>
      <dc:creator>Nihal Rajpal</dc:creator>
      <pubDate>Sat, 02 Aug 2025 07:32:57 +0000</pubDate>
      <link>https://dev.to/nihalrajpal/gsoc-2025-week-8-designing-serial-port-component-and-real-hardware-demo-58ld</link>
      <guid>https://dev.to/nihalrajpal/gsoc-2025-week-8-designing-serial-port-component-and-real-hardware-demo-58ld</guid>
      <description>&lt;p&gt;Week 8 began with our second meeting with &lt;strong&gt;Prof. Gargi Khanna&lt;/strong&gt;, joined by my mentor &lt;strong&gt;Aman Asrani&lt;/strong&gt;. We showcased the improvements made to previously added components based on feedback from the first meeting. We then brainstormed the design of the Serial Port component, and were joined by &lt;strong&gt;Vivek Rao&lt;/strong&gt;, who provided insightful inputs that greatly enriched the discussion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Serial Port Component Design
&lt;/h3&gt;

&lt;p&gt;During the discussion, we explored how a Serial Port component could enable educational simulations involving real hardware. The conversation highlighted several practical use cases and helped refine the expectations for the component's interface and user experience. &lt;/p&gt;

&lt;p&gt;One of the most informative parts of the session was the detailed discussion around the bit width property of the components give in circuit simulators.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Planning the Demo
&lt;/h2&gt;

&lt;p&gt;Following these discussions, I focused on preparing a comprehensive demonstration of the Serial Port component, which had been developed in the previous weeks.&lt;/p&gt;

&lt;p&gt;Initially, I considered two separate examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One for receiving input from actual hardware.&lt;/li&gt;
&lt;li&gt;Another for sending output to hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, we finalized the idea of a single integrated demo that covers both input and output as it would be much more practical &amp;amp; intuitive.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ Final Demo Setup
&lt;/h3&gt;

&lt;p&gt;The finalized setup includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Arduino Uno&lt;/li&gt;
&lt;li&gt;LDR (Light Dependent Resistor)&lt;/li&gt;
&lt;li&gt;Relay Module&lt;/li&gt;
&lt;li&gt;Bulb&lt;/li&gt;
&lt;li&gt;(Most importantly) CircuitVerse with Serial Port Component&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Workflow:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Arduino reads analog data from LDR (connected to A0).&lt;/li&gt;
&lt;li&gt;This data is sent to CircuitVerse via the Web Serial API.&lt;/li&gt;
&lt;li&gt;Based on the reading, CircuitVerse sends a control bit (0 or 1) back to the Arduino — it sends 1 if the LDR reading is less than a threshold value (indicating low light).&lt;/li&gt;
&lt;li&gt;Arduino uses this bit to toggle Digital Pin 7 high or low.&lt;/li&gt;
&lt;li&gt;Digital Pin 7 controls the relay, which switches the bulb on/off.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This setup effectively demonstrates bi-directional communication (Tx &amp;amp; Rx) using the Serial Port component — making it a powerful example of real hardware-software integration in CircuitVerse.&lt;/p&gt;




&lt;h4&gt;
  
  
  🧩 Circuit Diagram
&lt;/h4&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%2Fgdd8qbtskriafmjp1xks.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%2Fgdd8qbtskriafmjp1xks.png" alt="Circuit Diagram" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🎥 Demo Video: Serial Port in Action
&lt;/h3&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%2Fiqa0izyh8o1n5iaik14k.gif" 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%2Fiqa0izyh8o1n5iaik14k.gif" alt="Hardware Demonstration" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ Other Progress
&lt;/h3&gt;

&lt;p&gt;At the end of the week, I also raised a Pull Request for the documentation of the Bit Extender component, which was developed and finalized in the previous week.&lt;/p&gt;

&lt;h3&gt;
  
  
  Looking Ahead
&lt;/h3&gt;

&lt;p&gt;In the coming week, I plan to write the documentation for the Serial Port component and begin designing the next component: a FIFO Queue, which will enhance data handling capabilities within the simulator.&lt;/p&gt;

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

</description>
      <category>opensource</category>
      <category>circuitverse</category>
      <category>arduino</category>
      <category>gsoc2025</category>
    </item>
    <item>
      <title>GSoC 2025 - Week 7: Setting Up Hugo, Submitting PRs, and Documentation Work</title>
      <dc:creator>Nihal Rajpal</dc:creator>
      <pubDate>Tue, 29 Jul 2025 17:11:01 +0000</pubDate>
      <link>https://dev.to/nihalrajpal/gsoc-2025-week-7-setting-up-hugo-submitting-prs-and-documentation-work-2ikg</link>
      <guid>https://dev.to/nihalrajpal/gsoc-2025-week-7-setting-up-hugo-submitting-prs-and-documentation-work-2ikg</guid>
      <description>&lt;p&gt;This week focused primarily on non-development tasks that are essential for project visibility and continuity. One of the key responsibilities was to draft and submit the &lt;strong&gt;GSoC Phase 1 blog&lt;/strong&gt; for the official CircuitVerse blog site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Up Hugo
&lt;/h3&gt;

&lt;p&gt;CircuitVerse uses &lt;a href="https://gohugo.io/" rel="noopener noreferrer"&gt;Hugo&lt;/a&gt;, a fast static site generator, to build its blog website. Since this was my first time working with Hugo, I began by reading the official documentation and installing it on my local Windows machine using &lt;code&gt;winget install Hugo.Hugo.Extended&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;However, when attempting to serve the blog locally using &lt;code&gt;hugo server -D&lt;/code&gt;, I encountered a breaking error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ERROR deprecated: site config key paginate was deprecated in Hugo v0.128.0 and subsequently removed.
...
ERROR: can't evaluate field DisqusShortname in type page.Site
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I double-checked the Hugo installation steps, ensured that I was using the extended version, and even tried installing older versions and prebuilt binaries — all without success. &lt;/p&gt;

&lt;p&gt;I also tried installing additional dependencies like &lt;strong&gt;Go&lt;/strong&gt; and &lt;strong&gt;Dart Sass&lt;/strong&gt;, suspecting they might be missing prerequisites. Unfortunately, the error persisted.&lt;/p&gt;

&lt;p&gt;Eventually, I decided to switch environments and set everything up using &lt;strong&gt;Ubuntu WSL&lt;/strong&gt;. After forking the blog repository, installing Hugo on Linux, and running &lt;code&gt;hugo server -D&lt;/code&gt;, the site finally compiled and served successfully. This experience reaffirmed how certain development tools and configurations often work more reliably in Unix-based environments.&lt;/p&gt;




&lt;h3&gt;
  
  
  PR Submission: Bit Extender Component
&lt;/h3&gt;

&lt;p&gt;Alongside the blog task, I submitted the raised pull request for &lt;strong&gt;Bit Extender component&lt;/strong&gt; which was built during Week 6 and includes support for configurable bit-width extensions using multiple strategies like zero, sign, one, and input-based extension.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/CircuitVerse/cv-frontend-vue/pull/630" rel="noopener noreferrer"&gt;PR Link: Bit Extender Component&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Documentation: Bit Extender
&lt;/h3&gt;

&lt;p&gt;Finally, I wrapped up the week by writing the &lt;strong&gt;official documentation&lt;/strong&gt; for the Bit Extender. Following the standard structure of CircuitVerse docs (Description, Ports, Example, and Embedded Circuit), the documentation explains the component’s usage, properties, and scenarios where it is typically useful.&lt;/p&gt;




&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;Week 7 was focused on documenting and polishing the work completed during Phase 1. With the blog post prepared, Bit Extender submitted, and its documentation written, the project is on track to successfully achieve its goal.&lt;/p&gt;

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

</description>
      <category>circuitverse</category>
      <category>gsoc2025</category>
      <category>opensource</category>
    </item>
    <item>
      <title>GSoC 2025 - Week 6: Completing Serial Port Integration and Introducing Bit Extender</title>
      <dc:creator>Nihal Rajpal</dc:creator>
      <pubDate>Mon, 28 Jul 2025 18:41:03 +0000</pubDate>
      <link>https://dev.to/nihalrajpal/gsoc-2025-week-6-completing-serial-port-integration-and-introducing-bit-extender-3n18</link>
      <guid>https://dev.to/nihalrajpal/gsoc-2025-week-6-completing-serial-port-integration-and-introducing-bit-extender-3n18</guid>
      <description>&lt;p&gt;The week began with a productive meeting with my mentor Aman Asrani and Prof. Gargi Khanna, who joined us to review the progress. We showcased the previously added components — Shift Register, Comparator, and Pull Resistor — and received valuable feedback from her, particularly around usability. Her insights were encouraging and helped validate the component design choices, ensuring they align well with educational objectives.&lt;/p&gt;




&lt;p&gt;With the &lt;code&gt;tauri-plugin-serialplugin&lt;/code&gt; already integrated into the Tauri-based desktop app, this week focused on designing a &lt;strong&gt;Serial Port component&lt;/strong&gt; that works seamlessly across both web and desktop environments.&lt;/p&gt;

&lt;p&gt;We designed and implemented the Serial Port component such that it works uniformly across both web and desktop platforms. Internally, it checks the runtime environment (browser or Tauri) and invokes the appropriate serial communication APIs accordingly. This component allows users to send and receive data from devices such as Arduino boards in real time, acting as a bridge between digital circuits in the simulator and real-world hardware.&lt;/p&gt;

&lt;p&gt;With this, hardware interaction via serial ports is now fully supported and tested across both platforms — a key milestone for the project.&lt;/p&gt;




&lt;h3&gt;
  
  
  Bit Extender Component
&lt;/h3&gt;

&lt;p&gt;In addition to the Serial Port interface, we introduced a new core component this week: the &lt;strong&gt;Bit Extender&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Bit Extender is a combinational digital circuit component that extends an input binary value to a specified larger bit width. It supports multiple extension strategies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zero-extension&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sign-extension&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One-extension&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom input-based extension&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This component is especially useful in arithmetic and logical designs that require uniform bit widths. A user-friendly interface is provided via the &lt;strong&gt;PROPERTIES&lt;/strong&gt; panel, where users can configure the extension method, bit widths, and direction of extension.&lt;/p&gt;




&lt;h3&gt;
  
  
  Looking Ahead
&lt;/h3&gt;

&lt;p&gt;In the coming week, we plan to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finalize and test the Serial Port component with various Arduino circuits.&lt;/li&gt;
&lt;li&gt;Begin writing documentation for the Serial Port and Bit Extender components.&lt;/li&gt;
&lt;li&gt;Continue internal testing and prepare for raising PRs.&lt;/li&gt;
&lt;li&gt;Perform UI polish and address remaining review comments.&lt;/li&gt;
&lt;/ul&gt;

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

</description>
      <category>opensource</category>
      <category>circuitverse</category>
    </item>
    <item>
      <title>GSoC 2025 – Week 5: Hardware Integration on Tauri Begins!🔌</title>
      <dc:creator>Nihal Rajpal</dc:creator>
      <pubDate>Thu, 10 Jul 2025 17:41:58 +0000</pubDate>
      <link>https://dev.to/nihalrajpal/gsoc-2025-week-5-hardware-integration-on-tauri-begins-4b0f</link>
      <guid>https://dev.to/nihalrajpal/gsoc-2025-week-5-hardware-integration-on-tauri-begins-4b0f</guid>
      <description>&lt;p&gt;This week was all about pushing through a major challenge: bringing hardware integration to the CircuitVerse desktop app built using Tauri. With the web version already working thanks to the Web Serial API, it was time to get the same functionality working on the desktop — and that came with a whole new set of problems to solve.&lt;/p&gt;

&lt;p&gt;The week started with a productive meeting with Harsh Rao and my mentor, Aman Asrani, to discuss hardware integration for the desktop app.&lt;br&gt;
Harsh gave us a thorough overview of how Tauri works. I learned that the desktop app internally uses a WebView to load the simulator’s website. &lt;/p&gt;

&lt;p&gt;This became the core issue because Web Serial APIs aren't supported inside a WebView, which meant our current browser-based solution wouldn’t work on the desktop app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔍 Searching for a Workaround&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To solve this, the first thing I needed was a way to differentiate between a browser and Tauri environment in the code. Harsh told us about the &lt;code&gt;isTauri&lt;/code&gt; hook, which made this detection easy.&lt;/p&gt;

&lt;p&gt;He also explained that Tauri provides plugins for native functionalities (like file downloads using the &lt;code&gt;fs&lt;/code&gt; plugin), and that serial communication would need a plugin too.&lt;/p&gt;

&lt;p&gt;So I began researching the Tauri ecosystem and came across a very informative article: &lt;a href="https://deid84.medium.com/serial-communication-with-tauri-plugin-serialport-6a7063dd2ac7" rel="noopener noreferrer"&gt;Serial Communication with Tauri Plugin (v1)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This gave me a clear understanding of how serial plugins work within Tauri. However, the plugin described in the article only supported &lt;strong&gt;Tauri v1&lt;/strong&gt;, and our project uses &lt;strong&gt;Tauri v2&lt;/strong&gt;, so I had to keep searching.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎉 Finally, a Working Plugin for Tauri v2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After some digging, I found a plugin that supports Tauri v2:&lt;br&gt;
&lt;a href="https://crates.io/crates/tauri-plugin-serialplugin" rel="noopener noreferrer"&gt;tauri-plugin-serialplugin on crates.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This plugin was exactly what I needed!&lt;/p&gt;

&lt;p&gt;I read through its documentation, understood the setup and usage, integrated it into the Tauri project, and tested everything — and yes, it works perfectly until now! 🚀&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔁 Other Progress&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alongside the Tauri integration work, I also:&lt;/li&gt;
&lt;li&gt;Resolved review comments on my previous PRs as suggested by Aman&lt;/li&gt;
&lt;li&gt;Cleaned up and improved the code for already added components&lt;/li&gt;
&lt;li&gt;Began preparing for the upcoming PR that will integrate the working serial port support into the desktop app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This week ended on a really positive note. We finally figured out a way to enable serial communication in the desktop version of CircuitVerse. The support and collaboration from Aman and Harsh were key to unblocking this task.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Collaboration really does lead to success — and this week proved that once again.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Next week, I’ll be working on polishing the Tauri integration further and raising a proper PR for the same after thorough testing.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>circuitverse</category>
      <category>gsoc2025</category>
    </item>
    <item>
      <title>GSoC 2025 - Week 4: Jumping into Hardware Integration</title>
      <dc:creator>Nihal Rajpal</dc:creator>
      <pubDate>Mon, 30 Jun 2025 18:29:13 +0000</pubDate>
      <link>https://dev.to/nihalrajpal/gsoc-2025-week-4-jumping-into-hardware-integration-kfk</link>
      <guid>https://dev.to/nihalrajpal/gsoc-2025-week-4-jumping-into-hardware-integration-kfk</guid>
      <description>&lt;p&gt;I began this week with one thought in mind:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Let’s finally fix this versioning issue!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;During our weekly community call, I shared my blocker again. That’s when our awesome org admin Aboobacker came up with a brilliant solution:&lt;/p&gt;

&lt;p&gt;🔁 Create a new branch from master (e.g., gsoc2025-open-hardware-library) and merge all your PRs there for now.&lt;br&gt;
Once the simulator is fully synced with v1, we can merge that branch into master.&lt;/p&gt;

&lt;p&gt;This was the perfect way to keep things moving forward without being stuck on versioning.&lt;/p&gt;

&lt;p&gt;So, I took a fresh clone of the project, created the branch locally, added all my components, and tested everything thoroughly.&lt;/p&gt;

&lt;p&gt;And then... something unexpected happened. Guess what?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ERROR: Permission to CircuitVerse/cv-frontend-vue.git denied to Nihal4777.
fatal: unable to access 'https://github.com/CircuitVerse/cv-frontend-vue/': The requested URL returned error: 403
Please make sure you have the correct access rights
and the repository exists.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I didn’t have the rights to create a new branch on the upstream repo 😅&lt;/p&gt;

&lt;p&gt;But no worries — I reached out to my mentor Aman Asrani and requested him to create the branch for me. Once it's there, I’ll fork it and raise all the PRs to that new branch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚙️ Meanwhile: Starting Hardware Integration with Web Serial API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While waiting for the branch setup, I started working on this week’s task — hardware integration using the Web Serial API.&lt;/p&gt;

&lt;p&gt;I began with some research to explore all the possible approaches.&lt;/p&gt;

&lt;p&gt;I quickly got it working on our web-based simulator since I had already built a Proof of Concept (PoC) for it earlier.&lt;/p&gt;

&lt;p&gt;Now comes the real challenge — integrating it into the desktop app built with Tauri. I explored multiple options and possible ways to make it work.&lt;/p&gt;

&lt;p&gt;Next week, I’ll be diving into that and aim to complete the desktop integration too. Let’s see how it goes!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>GSoC 2025 - Week 3: Feedback, Finalization &amp; Documentation</title>
      <dc:creator>Nihal Rajpal</dc:creator>
      <pubDate>Sun, 22 Jun 2025 12:29:52 +0000</pubDate>
      <link>https://dev.to/nihalrajpal/gsoc-2025-week-3-feedback-finalization-documentation-1d1n</link>
      <guid>https://dev.to/nihalrajpal/gsoc-2025-week-3-feedback-finalization-documentation-1d1n</guid>
      <description>&lt;p&gt;This week began with a productive meeting with my mentor Aman, where I showcased the components I’ve implemented so far — the Shift Register, Comparator, and Pull Resistor.&lt;/p&gt;

&lt;p&gt;We also discussed the versioning issue I’ve been facing. This has been a blocker for me since I haven't been able to raise a PR for my work because of it.&lt;/p&gt;

&lt;p&gt;To make good use of time while the issue is being resolved, we decided to focus on writing documentation for the components I’ve already completed.&lt;/p&gt;

&lt;p&gt;I first looked at how documentation is written for the existing components. Most of them follow a standard structure:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;- A description of the component&lt;/li&gt;
&lt;li&gt;- A list of its ports&lt;/li&gt;
&lt;li&gt;- An example&lt;/li&gt;
&lt;li&gt;- An embedded circuit showing how it works&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At first, I thought writing the docs would be easy. But I soon realized — &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;simple isn’t always easy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The problem? I couldn’t embed my circuit examples in the documentation because the components haven’t been merged yet due to the versioning issue.&lt;/p&gt;

&lt;p&gt;For now, I’ve created the example circuits on my local machine. Once the components are merged, I’ll update the links in the docs to include the live embedded circuits.&lt;/p&gt;

&lt;p&gt;Hoping the versioning issue will be solved in the upcoming week so that tasks dependent on each other can finally be marked as completed.&lt;/p&gt;

</description>
      <category>gsoc2025</category>
      <category>opensource</category>
      <category>circuitverse</category>
    </item>
    <item>
      <title>GSoC 2025 – Week 2: Comparator and Pull Resistor Implementation</title>
      <dc:creator>Nihal Rajpal</dc:creator>
      <pubDate>Sun, 15 Jun 2025 09:56:53 +0000</pubDate>
      <link>https://dev.to/nihalrajpal/gsoc-2025-week-2-comparator-and-pull-resistor-implementation-3c06</link>
      <guid>https://dev.to/nihalrajpal/gsoc-2025-week-2-comparator-and-pull-resistor-implementation-3c06</guid>
      <description>&lt;p&gt;This week (June 9–15), I continued with component development for CircuitVerse by focusing on adding two new hardware-oriented elements: the Comparator and the Pull Resistor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparator Component
&lt;/h2&gt;

&lt;p&gt;I began the week by implementing a Comparator component, which takes two inputs (&lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt;) and provides three outputs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;greater (when A &amp;gt; B),&lt;/li&gt;
&lt;li&gt;equal (when A == B), and&lt;/li&gt;
&lt;li&gt;less (when A &amp;lt; B).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Internally, the &lt;code&gt;resolve()&lt;/code&gt; method handles this comparison logic, and results are forwarded to the simulation queue. I also used the &lt;code&gt;fillText4&lt;/code&gt; method to draw appropriate comparison symbols on the canvas for clarity. &lt;/p&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%2F8ytwzhgdntrc4tq0rtwr.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%2F8ytwzhgdntrc4tq0rtwr.png" alt="Comparator Component" width="435" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After implementation, I tested the component thoroughly to ensure correctness across bit-widths and edge cases.&lt;/p&gt;

&lt;p&gt;Unfortunately, I was unwell for a day after finishing the Comparator, which slightly affected the pace of progress. However, I was able to resume soon after and complete the remaining work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pull Resistor Component
&lt;/h2&gt;

&lt;p&gt;Following that, I designed and implemented a Pull Resistor component. This component forces a floating input to either logic high (Pull-Up) or logic low (Pull-Down) based on the selected configuration. To make this configurable, I introduced a &lt;code&gt;pullDirection&lt;/code&gt; property and allowed users to switch it via a dropdown.&lt;/p&gt;

&lt;p&gt;Initially, CircuitVerse did not support dropdown input type in &lt;code&gt;mutableProperties&lt;/code&gt;, so I extended the simulator UI to support dropdowns. This involved modifying the Vue template that renders object properties, enabling reusable dropdown support for future components as well.&lt;/p&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%2Fyachk2j4zu1xcsnnbueh.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%2Fyachk2j4zu1xcsnnbueh.png" alt="Pull Resistor Component" width="549" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To simulate pull resistors accurately, I relied on the simulator’s use of &lt;code&gt;undefined&lt;/code&gt; to represent floating (undriven) nodes. The Pull Resistor component monitors its connected input and asserts a logic level — either high (&lt;code&gt;1&lt;/code&gt;) or low (&lt;code&gt;0&lt;/code&gt;) — only when the input is floating. This design ensures that the resistor doesn’t interfere with actively driven signals, come into play only when no other signal is present on the line.&lt;/p&gt;

&lt;p&gt;Looking ahead to Week 3 with more implementation and refinements in mind.&lt;/p&gt;

</description>
      <category>gsoc2025</category>
      <category>opensource</category>
      <category>circuitverse</category>
    </item>
    <item>
      <title>GSoC 2025 – Week 1: Shift Happens🔄</title>
      <dc:creator>Nihal Rajpal</dc:creator>
      <pubDate>Sun, 08 Jun 2025 16:13:29 +0000</pubDate>
      <link>https://dev.to/nihalrajpal/gsoc-2025-week-1-shift-happens-4pc6</link>
      <guid>https://dev.to/nihalrajpal/gsoc-2025-week-1-shift-happens-4pc6</guid>
      <description>&lt;p&gt;This week (June 2–8) marked a big shift — not just in terms of clock signals and data bits (hello shift registers!), but also a personal shift from the Community Bonding Period to the real deal: the Coding Phase of GSoC.&lt;/p&gt;

&lt;p&gt;The coding period kicked off and I dove straight into implementing shift registers — SISO, SIPO, PISO, PIPO. Classic stuff. The first question was: do I create separate components for each? Or just one smart, configurable one?&lt;/p&gt;

&lt;p&gt;Took a inspiration from Logisim, discussed with mentor and went with the second one. Just one “Shifter” component with properties like &lt;code&gt;parallelLoad: yes/no&lt;/code&gt;. Cleaner UI, less clutter, and feels more user-friendly.&lt;/p&gt;

&lt;p&gt;Then came the design phase. I built the component UI using the Canvas API. Control signals (Reset, Clock, Shift/Load) go on the top, and inputs/outputs on the bottom. As you increase the number of stages, the bottom part grows — dynamic and neat. &lt;/p&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%2Fbfpnhszeorm08a79dqrb.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%2Fbfpnhszeorm08a79dqrb.png" alt="Shift Component" width="692" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Initially had it in vertical layout, but then switched to horizontal because it just makes more sense when visualizing right shifts.&lt;/p&gt;

&lt;p&gt;With the UI structure done, I started implementing the core logic in the &lt;code&gt;resolve()&lt;/code&gt; method. This method detects rising clock edges and handles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Resetting the register&lt;/li&gt;
&lt;li&gt;Parallel loading the input data&lt;/li&gt;
&lt;li&gt;Shifting values serially to the right&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Everything seemed fine — until it came....&lt;/p&gt;

&lt;p&gt;🐛 The Unexpected Issue&lt;/p&gt;

&lt;p&gt;Strangely, I noticed that the &lt;code&gt;resolve()&lt;/code&gt; method wasn’t being called at all during simulation. I checked the logic, rewrote parts of it, even added logs — nothing. Eventually, I rolled back and tried running the same code outside the versioned folder &lt;code&gt;(v0)&lt;/code&gt;, and it worked perfectly.&lt;/p&gt;

&lt;p&gt;That gave me a strong hint: the issue was somehow tied to the versioning structure. I’m still not sure why this happens, so I decided to take it up with my mentor Aman Asrani. Meanwhile, to keep the flow going, I completed the implementation without using the versioned folder.&lt;/p&gt;

&lt;p&gt;Towards the end of the week, I tested edge cases, tweaked a few last-minute design elements (like defaulting to horizontal layout), and handed over the logic for review. I’m now waiting on the versioning issue to be resolved, after which I’ll raise a proper PR for this new component.&lt;/p&gt;

&lt;p&gt;Looking forward to Week 2 — and hopefully resolving the versioning quirk! 🚀&lt;/p&gt;

</description>
      <category>gsoc2025</category>
      <category>opensource</category>
      <category>circuitverse</category>
    </item>
    <item>
      <title>GSoC 2025 – Community Bonding with CircuitVerse</title>
      <dc:creator>Nihal Rajpal</dc:creator>
      <pubDate>Mon, 02 Jun 2025 17:22:41 +0000</pubDate>
      <link>https://dev.to/nihalrajpal/gsoc-2025-community-bonding-with-circuitverse-h5i</link>
      <guid>https://dev.to/nihalrajpal/gsoc-2025-community-bonding-with-circuitverse-h5i</guid>
      <description>&lt;p&gt;Hi everyone! 👋&lt;br&gt;
I’m Nihal Rajpal, and I’m honored to be a GSoC 2025 contributor with CircuitVerse. The past few weeks (May 8 – June 1) have been a wonderful beginning to this exciting journey during the Community Bonding Period.&lt;/p&gt;

&lt;p&gt;On May 11, we had our first Community Bonding Meeting with the entire CircuitVerse team — mentors, project admins, and fellow contributors. Everyone introduced themselves, and we had a warm, open conversation to kick things off. It was a good kickoff — I felt welcomed, part of something meaningful.&lt;/p&gt;

&lt;p&gt;Then came the GSoC Contributor Welcome Session on May 14, hosted by Google with Stephanie Taylor and Mary Radomile. &lt;/p&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%2Fqtve1ehwjfh8s3o7hhck.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%2Fqtve1ehwjfh8s3o7hhck.png" alt="GSoC Contributor Welcome Session" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They shared advice, best practices, and answered a ton of questions. It gave me a bigger picture of what GSoC is — more than just code, it’s about community and growth.&lt;/p&gt;

&lt;p&gt;Shortly after, I registered for the GSoC Alumni Discord. Still waiting to be added in 😅, but really looking forward to connecting with past contributors once that happens. I think there’s a lot to learn from those who’ve already walked this path.&lt;/p&gt;

&lt;p&gt;On May 25, We had a casual catch-up call with fellow contributors and the CircuitVerse team.☕&lt;br&gt;
It was refreshing to talk not just about code but also about how everyone was doing outside of GSoC — life, internships, exams, and hobbies. This made the whole experience feel even more human and supportive.&lt;/p&gt;

&lt;p&gt;Around the same time, My mentor Aman Asrani (who, by the way, has been incredibly supportive and approachable) and I started listing out the pending components for the project. We shared the list with Prof. Gargi Khanna for review and also asked for input from the community. It felt good to collaborate like that — getting different perspectives helped shape the roadmap.&lt;/p&gt;

&lt;p&gt;We decided to prioritize Shift Registers, Comparators, and Pull-down Resistors — these are essential, frequently used components and a great place to start.&lt;/p&gt;

&lt;p&gt;On June 1, we had a sync-up to check on progress and discuss any issues before the coding phase begins.&lt;/p&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%2Fjznl0beq3tc32nzqbda9.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%2Fjznl0beq3tc32nzqbda9.png" alt="June 1st Weekly Meet" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the bonding period officially wrapped up, I can honestly say I feel ready. I understand the project and workflow much better, I know who to reach out to when needed, and I feel genuinely connected to the community.&lt;/p&gt;

&lt;p&gt;Now begins the real work — the coding phase! I’ll be working on the first set of components and sharing regular updates.&lt;/p&gt;

&lt;p&gt;Stay tuned — more updates coming soon :)&lt;/p&gt;

</description>
      <category>gsoc2025</category>
      <category>circuitverse</category>
      <category>opensource</category>
      <category>communitybonding</category>
    </item>
  </channel>
</rss>
