<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Arpit Bhardwaj (proffapt)]]></title><description><![CDATA[Upcoming SWE FinBox // Intern: Awsmo.ai, BlueTechResearch // IIT KGP'25 // Open Source, DevOps, CyberSec, Linux, Networks, Bash, Golang, Python]]></description><link>https://proffapt.in</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 10:50:34 GMT</lastBuildDate><atom:link href="https://proffapt.in/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[metaKGP: Beyond the Wiki]]></title><description><![CDATA[Context
Hi there, it's 6 in the morning, yet again (read the opening of the previous article for context). I was already tired after taking 4 class tests, including one surprise test yesterday (I mean, the dates have changed, so what if I haven't sle...]]></description><link>https://proffapt.in/metakgp-beyond-the-wiki</link><guid isPermaLink="true">https://proffapt.in/metakgp-beyond-the-wiki</guid><category><![CDATA[metaKGP-wiki]]></category><category><![CDATA[kgp-wiki]]></category><category><![CDATA[kgp-open-source]]></category><category><![CDATA[metakgp]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[iitkgp]]></category><category><![CDATA[kgp]]></category><category><![CDATA[Kossiitkgp]]></category><category><![CDATA[koss]]></category><dc:creator><![CDATA[Arpit Bhardwaj]]></dc:creator><pubDate>Mon, 30 Sep 2024 11:10:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1726265884667/c160c535-32f2-4009-98fe-0f8423d37d7e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-context">Context</h2>
<p>Hi there, it's 6 in the morning, yet again (<em>read the opening of</em> the <a target="_blank" href="https://proffapt.hashnode.dev/students-are-guilty#heading-pre-context"><em>previous article</em></a> <em>for context</em>). I was already tired after taking 4 class tests, including one surprise test yesterday (I mean, the dates have changed, so what if I haven't slept yet ¯\_(ツ)_/¯). Still, it was a peaceful day until I came across this comment, "So, you guys are collecting everyone's ERP credentials officially now?" on the latest release of <a target="_blank" href="https://www.linkedin.com/feed/update/urn:li:activity:7238899837197336576">GYFT - Get Your Freaking Time-Table</a> (explanation coming ahead). This, followed by other misconceptions, broke the dam and flooded here in this article.</p>
<blockquote>
<p>Hi, it’s me from the future, the old me who started to write this article (more like, rant) 2-3 days before the midsems couldn’t complete it before them. And, this is present me completing the article (or, rant or whatever) with more incidents (more like ranting material) which happened in just this short period of time, related to the release of <a target="_blank" href="https://wimp.metakgp.org">WIMP - Where Is My Prof</a>.</p>
</blockquote>
<h3 id="heading-disclaimer">Disclaimer</h3>
<p>So, this is <strong>me</strong> busting myths, stating facts, and explaining current dynamics about metaKGP. Also, ranting here and there on related topics. Just to be clear - <em>if it wasn't already from above</em> - <mark>these are my thoughts on how I perceive the situation at hand. Until I mention specifically</mark> that this is a statement from metaKGP as an organization, then it implies that these are my personal views only and are not endorsed by metaKGP at all.</p>
<p>Also, I will be using some screenshots of texts that I have received recently (without disclosing any names or without providing enough information that reduces the search space). These are just shared as an example of how to or how not to do a certain thing, in whatever context the conversation’s screenshot is used.</p>
<blockquote>
<p><mark>Recommendation</mark><br />For those whose brains have been affected by excessive consumption of short-form content, resulting in shortened attention spans, this article/rant can be read in 2 parts:</p>
<ul>
<li><p><a target="_blank" href="https://proffapt.hashnode.dev/metakgp-beyond-the-wiki#heading-busting-myths">Busting myths around metaKGP</a></p>
</li>
<li><p><a target="_blank" href="https://proffapt.hashnode.dev/metakgp-beyond-the-wiki#heading-do-kgp-deserve-metakgp">Do KGP deserve metaKGP?</a></p>
</li>
</ul>
</blockquote>
<h3 id="heading-what-should-you-expect-from-this-article">What should you expect from this article?</h3>
<ul>
<li><p>My ranting here and there</p>
</li>
<li><p>Clarifying misconceptions around metaKGP’s functioning and its projects</p>
</li>
<li><p>Understanding the past situation of metaKGP and how those led to the current situation</p>
</li>
<li><p>Understand the what and why of metaKGP</p>
</li>
<li><p>How to report an issue / ask for support</p>
</li>
</ul>
<h2 id="heading-busting-myths">Busting myths</h2>
<p>There are quite a lot of myths which people assume by themselves. Simply put, some things are assumed to be true by connecting dots as one sees fit. And all of them just make me go crazy ( ╯°□°)╯ ┻━━┻</p>
<h3 id="heading-metakgp-is-supported-by-the-administration">metaKGP is supported by the administration</h3>
<p><strong><mark>No! Not at all!</mark></strong></p>
<p><strong>Neither in the past nor in the present!</strong></p>
<p>And I don’t see this happening even in the distant future (I would be glad if this happens, though). To be more precise:</p>
<h4 id="heading-association-with-hall-gymkhana-amp-institute-level-por">Association with Hall, Gymkhana &amp; Institute level POR</h4>
<ul>
<li><p>Any POR (even if they have “<em>tech</em>” in their names) does <strong>NOT</strong> have any role or say in metaKGP - <strong>AT ALL</strong>. Any <em>Gymkhana</em> / <em>Hall</em> / <em>Institute</em> <em>position</em> (<mark>focus</mark>, I am talking about the “<em>position</em>”; not the “<em>person</em>” holding the position) doesn't have a say in what, when, and how metaKGP does.</p>
<p>  It might be possible that someone from metaKGP holds the above-described position, but that doesn't imply that the position itself has a role in metaKGP. For example, when you approached me in the last tenure (the academic year 2023-2024) when I was serving as the Technology Coordinator for anything related to metaKGP, you approached Arpit Bhardwaj, <strong>NOT</strong> the Technology Coordinator.</p>
<blockquote>
<p><mark>Warning</mark></p>
<p>Stay alert from “<em>neta</em>” type people who claim that they have a role (or say) in metaKGP just because they hold a POR. I have seen, people leveraging the name of metaKGP for their own benefit, whenever they seemed fit just because of their position.</p>
<blockquote>
<p><mark>A humble note for these “</mark><em><mark>netas</mark></em><mark>”</mark></p>
<p>If you hold some position, then you can help us in many ways, help us and boast about it everywhere. But without any contribution leveraging the name of metaKGP is something condemnable. metaKGP projects become illegal for you when it comes to supporting us but leveraging the name of metaKGP for your gains is all good? <em>Sahi hai bhai XD</em></p>
</blockquote>
</blockquote>
</li>
</ul>
<h4 id="heading-support-for-projects">Support for projects</h4>
<ul>
<li>Neither metaKGP as an organization nor metaKGP projects are supported, backed, or funded by any institute administration. MetaKGP projects, including - <a target="_blank" href="https://wiki.metakgp.org">wiki</a>, <a target="_blank" href="https://gyft.metakgp.org">GYFT</a>, <a target="_blank" href="https://gyfe.metakgp.org">GYFE</a>, <a target="_blank" href="https://naarad.metakgp.org">Naarad</a>, and <a target="_blank" href="https://qp.metakgp.org">IQPS</a> - to name a few, are hosted on a server whose costs are handled by alumni of metaKGP; even this list of who paid how much and when is open to all - <a target="_blank" href="https://docs.google.com/spreadsheets/d/1O9Df8GUQcqChvtDvVYixvJNmvw27zVl3TW5YnK9HKLs/edit?usp=sharing">metaKGP Finances Sheet</a>.</li>
</ul>
<h3 id="heading-updating-wiki-content-is-metakgps-responsibility">Updating wiki content is metaKGPs’ responsibility</h3>
<p>Let’s first understand what a wiki is,</p>
<p>“A <strong>wiki</strong> (<a target="_blank" href="https://en.wikipedia.org/wiki/Help:IPA/English">/ˈwɪki/</a> ⓘ <a target="_blank" href="https://en.wikipedia.org/wiki/Help:IPA/English"><em>WI-k</em></a><a target="_blank" href="https://en.wikipedia.org/wiki/Help:Pronunciation_respelling_key">ee</a>) is a form of <a target="_blank" href="https://en.wikipedia.org/wiki/Hypertext">hypertext</a> publication on the <a target="_blank" href="https://en.wikipedia.org/wiki/Internet">internet</a> which is <a target="_blank" href="https://en.wikipedia.org/wiki/Collaborative_editing">collaboratively edited</a> and managed by its audience directly through a <a target="_blank" href="https://en.wikipedia.org/wiki/Web_browser">web browser</a>.”</p>
<blockquote>
<p>Source: <a target="_blank" href="https://en.wikipedia.org/wiki/Wiki">wiki : Wikipedia</a></p>
</blockquote>
<p>In simpler words, <strong><mark>YOU</mark></strong><mark>, as a KGPian, are responsible for updating the wiki's content</mark> whenever it is comfortable for you. Making sure the wiki is up &amp; running with all the functions working properly is the role of the maintainers (if the wiki is the only topic of consideration). If you find some information that is outdated and also find the latest information, then it’s your responsibility to update it instead of crying about the outdated information.</p>
<p>However, a handful of guys (and gals) already maintaining <strong>over 20 projects</strong> can not update the wiki's content. How can you even imagine this small group of students writing all the wiki content ( ╯°□°)╯ ┻━━┻? Fine, you might assume that we have a <em>force</em> of <em>paid students</em> who update the content. <strong>BULLSHIT</strong>. That force would have to be half of the KGP if you consider the sheer amount of text content on Wiki.</p>
<h3 id="heading-erp-related-projects-steal-students-data">ERP-related projects steal students' data</h3>
<p>So, finally, we are at the issue that forced me to write this rant. Let's dive deep into this issue.</p>
<p>This is a major concern about metaKGP projects dealing with ERP, where users are required to enter their ERP credentials on our custom frontend. At present, there are only <a target="_blank" href="https://gyft.metakgp.org">GYFT</a> and <a target="_blank" href="https://gyfe.metakgp.org">GYFE</a>. There is doubt that the credentials entered are stored on our servers.</p>
<p>I will answer it straight to the point <strong>on behalf of my team from metaKGP</strong>:</p>
<ul>
<li><p><strong><mark>No</mark></strong><mark>, we do not.</mark></p>
</li>
<li><p>We encourage you to check the codebase for both of these projects on our GitHub repositories - <a target="_blank" href="https://github.com/metakgp/gyfe">GYFE</a> and <a target="_blank" href="https://github.com/gyft">GYFT</a> - and verify it for yourself.</p>
</li>
</ul>
<h4 id="heading-why-do-we-need-your-erp-credentials">Why do we need your ERP credentials?</h4>
<p>Sorry guys, I don’t know any <em>black magic</em> to fetch your academic timetable. Unfortunately, both <a target="_blank" href="https://gyfe.metakgp.org">GYFE</a> and <a target="_blank" href="https://gyft.metakgp.org">GYFT</a> require your timetable, and to do that, we need to access your ERP; hence, your ERP credentials are needed.</p>
<h4 id="heading-but-you-can-host-a-different-codebase-on-the-actual-server"><strong>But you can host a different codebase on the actual server</strong></h4>
<p>Yes, surely we can. But we don't choose to. Now, it's up to you whether you trust us with this or not. Don't believe in our words? These projects can be <strong>self-hosted</strong> (web version). One can understand the steps to host the project locally from their documentation. Self-host them on a machine you control to control the flow of information.</p>
<h4 id="heading-but-i-dont-wanna-install-those-gigantic-node-modules-of-yours"><strong>But I don’t wanna install those gigantic node modules of yours</strong></h4>
<p>Use the <mark>CLI version</mark>. Done. Anything else? After taking this concern into consideration, we spent more time building the projects so that they could be used in both web applications and CLI. That’s how they are publicized as well.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D5622AQH8ifjam0O9DA/feedshare-shrink_800/feedshare-shrink_800/0/1725888212232?e=1739404800&amp;v=beta&amp;t=b089nqiRI8Mo6DAF9nNtS-rgUHG1DemLZeooMMx-rxI" alt="Image preview" /></p>
<blockquote>
<p><mark>Note</mark></p>
<ul>
<li><p>The footer of this poster mentioning about the CLI version.</p>
</li>
<li><p>The QR code leads you to the GitHub repository.</p>
</li>
</ul>
</blockquote>
<p>Now let’s summarise…</p>
<p><strong>You</strong>, the user, have full control over whether <strong>YOU CHOOSE</strong>:</p>
<ul>
<li><p>To use metaKGP’s hosted version of these projects and provide your ERP credentials</p>
</li>
<li><p>To self-host the web version or use the CLI version locally and have full control of the data being transferred</p>
</li>
<li><p>To not use the project :) I mean, no one is forcing you ¯\_(ツ)_/¯. Keep on with your usual life</p>
</li>
</ul>
<h3 id="heading-naarad-mftp-is-illegal">Naarad + MFTP is illegal</h3>
<p>In the context of our discussion, the term ‘Naarad+MFTP’ makes more sense. Both of them, when combined, give the final result of you receiving real-time CDC notices.</p>
<h4 id="heading-tldr">TLDR</h4>
<p><mark>No, it is not illegal</mark>. In no way is the ‘creation’ and ‘working’ of MFTP and Naarad illegal. There is nothing being ‘exploited’ to retrieve the notices (which, from now on, I will be referring to as information). The information is available to every KGPian having access to ERP (from freshmen to final year).</p>
<h4 id="heading-what-is-mftp">What is MFTP?</h4>
<p><a target="_blank" href="https://github.com/metakgp/mftp">MFTP</a> is a backend service that checks ERP for new notice(s) every 2 minutes. Once a new notice is detected, it will be posted to Naarad.</p>
<h4 id="heading-what-is-naarad">What is Naarad?</h4>
<p><a target="_blank" href="https://naarad.metakgp.org">Naarad</a> is the noticeboard service for KGPians (having access to their institute email), which displays the notices posted to it. Currently, the notices that are being posted are related to the CDC only. And those notices are automatically posted by MFTP. However, the plan is not to limit Naarad to just CDC notices. We have plans to incorporate other noticeboard services in the future as well. Following are the rough ideas:</p>
<ul>
<li><p>Notices from <a target="_blank" href="http://apna.iitkgp.ac.in">Apna Noticeboard</a> (accessible only via campus network). It’s the same thing as the ‘Internal (Apna) Noticeboard’ in ERP</p>
</li>
<li><p>Society events and posts</p>
</li>
</ul>
<h4 id="heading-wheres-the-problem">Where’s the problem?</h4>
<p>Let’s understand the problem step-by-step.</p>
<p>The problem is with the type of information we are dealing with. The problem is not directly from the institute; it is <strong>induced</strong> from the companies. Companies have strict confidentiality policies to not share certain information in their notices (stipends, salary, shortlists, etc) with other colleges.</p>
<p>With the context of the type of information, it’s still not enough to be a problem. This information becomes punishable when shared with other colleges or even publicly.</p>
<p>When Naarad+MFTP is used for this purpose, these projects are put in a tight spot.</p>
<h4 id="heading-so-whats-the-solution">So, what’s the solution?</h4>
<p>The solution is surprisingly simple.</p>
<ul>
<li><p>Only KGPians should have access to Naarad. Authorize with their institute email. Here’s where we developed <a target="_blank" href="https://heimdall.metakgp.org">Heimdall</a> as a single authorization source for all our required projects.</p>
</li>
<li><p>On top of that, add <strong>user+pass-based</strong> authorization as an extra layer of security.</p>
</li>
</ul>
<h4 id="heading-sharing-of-naarad-login-credentials">Sharing of Naarad login credentials</h4>
<p>However, one can provide the OTP to authorize with their institute email and their username and password to someone outside of KGP (not a KGPian). Yes, true. The same can happen with ERP credentials as well. Seeing this as a problem in ‘Naarad+MFTP’ doesn't make sense, but it’s fine when it happens with ERP. Still, we log all the connections made to Naarad, in case they are needed, with uniquely identifiable information such as <em>username</em> and <em>IP address</em>.</p>
<blockquote>
<p>There also is an implementation which restricts signup and login ONLY to campus network while rest of the application works on any network once logged in. The implementation is completed but not merged simply because it wasn’t needed based on our threat model. You can check this un-merged implementation at, <a target="_blank" href="https://github.com/metakgp/naarad/pull/20">Enforce signup and login only via campus network</a>.</p>
</blockquote>
<h4 id="heading-association-with-administration-amp-por">Association with administration &amp; POR</h4>
<p>With this settled, there is one more thing that is assumed by the public in general. Let’s clear that out as well…</p>
<p><mark>Placement Committee members have no role in the development and operation of either Naarad or MFTP</mark>. They are both solely developed by the people from KGP under metaKGP and are not associated with any POR. The reason for non-association is very simple: <strong>accountability</strong>.</p>
<p>Take this example: ‘Naarad+MFTP’ had an issue, and it failed to deliver urgent notices on time, resulting in someone missing the deadline. Who will be held accountable?</p>
<ul>
<li><p>metaKGP, who develops and maintains it?</p>
</li>
<li><p>Placement Committee members who endorsed it?</p>
</li>
</ul>
<p>They didn’t want to take that accountability. That’s justified as their endorsement of Naarad implies that this is an official application like ERP. I mean, in the sense that if ERP goes down and notices aren’t received so, they are bound to adjust the deadlines.</p>
<p>That’s where I recommended publicizing with a warning/disclaimer that you use it for your convenience but don’t rely on it solely as a failure of ‘Naarad+MFTP’ won’t be considered by the authorities. And that’s the story of how every notice in ‘Naarad+MFTP’ ends with…</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1727683320066/a50b7d2c-afa4-465b-b320-81e0574ed825.png" alt class="image--center mx-auto" /></p>
<p>With this, I expected that at least now it is endorsable by them or can be shared through the original CDC Noticeboard, which would have increased the user base of ‘Naarad+MFTP’ who have benefitted from them. But that never happened. I still don’t know (or maybe understand?) why it was denied ¯\_(ツ)_/¯.</p>
<h3 id="heading-koss-runs-metakgp">KOSS runs metaKGP</h3>
<p><mark>No. And, Yes?</mark></p>
<h4 id="heading-fundamental-differences-between-metakgp-and-koss">Fundamental differences between metaKGP and KOSS</h4>
<p>The answer to this particular misconception is subjective. But the following stays true in any case.</p>
<ul>
<li><p>metaKGP and KOSS are different organizations with different functional architectures and different goals to target. The methods of achieving these different goals might sometimes overlap, blurring the lines between them and leading to confusion.</p>
</li>
<li><p>Describing KOSS, according to me, is a <strong>closed group</strong> (people are chosen once via a selection process) of <strong>open-source enthusiasts.</strong> KOSS puts efforts in increasing awareness about open-source and elevating development culture through workshops and events - which might not be only limited to KGP (eg, <a target="_blank" href="https://kwoc.kossiitkgp.org">KWoC</a>)</p>
</li>
<li><p>MetaKGP is an <strong>open group</strong> (no such thing as a selection process to join, work, or contribute, except for the electing <a target="_blank" href="https://wiki.metakgp.org/w/Metakgp:Governance">maintainers</a>) of people with various interests from IIT Kharagpur collaborating together. You need to be a KGPian to be able to contribute to anything. Obviously, credentials are given to maintainers only, but they are <em>elected</em> out of those already <strong>active.</strong></p>
<blockquote>
<p>refer, <a target="_blank" href="https://github.com/amrav/amrav.github.io/blob/master/_posts/2016-05-20-what-is-metakgp.md/">What is metaKGP? ~ by Vikrant Varma aka amrav</a></p>
</blockquote>
</li>
</ul>
<h4 id="heading-a-little-bit-of-history">A little bit of history</h4>
<p>With COVID-19 and things becoming online, most projects lost their importance (GYFT, WIMP, ChillZone, etc.) and weren’t maintained for over 3 years. The sudden shift to online made meet-ups and fun rather difficult, and with all sorts of things happening - <em>which I myself don’t know</em> - things went silent. The pass-on didn’t take place how it was supposed to be originally; with all of the events unfolding, they led to metaKGP development being stale for a long enough time for the ones who knew about metaKGP to graduate and new batches to come, enough that metaKGP came to be known only for the wiki.</p>
<p><mark>With the history of KOSS and metaKGP intermingled, the history of metaKGP was passed on, directly or indirectly, in KOSS</mark>. The reasons for intermingled history can be summarised as follows:</p>
<ul>
<li><p>Love for open-source and tech in general</p>
</li>
<li><p>What metaKGP was trying to do with projects aligned with the goal of KOSS to promote open-source</p>
</li>
<li><p>This led to a lot of common people in both organizations</p>
</li>
</ul>
<h4 id="heading-back-to-the-present">Back to the present</h4>
<p>And, in the present, when there were <em>enough</em> motivated people to carry out the legacy, we (from KOSS) started fixing all of the old projects (we still are not done yet, far behind from the previous level) to revive the previous glory metaKGP.</p>
<p>That’s how people from KOSS are presently handling metaKGP. That’s how the myth of ‘KOSS runs metaKGP, and if you aren’t in KOSS, you can’t contribute to metaKGP’ came about. <mark>You can contribute to metaKGP even if you are not a KGPian ¯<em>(ツ)</em>/¯ </mark> (the extent to which you can contribute will be limited, though).</p>
<p>We encourage our juniors from KOSS to contribute to metaKGP projects (we don’t force, I promise ;P). That doesn’t mean metaKGP belongs to KOSS or that the fundamental ideologies of metaKGP are completely lost. We still abide by them; we understand the difference in the purpose of both organizations. It’s just that KGP has forgotten what it was over time, and it was bound to happen with certain things falling into place. That’s the second reason why this article exists. To put this story in general people’s view - with my bias, I understand that.</p>
<h2 id="heading-do-kgp-deserve-metakgp">Do KGP deserve metaKGP?</h2>
<p>Wait.. wait.. before jumping to conclusions, let me first clarify what I mean by this. There is a belief that KGPians have done something to deserve metaKGP - like <em>paying a fee or being a part of Gymkhana</em>.</p>
<p>Nope, absolutely not. metaKGP came into the picture as a need by motivated individuals to do something for KGP, expecting nothing in return. And that's how it is still going but with an expectation of humbleness for the efforts?</p>
<blockquote>
<p><mark>Side Note:</mark> If you can’t be humble, then I expect you to handle my rudeness and not cry about it?</p>
</blockquote>
<p>If you care about the monetary aspect, we are actually running on a loss :D</p>
<blockquote>
<p>Read <a target="_blank" href="https://wiki.metakgp.org/w/Metakgp:About#:~:text=Metakgp%20was%20started%20by%20Vivek,Harsh%20Gupta%20and%20Vivek%20Rai.">About metaKGP</a>, and follow through connected links as well.</p>
</blockquote>
<p>Let’s take some examples of this feeling of entitlement. There was this incident when Naarad was down, and I received complaints like this:</p>
<ul>
<li><p>“Don’t take responsibility for things you can not maintain.”</p>
<p>  <code>My Response</code>: A little humble-ness? The project is open source; come forward and help us fix the issue or self-host it for a smaller scale of users. Don’t use it if it’s such an unreliable service. Get your free-loading ass up and build your own? At least you would have <strong><mark>a better project than your Netflix or YouTube clones</mark></strong>.</p>
</li>
<li><p>“Give it back to admins/placement committee members so that they can manage it <em>better.</em>”<br />  <code>My Response</code>: LMFAO, you have reached the peak of being <a target="_blank" href="https://www.usatoday.com/story/tech/2023/12/03/delulu-meaning-tiktok-text-slang/71509043007/#:~:text=it%20in%20conversation.-,What%20does%20'delulu'%20mean%3F,have%20false%20beliefs%20about%20something."><em>delulu</em></a>.</p>
<p>  <code>Reality</code>: Back? As far as I understand the meaning of ‘<em>giving back</em>’, you can give something back if you received it or something else from them. None of them did anything to help regarding Naarad or MFTP, <mark>if not created problems instead</mark>. Admins never helped in this regard. They can’t build one because they are lazy (I know what I am saying). They can’t take ours because students develop it, and they are afraid of taking any issues faced by users on them. What they can do at maximum is outsource it for some <em>cheap labor from a hefty tender</em>, which will result in a fully vulnerable and half-cooked service (referring to the <a target="_blank" href="http://iitkgp.ac.in">main KGP website</a>). If developed internally, you know what it will look like - remember the <strong>CDC CV editor and the entirety of ERP</strong>. The reality is it’s just extra work for them; why do it when students are ready (<strong>more like forced</strong>) to check the noticeboard manually on that crappy ERP. <mark>Shouldn’t the CDC Noticeboard be a basic service provided by the institute?</mark></p>
<blockquote>
<p><strong>Why not ERP mass-mailer + CDC Noticeboard?</strong></p>
<p>Also, some say that institute has the mass-mailer service (the thing by which you receive mails from ERP and other profs) and the CDC Noticeboard, why not just merge them both? Well, technically it is possible but practically it is way out of the question, purely because of the way that mass-mailer works. If you observe you will see 99 emails of other students, along with yours, in the cc section. The algorithm is to send the mail in batch of 99 recipients with a certain time-interval, say 10 minutes. This is because of the restrictions placed on the service they use. So when you receive that mail which was sent to a mass, every set of 99 individuals receive it at different times. The time of arrival can vary from 10 minutes to 3 hours (if you do simple maths). Which will not be sufficient to solve the ‘real-time’ retrieval nature of CDC notices.</p>
</blockquote>
<p>  But again, it doesn’t mean this is an unsolved problem (╥﹏╥). And yet, they left this burden for the students, that students are the ones responsible for checking the notice board continuously on that utter piece of crap ERP. And, after all of this, they have the audacity to share notices which have a deadline within half an hour (ﾒ￣▽￣)︻┳═一</p>
</li>
</ul>
<p>I went a little off-topic when ranting, but again, this was supposed to be a rant from the beginning.</p>
<h3 id="heading-then-why-do-we-do-it">Then why do we do it?</h3>
<p>Just because we can. We have fun while building stuff. The concept of metaKGP has changed drastically over its history. From being just about the wiki (refer, <a target="_blank" href="https://wiki.metakgp.org/w/User:Hargup/Why_metakgp%3F">Why metaKGP? ~ Harsh Gupta</a>, <a target="_blank" href="https://wiki.metakgp.org/w/User:Amrav/Why_metakgp%3F">Why metaKGP? ~ Vikrant Varma</a> and <a target="_blank" href="https://github.com/amrav/amrav.github.io/blob/master/_posts/2016-05-20-what-is-metakgp.md/">What is metaKGP? ~ Vikrant Varma</a>) to a bunch of open-source projects making various hectic processes way less hectic - think about:</p>
<ul>
<li><p>Checking CDC noticeboard <strong>manually</strong> on your <strong>phone</strong> <strong>every 10 minutes</strong> (<a target="_blank" href="https://naarad.metakgp.org">Naarad</a> and <a target="_blank" href="https://github.com/metakgp/mftp">MFTP</a>)</p>
</li>
<li><p>Creating your academic calendar <strong>manually</strong> with holidays (<a target="_blank" href="https://gyft.metakgp.org">GYFT</a>)</p>
</li>
<li><p>Finding empty rooms during class hours because you don’t want to go back to your hall just to come after an hour for your next class (<a target="_blank" href="https://chill.metakgp.org">ChillZone</a>)</p>
</li>
<li><p>Finding that professor you want to get permission from for whatever purpose, say NOC?, and having no idea how to approach them (<a target="_blank" href="https://wimp.metakgp.org">WIMP</a>)</p>
</li>
<li><p>Not having a <em>queryable</em> PYQ repository, thus searching them all over the internet to get to half-cooked websites of KGP (referring to literally everything?) or asking seniors for PYQs multiple times (<a target="_blank" href="https://qp.metakgp.org">IQPS</a>, previously MFQP)</p>
</li>
<li><p>Having no freakin’ idea of what are the previous grade statistics of a subject whose name/syllabus sounds “cool” and you plan to take it as an elective or as an additional to end up in <em>absolute grading</em> (<a target="_blank" href="https://kronos.streamlit.app">Kronos</a>)</p>
</li>
<li><p>Filling the feedback form 10 minutes before the deadline just so that you can download your admit card (<a target="_blank" href="https://github.com/proffapt/fERP">fERP</a>)</p>
</li>
<li><p>Not even knowing the on-ground history of your own college, information is limited to just a few ‘privileged’ people (<a target="_blank" href="https://wiki.metakgp.org">Wiki</a>)</p>
</li>
</ul>
<h3 id="heading-whats-the-problem-then">What’s the problem then?</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1727596370461/a684e42c-eca7-4cd5-81a5-e75de71091b8.png" alt class="image--center mx-auto" /></p>
<p><code>Context for the image: related to</code> <a target="_blank" href="https://wimp.metakgp.org"><code>Wimp</code></a></p>
<p>What’s the problem with it? Nothing. But…</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1727596456838/91e070e2-cf09-4a4e-8cf9-9031a7125c0f.png" alt class="image--center mx-auto" /></p>
<p>Wait, what? Misinformation? Are you kidding me? Let me rant it out first…</p>
<p>What in this actual world would one achieve by spreading “misinformation” about where a professor is going to be? Surely, one might get to the wrong place at a very crucial time, which might be problematic for them. But why would someone in their right mind build a freakin’ website to play pranks with people? Not us.</p>
<p><mark>The boundaries between being unaware and stupid are getting blurred here</mark>. Surely, I understand where they might be coming from - they believe metaKGP ought to serve them for all the reasons I have discussed earlier, or metaKGP is supported by the administration, so we get some ‘<mark>exclusive</mark>’ data from them. We build the data ourselves, which is scattered all over the ERP or other resources. No one pops out of heaven to provide us with this data magically.</p>
<p>But let me share our POV here as well, as it will be a toxic relationship if we are the only ones who understand you, right? Consider some random guys (and gals) working their asses off for weeks to get something up and running to help even a single person via something they built. Now, there’s a logical issue that everyone in the team missed (I mean, there are a lot of departments, schools, and centers; now, add up all the profs in them; it is not practical to verify each of them). And this is what they get for their hard work.</p>
<p>I don’t understand how you can expect someone to reply politely (until they are getting paid to do so - <em>referring to customer support</em>) with such comments and call the person rude. <mark>You were being rude first, rude to their hard work.</mark></p>
<blockquote>
<p><strong><mark>Side Story</mark></strong>: <a target="_blank" href="https://www.theregister.com/2023/02/15/corejs_russia_open_source/">Core-JS maintainer says, “Open-source is broken”</a>.</p>
</blockquote>
<p>With this, I will acknowledge the praise you guys give. Those praises are the things that motivate us to keep building our stuff. And yes, that alone will be a lie; we do it for personal gain, too. We gain experience in building a project and working with a team. But that doesn’t mean to ignore the other side of the story. I felt that it was important to at least share this perspective along with some other important information, such as all those misconceptions that were discussed in the article earlier.</p>
<h3 id="heading-how-it-should-have-been">How it should have been?</h3>
<p>It would be great if you could stop after the messages in the first screenshot, followed by some examples of those issues that you faced. That’s it. Now, the contact person will contact you regarding whether it is <em>technically</em> possible to fix the issue.</p>
<p><mark>Even better, you can help us fix the problem!</mark> In those screenshots, that was a 4th year (yes, who knows how to program as well) ‘claiming’ the spread of ‘misinformation’. Here is this <a target="_blank" href="https://github.com/metakgp/wimp/pull/85">guy in his 1st year fixing the bug</a>. Surely, I don’t expect everyone to understand the programming part and solve the problem. Still, you can be humble and considerate with your issue reports. If you want a humble response, it might hurt your “<em>feelings</em>” if the response isn’t humble. No one here is customer support.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1727599996969/67c3d3d7-e9d1-4384-8bf7-ed77c6969907.png" alt class="image--center mx-auto" /></p>
<p>That’s a great way of starting the discussion, and things can follow up with a few questions back and forth. Heck, even the first section of those messages is good (again attached below),</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1727600032029/11b12d3f-97a2-4079-b0b3-1cfa93a3af98.png" alt class="image--center mx-auto" /></p>
<p>That’s the very least you can do while reporting a bug. This doesn’t apply just to our case. I encourage everyone to follow this for any open source project as the maintainer is most likely not getting any incentives for maintaining the project, which you might be relying on daily, instead of <mark>assuming that the maintainer owes you something from your previous lives</mark>. Here are a few things which you should add to help the maintainer.</p>
<h3 id="heading-how-to-report-an-issue-ask-for-support">How to report an issue / ask for support</h3>
<ul>
<li><p>Before anything, ensure you have read the corresponding documentation - if there is any. Efforts were put into writing that documentation as thoroughly as possible. I spent 3 hours writing the <a target="_blank" href="https://bit.ly/naarad-guide">documentation for Naarad</a> to get stupid queries again (from those who have already read the documentation). Here is one of those instances.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1727626194775/4569bcfd-7b67-49a3-bbaf-271a2a1c40d8.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1727626201355/d97760ff-ea43-4e84-927f-568369266c0c.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Describe what went wrong. Provide relevant examples, screenshots, and anything up to the best of your capacity</p>
</li>
<li><p>Provide the steps to reproduce that bug</p>
</li>
</ul>
<h2 id="heading-future-plans">Future Plans</h2>
<p>I do have some things which I would love to see happen before I graduate:</p>
<ul>
<li><p>Revival of all the projects which are still relevant in present times.</p>
</li>
<li><p>Revive the original essence of wiki. Contacting different bodies (Hall / TSG / Institute) to raise awareness about updating data on the wiki.</p>
</li>
<li><p>Revival of <a target="_blank" href="https://wiki.metakgp.org/w/Metakgp:Demo_Days"><mark>Demo Days</mark></a> (it is clickable). Getting contributions from all over the KGP community.</p>
</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>The following myths were examined:</p>
<ul>
<li><p>metaKGP is supported by the administration</p>
</li>
<li><p>Updating wiki content is metaKGPs’ responsibility</p>
</li>
<li><p>ERP-related projects steal students' data</p>
</li>
<li><p>Naarad + MFTP is illegal</p>
</li>
<li><p>KOSS runs metaKGP</p>
</li>
</ul>
<p>A humble bug report goes a long way :D</p>
<p>And, if you:</p>
<ul>
<li><p>Love tech</p>
</li>
<li><p>Believe in the open-source ideology</p>
</li>
<li><p>Understand or want to understand tech and are looking for a peer group (didn’t get to join any society and wants one?)</p>
</li>
<li><p>Want to build something that has real-life application and solves a problem for the general KGP community or something not limited just to KGP</p>
</li>
</ul>
<p>We encourage you to drop a message in our <a target="_blank" href="https://slack.metakgp.org">slack channel</a> and help us out with the already existing projects or bring in a new project idea. If someone from our group, mainly KOSS at the moment, likes the idea, they might work along with you :D</p>
]]></content:encoded></item><item><title><![CDATA[Students are guilty until proven otherwise]]></title><description><![CDATA[Pre-Context
Hi there, it's 6 in the morning and I am writing this. This is not going to be a technical writeup which you might have subscribed me for or expect from me. Rather, this will be my first official blog about my views (I guess? I have writt...]]></description><link>https://proffapt.in/students-are-guilty</link><guid isPermaLink="true">https://proffapt.in/students-are-guilty</guid><category><![CDATA[tsg-elections]]></category><category><![CDATA[tsg-elections-leaks]]></category><category><![CDATA[iitkgp]]></category><dc:creator><![CDATA[Arpit Bhardwaj]]></dc:creator><pubDate>Sat, 27 Apr 2024 02:33:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1714186678831/0f3ad5a2-f4e1-4f35-84ca-da66aeb3e71c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-pre-context">Pre-Context</h2>
<p>Hi there, it's 6 in the morning and I am writing this. This is not going to be a technical writeup which you might have subscribed me for or expect from me. Rather, this will be my first official blog about my views (I guess? I have written countless of lengthy advises during the time I used to run a cybersecurity group) - coming back to the topic - on a very concerning issue consuming KGP.</p>
<h2 id="heading-context">Context</h2>
<p>The point which I am going to share will involve an example, in which the general public might be more interested rather than the issue which I want to address by this blog, thus I would like to clarify my point of concern before starting with the story so that you read this blog from the same point of view in which I have written it. Also, I actually don't know if it is okay to mention the names of people involved here, so I will be using false names (if required). If some official requires me to provide the names of the parties involved in the story - I do not have any problem with that ¯\_(ツ)_/¯.</p>
<p>Ok, so enough of the background - let's start with the main thing. The issue which I want you to focus is,</p>
<blockquote>
<p>Students have a bad image among the administration and are not trusted by them</p>
</blockquote>
<p>Or a better way to put it will be,</p>
<blockquote>
<p>Students are guilty until proven otherwise</p>
</blockquote>
<h2 id="heading-the-story">The story</h2>
<p>There have been countless encounters, bringing up this issue in-front of me. The most recent one was related to this years' <strong>TSG Elections (academic year 2024-2025)</strong>. Excited? Drum-rolls.. Vote counts for this years' elections were <em>leaked</em> by an ERP developer to a student before the official disclosure of the results.</p>
<h3 id="heading-possibility-of-more-serious-leaks">Possibility of more serious leaks?</h3>
<p>Easily said than understanding the consequences of the revelation. Let's talk about some of the implications of this incident:</p>
<ul>
<li><p>Although, the incident which came into light happened after the voting day. But what about the possibility that this can happen during the day of voting?</p>
</li>
<li><p>Anyone involved, can <em>leak</em> the count during the voting day and this could lead to manipulation of results in various sorts of ways.</p>
</li>
<li><p>There's that, now think about this, bribing an ERP Developer to tamper with the results :)</p>
</li>
</ul>
<p>Yup that's a serious concern now. Although, not the one which I want you to focus via this blog, please continue reading..</p>
<h3 id="heading-who-am-i">Who am I?</h3>
<p>How do I know it? Who am I? Just to give you sufficient information about me:<br />I am Arpit Bhardwaj, Technology Coordinator, Technology Students' Gymkhana for the academic year 2023-2024. Now, here's the thing - Technology Coordinator is the student position which <em>should</em> receive the elections results <em>first</em>, so that they can update it on the <a target="_blank" href="https://gymkhana.iitkgp.ac.in">gymkhana website</a> which then serves as the first and foremost source of information for the general student body regarding all the information pertaining to elections.</p>
<h3 id="heading-what-did-i-do">What did I do?</h3>
<p>What did I do after knowing this? Why am I writing a blog? Why not inform it to the concerned authorities? Here's what I did as soon as my investigation concluded:</p>
<p>I immediately informed a concerned official, explained all the details about how I got to know about the issue, how I investigated the student and later found the ERP developer involved in this. I explained this more than once (It was actually more than once, but I can't give an exact count and I don't want any of the parties to raise fingers on me for providing any "false" information). The talk was a quite a bit long, around 20 minutes - I will be discussing it in parts in the blog ahead.</p>
<h3 id="heading-concerns-of-the-official">Concerns of the official</h3>
<p>Let's first talk about the concerns of the officials, which I found themselves concerning (-_-). Their concern was (writing the gist of it):</p>
<blockquote>
<ul>
<li><p>Is there a possibility that ERP was hacked, moreover, hacked with privilege to edit the database and manipulate the vote count?</p>
</li>
<li><p>And was the hack done by a student?</p>
</li>
</ul>
</blockquote>
<p>See, this is a possibility, I am not denying that (neither would you after recent security incidents with ERP) but this can not be concluded from the current situation, how the events took place doesn't point in this direction at all. Next surprising concern:</p>
<blockquote>
<ul>
<li>What's my hall? Why am I constantly chasing this issue?</li>
</ul>
</blockquote>
<p>I laughed at this, hard. Anyone who knows me well enough, should know that such things (politics and stuff) doesn't matter to me. The sole reason for me to report this was to fulfil my duty as Technology Coordinator and to do what was right, an effort to maintain the integrity of our technical systems. Which was being questioned here ¯\_(ツ)_/¯ . Anyways, we forgot about something or should I say, about someone..</p>
<p>.. What about the ERP Developer responsible for this leak? Their response to this:</p>
<blockquote>
<p>If the staff had access to data and they leaked it, HOW CAN WE PREVENT IT?</p>
<ul>
<li>As in "WE CAN NOT PREVENT IT" or as in "NOTHING CAN BE DONE ABOUT IT"</li>
</ul>
</blockquote>
<p>"HOW CAN WE PREVENT IT?" - ?? I mean, what? Did I hear it clearly? - this was my reaction after hearing this statement. Let me tell you some technicalities (yeah, what else would you expect from me anyways) - "hacking" doesn't only involve breaking the computer system(s), there is a concept of <a target="_blank" href="https://en.wikipedia.org/wiki/Social_engineering_(security)">social engineering</a> (for those who didn't bother to read the wikipedia article - it is, in layman terms, "human hacking", where humans are "hacked" to break into the system or forced/convinced/tricked to provide confidential information). In short, some person leaking information for any reason - "knowingly" - is a crime equivalent to hacking the system. And the official was fine with it, rather concerned about involvement of student <em>directly</em> (as in the end, a student was involved).</p>
<blockquote>
<p><mark>IMPORTANT</mark></p>
<p>I do not know what actions were taken against the ERP Developer in concern here.</p>
</blockquote>
<h3 id="heading-my-concerns">My concerns</h3>
<h4 id="heading-concern-1">Concern 1</h4>
<blockquote>
<p>Students are guilty until proven otherwise</p>
</blockquote>
<p>This is one of the stories which I am sharing publicly, but there have been more than one incidents of this same topic being raised. To ensure the smooth functioning of an organisation, such beliefs are detrimental. I fail to comprehend this statement entirely. Why emphasise the term "student"? Aren't mistakes made by individuals in administration as well (as evidenced by the example provided)? Why approach the situation with a perspective that implies guilt on the part of students? Instead, why not use a more generic term that encompasses a broader subset of people? Ultimately, both sides make mistakes, and pointing fingers won't facilitate resolution. Rather, focus on solving the issue more than focusing on who caused it in terms of - students or administration - rather than creating generalised beliefs based on actions of some malicious elements of a particular subset of people. This goes for students and administration, both. Let's stop pointing fingers at each other and work together at solving the problem. Because in the end,</p>
<blockquote>
<p>Not all students are bad or have malicious intentions</p>
<p>Not all employees are bad or have malicious intentions</p>
<p>Not all admins are bad or have malicious intentions</p>
</blockquote>
<h4 id="heading-concern-2">Concern 2</h4>
<p>I do not find the current ERP team to be competent enough to keep our data safe. I don't know about you, I care for my data. Technical inability was a different thing, now they are themselves leaking details? To put it more formally, give students official permission to exploit, find and report bugs in ERP - YOUR BUG REPORTING SYSTEM WILL CRASH IN A DAY! - because that will be overloaded by the massive amount of incoming reports and yes the system itself won't be built properly either ¯\_(ツ)_/¯.</p>
<h3 id="heading-so-whats-the-solution">So, what's the solution?</h3>
<blockquote>
<p>Students are NOT guilty until proven otherwise</p>
</blockquote>
<p>I went to a conference, there I got an opportunity to talk with a professor who supported his students (the whole story is itself very inspiring, should discuss about this in another blog). In short, students were involved in migrating the complete network architecture from IPV4 to IPV6, contributing to the original implementations of IEEE protocols (published papers), developed crucial systems for the institute etc. How was this made possible? The quote which this section starts with is what he replied.</p>
<h4 id="heading-but-what-about-the-sensitive-data">But what about the sensitive data?</h4>
<p>Say students want to develop something which involves some <em>"confidential data"</em> for the institute or let alone work on the current existing ones and improve them. The same question comes again and again, "How to trust students with the data?". I mean google, microsoft, a random startup.. all of them have employees. All of them have some level of confidentiality available for every employee. Don't they function?</p>
<ul>
<li><p>Let the students sign a <a target="_blank" href="https://en.wikipedia.org/wiki/Non-disclosure_agreement">Non Disclosure Agreement</a> (that's what the professor earlier in the story did as well). The reality is if they want it, it is not hard to get past the problems presented.</p>
</li>
<li><p>Don't give them real data, students can work on a dummy data.</p>
</li>
</ul>
<h3 id="heading-conclusion">Conclusion</h3>
<p>It is high time we focus on how we see the problems and stop pointing fingers and making generalised beliefs about a particular subset of people.</p>
]]></content:encoded></item><item><title><![CDATA[Connect to DC Hub at IIT KGP]]></title><description><![CDATA[Introduction
IIT Kharagpur once had one of the largest DC (Direct Connect) networks in India. It lost its glory when the pandemic hit and everything went off-campus. This is an effort to restore that glory, let’s get started.
Installing the client
Me...]]></description><link>https://proffapt.in/dc-client-setup</link><guid isPermaLink="true">https://proffapt.in/dc-client-setup</guid><category><![CDATA[hithaifithai]]></category><category><![CDATA[hit-hai-fit-hai]]></category><category><![CDATA[DirectConnect]]></category><category><![CDATA[metahub]]></category><category><![CDATA[iitkgp]]></category><category><![CDATA[eiskaltdcpp]]></category><category><![CDATA[#dc++ ]]></category><category><![CDATA[kgp]]></category><dc:creator><![CDATA[Arpit Bhardwaj]]></dc:creator><pubDate>Wed, 08 Mar 2023 07:38:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1680280077071/1991e8a6-cb56-41bc-934c-63c6277277d0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>IIT Kharagpur <a target="_blank" href="https://www.quora.com/Which-campus-has-highest-total-share-and-users-on-DC++-in-India"><strong>once had</strong></a> one of the largest DC (<a target="_blank" href="https://en.wikipedia.org/wiki/Advanced_Direct_Connect">Direct Connect</a>) networks in India. It lost its glory when the pandemic hit and everything went off-campus. This is an effort to restore that glory, let’s get started.</p>
<h2 id="heading-installing-the-client">Installing the client</h2>
<p>Metahub -the IIT KGP DC Hub - is a private hub and inaccessible from outside the IIT Kharagpur network. Users connect to the hub using DC clients and can share files at high speeds. Metahub was previously known as <a target="_blank" href="https://wiki.metakgp.org/w/HiT_Hi_FiT_Hai">HiT Hi FiT Hai</a>.<br />There are various DC clients available for different platforms. To name a few, we have:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Platform</td><td>Client(s)</td></tr>
</thead>
<tbody>
<tr>
<td>Windows</td><td><a target="_blank" href="https://sourceforge.net/projects/eiskaltdcpp/files/Windows/EiskaltDC%2B%2B-2.4.2-x86_64-installer.exe/download">EiskaltDC++</a>, <a target="_blank" href="https://dcplusplus.sourceforge.io/">DC++</a></td></tr>
<tr>
<td>Linux</td><td><a target="_blank" href="https://sourceforge.net/projects/eiskaltdcpp/files/Linux/">EiskaltDC++</a>, <a target="_blank" href="https://linux.softpedia.com/get/Communications/Filesharing/LinuxDCplusplus-16399.shtml">LinuxDC++</a>, <a target="_blank" href="https://dev.yorhel.nl/ncdc">ncdc</a></td></tr>
<tr>
<td>MacOS</td><td><a target="_blank" href="https://sourceforge.net/projects/eiskaltdcpp/files/macOS/EiskaltDC%2B%2B-2.4.2-x86_64.dmg/download">EiskaltDC++</a>, <a target="_blank" href="https://sourceforge.net/projects/shakespeer/">Shakespeer</a>, <a target="_blank" href="https://saiankit.medium.com/how-to-use-dc-on-mac-using-ncdc-50bcc78aad01">ncdc</a></td></tr>
</tbody>
</table>
</div><p>However, it is recommended to use <a target="_blank" href="https://sourceforge.net/projects/eiskaltdcpp/files">Eiskalt DC++</a> for uniformity across different platforms.<br />To install EiskaltDC++ on your platform of interest refer to the corresponding section.</p>
<h4 id="heading-windows">Windows</h4>
<p><a target="_blank" href="https://sourceforge.net/projects/eiskaltdcpp/files/Windows/">Download Eiskalt DC++</a>.<br />Go through the basic installation setup and install it.</p>
<h4 id="heading-linux">Linux</h4>
<p>Install Eiskalt DC++ on <strong>Debian-based distributions</strong> like - <em>ubuntu, linux mint etc</em> using the following command</p>
<pre><code class="lang-bash">sudo apt install eiskaltdcpp
</code></pre>
<blockquote>
<p><strong>Note</strong><br />If you are not on a Debian-based distribution, search for the package name using the package manager your distribution uses and install it.</p>
</blockquote>
<h4 id="heading-macos">MacOS</h4>
<ul>
<li><p><a target="_blank" href="https://brew.sh/">Install Homebrew</a> - <em>skip this step if already installed</em>.</p>
<ul>
<li><p>To check whether it is installed or not, use the following command</p>
<pre><code class="lang-bash">  <span class="hljs-built_in">command</span> -v brew
</code></pre>
</li>
<li><p>If the output is like the following, then brew is installed!</p>
<pre><code class="lang-bash">  ~&gt; <span class="hljs-built_in">command</span> -v brew
  /opt/homebrew/bin/brew
