<?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: vedant-jain03</title>
    <description>The latest articles on DEV Community by vedant-jain03 (@vedantjain03).</description>
    <link>https://dev.to/vedantjain03</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%2F607013%2Fc342d17a-b9a3-4127-b71c-41490806f871.png</url>
      <title>DEV Community: vedant-jain03</title>
      <link>https://dev.to/vedantjain03</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vedantjain03"/>
    <language>en</language>
    <item>
      <title>GSoC 2022 CircuitVerse | Week 11 and 12 Report</title>
      <dc:creator>vedant-jain03</dc:creator>
      <pubDate>Mon, 05 Sep 2022 12:52:38 +0000</pubDate>
      <link>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-11-and-12-report-4n41</link>
      <guid>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-11-and-12-report-4n41</guid>
      <description>&lt;h2&gt;
  
  
  Description
&lt;/h2&gt;

&lt;p&gt;In previous two weeks, I have been working on completing the field around notifications for CircuitVerse. &lt;/p&gt;

&lt;p&gt;We have deployed the new Notification version/UI. There are still data migration task pending that will migrate all the older notifications for respective users. &lt;/p&gt;

&lt;h3&gt;
  
  
  Webpush Implementation
&lt;/h3&gt;

&lt;p&gt;I have been working on adding &lt;strong&gt;Webpush&lt;/strong&gt; feature, that will enable user to get notified while not been in our site. Just like you see in mobile notifications in the navbar!&lt;/p&gt;

&lt;p&gt;Basically, we need to register &lt;code&gt;service-worker.js&lt;/code&gt; in the user's browser.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serviceWorker&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serviceWorker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/serviceworker.js.erb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So there is a gem &lt;a href="https://github.com/zaru/webpush"&gt;webpush&lt;/a&gt; for adding webpush functionality into your Rails App. We had  implementation for webpush already with the model named as &lt;code&gt;Push_subscription&lt;/code&gt;. Basically for each webpush notification there will be a record in the database which on subscribing triggered the user browser and he can see the notification in the web.&lt;/p&gt;

&lt;p&gt;Noticed gem had really cool feature to have customized delivery method for notifications, so I created a custom delivery method &lt;code&gt;Webpush&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DeliveryMethods::Webpush&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Noticed&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;DeliveryMethods&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;deliver&lt;/span&gt;
    &lt;span class="c1"&gt;# Logic for sending the notification&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:user_id&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;project&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:project_id&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"/users/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;recipient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/notifications"&lt;/span&gt;
    &lt;span class="n"&gt;recipient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push_subscriptions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="nb"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:webpush_type&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"star"&lt;/span&gt;
        &lt;span class="nb"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_push_notification&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; starred your project &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;else&lt;/span&gt;
        &lt;span class="nb"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_push_notification&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; forked your project &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and respectively add the delivery method in our notifications:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# app/notifications/fork_notification.rb&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ForkNotification&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Noticed&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;
  &lt;span class="n"&gt;deliver_by&lt;/span&gt; &lt;span class="ss"&gt;:webpush&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s2"&gt;"DeliveryMethods::Webpush"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bug : &lt;code&gt;Couldn't find Project with 'id'&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Initially, for every notifications we were saving the &lt;code&gt;ids&lt;/code&gt; of the project and the user(the one who triggered the notificaitons). Due to which while destroying the projects dependent notification were not getting deleted and hence was leading to an error.&lt;/p&gt;

&lt;p&gt;Aboobacker assisted me to find the bug, and I finally made an approach to save objects in &lt;code&gt;params&lt;/code&gt;, so that destroying the projects should destroy the dependent notifications objects as well. But here was an issue, the new notification version was released 1.5 weeks before, and in the meantime many notifications with old parameters version that means with &lt;code&gt;project_id&lt;/code&gt; and &lt;code&gt;user_id&lt;/code&gt; in &lt;code&gt;params&lt;/code&gt; have been saved. That is why, we decided to create &lt;code&gt;data_migration&lt;/code&gt; file that will update the params in the correct way. Have a look at it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PopulateNoticedNotificationWithValidParams&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;DataMigration&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;up&lt;/span&gt;
    &lt;span class="no"&gt;NoticedNotification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;notification&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;Project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;id: &lt;/span&gt;&lt;span class="n"&gt;notification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:project_id&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;exists?&lt;/span&gt;
        &lt;span class="n"&gt;project&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;notification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:project_id&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;notification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;notification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:user_id&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;notification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:project&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;project&lt;/span&gt;
        &lt;span class="n"&gt;notification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;
      &lt;span class="k"&gt;else&lt;/span&gt;
        &lt;span class="n"&gt;notification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;destroy!&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  PR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Under Review: &lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3273"&gt;Webpush notification&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Merged: &lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3276"&gt;fix: dependent notifications on project while destroy &lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next Task:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Complete notifications API.&lt;/li&gt;
&lt;li&gt;Suggested tags for projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I was not able to work for 3-4 days due to SIH and health issue. But I learned a lot as always!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>GSoC 2022 CircuitVerse | Week 9 and 10 Report</title>
      <dc:creator>vedant-jain03</dc:creator>
      <pubDate>Sun, 21 Aug 2022 12:49:11 +0000</pubDate>
      <link>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-9-and-10-report-3e4p</link>
      <guid>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-9-and-10-report-3e4p</guid>
      <description>&lt;h2&gt;
  
  
  Description
&lt;/h2&gt;

&lt;p&gt;These two weeks were awesome in the context of learning and coding. I learned a lot about migrations, rails console, rails specs, rails ActiveRecord, and rails API.&lt;/p&gt;

&lt;p&gt;These 2 weeks were majorly focused on data migration, completing the PR and notification API. &lt;/p&gt;