</code></pre>
</li>
</ul>
</li>
<li><p>Install Eiskalt DC++ using the following command</p>
<pre><code class="lang-bash">  brew install eiskaltdcpp
</code></pre>
</li>
</ul>
<h2 id="heading-configuring-the-client">Configuring the client</h2>
<ol>
<li><p>Open Eiskalt DC++ &amp; press the following keyboard shortcut to open its <strong>preferences</strong> window according to your platform.</p>
<ul>
<li><p><code>Windows</code>: <strong>ctrl+o</strong></p>
</li>
<li><p><code>Linux</code>: <strong>ctrl+o</strong></p>
</li>
<li><p><code>macOS</code>: <strong>cmd+,</strong></p>
</li>
</ul>
</li>
<li><p>Set a <code>Nick</code> aka <em>username</em> for your current instance.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/223125464-437cbbc0-4e88-46ab-aa5c-a72adf9ba3a8.png" alt="image" /></p>
<blockquote>
<p><strong>Note</strong></p>
<ul>
<li><p><strong>Nick</strong> must be unique.</p>
</li>
<li><p>Other entries are optional, setting or not-setting them will not create any problem in connecting to the hub.</p>
</li>
</ul>
</blockquote>
</li>
<li><p>Configure TLS option. Goto: <code>Connection</code> &gt; <code>Advanced</code> &gt; <code>TLS settings</code> and choose <code>Allow TLS</code>.</p>
<blockquote>
<p><strong>Note</strong></p>
<ul>
<li><strong>This is an ambiguous setting. If</strong> <code>Allow TLS</code> option doesn’t work for you, you can try other available options. This is further detailed in <a target="_blank" href="https://proffapt.hashnode.dev/dc-client-setup#heading-some-common-issues"><strong>Some Common Issues</strong></a> <strong>section.</strong></li>
</ul>
</blockquote>
<p> <img src="https://user-images.githubusercontent.com/86282911/223126546-7bbd64fd-e098-4427-91f0-0eaaf80c1ef1.png" alt="image" /></p>
</li>
<li><p>Configure downloads directory. Goto: <code>Downloads</code> &gt; <code>Downloads</code>.</p>
<blockquote>
<p>Note</p>
<ul>
<li>Make sure to configure both, <code>Downloads Directory</code> and <code>Unfinished Downloads Directory</code>.</li>
</ul>
</blockquote>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726335824323/92bae8a1-f62e-4cf1-b507-eaec5b362edf.jpeg" alt class="image--center mx-auto" /></p>
</li>
<li><p>Now click <code>Ok</code>.</p>
</li>
<li><p>Press the following key combination for the quick connect dialog box, according to your platform.</p>
<ul>
<li><p><code>Windows</code>: <strong>ctrl+n</strong></p>
</li>
<li><p><code>Linux</code>: <strong>ctrl+n</strong></p>
</li>
<li><p><code>macOS</code>: <strong>cmd+n</strong></p>
</li>
</ul>
</li>
<li><p>Enter the domain for MetaHub - <code>dc.metakgp.org</code> - to connect. Press <code>Ok</code>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1696227283202/fef0c0a9-705a-472c-8c96-e99d3339d406.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p><strong><mark>Warning</mark></strong></p>
<p>Do not use any IP. We have deprecated the usage of IPs and have migrated to the above mentioned domain.</p>
</blockquote>
</li>
<li><p>You should now be connected to the hub and if the fonts are set properly you should see something like this.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/223134018-c1f1c1f2-4272-4611-bc39-d62fe42cbd2a.png" alt="image" /></p>
<blockquote>
<p>NOTE:</p>
<ul>
<li><p><em>Just focus on the Prompts and that you are connected, your exact GUI will be different since I customised mine to not bleed my eyes.</em></p>
</li>
<li><p>To properly render (display) the "<strong>METAHUB</strong>" text as shown in the screenshot above follow the steps in the "<a target="_blank" href="https://proffapt.hashnode.dev/dc-client-setup#heading-rendering-motd">Rendering MOTD</a>" section.</p>
</li>
</ul>
</blockquote>
</li>
<li><p>You <em>may</em> encounter one of these common issues::</p>
<ul>
<li><p>Connected to the hub but unable to browse or download files.</p>
</li>
<li><p>Nick is already taken by another user.</p>
</li>
</ul>
</li>
</ol>
<p>    These issues are well explained with their solutions in the <a target="_blank" href="https://proffapt.hashnode.dev/dc-client-setup#heading-some-common-issues"><strong>Some Common Issues</strong></a> section. If you run into any other problems not documented here, please fill out the <a target="_blank" href="https://bit.ly/dc-issue"><strong>MetaHub Issue Tracker Form</strong></a> to report them. We're always working to improve the user experience and your feedback helps.</p>
<h2 id="heading-how-to-share-content">How to share content</h2>
<p>It's not enough to just download content - <strong>to bring back the DC culture</strong> - everyone is encouraged to share their collection as well.<br />To share folder(s) follow the following steps:</p>
<blockquote>
<p><strong><mark>Warning</mark></strong><br />It is a must to mirror (share) whatever you download, so you at least have to share the folder in which you download content from the HUB.</p>
</blockquote>
<ol>
<li><p>Open Eiskalt DC++ &amp; press the following keyboard shortcut to open its <strong>preferences</strong> window according to your platform</p>
<ul>
<li><p><code>Windows</code>: <strong>ctrl+o</strong></p>
</li>
<li><p><code>Linux</code>: <strong>ctrl+o</strong></p>
</li>
<li><p><code>macOS</code>: <strong>cmd+,</strong></p>
</li>
</ul>
</li>
<li><p>Now navigate to: <code>Sharing</code> &gt; <code>Basic</code> and toggle off the <code>View share in simple mode</code>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1679988433022/d34d5d13-3868-4901-8456-8b2c122edd6a.png" alt /></p>
</li>
<li><p>Now select the folder(s) where you keep downloaded content from the HUB. Keep the following things in mind:</p>
<ul>
<li><p>You can choose other folders as well, but choosing your download folder is essential to mirror your downloaded files.</p>
</li>
<li><p>You will need to click on <code>down arrows</code> to expand folders.</p>
</li>
<li><p>You might need to <strong>increase the width of the Name column</strong> to be able to see the names of the folders.</p>
</li>
</ul>
</li>
</ol>
<h2 id="heading-how-to-download-content">How to download content</h2>
<ol>
<li><p>To browse the files of a specific user, simply <code>Right-Click</code> on their profile and select the <code>Browse Files</code> option.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/223689275-e472a0d7-72ab-437e-be6f-402184bacd47.png" alt="image" /></p>
</li>
<li><p>Now you will be taken to the file explorer for the user's shared directory. Use the <code>Down Arrow</code> to expand the folders of your interest.</p>
</li>
<li><p>Now <code>Right-click</code> on the file you want to download and select <code>Download</code> or <code>Download to</code> (for a list of frequently used folders to download).</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/223690165-a7b398a7-ebd9-4ea6-ae22-3cc71ba4de62.png" alt="image" /></p>
</li>
<li><p>Now enjoy tremendously fast download speed and the file will be downloaded.</p>
<blockquote>
<p><strong>Note</strong><br />Don't forget to <a target="_blank" href="https://proffapt.hashnode.dev/dc-client-setup#heading-how-to-share-content">mirror the content you download</a>.</p>
</blockquote>
</li>
</ol>
<h2 id="heading-some-common-issues">Some common issues</h2>
<ol>
<li><p>You are connected to the hub and can also see the list of all connected users but when you try to browse the files for any user it keeps on connecting and finally, nothing happens. This might be a result of multiple configurational and system issues. To fix them you are recommended to follow the below practices:</p>
<ul>
<li><p>Allow all incoming connections for the client through your firewall - recommended for all platforms.</p>
</li>
<li><p>Changing the mode of your connection.<br />  To do so, Goto: <code>Preferences</code> &gt; <code>Connection</code> &gt; <code>Connection</code>, explore the available options and select the one that works for you.</p>
<p>  <img src="https://user-images.githubusercontent.com/86282911/223679604-5e05c4df-e0e0-4cfb-b6c1-e4c688e3ebc7.png" alt="image" /></p>
</li>
<li><p>Make sure you meet the minimum sharing requirement to be able to browse and download content from other users.<br />  Refer to the rules for the exact number. At the time of writing this documentation, the rules are:</p>
<p>  <img src="https://user-images.githubusercontent.com/86282911/223686051-32cd9e9c-adfd-4911-ab60-0d668f6bdd41.png" alt="image" /></p>
</li>
</ul>
</li>
<li><p>Nick was already taken by another user, even if your Nick was unique.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/223686661-ff00172a-2da2-47b2-8836-b77c4671d553.png" alt="image" /></p>
<p> This happens when the connection with the hub is dropped abruptly. It can be due to multiple reasons:</p>
<ul>
<li><p>The network was turned off abruptly.</p>
</li>
<li><p>The network was changed abruptly.</p>
</li>
</ul>
</li>
</ol>
<p>    Due to this, the connection packets remain alive and it appears to the hub that you are still connected, i.e., your previous connection wasn't closed properly.</p>
<p>    <code>FIX:</code> The only way to fix it is to wait for at max 15 minutes so that the packets expire automatically and then you can connect to the hub normally. Usually, they expire quite early but sometimes might take time so better have a walk outside your room, get some fresh air then try to connect to the hub again.</p>
<h2 id="heading-rendering-motd">Rendering MOTD</h2>
<p>This is completely an optional step based on personal preference. If you want to render the <em>ASCII art</em> for <code>METAHUB</code> to be rendered properly, as shown in the image below, you will need a mono font.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1695802384063/8bb6c1e6-aba1-432c-aabd-a0562112fcba.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-installing-mono-font">Installing mono font</h3>
<p>However there are many options available, for the sake of documenting the exact process, we will be installing <code>hack-nerd-font</code> which comes with a <em>mono</em> version of itself. To install it on your system of preference refer to the sections below.</p>
<h4 id="heading-on-windows">On Windows</h4>
<ol>
<li><p>Download a <a target="_blank" href="http://nerdfonts.com/">Nerd Font</a> - recommended <a target="_blank" href="https://github.com/ryanoasis/nerd-fonts/releases/download/v2.3.3/Hack.zip">Hack Nerd Font</a>.</p>
</li>
<li><p>Extract the downloaded zip file.</p>
</li>
<li><p>To install all of them simultaneously, you first need to select them all. To do so, click the first font on the list, hold the <code>Shift key</code>, and click the last font. You can also drag to select them if you want. As long as they’re all selected, it doesn’t matter how you do it. It should look like this.:</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1679988099391/72e81a36-d3ff-43f0-941f-6c5c7edbf71c.png" alt /></p>
</li>
<li><p>Next, <code>right-click</code> on the name of any of the font files. If you have multiple user accounts on your PC, you might want to click <code>Install for All Users</code>. Otherwise, just click <code>Install</code>.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/223693099-98f7f279-4540-470a-8d17-0bbe3a219f07.png" alt="image" /></p>
</li>
<li><p>If you already installed some of the fonts, you’ll get a popup warning you about it. Click <code>Yes</code> and let it proceed.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/223693473-433f1958-ffe4-4768-8c11-9f54fefd06a6.png" alt="image" /></p>
</li>
<li><p>Another window will indicate the progress of the installation. Once it disappears, your fonts are installed and ready for use.</p>
</li>
</ol>
<h4 id="heading-on-linux">On Linux</h4>
<ol>
<li><p>Download a <a target="_blank" href="http://nerdfonts.com/">Nerd Font</a> - recommended <a target="_blank" href="https://github.com/ryanoasis/nerd-fonts/releases/download/v2.3.3/Hack.zip">Hack Nerd Font</a>.</p>
</li>
<li><p>Unzip and copy to <code>~/.fonts</code>.</p>
</li>
<li><p>Run the following command to manually rebuild the font cache.</p>
<p> Bash</p>
<pre><code class="lang-markdown"> fc-cache -fv
</code></pre>
</li>
</ol>
<h4 id="heading-on-macos">On macOS</h4>
<ul>
<li><p><a target="_blank" href="https://brew.sh/">Install Homebrew</a> if not already installed.</p>
</li>
<li><p>Use the following command to install the <code>hack-nerd-font</code></p>
<p>  Bash</p>
<pre><code class="lang-markdown">  brew install font-hack-nerd-font
</code></pre>
</li>
</ul>
<h3 id="heading-changing-fonts-on-your-client">Changing fonts on your client</h3>
<p>Now that the fonts are installed on your system, follow the steps below to configure the client to use those fonts.</p>
<ol>
<li><p>Press the following keyboard shortcut to open its <strong>preferences</strong> window according to your platform.</p>
<ul>
<li><p><code>Windows</code>: <strong>ctrl+o</strong></p>
</li>
<li><p><code>Linux</code>: <strong>ctrl+o</strong></p>
</li>
<li><p><code>macOS</code>: <strong>cmd+,</strong></p>
</li>
</ul>
</li>
<li><p>Goto: <code>GUI</code> &gt; <code>Fonts</code>.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/223131317-2b5329b3-abda-48d3-b1bd-b0f531c4b841.png" alt="image" /></p>
</li>
<li><p>Double-click on the currently set font's name.</p>
</li>
<li><p>A dialogue box will appear, search for <code>mono</code> keyword.</p>
</li>
<li><p>Then select the mono-font you wish to use.</p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Setup OpenVPN Server on Azure]]></title><description><![CDATA[Step 1: Get Microsoft Azure

Get the GitHub Student Developer Pack.

Now navigate to the benefits page and apply a filter for cloud or just click here. Follow the steps to sign up for Azure, and you will receive $100 credits.



NoteAlthough, we coul...]]></description><link>https://proffapt.in/openvpn-server-on-azure</link><guid isPermaLink="true">https://proffapt.in/openvpn-server-on-azure</guid><category><![CDATA[OpenVPN]]></category><category><![CDATA[Azure]]></category><category><![CDATA[iitkgp]]></category><category><![CDATA[openvpn-on-azure]]></category><category><![CDATA[vpn]]></category><dc:creator><![CDATA[Arpit Bhardwaj]]></dc:creator><pubDate>Mon, 06 Mar 2023 08:23:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1714185485394/1698d45d-3015-4f7c-bb5a-33c8d10e2e7f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-step-1-get-microsoft-azure">Step 1: Get Microsoft Azure</h3>
<ul>
<li><p>Get the <a target="_blank" href="https://docs.github.com/en/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-students/apply-to-github-global-campus-as-a-student#applying-to-github-global-campus">GitHub Student Developer Pack</a>.</p>
</li>
<li><p>Now navigate to the benefits page and apply a filter for <code>cloud</code> or just <a target="_blank" href="https://education.github.com/pack/offers?sort=popularity&amp;tag=Cloud">click here</a>. Follow the steps to sign up for Azure, and you will receive <strong>$100 credits</strong>.</p>
</li>
</ul>
<blockquote>
<p><strong>Note</strong><br />Although, we could have done it <a target="_blank" href="https://signup.azure.com/studentverification?offerType=1&amp;correlationId=bd79ce7e43aa48319516e398c31f47bd">directly using Institute ID on Microsoft Azure</a>. But the afore-mentioned method exposes you to various other possibilities which you might have not even thought of. We chose Microsoft Azure here, if you want you can also choose DigitalOcean or any other cloud platform of your preference.</p>
</blockquote>
<h3 id="heading-step-2-create-an-ec2-instance">Step 2: Create an EC2 instance</h3>
<ul>
<li><p>Goto <a target="_blank" href="https://portal.azure.com/#home">Azure portal</a></p>
</li>
<li><p>Click on the <code>hamburger</code> menu &gt; <code>Create a resource</code> &gt; <code>Compute</code> &gt; <code>Ubuntu Server 22.04 LTS</code>. Fill in the necessary details in the <code>Basics</code> section.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680271650791/addfaf4e-622d-4c7b-9f6c-f177769afa38.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Create a new <code>Resource Group</code> &amp; give your virtual machine a name.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680271728857/7c797005-c5b5-4766-a1b6-f67938b6bfcd.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Now about <strong>region</strong> &amp; <strong>disk size</strong>.<br />  <strong>First, select the cheapest size and then select the region from the available options</strong>. A standard <code>B1</code> size is going to be good enough and will last around 11 months using free credits. Now choose the closest region where the said size is available, which in our case will be <code>South-East Asia</code>. A bigger (aka more costly) size would probably be available in Indian regions. Follow the steps shown in the images below.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680271871813/c2cb268d-0d8d-4406-9bf9-5c6332802bcb.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680271936925/f04ad0da-3903-4f00-af64-72840d1c0dd3.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680271954074/3270ffe0-0096-48d2-b43b-fd7567ece04b.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680272002561/dd234d95-d124-4e67-85ae-1c7c2cc9f8bf.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p>Select <code>Password</code> as the Authentication Method and fill in the required fields.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680273763667/36c8d632-affb-4c16-8f63-f6f8552a3e42.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p><strong>Note</strong><br />Though using a password as the authentication method is easy to follow, it is equally less secure. It is recommended to use <code>ssh</code> as the authentication method. It is indeed tougher, to follow the ssh path that's why it is not mentioned in this blog post, you can refer to my gist for the <a target="_blank" href="https://gist.github.com/proffapt/15cacf6c0abdd5509e5c1b7d2c7a49ce">Steps to set up the server via SSH public keys</a>.</p>
</blockquote>
</li>
<li><p>Choose <strong>HTTPS(443)</strong> in <code>Select inbound ports</code>.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680273727043/478431f4-c04d-42e0-92d3-1d0e93bcc768.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Leave the rest of the settings as default in other sections and click <code>Review+Create</code>.</p>
</li>
<li><p>Now, wait for the VM to be deployed. Once the VM is deployed</p>
<ul>
<li><p>Click <code>Goto Resource</code>.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680272216678/dcd76058-1150-4a76-94ff-c688f396f4da.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Click <code>Configure</code> the <em>DNS</em> option under <code>Networking</code>.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680272244269/fa996e42-d53e-40a4-bff4-e51267b945ca.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Type in any DNS name like your username in the <code>DNS name label</code> field and press <code>Save</code>.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680272299737/75b9b2e5-d053-4bb2-8739-b0652fcb7fdc.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-step-3-ssh-into-the-remote-server">Step 3: SSH into the Remote Server</h3>
<blockquote>
<p><strong><mark>Warning</mark></strong><br />For this step, you will need to switch to a network other than that of campus as <strong>PORT 22(default port for SSH) IS BLOCKED ON THE CAMPUS NETWORK.</strong></p>
</blockquote>
<p>SSH steps are drastically different for a Windows client &amp; a Linux/MacOS (<code>*nix</code>) client.<br />Refer to the following section to read about the steps for the client of your interest.</p>
<h4 id="heading-sshing-via-a-windows-machine">SSHing via a Windows machine</h4>
<ul>
<li><p>To make sure your PC has <code>SSH</code> client and server both installed, run the following command on <a target="_blank" href="https://www.makeuseof.com/tag/a-beginners-guide-to-the-windows-command-line/">Command Prompt</a> as <strong>Administrator</strong>.</p>
<pre><code class="lang-ps">  <span class="hljs-built_in">Add-WindowsCapability</span> <span class="hljs-literal">-Online</span> <span class="hljs-literal">-Name</span> OpenSSH.Client~~~~<span class="hljs-number">0.0</span>.<span class="hljs-number">1.0</span>
  <span class="hljs-built_in">Add-WindowsCapability</span> <span class="hljs-literal">-Online</span> <span class="hljs-literal">-Name</span> OpenSSH.Server~~~~<span class="hljs-number">0.0</span>.<span class="hljs-number">1.0</span>
</code></pre>
<ul>
<li>Windows also has <a target="_blank" href="https://en.wikipedia.org/wiki/PowerShell">Powershell</a> and the new <a target="_blank" href="https://en.wikipedia.org/wiki/Windows_Terminal">Windows Terminal</a> which combines all the different <a target="_blank" href="https://en.wikipedia.org/wiki/Shell_(computing)">shell environments</a>. So, you can choose one from these as well, but it doesn't matter in this context.</li>
</ul>
</li>
<li><p>Now <code>ssh</code> into the remote server</p>
<pre><code class="lang-ps">  ssh user@host_address
</code></pre>
<blockquote>
<p><mark>Explaining the command</mark><br /><strong>user</strong>: Name of the user given while creating the virtual machine.</p>
<p><strong>host_address</strong>: Public IP address of the machine.</p>
</blockquote>
</li>
</ul>
<h4 id="heading-sshing-via-a-linux-or-macos-machine">SSHing via a Linux or MacOS machine</h4>
<ul>
<li><p>Execute the following command, then enter your password in the prompt.</p>
<pre><code class="lang-sh">  ssh user@host_address
</code></pre>
<blockquote>
<p><mark>Explaining the command</mark></p>
<p><strong>user</strong>: Name of the user given while creating the virtual machine.</p>
<p><strong>host_address</strong>: Public IP address of the machine.</p>
</blockquote>
</li>
</ul>
<h3 id="heading-step-4-setup-openvpn-access-server">Step 4: Setup OpenVPN Access Server</h3>
<p>After we have ssh'ed into the machine, we have to set up the OpenVPN Access Server.</p>
<ul>
<li><p>Before that, it's a good practice to update and upgrade your system via</p>
<pre><code class="lang-sh">  sudo apt update
  sudo apt upgrade