&lt;p&gt;So the migration I coded for the data was ok but need modifications. Aboobacker guided me to write quality and scalable migration. Also, as this was the &lt;code&gt;data&lt;/code&gt; migration, Aboobacker suggested to use &lt;code&gt;rails-data-migrations&lt;/code&gt; gem that make a separate &lt;code&gt;data_migrations&lt;/code&gt; directory in &lt;code&gt;db/&lt;/code&gt;, that help us to track the data migrations files. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To Generate data migration file:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;rails&lt;/span&gt; &lt;span class="n"&gt;generate&lt;/span&gt; &lt;span class="n"&gt;data_migration&lt;/span&gt; &lt;span class="n"&gt;migration_name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;To run the data migration:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;rake&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="ss"&gt;:migrate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have made some cleanups as well.&lt;br&gt;
I also learned a lot about the spec and these weeks I worked on that part as well.&lt;/p&gt;

&lt;p&gt;In this week(week 10), I worked on notification API for mobile-app along with the specs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bckJYY9C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k32arsvgid1n9tpc25dn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bckJYY9C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k32arsvgid1n9tpc25dn.png" alt="Image description" width="880" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  PR:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3243"&gt;feat: noticed integration (Notification Page)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3259"&gt;feat: notifications api&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The progress we have made in these 2 weeks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement noticed gem.&lt;/li&gt;
&lt;li&gt;PR for notification API for Mobile-App.&lt;/li&gt;
&lt;li&gt;Activity Notification data Migration.&lt;/li&gt;
&lt;li&gt;Removed activity Notification gem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Next?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reimplement Web push for notification.&lt;/li&gt;
&lt;li&gt;Design for weekly contest.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;By far these two weeks were full of debugging and learning. I took much time as expected for this PR but will work more hard and try to deliver the features as expected.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>internship</category>
    </item>
    <item>
      <title>GSoC 2022 CircuitVerse | Week 7 and 8 Report</title>
      <dc:creator>vedant-jain03</dc:creator>
      <pubDate>Sun, 07 Aug 2022 13:16:00 +0000</pubDate>
      <link>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-7-and-8-report-2a71</link>
      <guid>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-7-and-8-report-2a71</guid>
      <description>&lt;h2&gt;
  
  
  Description
&lt;/h2&gt;

&lt;p&gt;This week I worked on completing the Noticed Integration into CircuitVerse, this was one of the challenging and most productive weeks ever as I have learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rails console effective usage.&lt;/li&gt;
&lt;li&gt;ActiveRecords&lt;/li&gt;
&lt;li&gt;Migration.&lt;/li&gt;
&lt;li&gt;Controllers.&lt;/li&gt;
&lt;li&gt;Views rails.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So in the last meeting, I showed the demo of the notification functionality to the mentors and they stated that there are some minor changes in the UI and to migrate the old data of Activity Notification.&lt;/p&gt;

&lt;p&gt;I completed the task for helper methods, UI, and some cleanups. But the most challenging task for me was to migrate data from one table to another table with different configurations. Aboobacker shared a migration file that contains &lt;code&gt;SQL&lt;/code&gt; the query for the migration but that was comparatively simpler than what I needed to do in this task!&lt;/p&gt;

&lt;p&gt;So I have comeup with many solutions to render old notifications:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;I thought we can just add a &lt;code&gt;before_action&lt;/code&gt; filter with method &lt;code&gt;load_old_notifications&lt;/code&gt; for &lt;code&gt;user&lt;/code&gt;.So I create a new column in &lt;code&gt;old_notification&lt;/code&gt; table called &lt;code&gt;migrated&lt;/code&gt; with default &lt;code&gt;false&lt;/code&gt;, so whenever the user signin, the &lt;code&gt;load_old_notifications&lt;/code&gt; will run and will check in the &lt;code&gt;old_notification&lt;/code&gt; if the &lt;code&gt;migrated&lt;/code&gt; field is &lt;code&gt;false&lt;/code&gt;, it will create a new data for &lt;code&gt;notification&lt;/code&gt; table and mark &lt;code&gt;migrated&lt;/code&gt; as &lt;code&gt;true&lt;/code&gt; in &lt;code&gt;old_notification&lt;/code&gt; table.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;But I find this as very complex as we are thinking of removing &lt;code&gt;ActivityNotification&lt;/code&gt; gem and while migrating there is model method needed to get the path of the notification, so I drop this solution and jump into next and next, I failed and finally come up with the solution to use &lt;code&gt;ActiveRecords&lt;/code&gt; in &lt;code&gt;migration&lt;/code&gt; (it worked but not preferable) so here is my migration file look like:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PopulateNotificationData&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Migration&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;7.0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;ActivityNotification&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;change&lt;/span&gt;
    &lt;span class="no"&gt;Notification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="n"&gt;newnotification&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;NoticedNotification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first_or_initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="ss"&gt;:recipient_type&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;target_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="ss"&gt;:recipient_id&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;target_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="ss"&gt;:type&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"PreviousNotification"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="ss"&gt;:params&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="ss"&gt;user_id: &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;notifier_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="ss"&gt;path: &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;notifiable_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="ss"&gt;message: &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;notifiable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;printable_notifiable_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;target&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="ss"&gt;type: &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;notifiable_type&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="ss"&gt;:read_at&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;opened_at&lt;/span&gt;
      &lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;newnotification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save!&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;I need to change it in SQL query.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So that took me around 4 days but it was worth it, I learned a lot from failures.&lt;/p&gt;

&lt;p&gt;This 2 weeks I also :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Passed Mid-term Evaluation&lt;/li&gt;
&lt;li&gt;Post my first blog on CircuitVerse/Blog regarding first phase of GSoC.&lt;/li&gt;
&lt;li&gt;Attended my first offline hackathon and meet awesome peoples.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next week plan:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Complete spec testcases&lt;/li&gt;
&lt;li&gt;Complete migration&lt;/li&gt;
&lt;li&gt;Start working on &lt;code&gt;push notification&lt;/code&gt; in mobile app.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>GSoC 2022 CircuitVerse | Week 5 and 6 Report</title>
      <dc:creator>vedant-jain03</dc:creator>
      <pubDate>Sun, 24 Jul 2022 05:17:57 +0000</pubDate>
      <link>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-5-and-6-report-2kpp</link>
      <guid>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-5-and-6-report-2kpp</guid>
      <description>&lt;h3&gt;
  
  
  During these two weeks, I have worked on:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Assignment Restriction PR.&lt;/li&gt;
&lt;li&gt;POC for Weekly Contest.&lt;/li&gt;
&lt;li&gt;Some minor bugs &amp;amp; documenation.&lt;/li&gt;
&lt;li&gt;Improve Notification Page(Noticed gem Integration).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Assignment Restriction.
&lt;/h2&gt;

&lt;p&gt;We already have element restrictions for the assignment i.e., to restrict the group members with the use of elements for the Project. &lt;br&gt;
But we have got quite a few complaints from professors that CircuitVerse allows cheating easily. For example, users can easily copy/paste any public circuit. They can give collaborators access to their own circuit and copy-paste etc. So it has been requested by professors to disable this feature.&lt;/p&gt;
&lt;h3&gt;
  
  
  Implementation
&lt;/h3&gt;

&lt;p&gt;Similar to the implementation of elements restriction, I have made a column of type &lt;code&gt;jsonb&lt;/code&gt; named &lt;code&gt;feature_restrictions&lt;/code&gt; which is gonna store all the selected feature restrictions. &lt;br&gt;
In the assignment form, I have made a select-options dropdown section similar to element restrictions.&lt;/p&gt;

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

&lt;p&gt;So there are 2 feature restrictions in Project Page and 2 in Simulator. So, in the projects page, first I give id's to the respective feature button so that to access them in JS using DOM manipulation and I simply did this then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;% if &lt;/span&gt;&lt;span class="vi"&gt;@project&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assignment_id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;present?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="vi"&gt;@project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assignment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;feature_restrictions&lt;/span&gt; &lt;span class="sx"&gt;%&amp;gt; {
      let restricted_feature = '&amp;lt;%= @project.assignment.feature_restrictions %&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;';
      if(restricted_feature.includes('&lt;/span&gt;&lt;span class="no"&gt;Allow&lt;/span&gt; &lt;span class="no"&gt;Collaborators&lt;/span&gt;&lt;span class="s1"&gt;')) 
    {
        $('&lt;/span&gt;&lt;span class="c1"&gt;#collaboration_button').attr("style", "display:none")&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;restricted_feature&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Copy / Paste'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#copy_paste'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"style"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"display:none"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;% end &lt;/span&gt;&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and for the simulator, I similarly did this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;% if &lt;/span&gt;&lt;span class="vi"&gt;@project&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assignment_id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;present?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; 
   &lt;span class="vi"&gt;@project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assignment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;feature_restrictions&lt;/span&gt; &lt;span class="sx"&gt;%&amp;gt;
   let restricted_feature = '&amp;lt;%= @project.assignment.feature_restrictions %&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'
   if(restricted_feature.includes('&lt;/span&gt;&lt;span class="no"&gt;Combinational&lt;/span&gt; &lt;span class="no"&gt;Analysis&lt;/span&gt; &lt;span class="no"&gt;Tool&lt;/span&gt;&lt;span class="s1"&gt;')) {
     $('&lt;/span&gt;&lt;span class="c1"&gt;#createCombinationalAnalysisPrompt').attr("style", "display:none")&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;restricted_feature&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Verilog tools'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#generateVerilog'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"style"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"display:none"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;% end &lt;/span&gt;&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was the whole implementation summary.&lt;/p&gt;

&lt;p&gt;and how can I forget the best part:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  POC for Weekly Contest
&lt;/h2&gt;

&lt;p&gt;Weekly contest feature in the CircuitVerse focus to have great circuits creation to be featured and user engagement. So I worked on that part meanwhile nitin was working on the UI part. But this issue or any issue should not be started without plan, so we decided to work on the weekly contest in the beginning of the next phase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some minor bugs &amp;amp; documenation.
&lt;/h2&gt;

&lt;p&gt;Here are some work I did:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3238" rel="noopener noreferrer"&gt;feat(api): add mentors in the group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3242" rel="noopener noreferrer"&gt;fixes : embed feature broken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/CircuitVerse/CircuitVerseDocs/pull/336" rel="noopener noreferrer"&gt;documentation : Improve Embed feature&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/CircuitVerse/CircuitVerseDocs/pull/334" rel="noopener noreferrer"&gt;[documenation] : Support Multiple Mentors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Notification Page Improvement(Noticed Integration)
&lt;/h2&gt;

&lt;p&gt;Currently, CircuitVerse uses &lt;code&gt;activity_notification&lt;/code&gt; gem for the Notifications but the gem is not maintained any more and the notification page is very lagging. So we decided to replace the gem and we found &lt;a href="https://github.com/excid3/noticed" rel="noopener noreferrer"&gt;noticed&lt;/a&gt; gem by chris oliver of Gorails.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3243" rel="noopener noreferrer"&gt;PR&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  UI
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  Progress
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Done with the initial integration and configuration.&lt;/li&gt;
&lt;li&gt;Notification Event covered:

&lt;ul&gt;
&lt;li&gt;Star&lt;/li&gt;
&lt;li&gt;Fork&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;UI&lt;/li&gt;

&lt;li&gt;Tab functionality&lt;/li&gt;

&lt;li&gt;Navbar quick notification access.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pending
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Data migration.&lt;/li&gt;
&lt;li&gt;Cleanup&lt;/li&gt;
&lt;li&gt;figma design UI is still under progress.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next week plan
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Completing the Notification pending task.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;These two weeks were awesome, I learned a lot on rails and grab knowledge of integration of new gem noticed. Got to know about Rails Console Usage. Grab the knowledge of Rails API.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>GSoC 2022 CircuitVerse | Week 4 Report</title>
      <dc:creator>vedant-jain03</dc:creator>
      <pubDate>Sun, 10 Jul 2022 06:38:53 +0000</pubDate>
      <link>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-4-report-bl0</link>
      <guid>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-4-report-bl0</guid>
      <description>&lt;p&gt;This week I was focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Getting my ongoing PR to merge i.e. "Improve Embed Feature" and "Support Multiple Mentors".&lt;/li&gt;
&lt;li&gt;Finalizing the idea for Weekly Contest.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Completing &lt;code&gt;Improve Embed Feature&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;So in a meeting with Aboobacker(mentor), we concluded that in Embed we should not implement a feature of &lt;code&gt;landing subcircuits&lt;/code&gt; for now because of the migration of the simulator from &lt;code&gt;CircuitVerse&lt;/code&gt; repo to its own new repo &lt;code&gt;cv-simulator-frontend&lt;/code&gt;. &lt;br&gt;
So I clean-up the PR and it finally got merged.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As always my best part:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--azkUaNQy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c46lntumqrtl44npa4dp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--azkUaNQy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c46lntumqrtl44npa4dp.png" alt="Image description" width="880" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this PR I learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rails View Component.&lt;/li&gt;
&lt;li&gt;Query-Parameter Parsing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Completing &lt;code&gt;Support Multiple Mentors&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;This PR was awaiting approval of Mobile Feasibility as it contains the code for API as well which is mainly used in CircuitVerse Mobile App to interact with Database. Ruturaj(PR author) had coded the API very neatly. After some cleanups, the PR got finally merged. These functionalities are still unreleased in Production but will be released soon.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--djC9xLuR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q1qvb9zkg8yerahqc4at.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--djC9xLuR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q1qvb9zkg8yerahqc4at.png" alt="Image description" width="880" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What Else
&lt;/h3&gt;

&lt;p&gt;I also worked on one bug issue and made a PR for it, &lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3232"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It was basically the broken pagination in the project comment section.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Next
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In the weekly project meeting, we concluded that the &lt;code&gt;weekly contest&lt;/code&gt; feature should be planned very properly as it can bring new creative users to CircuitVerse. So this week I will be working on PoC (Proof of Concept) for the Contest.&lt;/li&gt;
&lt;li&gt;In the coding part, I will be working on my PR &lt;code&gt;Assignment Restriction&lt;/code&gt; that is now under the scope of my GSoC project.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;By far, this week was also great. Comparatively, I coded less this week and researched more.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>GSoC 2022 CircuitVerse | Week 3 Report</title>
      <dc:creator>vedant-jain03</dc:creator>
      <pubDate>Sat, 02 Jul 2022 12:15:00 +0000</pubDate>
      <link>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-3-report-4af1</link>
      <guid>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-3-report-4af1</guid>
      <description>&lt;p&gt;It's been a month in the GSoC environment with CircuitVerse and it's great so far.&lt;br&gt;
This week I did the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixes the conflicts of &lt;code&gt;Support Multiple Mentors&lt;/code&gt; &lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/2096"&gt;PR&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Worked on &lt;code&gt;Improve Embed Feature&lt;/code&gt; &lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/2768"&gt;PR&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Reviewed and discussed the UI of all the features.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zcvBF6WV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8o3g9owkdgpkh452n4dy.png" alt="Image description" width="880" height="315"&gt;
The previous week, I have done with the requested functionality of the PR &lt;code&gt;Support Multiple Mentors&lt;/code&gt; but after one commit merged into master, there was a lot of &lt;code&gt;RoboCup&lt;/code&gt; conflicting with the files of this PR. Hence, I solved them and was able to fix all the conflicting files. The PR is almost ready and now we are checking its feasibility with CircuitVerse Mobile-App.
This week, I worked on the PR by Kartikay(contributor) for &lt;code&gt;Improve Embed Feature&lt;/code&gt;. Check out the description of the feature &lt;a href="https://github.com/CircuitVerse/CircuitVerse/issues/1938"&gt;here&lt;/a&gt;. I have worked on:&lt;/li&gt;
&lt;li&gt;Improving the existing UI.&lt;/li&gt;
&lt;li&gt;Some typos.&lt;/li&gt;
&lt;li&gt;Implement popup in form of Rails &lt;a href="https://viewcomponent.org/"&gt;Component&lt;/a&gt; view.&lt;/li&gt;
&lt;li&gt;Added translation.&lt;/li&gt;
&lt;li&gt;added and transfer the code to project_controller(stimulus).&lt;/li&gt;
&lt;li&gt;Added Advance feature to enable/disable:
 - Zoom-in-out feature
 - Fullscreen button
 - Clock/Time button
 - Display Title&lt;/li&gt;
&lt;li&gt;Added feature to choose different built-in themes for embed circuit.
It looks like this:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6nesH3O2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yi35g1gdujqzxbdkomo9.png" alt="Image description" width="880" height="428"&gt;
&amp;gt; Advance Option
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qI29kQHU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5qeqsamwbpuipnuxdnhs.png" alt="Image description" width="880" height="428"&gt;
So, how it is working?
CircuitVerse awesome contributors have made &lt;code&gt;embed.js&lt;/code&gt; and &lt;code&gt;embedListener.js&lt;/code&gt; files for tackling with the &lt;code&gt;embed&lt;/code&gt; feature. So I have made some input fields with default values in component views which are connected to data-controller=projects and in &lt;code&gt;projects_controller&lt;/code&gt; I have to write code to get the value from those input fields and after the user hits that &lt;code&gt;Publish&lt;/code&gt; button, the function in controller takes the values from each input and save it to the variable and finally made a &lt;code&gt;URL&lt;/code&gt; variable along with &lt;code&gt;query parameters&lt;/code&gt; passed to fetch the values in &lt;code&gt;embed.js&lt;/code&gt;. The URL looks like this:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const url = `${document.querySelector('#url').value}?theme=${theme}&amp;amp;display_title=${displayTitle}&amp;amp;clock_time=${clockTimeEnable}&amp;amp;fullscreen=${fullscreen}&amp;amp;zoom_in_out=${zoomInOut}`;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;and in &lt;code&gt;embed.js&lt;/code&gt; I accessed those parameters using this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const params = new URLSearchParams(window.location.search);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and to retrieve certain values I use something like this:&lt;br&gt;
&lt;code&gt;const fullscreen = params.get('fullscreen');&lt;/code&gt;&lt;br&gt;
So that was all about this week's work. I learned a lot and concluded that &lt;code&gt;anything can done be using javascript. Javascript OP!!!&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Next Week Plan
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Complete Improve embed PR.&lt;/li&gt;
&lt;li&gt;Start working on &lt;code&gt;Weekly Contest&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>GSoC 2022 CircuitVerse | Week 2 Report</title>
      <dc:creator>vedant-jain03</dc:creator>
      <pubDate>Sat, 25 Jun 2022 15:10:16 +0000</pubDate>
      <link>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-2-report-519a</link>
      <guid>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-2-report-519a</guid>
      <description>&lt;p&gt;This week was great. I learned a lot. I was able to complete my deliverables.&lt;/p&gt;

&lt;p&gt;So last week the gitlab integration PR got merged and according to my proposal this week goes to SSO but we finalize to add some more important features in the CircuitVerse. In the mentor meeting, we added 3 more features for which PRs were already raised, and out of which one was mine. There are some works to do in all the PRs before the final merge. We update the Project Kanban Board as well and this week I need to work on the feature &lt;strong&gt;&lt;em&gt;Support multiple mentors for groups&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This week my PR for SSO integration got merged but we concluded that there is much manual work to do now and there is 3 priority features, so it will be out of the scope of this year. So there was an error with IDP integration that may be taken out next year GSoC. I learned a lot about SSO, SAML, and okta IDP. And finally most awaited thing in the PR(message and status):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wWWB33rr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rwdookk4vyjf78fjizbg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wWWB33rr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rwdookk4vyjf78fjizbg.png" alt="Image description" width="880" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Checkout the &lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3167"&gt;PR&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;SO there was a new feature assigned to me for this week.&lt;/p&gt;

&lt;h3&gt;
  
  
  Support multiple mentors for groups feature
&lt;/h3&gt;

&lt;p&gt;The feature enables the functionality to have multiple mentors in the group. There will be the primary mentor(owner) of the group who can add mentors to the group. Mentors can: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create and delete assignments&lt;/li&gt;
&lt;li&gt;Grade assignments&lt;/li&gt;
&lt;li&gt;Reopen closed assignments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The PR was created by Ruturaj(GSoC'22 Mentor, former GSoC Contributor) and most of the work was done by him, the main functionality. The PR was a long time ago and there are many new features in CircuitVerse from that time that were causing conflicts. The PR need: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To be updated with the master&lt;/li&gt;
&lt;li&gt;Should contain i18n translation&lt;/li&gt;
&lt;li&gt;Powered with stimulus.js&lt;/li&gt;
&lt;li&gt;Fix Circle CI because of LMS integration that was not implemented at that time.&lt;/li&gt;
&lt;li&gt;UI fix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I added all the things one by one commit for clean PR but there was always an error from CodeClimate(bot) for clean code. I was able to change some of them. But the important fail was of CI and it was caused because of the lti_spec because at the time this PR was created lti feature was not there in the CircuitVerse and in this PR the &lt;code&gt;mentor&lt;/code&gt; field is replaced with the &lt;code&gt;primary_mentor&lt;/code&gt; field in the DB so there was error because of that. I was able to fix it.&lt;/p&gt;

&lt;p&gt;Testing locally using &lt;code&gt;bundle exec rspec&lt;/code&gt; was not working. I tried but was giving an unknown error and as always Aboobacker come in and guide me through the way, just like that and it was an error because of the permission in the SQL database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/2096"&gt;PR&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Next week's plan
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Will start working on &lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/2768"&gt;this&lt;/a&gt; PR.&lt;/li&gt;
&lt;li&gt;UI meets for Weekly Contest Feature.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Overall this week was really great. I learned a lot and was able to complete my deliverables. I am also working as technical writer in Google Season of Docs with the palisadoes foundation. I am getting good at time management. I learned TSDoc this week and started working on the documentation of the Talawa-Admin repository. This week I also updated my &lt;a href="https://vedant-jain03.github.io/portfolio/"&gt;Portfolio&lt;/a&gt; website. All checks completed.&lt;/p&gt;

&lt;p&gt;Checkout My Last week Blog &lt;a href="https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-1-report-4h88"&gt;here&lt;/a&gt;.&lt;br&gt;
All Blogs &lt;a href="https://vedant-jain03.github.io/portfolio/blog"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>gsoc22</category>
      <category>opensource</category>
    </item>
    <item>
      <title>GSoC 2022 CircuitVerse | Week 1 Report</title>
      <dc:creator>vedant-jain03</dc:creator>
      <pubDate>Sat, 18 Jun 2022 12:08:37 +0000</pubDate>
      <link>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-1-report-4h88</link>
      <guid>https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-1-report-4h88</guid>
      <description>&lt;p&gt;Google Summer of Code 2022 Coding period start on 13 June. The previous week, I started working on gitlab and SSO integration in the CircuitVerse main platform.&lt;/p&gt;

&lt;p&gt;Check out my previous blog: &lt;a href="https://medium.com/p/78cf1265b74f"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Week 1 (13 June — 18 June)
&lt;/h2&gt;

&lt;p&gt;I was facing some issues in gitlab integration, after the mentor meet we concluded that it was the version of omniauth-gitlab gem that was causing an error. It was v2.0.0 and should be v4.0.0 but the gem is dependent on the omniauth gem that was also not updated due to which gitlab-omniauth gem was not getting updated. So we concluded to update the omniauth gem first along with smoothing the initial 3rd-Party Authentication.&lt;/p&gt;

&lt;p&gt;I updated the omniauth and got it merged. &lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3071"&gt;PR&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After updating my gitlab branch with master, I was able to update the gitlab gem without any error and commit the changes according to the new version of the omniauth gem. After the review of the PR and changing some bot suggestions. The &lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3154"&gt;PR&lt;/a&gt; got finally merged.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e3KIeN0s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s180tym3gtd1mj3jim3s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e3KIeN0s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s180tym3gtd1mj3jim3s.png" alt="Image description" width="880" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After getting it merged, I started working on SSO PR. I update it with the master branch and mark the PR from WIP as ready for review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Week Plan
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I will be completing the SSO + Keycloack integration in the next week.&lt;/li&gt;
&lt;li&gt;I will start with the new feature in CircuitVerse: Weekly Contest.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This week was one of my best productive weeks ever. I learned a lot and was able to fulfill my first week's deliverable as mentioned in the Proposal.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>Community Bonding Period at CircuitVerse — Google Summer of Code 2022</title>
      <dc:creator>vedant-jain03</dc:creator>
      <pubDate>Sun, 12 Jun 2022 04:24:10 +0000</pubDate>
      <link>https://dev.to/vedantjain03/community-bonding-period-at-circuitverse-google-summer-of-code-2022-43cd</link>
      <guid>https://dev.to/vedantjain03/community-bonding-period-at-circuitverse-google-summer-of-code-2022-43cd</guid>
      <description>&lt;h2&gt;
  
  
  What is the Community Bonding Period?
&lt;/h2&gt;

&lt;p&gt;Every successful project has been planned before. Similarly, in this phase contributors connect with respective mentors and discuss the project deliverables, plan the project and finalize the scope of the Project.&lt;/p&gt;

&lt;h3&gt;
  
  
  My experience
&lt;/h3&gt;

&lt;p&gt;I was so happy after getting selected for GSoC, especially with CircuitVerse. After getting selected, our private channel was created and all the contributors, mentors, and OA were there. We had our first meeting on 26th May, and we were welcomed by our mentors, I meet my mentors Aboobacker, Pavan, Samiran, Ayan, Ruturaj, and contributors Pulkit, Devjit, and Aman. It was a pleasure meeting them all. We had a great meeting and our mentors told us about the flow of the GSoC at CircuitVerse.&lt;/p&gt;

&lt;p&gt;After that, for each project separate private channels were created and I had my meeting with my project’s mentors. We set up the project board on GitHub for tracking the project's progress and discussing the project scope, and deliverables. I asked them to let me start the coding on 1st June, as I was aware of the codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  My progress and learning (1st June — 10th June)
&lt;/h2&gt;

&lt;p&gt;I start with the feature of integrating Gitlab Authentication for CircuitVerse. I used omniauth-gitlab gem for that. I made an application in gitlab for testing and configured the .env file. I configured and implemented all the required things correctly referencing other OAuth implementations but there was an unknown error. I had a meeting with my mentor and the problem was the omniauth gem version. I will be working on updating that in the upcoming week and hopefully will complete my first task of the Project.&lt;/p&gt;

&lt;p&gt;I also started with implementing SSO(Single Sign-On) in CircuitVerse. I used devise_saml_authenticatable gem for it. I created WIP(Work in Progress) PR for that. I was facing an issue on the IDP side. I will be completing this PR after gitlab-implementation. I am researching it meanwhile…&lt;/p&gt;

&lt;h3&gt;
  
  
  Work done so far
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3154"&gt;Gitlab integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/3167"&gt;SSO integration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I feel the best experience of my engineering life as it is my first work experience. The whole vibe of the community is so supportive. I learned a lot. I don’t know after getting selected for GSoC I feel responsible and am working accordingly. I am researching more, reading more, and learning more. It is the vibe of GSoC. Overall, I had a great week.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>webdev</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>How I crack GSoC 2022</title>
      <dc:creator>vedant-jain03</dc:creator>
      <pubDate>Thu, 26 May 2022 16:46:09 +0000</pubDate>
      <link>https://dev.to/vedantjain03/how-i-crack-gsoc-2022-3ag4</link>
      <guid>https://dev.to/vedantjain03/how-i-crack-gsoc-2022-3ag4</guid>
      <description>&lt;p&gt;How I crack GSoC 2022&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Google Summer of Code?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;It is not an internship at Google, or anything working with Google. Make sure your relative does not post it on the WhatsApp group, so…..&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In simple words, google summer of code is a program that promotes or provides an opportunity for &lt;a href="https://opensource.com/resources/what-open-source" rel="noopener noreferrer"&gt;Open Source&lt;/a&gt; Contributions in Open source Organizations.&lt;/p&gt;

&lt;p&gt;First Google announces the program officially and starts the application for an Open source organization to participate, then the open-source organization is announced along with its projects for GSoC, then contributors contact and submit the proposal for a project at the respective organization. Then after evaluating the proposal, the organization Admin sent the list of students from their end, then google provides the slots and announces the accepted contributors and Projects for each organization.&lt;/p&gt;

&lt;p&gt;Learn more about GSoC, &lt;a href="https://summerofcode.withgoogle.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Eligibility Criteria, &lt;a href="https://summerofcode.withgoogle.com/terms/contributor" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  When should I start?
&lt;/h2&gt;

&lt;p&gt;Right now is the best time, the time when you get to know about it is the best time to start.&lt;br&gt;
But mind that "Selection is not confirmed".&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow for getting started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Search for Organization(Most Important and difficult task)&lt;/li&gt;
&lt;li&gt;Start contribution&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to choose the right Organization?
&lt;/h3&gt;

&lt;p&gt;Everyone had their perspective to choose the number of organizations! But I will prefer to choose only 1. I mean you can explore many organizations but start contributing to 1 only.&lt;/p&gt;

&lt;p&gt;You should first choose the organization on the basis of your interest. In my case, I was searching for organizations based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;web Development&lt;/li&gt;
&lt;li&gt;Javascript technology&lt;/li&gt;
&lt;li&gt;Past GSoC project&lt;/li&gt;
&lt;li&gt;Supportive community&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If it is taking you 1–2 weeks, trust me it is okay and well worth it. Do not aim for a goal in hurry.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  How to start contribution?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to the community channel to interact with members and mentors.&lt;/li&gt;
&lt;li&gt;If you are a beginner, checkout for issue with &lt;code&gt;good first issue&lt;/code&gt; as a label.&lt;/li&gt;
&lt;li&gt;If it is taking time to get your first PR pulled and merge, don't worry, my first PR is not even merged yet, the rule is never stopped.&lt;/li&gt;
&lt;li&gt;Go for the comparatively higher issue next time. Higher issue does not mean with the number of codes, I mean complexity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Important points regarding contributions?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Quantity never matters, Quality matters. One of the contributors with more PRs than me did not get selected.&lt;/li&gt;
&lt;li&gt;Your learning curve in the community should be exponential.&lt;/li&gt;
&lt;li&gt;Try to review PRs as well, which can improve your understanding. I always try to read the PRs of other contributors and past GSoC fellows, it clears my thoughts and knowledge by getting to know other's approaches.&lt;/li&gt;
&lt;li&gt;Try to participate or attend community meetings and threads!&lt;/li&gt;
&lt;li&gt;Don't raise an issue for anything you see in the deployment, sometime it is expected, so always try to raise a thread in the community, after getting approval there, raise an issue in Github.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My journey
&lt;/h2&gt;

&lt;p&gt;I got to know about CircuitVerse organization through an open-source event in July 2021, I participated in that and won 100$ gift vouchers as well. My first contribution, &lt;a href="https://github.com/CircuitVerse/Blog/pull/88" rel="noopener noreferrer"&gt;PR&lt;/a&gt;, it was just SCSS code. I want to thank Nitin and Shreya Prashad for guiding me.&lt;/p&gt;

&lt;p&gt;And then the Fun Began!!!&lt;/p&gt;

&lt;p&gt;I decided to continue my contributions to CircuitVerse and then I got to know about the CircuitVerse GSoC experience. I reach out to the CircuitVerse fellow GSoCers and trust me they were really supportive and encourage me to contribute. I want to thank Pavan Joshi, Ruturaj Mohite, Manjot, and Ayan Biswas for that, they are my mentors now.&lt;/p&gt;

&lt;p&gt;I was not aware of Ruby on Rails at all at that time. It was my first time contributing to a large codebase, so it took me around 15 days to set up CircuitVerse Main Platform.&lt;br&gt;
I got my first &lt;code&gt;good first issue&lt;/code&gt; in CircuitVerse, &lt;a href="https://github.com/CircuitVerse/CircuitVerse/pull/2360" rel="noopener noreferrer"&gt;PR&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Then I started learning Ruby on Rails. Learning while implementing it into a large codebase is the best way to understand, trust me. Then I contributed my first Rails code-based PR and got merged. I got inspired by Aboobacker(Org Admin &amp;amp; my mentor) and Satvik Ramaprasad(Founder). It gave me more confidence. I always try to challenge myself 1 step ahead of issues.&lt;/p&gt;

&lt;p&gt;On November 28th, 2021, the organization admin invited me to join the GitHub community as a member for my consistent contributions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Honestly, I was not aiming CircuitVerse for GSoC only but for the experience and for the open-source. I am always enthusiastic to solve the issues, participate in community meetings, and review others' PR. I got very comfortable with the CircuitVerse environment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I try to contribute to other repo as well as CircuitVerse.&lt;br&gt;
Checkout My All contributions &lt;a href="https://github.com/pulls?page=1&amp;amp;q=is%3Apr+author%3Avedant-jain03+archived%3Afalse+user%3ACircuitVerse" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;
The organization announces its expected Projects on the wiki before the official GSoC site to get the maximum time to draft the proposal.&lt;/p&gt;

&lt;h3&gt;
  
  
  My project selection!
&lt;/h3&gt;

&lt;p&gt;I selected Project 2: CircuitVerse Platform Improvements, I selected the project because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I had major contributions on the main platform only, so I was very comfortable with the whole platform codebase.&lt;/li&gt;
&lt;li&gt;Tech stack required.&lt;/li&gt;
&lt;li&gt;Scope and need.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Proposal Drafting
&lt;/h3&gt;

&lt;p&gt;A proposal plays a very vital role in selection especially when there is more than 1 approaching active contributor.&lt;br&gt;
on 7th Feb 2022, CircuitVerse announce the Projects on the wiki and 19th April was the deadline. I had enough time to make a good proposal, I never hurried, I planned to review my first draft by 20th March and I did on 23rd March.&lt;br&gt;
So, there were mainly 6 features that need to be implemented so I first start with the feature under my understanding.&lt;br&gt;
I discussed my approach towards each point with mentors which helped me to understand the expectation of the mentors as well. This point is very important as I was taking some of the features differently but they were meant to do something different, this small misconception can result in a bad choice. I never think ashamed while talking to mentors. I always pinged them whenever I need, not necessarily for small issues.&lt;/p&gt;

&lt;p&gt;Finally, I drafted my proposal using the template given by the Organization.&lt;/p&gt;

&lt;p&gt;Timeline is one of the most important judging criteria, so choose or draft the timeline wisely.&lt;/p&gt;

&lt;h4&gt;
  
  
  Key Points
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Take time to research the scope and needs of the Project.&lt;/li&gt;
&lt;li&gt;Ask mentors for any doubts without hesitation.&lt;/li&gt;
&lt;li&gt;Choose the approach wisely, if you are not able to add the final code, you can add pseudo code.&lt;/li&gt;
&lt;li&gt;Draft the timeline section wisely.&lt;/li&gt;
&lt;li&gt;Review your proposal 2, 3 times. I reviewed it 2 times.
Do not stop your contributions after proposal submission, be active in the community.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I had my interaction interview as well for the GSoC.&lt;br&gt;
And finally…….&lt;/p&gt;

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

&lt;p&gt;I was so happy, I remember that I shouted out loud for almost 5 minutes saying yes, f***, I did it, ab bol.&lt;/p&gt;

&lt;p&gt;But I had many rejection stories and I never celebrated this thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GSoC is my first ever life achievement that satisfied me.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are many fellows who got accepted in their 1st, 2nd, or even 3rd attempt as well. You should never give up. It will make sense after getting it. &lt;/p&gt;

&lt;p&gt;I tried GSoC'21 but now I realize that I was not prepared at that time and got Selected for GSoC'22 because I don't give up and try my best.&lt;/p&gt;

&lt;p&gt;If I can so do you….&lt;/p&gt;

&lt;p&gt;Best of luck.&lt;/p&gt;

&lt;p&gt;If you have any doubts, connect with me in:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/vedantj_03" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/vedant-jain-781006145/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I will post more blogs on this platform, so follow me.&lt;/p&gt;

</description>
      <category>gsoc</category>
      <category>google</category>
      <category>opensource</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Interview Experience Digital Specialist Engineer - Infosys</title>
      <dc:creator>vedant-jain03</dc:creator>
      <pubDate>Mon, 16 May 2022 16:39:34 +0000</pubDate>
      <link>https://dev.to/vedantjain03/interview-experience-digital-specialist-engineer-infosys-4p4n</link>
      <guid>https://dev.to/vedantjain03/interview-experience-digital-specialist-engineer-infosys-4p4n</guid>
      <description>&lt;h2&gt;
  
  
  What is HackWithInfy?
&lt;/h2&gt;

&lt;p&gt;HackWithInfy is a competitive coding competition for second-year to pre-final year students across India. In this competition, participants have to solve coding questions in a given time and top performers get a chance to interview Infosys.&lt;br&gt;
The level of the competition was medium-hard. I solved 1 question and got AC and other 2 partially accepted. I did not remember the exact questions but they were mainly based on Arrays, Greedy and DP. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;All questions can be solved partially with brute force, so will recommend you to solve every question.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you solved 1 questions fully and some testcases for other 2, you will definitely going to get the interview for DSE role.&lt;br&gt;
So there were two roles Infosys was offering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SE : 9 LPA&lt;/li&gt;
&lt;li&gt;DSE : 6.25 LPA&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are able to solve all 3, you will get upgraded to advanced rounds and will surely get the interview for SE.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interview Experience
&lt;/h2&gt;

&lt;p&gt;I got the mail on 3 May 2022 to schedule my interview and I scheduled nearest date possible 7th May. My interviewer forgot about the interview and hence he slept and get back to me after 2 hours. That was funny, XD. Never mind. &lt;br&gt;
The interviewer was really chilled and cool. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;He asked me for the introduction.&lt;/li&gt;
&lt;li&gt;Then asked me about my current semester subjects.&lt;/li&gt;
&lt;li&gt;He then started with question to check weather a number is prime or not. I shared my screen and he asked me that, what if in place of &lt;code&gt;#include &amp;lt;bits/stdc++&amp;gt;&lt;/code&gt; can we write &lt;code&gt;#include "bits/stdc++.h"&lt;/code&gt;, I was not sure about it and said no it will not compiled but it compiled successfully and then I realised about importing modules in react with "". 
I got pretty nervous.&lt;/li&gt;
&lt;li&gt;He then asked me that main() function will return 0 to whom? In my mind I was right OS, but as my overconfident killed my before I not tell him the answer.&lt;/li&gt;
&lt;li&gt;Then I write the code, he gave me sample TC and it ran fine.&lt;/li&gt;
&lt;li&gt;He then asked me the topic which I can not expect, &lt;strong&gt;What is DFA&lt;/strong&gt;, I asked him to repeat I heard DFS, but it was Deterministic Finite Automata. Luckily I learned the topic in my online classes(YES, I attended first class) and told him everything I knew.&lt;/li&gt;
&lt;li&gt;He then asked me about my projects.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;He then started with some sense of humour question&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is color of the wall behind you?&lt;/li&gt;
&lt;li&gt;What is the color of your Shirt?&lt;/li&gt;
&lt;li&gt;How many buttons in your T-Shirt?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;He then asked me &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What do you know about Infosys?&lt;/li&gt;
&lt;li&gt;Where do you see yourself after 5 years?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We wrapped up and ask me for any doubts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I asked him about his experience.&lt;/li&gt;
&lt;li&gt;I asked him about my feedback. He told me that I have good communication skills and open source experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;It is going to be very chill and easy, just be confident(not over).&lt;/p&gt;

</description>
      <category>hackwithinfy</category>
      <category>infosys</category>
      <category>dse</category>
      <category>interview</category>
    </item>
    <item>
      <title>Add key event listener in React.</title>
      <dc:creator>vedant-jain03</dc:creator>
      <pubDate>Tue, 29 Mar 2022 17:04:03 +0000</pubDate>
      <link>https://dev.to/vedantjain03/add-key-event-listener-in-react-32l8</link>
      <guid>https://dev.to/vedantjain03/add-key-event-listener-in-react-32l8</guid>
      <description>&lt;p&gt;It is very simple in react, you can add any key event listener. I have used example of "Enter".&lt;/p&gt;

&lt;p&gt;I have defined a sample function for the explaination.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    const handleInputEnter = (e) =&amp;gt; {
        // You can 
        if(e.code === 'Enter') {
            console.log("Hello");
        }
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add onKeyUp attribute in the element.&lt;br&gt;
Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;input type="text" onKeyUp={handleInputEnter}  /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will work completely fine.&lt;br&gt;
Follow me on twitter: &lt;a href="https://twitter.com/vedantj_03"&gt;https://twitter.com/vedantj_03&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>development</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