</code></pre>
</li>
<li><p>Execute the following command</p>
<pre><code class="lang-sh">  wget https://git.io/vpn -O openvpn-install.sh &amp;&amp; sudo bash openvpn-install.sh
</code></pre>
<p>  It will download and execute a script that automates OpenVPN server configuration.</p>
</li>
<li><p>Keep in mind to update the following options during the setup process &amp; leave the rest in their default state:</p>
<ul>
<li><p><code>IP address</code>: Your <em>Public IP</em> for the azure machine.</p>
</li>
<li><p><code>UDP or TCP</code>: Enter 2 for <strong>TCP</strong> as <strong>UDP ports are blocked on the campus network</strong>.</p>
</li>
<li><p><code>PORT</code>: <strong>443</strong></p>
</li>
<li><p><code>DNS RESOLVER</code>: Enter 4 for <strong>OpenDNS</strong>.</p>
</li>
<li><p><code>CLIENT</code>: One configuration for one client/device. Name it like pc, mobile, etc.</p>
</li>
</ul>
</li>
<li><p>The <code>.ovpn</code> file will be stored inside <code>/root</code> directory, copy it into your user's home directory using the following command</p>
<pre><code class="lang-sh">  sudo cp /root/client_name.ovpn ~/
</code></pre>
<blockquote>
<p><mark>Explaining the command</mark><br /><strong>client_name</strong>: Name of the client you specified in the script.</p>
</blockquote>
</li>
</ul>
<blockquote>
<p><strong>Note</strong><br />Run the same script to generate new clients (you will need a unique client for each device that’s going to be connected to the VPN), i.e., <strong>one</strong><code>.ovpn</code><strong>file and one connection</strong>.</p>
</blockquote>
<h4 id="heading-configuration-for-gaming">Configuration for Gaming</h4>
<p>Use the <code>TCP_NODELAY</code> option if you are planning to use this VPN for gaming. Execute the following command on the remote VPN server</p>
<pre><code class="lang-sh">sudo <span class="hljs-built_in">echo</span> <span class="hljs-string">"tcp-nodelay"</span> | sudo tee -a /etc/openvpn/server.conf
</code></pre>
<p>Now restart the OpenVPN service using</p>
<pre><code class="lang-sh">sudo systemctl restart openvpn.service &amp;&amp; sudo systemctl restart openvpn-server@server.service
</code></pre>
<h3 id="heading-step-5-download-ovpn-files">Step 5: Download ovpn files</h3>
<p>Now we have to transfer the <code>.ovpn</code> files generated on the remote server to our local machine. The steps to achieve this are different for <code>*nix</code> (Linux or MacOS) &amp; Windows, refer to the following sections to read about the steps for your platform of interest.</p>
<h4 id="heading-windows">Windows</h4>
<ul>
<li><p><a target="_blank" href="https://winscp.net/eng/download.php">Download WinSCP</a> a GUI implementation for <code>SCP (secure copy)</code> on windows. Open it.</p>
</li>
<li><p>Click on <code>New Session</code>.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680272478011/6a6b485b-0538-4c62-b454-b3f5c732665c.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Enter the following login configuration</p>
<ul>
<li><p><code>File Protocol</code>: <em>SCP</em>.</p>
</li>
<li><p><code>Host Name</code>: Your remote machine's Public IP address.</p>
</li>
<li><p><code>Port</code>: 22 (Default).</p>
</li>
<li><p><code>Username</code>: <em>The username</em> which you set for the remote machine.</p>
</li>
<li><p><code>Password</code>: <em>The password</em> which you set for the remote machine.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680273219634/8a623433-423e-4736-8dd4-32955a054631.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Press <code>Login</code> then <code>YES</code>.</p>
</li>
</ul>
</li>
<li><p>Select and download all the <code>.ovpn</code> files you created which will be shown on the interface.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680272567975/55073995-9663-4b99-bb87-0e51ca065f28.png" alt /></p>
</li>
<li><p>Now shut down the <code>WinSCP session</code></p>
</li>
</ul>
<h4 id="heading-linux-amp-macos">Linux &amp; MacOS</h4>
<p>Run the following command, the key will be downloaded in the <code>Downloads</code> directory after you enter the correct password set by you earlier.</p>
<pre><code class="lang-sh">scp user@host_address:client_name.ovpn ~/Downloads/
</code></pre>
<blockquote>
<p><mark>Explaining the command</mark><br /><strong>user</strong>: Name of the user given while creating the virtual machine.<br /><strong>host_address</strong>: Public IP address of the machine.<br /><strong>client_name</strong>: Name of the client you specified in the script.</p>
</blockquote>
<p>To <em>start/stop/check</em> the status of the OpenVPN server use <code>systemctl</code>:</p>
<pre><code class="lang-sh">sudo systemctl start openvpn@server.service
sudo systemctl stop openvpn@server.service
sudo systemctl status openvpn@server.service
</code></pre>
<blockquote>
<p><strong>For Android</strong>:<br />Follow either of the aforementioned methods and then transfer the downloaded <code>.ovpn</code> file to your Android device via Telegram/Bluetooth/Mail or whatever to your android device.</p>
</blockquote>
<h3 id="heading-step-6-connecting-to-the-vpn-on-client-devices">Step 6: Connecting to the VPN on client devices</h3>
<h4 id="heading-android">Android</h4>
<p>Download the <a target="_blank" href="https://play.google.com/store/apps/details?id=net.openvpn.openvpn&amp;hl=en_IN&amp;gl=US">OpenVPN Connect</a> app from Play Store. Open the app and after going through the first screen, go to the <strong>Files</strong> tab, there import the <code>.ovpn</code> file, and connect.</p>
<h4 id="heading-linux-amp-macos-1">Linux &amp; macOS</h4>
<ul>
<li><p>Get <code>OpenVPN</code> Client.</p>
<ul>
<li><p><strong>Linux</strong></p>
<p>  In most of the distros, you can go to the network manager and import the <code>.ovpn</code> file. If not then install OpenVPN with <code>sudo apt install openvpn</code>.</p>
</li>
<li><p><strong>macOS</strong></p>
<p>  You can either download the <em>GUI tool,</em><a target="_blank" href="https://tunnelblick.net/downloads.html">tunnelblick</a> for importing the <code>.ovpn</code> file or download the <em>CLI tool</em> for OpenVPN via <a target="_blank" href="https://www.macports.org/install.php">MacPorts</a> or <a target="_blank" href="https://brew.sh/">HomeBrew</a> using <code>sudo ports install openvpn</code> and <code>brew install openvpn</code> respectively.</p>
</li>
</ul>
</li>
<li><p>Start the client with your configuration file</p>
<pre><code class="lang-bash">  sudo openvpn --config /path/to/config.ovpn
</code></pre>
<blockquote>
<p><mark>Explaining the command</mark><br /><strong>/path/to/config.ovpn</strong>: It is the path to the .pem file which you downloaded just before deploying the VM.</p>
</blockquote>
</li>
</ul>
<h4 id="heading-windows-1">Windows</h4>
<p>Download the official <a target="_blank" href="https://openvpn.net/client-connect-vpn-for-windows/">OpenVPN Connect client for Windows</a>, import the <code>.ovpn</code> file, and toggle it ON to finally connect - <a target="_blank" href="https://www.youtube.com/watch?v=P2SroQ_pzPU">video guide</a>.</p>
<h3 id="heading-step-7-budget-control">Step 7: Budget Control</h3>
<blockquote>
<p><strong><mark>Warning</mark></strong><br />This is a very important step, to ensure the long-term usability of your credits.</p>
</blockquote>
<ul>
<li><p>Use only one instance.</p>
</li>
<li><p>Bandwidth is <strong><em>free up to $100 credits</em></strong>, so it's better not to waste resources on the VPN.</p>
</li>
</ul>
<blockquote>
<p><strong>Note</strong><br />If in any case, you have to stop an instance forcibly, do it; to be on the safer side.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Guide To Set Up C/C++ Dev Environment]]></title><description><![CDATA[How To Read This Guide
This guide is meant for beginners as well as readers with basic knowledge. Most of the technical terms have been explained or have been linked to a webpage with more information.
If you still don't understand a term, just Googl...]]></description><link>https://proffapt.in/setup-c-dev-env</link><guid isPermaLink="true">https://proffapt.in/setup-c-dev-env</guid><category><![CDATA[C]]></category><category><![CDATA[cpp]]></category><category><![CDATA[compiler]]></category><category><![CDATA[dev environment]]></category><category><![CDATA[c-compiler]]></category><dc:creator><![CDATA[Arpit Bhardwaj]]></dc:creator><pubDate>Thu, 10 Nov 2022 11:29:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1680287433455/cc0bf75f-0b4d-4479-8560-e95d36469d1e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-how-to-read-this-guide">How To Read This Guide</h3>
<p>This guide is meant for beginners as well as readers with basic knowledge. Most of the technical terms have been explained or have been linked to a webpage with more information.</p>
<p>If you still don't understand a term, just Google it :)</p>
<p>This guide explains how to install as well as use a C/C++ <a target="_blank" href="https://en.wikipedia.org/wiki/Compiler">compiler</a> to run your code. The compiler used here is <a target="_blank" href="https://en.wikipedia.org/wiki/GNU_Compiler_Collection">GCC</a>.</p>
<p>To write and edit code, any text editor such as Notepad can be used, although, a <a target="_blank" href="https://en.wikipedia.org/wiki/Source-code_editor">code editor</a> is recommended because of syntax highlighting, code completion, and much more. Here, we will be setting up a popular cross-platform code editor - <a target="_blank" href="https://code.visualstudio.com/">Visual Studio Code</a>.</p>
<blockquote>
<p>This guide has separate sections for different operating systems. Use the <strong>Table of contents</strong> to jump to the relevant section corresponding to the operating system of your interest.</p>
</blockquote>
<p><strong>NOTE</strong>: You are supposed to enter and run a command in a <em>terminal</em> whenever you are given one, in this blog.</p>
<p>A <a target="_blank" href="https://en.wikipedia.org/wiki/Terminal_emulator">Terminal</a> generally refers to:</p>
<ul>
<li><p><a target="_blank" href="https://www.makeuseof.com/tag/a-beginners-guide-to-the-windows-command-line/">Command Prompt</a> on Windows. Windows also has <a target="_blank" href="https://en.wikipedia.org/wiki/PowerShell">Powershell</a> and the new <a target="_blank" href="https://en.wikipedia.org/wiki/Windows_Terminal">Windows Terminal</a> which combines all the different <a target="_blank" href="https://en.wikipedia.org/wiki/Shell_(computing)">shell environments</a>.</p>
</li>
<li><p>A Terminal on <a target="_blank" href="https://support.apple.com/guide/terminal/open-or-quit-terminal-apd5265185d-f365-44cb-8b09-71a064a42125/mac#:~:text=On%20your%20Mac%2C%20do%20one,%2C%20then%20double%2Dclick%20Terminal.">MacOS</a> and <a target="_blank" href="https://www.geeksforgeeks.org/how-to-open-terminal-in-linux/">Linux</a>.</p>
</li>
</ul>
<hr />
<h3 id="heading-windows">Windows</h3>
<p>Here, the native Windows version of <a target="_blank" href="https://en.wikipedia.org/wiki/GNU_Compiler_Collection">GCC</a> - called <a target="_blank" href="https://en.wikipedia.org/wiki/MinGW">MinGW</a> - will be installed.</p>
<p>There are quite a few methods to achieve this. We will be looking into two of them - one being the most widely popular; using the MinGW installer directly from its website - other being the simplest; using the <a target="_blank" href="https://chocolatey.org/">Chocolatey package manager</a>.</p>
<blockquote>
<p>Use the <strong>Table of contents</strong> to jump to the method of your choice.</p>
</blockquote>
<h4 id="heading-using-mingw-installer">Using MinGW installer</h4>
<ol>
<li><p>Download the installer file <code>mingw-get-setup.exe</code> from <a target="_blank" href="https://osdn.net/projects/mingw/releases/">https://osdn.net/projects/mingw/releases/</a>.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/199251856-1bd8f2ea-c745-4acc-987e-dc7114d13a95.png" alt="image" /></p>
</li>
<li><p>Run the <code>.exe</code> file. A window titled "MinGW Installation Manager" will open in a few minutes. In the <strong>Basic Setup</strong> tab, right-click the option named <code>mingw32-gcc-g++-bin</code> and click on <code>Mark for Install</code>.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/199252340-1395bea4-481b-4c62-b561-0b3cee96d18c.png" alt="image" /></p>
</li>
<li><p>Then in the top left corner click on <code>Installation &gt; Apply Changes</code>. Continue through the rest of the installation process while keeping all settings as default. And then, you wait...</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/199253213-bc0e83c9-135d-4878-a614-72b21f68eb04.png" alt="image" /></p>
</li>
</ol>
<p>GCC is installed! Now we have to make it accessible by adding it to the <a target="_blank" href="https://en.wikipedia.org/wiki/PATH_(variable)">PATH</a>:</p>
<ol>
<li><p>Go to <code>Windows Explorer &gt; Right-click on "This PC" &gt; Properties &gt; Advanced system settings &gt; Environment Variables</code>.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/199253617-cad0a913-abb0-4aa9-820e-f733ee5e0d58.png" alt="image" /></p>
</li>
<li><p>At the bottom <strong>System Variables</strong> panel, look for a Variable named <strong>PATH</strong> and <strong>double-click</strong> on it.</p>
</li>
<li><p>Click the <strong>New</strong> button to add a new path to Windows PATH.</p>
</li>
<li><p>Enter the Path of the folder to which you installed the GCC (by default, it's <code>C:\MinGW\bin</code>)</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/199254777-a4f0d1b3-3de6-4b69-afd4-06e7fac1835d.png" alt="image" /></p>
</li>
<li><p>Press OK until you are out of the menus.</p>
</li>
</ol>
<p>You should now have the GCC installed and ready to be used! To verify, type <code>gcc --version</code> in <a target="_blank" href="https://www.makeuseof.com/tag/a-beginners-guide-to-the-windows-command-line/">Command Prompt</a> and press <code>Enter</code>; if you get an output stating its version, then it was successfully installed.</p>
<p><img src="https://user-images.githubusercontent.com/86282911/199273896-79ac8bef-0194-4721-a2ea-222a783708d1.png" alt="image" /></p>
<h4 id="heading-the-easier-way-via-chocolatey">The easier way (via chocolatey)</h4>
<p>Chocolatey is a package manager for windows that makes installing applications a lot easier and more automatable. As opposed to the long process we went through in the above way, via chocolatey the entire process of installing chocolatey can be reduced to just 3 commands - executed in an <a target="_blank" href="https://learn.microsoft.com/en-us/powershell/scripting/windows-powershell/starting-windows-powershell?view=powershell-7.2">Administrator Powershell</a>:</p>
<ol>
<li><p>Install chocolatey with the instructions from their website: <a target="_blank" href="https://chocolatey.org/install">https://chocolatey.org/install</a></p>
<ul>
<li><p>Run <code>Get-ExecutionPolicy</code> in an administrator PowerShell. If it returns <strong>Restricted</strong>, then run <code>Set-ExecutionPolicy AllSigned</code>.</p>
</li>
<li><p>Now run:</p>
<pre><code class="lang-powershell">  <span class="hljs-built_in">Set-ExecutionPolicy</span> Bypass <span class="hljs-literal">-Scope</span> <span class="hljs-keyword">Process</span> <span class="hljs-literal">-Force</span>; [<span class="hljs-type">System.Net.ServicePointManager</span>]::SecurityProtocol = [<span class="hljs-type">System.Net.ServicePointManager</span>]::SecurityProtocol <span class="hljs-operator">-bor</span> <span class="hljs-number">3072</span>; <span class="hljs-built_in">iex</span> ((<span class="hljs-built_in">New-Object</span> System.Net.WebClient).DownloadString(<span class="hljs-string">'https://community.chocolatey.org/install.ps1'</span>))
</code></pre>
<p>  and wait for the installation of chocolatey to be complete.</p>
</li>
</ul>
</li>
<li><p>Close and reopen the admin PowerShell session.</p>
</li>
<li><p>Run <code>choco install mingw</code> and type <code>A</code> to confirm the installation.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/199414192-5f64e542-5925-4e39-b5e0-fba3b0b4cf0f.png" alt="image" /></p>
<p> You should see this if it succeeds</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/199414239-f1f93354-2f6f-491e-b17b-69b473664751.png" alt="image" /></p>
</li>
<li><p>Now run <code>gcc --version</code> to verify that it has been installed properly.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/199273859-da553d60-59ae-49c6-9539-e9f305675c47.png" alt="image" /></p>
</li>
</ol>
<hr />
<h3 id="heading-linux">Linux</h3>
<p>Most Linux <a target="_blank" href="https://en.wikipedia.org/wiki/Linux_distribution">distributions</a> will have <a target="_blank" href="https://en.wikipedia.org/wiki/GNU_Compiler_Collection">GCC</a> pre-installed. To check if it is installed:</p>
<pre><code class="lang-sh">gcc --version
</code></pre>
<p>If you get some output; NOT an error, then it is installed.</p>
<p>On <a target="_blank" href="https://en.wikipedia.org/wiki/Ubuntu">Ubuntu</a> and other Debian-based distributions: Run the following commands in the <a target="_blank" href="https://itsfoss.com/open-terminal-ubuntu/">Terminal</a>:</p>
<pre><code class="lang-sh">sudo apt update
sudo apt install build-essential
</code></pre>
<blockquote>
<p>For other distributions just install the package <code>build-essential</code> from your package manager.</p>
</blockquote>
<hr />
<h3 id="heading-macos">MacOS</h3>
<p>Though <a target="_blank" href="https://gcc.gnu.org/">GCC</a> "<em>appears</em>" to be installed in MacOS by default, it's <a target="_blank" href="https://clang.llvm.org/">clang</a> in disguise!</p>
<p><img src="https://user-images.githubusercontent.com/86282911/199031019-69c71f8d-80a0-4f8e-88bc-b37b17c1ed03.png" alt="image" /></p>
<h4 id="heading-why-bother">Why bother?</h4>
<p>For the audience one of the main drawbacks of using clang can be not able to use <code>&lt;bits/stdc++. h&gt;</code>, for your work. To know about the differences in-depth - refer to:</p>
<ul>
<li><p><a target="_blank" href="https://opensource.apple.com/source/clang/clang-23/clang/tools/clang/www/comparison.html#gcc">From the perspective of Apple; the developers of Clang</a></p>
</li>
<li><p><a target="_blank" href="https://www.incredibuild.com/blog/gcc-vs-clang-battle-of-the-behemoths">From a neutral perspective</a></p>
</li>
</ul>
<h4 id="heading-getting-gcc-installed-on-macos">Getting GCC installed on MacOS</h4>
<ol>
<li><p><a target="_blank" href="https://brew.sh/">Install homebrew</a> - ignore if already present.</p>
<ul>
<li><p>To check whether it is installed or not use the following command</p>
<pre><code class="lang-sh">  <span class="hljs-built_in">command</span> -v brew
</code></pre>
</li>
<li><p>If the output is like the following then brew is installed!</p>
<pre><code class="lang-sh">  ~&gt; <span class="hljs-built_in">command</span> -v brew
  /opt/homebrew/bin/brew
</code></pre>
</li>
</ul>
</li>
<li><p>Installing <a target="_blank" href="https://en.wikipedia.org/wiki/GNU_Compiler_Collection">GCC</a>.</p>
<pre><code class="lang-sh"> brew update
 brew upgrade
 brew install gcc
</code></pre>
<p> <img src="https://user-images.githubusercontent.com/86282911/199038436-d28a2e50-bd44-47a8-ab85-f550355f2cf7.png" alt="image" /></p>
<blockquote>
<p><strong><mark>Note</mark></strong><br />How GCC is installed as <code>gcc-12</code> and <code>gcc</code> is still clang.</p>
</blockquote>
</li>
<li><p>Now, you can either use <code>gcc-12</code> instead of <code>gcc</code>. But if you want <code>gcc</code> to invoke the GNU version of GCC instead of clang then execute the following lines in your terminal. Since MacOS comes with <code>zsh</code> by default we will be giving command for it only but if you have changed your shell then you must be equipped enough to do the following steps on that shell too - Right?</p>
<pre><code class="lang-sh"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"alias gcc=/opt/homebrew/bin/gcc-12"</span> &gt;&gt; ~/.zshrc
</code></pre>
<p> <img src="https://user-images.githubusercontent.com/86282911/199040895-7540e4c5-3725-437d-a0e5-00bd7093ba87.png" alt="image" /></p>
</li>
</ol>
<h4 id="heading-unprecendeted-issue-with-macos-13ventura-amp-gcc-12">Unprecendeted issue with MacOS 13(Ventura) &amp; gcc-12</h4>
<p><img src="https://user-images.githubusercontent.com/86282911/199091042-cd397043-5fa4-4745-8863-aa61fc1b107c.png" alt="image" /></p>
<p>If you are using MacOS Ventura and facing this issue - which means it's not fixed yet - no problem, then read the following issue/discussion to solve it!</p>
<ul>
<li><a target="_blank" href="https://github.com/Homebrew/homebrew-core/issues/113968">https://github.com/Homebrew/homebrew-core/issues/113968</a></li>
</ul>
<p><strong>Yes. You are going to read all of that, try to understand; try to fix. Repeat until you succeed!</strong> You have to start self-learning sometime later, so why not start now?</p>
<hr />
<h3 id="heading-compiling-the-code-manually">Compiling the code manually</h3>
<p>Follow these steps to compile your <code>.c</code> file manually.</p>
<ol>
<li><p>Create a file with the name <code>first_c_program.c</code> with the following content in it and then save it.</p>
<pre><code class="lang-c"> <span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;stdio.h&gt;</span></span>

 <span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span>{
     <span class="hljs-built_in">printf</span>(<span class="hljs-string">"Hello World!"</span>);

     <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
 }
</code></pre>
<blockquote>
<p>⚠️ Make sure you don't have spaces in your filename!</p>
</blockquote>
</li>
<li><p>Compile the program and execute it. You can replace <code>executable.exe</code> with <code>anything.anything</code>.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/199065183-33f31329-cb4d-48d9-9639-b9d65a1d7df7.png" alt="image" /></p>
<p> For Windows users, the command to run will be the following, the above works for Linux &amp; MacOS only.</p>
<pre><code class="lang-powershell"> .\filename.exe
</code></pre>
</li>
</ol>
<hr />
<h3 id="heading-setting-up-vs-code">Setting Up VS Code</h3>
<p><a target="_blank" href="https://code.visualstudio.com/">Visual Studio Code</a> is a free and open-source code editor that is customizable through <a target="_blank" href="https://marketplace.visualstudio.com/VSCode">extensions</a>. The <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools">C/C++ extension</a> can be used for compiling and running C/C++ code along with many more features.</p>
<h4 id="heading-installing">Installing</h4>
<ol>
<li><p>Open VS Code</p>
</li>
<li><p>Open the extensions panel using the button on the left or by pressing <code>Ctrl+Shift+X</code>.</p>
</li>
<li><p>Search and install the C/C++ extension.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/199403927-ff784c57-ccd4-4cd2-a07b-5e043f28c876.png" alt="image" /></p>
</li>
</ol>
<p>Once the extension is installed, creating or opening any <code>.c</code> or <code>.cpp</code> file will have syntax highlighting, code completion, and other features.</p>
<p><img src="https://user-images.githubusercontent.com/86282911/199404180-38e125a6-139a-42c8-bde2-b367d889440c.png" alt="image" /></p>
<h4 id="heading-compiling">Compiling</h4>
<p>To compile the code, open a file and run <code>Terminal &gt; Build Task</code> from the main menu or press <code>Ctrl + Shift + B</code>.</p>
<p><img src="https://user-images.githubusercontent.com/86282911/199404707-95b1ad79-b55c-474f-b68c-4e782513a675.png" alt="image" /></p>
<p><strong>On Windows</strong>: From the dropdown, select <code>C/C++: g++.exe build active file</code>(for C++ files) or <code>C/C++: gcc.exe build active file</code>(for C files).</p>
<p><strong>On Linux and MacOS</strong>: From the dropdown, select <code>C/C++: g++ build active file</code>(for C++ files) or <code>C/C++: gcc build active file</code>(for C files).</p>
<p><img src="https://user-images.githubusercontent.com/86282911/199405213-fba62742-82c2-4e00-9fe9-cc6de50c755e.png" alt="image" /></p>
<h4 id="heading-running">Running</h4>
<p>Once the code has been compiled, an <a target="_blank" href="https://en.wikipedia.org/wiki/Executable">executable</a> file will be created (with the same name as the code file). On Windows, this file will have a <code>.exe</code> extension on Windows and no extension on macOS and Linux.</p>
<p>To run the file:</p>
<ol>
<li><p>Open the VS Code <a target="_blank" href="https://code.visualstudio.com/docs/terminal/basics">integrated terminal</a> by pressing <strong>Ctrl + `</strong>.</p>
</li>
<li><p>Type:</p>
<ul>
<li><p><strong>On Windows</strong>: <code>.\</code> followed by the name of the executable file.</p>
</li>
<li><p><strong>On Linux and macOS</strong>: <code>./</code> followed by the name of the executable file.</p>
</li>
</ul>
</li>
</ol>
<p>    and press enter.</p>
<p>    <img src="https://user-images.githubusercontent.com/86282911/199405926-82af17c6-3cea-45d0-a4ef-d0f4329353de.png" alt="image" /></p>
<ol start="3">
<li>The output of the code will be visible in the terminal!</li>
</ol>
<h3 id="heading-code-runner">Code Runner</h3>
<p>Depending on your OS, we suggest different code runners. Hop into the section of your interest using the <strong>Table of Contents</strong>.</p>
<h4 id="heading-windows-11">Windows 11</h4>
<blockquote>
<p>You are suggested to use <a class="post-section-overview" href="#linux-and-macos">code-runner</a> using <a target="_blank" href="https://learn.microsoft.com/en-us/windows/wsl/install">WSL</a> instead of using this buggy <code>.run</code> extension which will be installed in this section ahead - which is shared just as an alternative that is relatively easy to set up.</p>
</blockquote>
<ol>
<li><p>Click on the extension's icon.</p>
</li>
<li><p>Search for <code>code runner</code>.</p>
</li>
<li><p>Install the extension shown in the screenshot below.</p>
<p> <img src="https://user-images.githubusercontent.com/86282911/201151700-83ac022a-0b7e-411a-9337-a8cf50f1f333.png" alt="image" class="image--center mx-auto" /></p>
</li>
</ol>
<h4 id="heading-linux-and-macos">Linux and MacOS</h4>
<p>For simplicity and to automate a few steps for a list of languages you can try <a target="_blank" href="https://github.com/proffapt/code-runner">code-runner</a>.</p>
<p><img src="https://user-images.githubusercontent.com/86282911/199088479-26cce835-c9bc-414d-9bc4-5de188145c92.png" alt="image" /></p>
<h5 id="heading-installation">Installation</h5>
<p>Copy and paste the following command in your terminal and wait for the final message - you are done!</p>
<pre><code class="lang-sh">curl https://raw.githubusercontent.com/proffapt/code-runner/main/setup.sh | /bin/bash
</code></pre>
<p><strong>Can help in the following ways:</strong></p>
<ul>
<li><p>Just one command to compile and execute the compiled file: <code>run filename.extension</code>.</p>
</li>
<li><p>Cleans compiled binary by default. So, that you don't submit binary instead of a <code>.c</code> file in your assignments.</p>
</li>
<li><p>Detects the version of python to be used ( accuracy of 95% ).</p>
</li>
<li><p>Can be used to create a file with <em>spaces</em> in its name ( vs-code runner extension lacks this )</p>
</li>
<li><p>Can be used to execute a file in a different directory ( vs-code runner extension lacks this; and limits some functionalities )</p>
</li>
<li><p>Inbuilt debugger support.</p>
</li>
<li><p>Integrates with <a target="_blank" href="https://neovim.io/">NeoVIM</a> and <a target="_blank" href="https://code.visualstudio.com/">VS-CODE</a> - steps in the documentation of the tool.</p>
</li>
</ul>
<blockquote>
<p>And many more, read the documentation and code for a thorough understanding at <a target="_blank" href="https://github.com/proffapt/code-runner">https://github.com/proffapt/code-runner</a>.</p>
</blockquote>
<hr />
<h3 id="heading-tips-and-further-reading">Tips and Further Reading</h3>
<h4 id="heading-do-not-guess-how-a-piece-of-software-might-work"><strong>DO NOT GUESS</strong> how a piece of software might work.</h4>
<p>When using a tool for the first time, you <strong>CAN'T</strong> and <strong>MUSTN'T</strong> guess how it works! Beginners often make this mistake and waste a lot of their time and of others too; without even searching or reading the docs!<br />Rather read the documentation/help for that program or just simply search for whatever you wanna achieve with that tool.</p>
<blockquote>
<p><a target="_blank" href="https://en.wikipedia.org/wiki/RTFM#:~:text=RTFM%20is%20an%20initialism%20and,forum%2C%20software%20documentation%20or%20FAQ.">Read The Fucking Manual - RTFM</a></p>
</blockquote>
<h4 id="heading-learn-to-search">Learn to search!</h4>
<p>This is a starting guide, so it was a bit explanatory. What we promote is <strong>self-learning</strong>. The basic idea behind it is very simple:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680285898037/44a048c4-518a-42f0-8eaa-abb16251224a.png" alt class="image--center mx-auto" /></p>
<ol>
<li><p>Read the error carefully and try to understand it.</p>
</li>
<li><p>Phrase your problem/goal.</p>
</li>
<li><p>Search it on your favourite search engine <strong>before asking in groups</strong>.</p>
</li>
<li><p>Either you will get the solution, if not then ask in groups/forums.</p>
</li>
</ol>
<hr />
<h3 id="heading-other-authors">Other Authors</h3>
<ul>
<li><p>Harsh Khandeparkar (<a target="_blank" href="https://github.com/harshkhandeparkar">@harshkhandeparkar</a>)</p>
</li>
<li><p>Jeffrey Samuel (<a target="_blank" href="https://github.com/Signor-Koala">@signor-koala</a>)</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[IIT KGP Networking & Communication]]></title><description><![CDATA[Introduction
The network on the campus of IIT Kharagpur has a speed of around 700Mbps via ethernet and 50-60Mbps via WiFi in rooms generally (tho in practice the speed is around 2-3 Mbps around the campus), well coming back to the topic. Even after a...]]></description><link>https://proffapt.in/iit-kgp-networking-and-communication</link><guid isPermaLink="true">https://proffapt.in/iit-kgp-networking-and-communication</guid><category><![CDATA[network]]></category><category><![CDATA[social media]]></category><category><![CDATA[iitkgp]]></category><category><![CDATA[iitkgpnetwork]]></category><category><![CDATA[network-documentation]]></category><dc:creator><![CDATA[Arpit Bhardwaj]]></dc:creator><pubDate>Thu, 22 Sep 2022 07:40:02 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1714185523342/16291d19-7489-4ce9-9f41-e7a17dcbfe13.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introduction">Introduction</h1>
<p>The network on the campus of IIT Kharagpur has a speed of around 700Mbps via ethernet and 50-60Mbps via WiFi in rooms generally (tho in practice the speed is around 2-3 Mbps around the campus), well coming back to the topic. Even after all of this, it's so frustrating to use with heavy restrictions imposed on it; with UDP packets being completely dropped, common social media platforms (like WhatsApp, telegram, discord, etc) blocked, some Linux and Unix (will be referring both as *<strong>nix</strong> from now) repositories being blocked resulting in errors while updating/installing a package and many more Quoting the administration's reply on being asked upon this:</p>
<blockquote>
<p>"This is as per the institute's administrative policy decision. Sorry for this inconvenience."<br />Computer &amp; Informatics Centre, IIT Kharagpur - Jul 28, 2022.</p>
</blockquote>
<p>For a detailed analysis of the network and possible solutions as a whole read <a target="_blank" href="https://github.com/sheharyaar/iit-kgp-network">IIT-KGP-NETWORK</a>, exhaustive documentation on the network by my senior <a target="_blank" href="https://github.com/sheharyaar">Mohammad Shehar Yaar Tausif</a>. In this blog, we will be focusing on the communication aspect only, what all are blocked, and the most efficient method to unblock them along with some alternative platforms to shift you and your friends too - not gonna promote Telegram, I promise (￢‿￢ ).</p>
<h1 id="heading-the-problem">The problem</h1>
<p>UDP traffic on standard ports is dropped; interfering with the internals of WhatsApp and maybe discord and telegram too; maybe it was intentional to keep us away from texting all day and focus on studies; not confirm tho but like all of this gonna stop us from using them somehow (￢‿￢ ).</p>
<h3 id="heading-status-of-various-social-media-platforms">Status of various social media platforms:</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Name</td><td>Status</td></tr>
</thead>
<tbody>
<tr>
<td>Telegram</td><td>❌</td></tr>
<tr>
<td>Whatsapp</td><td>❌</td></tr>
<tr>
<td>Discord</td><td>❌</td></tr>
<tr>
<td>Signal</td><td>❌</td></tr>
<tr>
<td>YouTube</td><td>⚠️</td></tr>
<tr>
<td>Slack</td><td>⚠️</td></tr>
<tr>
<td>Facebook</td><td>✅</td></tr>
<tr>
<td>Instagram</td><td>✅</td></tr>
<tr>
<td>LinkedIn</td><td>✅</td></tr>
<tr>
<td>Twitter</td><td>✅</td></tr>
<tr>
<td>Mastodon</td><td>✅</td></tr>
<tr>
<td><a target="_blank" href="http://Matrix.org">Matrix.org</a></td><td>✅</td></tr>
<tr>
<td>Reddit</td><td>✅</td></tr>
</tbody>
</table>
</div><p>⚠️ - Limitations imposed</p>
<ul>
<li><p><code>YouTube</code>: Restricted Mode - ON.</p>
</li>
<li><p><code>Slack</code>: Only the desktop client works.</p>
</li>
</ul>
<p>Though the restrictions are surprising; blocking WhatsApp on the one hand and leaving Facebook and Instagram on the other doesn't seem to fit into any ideology. Anyways let's discuss some possible solutions and their feasibility.</p>
<h1 id="heading-the-solution">The Solution</h1>
<h2 id="heading-1-using-vpns">1. Using VPNs</h2>
<p>Not this much easy, for obvious reasons; most of them are blocked as they rely on UDP, for details on which are blocked and which are not have a look at:</p>
<ul>
<li><p><a target="_blank" href="https://github.com/sheharyaar/iit-kgp-network/blob/main/README_general.md">Non-technical, straightforward documentation</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/sheharyaar/iit-kgp-network/blob/main/README_technical.md">Technical documentation</a></p>
</li>
</ul>
<p>This is the only possible way to use the following platforms:</p>
<ul>
<li><p>Whatsapp</p>
</li>
<li><p>Discord</p>
</li>
<li><p>Signal</p>
</li>
</ul>
<h2 id="heading-2-telegram-and-proxy">2. Telegram and Proxy</h2>
<p>This section is dedicated to telegram and its versatility - the way you will only be configuring proxy on telegram and using the network at its full potential everywhere else - with its proxy protocol namely MTProto; tho it provides other types of proxies too, for example, SOCKS5, HTTPS, etc. none of them will work except MTProto. It was developed solely for enhancing the user experience on weak network connections and now we can utilize it for accessing telegram API through the campus network. For technical details on how it works behind the scenes (as much it is available in the public domain) refer to:</p>
<ul>
<li><p><a target="_blank" href="https://core.telegram.org/mtproto">MTProto - Telegram core</a></p>
</li>
<li><p><a target="_blank" href="https://www.wikidata.org/wiki/Q18558947">MTProto - wikidata</a></p>
</li>
</ul>
<h3 id="heading-security-aspect">Security Aspect</h3>
<p>Read the below documentation thoroughly and then only comment on its security and decide whether to use it or not depending on your <a target="_blank" href="https://owasp.org/www-community/Threat_Modeling">threat model</a>.</p>
<ul>
<li><p><a target="_blank" href="https://www.cryptofails.com/post/70546720222/telegrams-cryptanalysis-contest">Telegram Cryptoanalysis Contest - Crypto Fails</a></p>
</li>
<li><p><a target="_blank" href="https://eprint.iacr.org/2015/1177.pdf">On the CCA (in)security of MTProto</a></p>
</li>
</ul>
<h3 id="heading-how-to-configure-a-proxy">How to configure a proxy?</h3>
<p>Refer to either of the sections below, depending on your currently available knowledge and comfortability with this type of technology.</p>
<h4 id="heading-have-no-idea-what-proxies-are">Have no idea what proxies are</h4>
<ol>
<li><p>Go to <a target="_blank" href="https://t.me/mtpro_xyz_bot">Proxy Monitoring Bot</a>.</p>
</li>
<li><p>Type <code>/mtproto</code> in the chat box.</p>
</li>
<li><p>Click on any of the proxies, given to you in reply; try a few and find the fastest one for you.</p>
</li>
<li><p>Select the check box <code>Enable Proxy</code> in the popup window; if any.</p>
</li>
<li><p>Select <code>Add Proxy</code> and done.</p>
</li>
</ol>
<blockquote>
<p>If still facing some issues, then manually add those proxies via the method described next.</p>
</blockquote>
<h4 id="heading-have-some-idea-what-proxies-are">Have some idea what proxies are</h4>
<p>If you know what proxies are, and you wanna configure your own custom one - be it self-hosted or whatever - follow these steps:</p>
<ol>
<li><p>Go to Settings -&gt; Data &amp; Storage -&gt; Use proxy (path being same on Android, MacOS, Windows, and Linux).</p>
</li>
<li><p>Choose your proxy from the resources below or use the details of your proxy.</p>
</li>
</ol>
<ul>
<li><p><a target="_blank" href="https://t.me/prxlst">https://t.me/prxlst</a></p>
</li>
<li><p><a target="_blank" href="https://proxypage.io/">https://proxypage.io/</a></p>
</li>
<li><p><a target="_blank" href="https://mtproto.co/">https://mtproto.co/</a></p>
</li>
</ul>
<ol>
<li><p>Select the proxy type as MTPROTO.</p>
</li>
<li><p>Add the IP for the proxy server in the field named <code>Server</code>.</p>
</li>
<li><p>Enter the port being used by the proxy in the field named <code>Port</code>.</p>
<blockquote>
<p>Enter <code>username</code> and <code>password</code>, if any.</p>
</blockquote>
</li>
</ol>
<h3 id="heading-observations">Observations</h3>
<p>It is reliable and secure (not cracked yet, all those attacks which you might have read from the docs in <a class="post-section-overview" href="#security-aspect">Security Aspect</a> are theoretical and have not been performed successfully yet).</p>
<ul>
<li><p>Direct calls are supported.</p>
</li>
<li><p>VC and group calls are not supported.</p>
</li>
</ul>
<h2 id="heading-3-using-web-versions">3. Using Web Versions</h2>
<ul>
<li><p>You can utilize the web versions of your desired platforms to unblock them via, browser-based proxies like <a target="_blank" href="https://chrome.google.com/webstore/detail/hoxx-vpn-proxy/nbcojefnccbanplpoffopkoepjmhgdgh">HoxxVPN</a>, <a target="_blank" href="https://chrome.google.com/webstore/detail/setupvpn-lifetime-free-vp/oofgbpoabipfcfjapgnbbjjaenockbdp">SetupVPN</a>, etc but these are <strong>unsafe</strong> to use.</p>
</li>
<li><p>One can also use the <a target="_blank" href="https://www.opera.com/?utm_campaign=%2307%20-%20IN%20-%20Search%20-%20EN%20-%20Branded%20-%202017">Opera Browser</a> which comes with an inbuilt proxy - see <a target="_blank" href="https://www.opera.com/features/free-vpn">Free VPN - Opera</a> - this is named as "VPN" by opera but, it is not, it's a fork of SurfEasy proxy which was bought by Opera (<a target="_blank" href="https://forums.opera.com/topic/35383/is-the-vpn-a-true-encrypted-vpn-or-just-a-proxy/4">source</a>). Not much usable for streaming since it is very very slow (comparable to the speed of TOR).</p>
</li>
<li><p>A much more "secure" option than the previous ones is <a target="_blank" href="https://support.brave.com/hc/en-us/articles/360018121491-What-is-a-Private-Window-with-Tor-Connectivity-">Tor via Brave Browser</a>, tho I am not clear about the exact level of security but it's safer than others for sure and a hell lot slow for surfing - can stream videos at 1080p on youtube without buffer tho :). One drawback, which is a real problem; you will have to log in every damn time as there will be no cookie stored for your sessions.</p>
</li>
</ul>
<h2 id="heading-4-use-alternatives">4. Use alternatives</h2>
<p>Since the solutions are limited, then a good strategy might be to shift to another working platform like Telegram, slack, and <a target="_blank" href="http://Matrix.org">Matrix.org</a>. Facebook is <strong>NOT</strong> suggested with its poor track record, lots of data leaks, bad privacy policy, and whatnot.</p>
<ul>
<li><p><a target="_blank" href="https://stallman.org/facebook.html">Reasons not to <code>be used by</code> Facebook</a></p>
</li>
<li><p><a target="_blank" href="http://Matrix.org">Matrix.org</a></p>
</li>
</ul>
<p>Telegram and <a target="_blank" href="http://Matrix.org">Matrix.org</a> are my personal choice of alternatives; with telegram being unblocked via its inbuilt proxy configuration and <a target="_blank" href="http://matrix.org">matrix.org</a> staying useful without any configuration.</p>
<blockquote>
<p>For people planning to shift to or already there on <strong>telegram</strong> consider joining: <a target="_blank" href="https://t.me/projecttrik">@projecttrik</a> for more details on features and use cases of Telegram, just an initiative by me to make the users understand the potential of telegram.</p>
</blockquote>
<p>Now you have a basic idea about the approaches, decide according to your use case and <a target="_blank" href="https://owasp.org/www-community/Threat_Modeling">threat model</a>.</p>
]]></content:encoded></item></channel></rss>