<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Abhishek Tiwari</title>
    <description>The latest articles on Forem by Abhishek Tiwari (@abhishektiwari23).</description>
    <link>https://forem.com/abhishektiwari23</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F945370%2F0bf42239-b74e-498e-a16b-db8507a2a644.jpeg</url>
      <title>Forem: Abhishek Tiwari</title>
      <link>https://forem.com/abhishektiwari23</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/abhishektiwari23"/>
    <language>en</language>
    <item>
      <title>Unveiling Innovation: A Trail of Contributions to Facebook Glean 🚀🚀</title>
      <dc:creator>Abhishek Tiwari</dc:creator>
      <pubDate>Fri, 08 Dec 2023 20:06:02 +0000</pubDate>
      <link>https://forem.com/abhishektiwari23/unveiling-innovation-a-trail-of-contributions-to-facebook-glean-2nck</link>
      <guid>https://forem.com/abhishektiwari23/unveiling-innovation-a-trail-of-contributions-to-facebook-glean-2nck</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;On the eerie night of September 10th, as I delved deep into solving some challenging LeetCode questions, a sudden notification alerted me of an email in my inbox. And I was shocked...&lt;/p&gt;

&lt;p&gt;I can't believe my eyes. I pinched my self and read the mail again thrice. The mail state that I was selected for MLH Fellowship 🎉🎉🎉🎉🎊.&lt;/p&gt;

&lt;p&gt;For Fellowship my task was to work on Glean. &lt;/p&gt;

&lt;p&gt;Glean is a system for working with facts about source code. It is designed for collecting and storing detailed information about code structure, and providing access to the data to power tools and experiences from online IDE features to offline code analysis.&lt;br&gt;
Glean could answer all the questions you'd expect your IDE to answer, accurately and efficiently on a large-scale codebase. Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where is the definition of this method?&lt;/li&gt;
&lt;li&gt;Where are all the callers of this function?&lt;/li&gt;
&lt;li&gt;Who inherits from this class?&lt;/li&gt;
&lt;li&gt;What are all the declarations in this file?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Understanding the working of Glean
&lt;/h2&gt;

&lt;p&gt;I am quite new to Glean so, I tried my best to understand it and I am trying my best to present what I actually understand&lt;/p&gt;

&lt;p&gt;So let's understand it with a real-life scenario. &lt;br&gt;
Imagine you join your dream company let it be Meta.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefoga5njrlplu4al1feb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefoga5njrlplu4al1feb.gif" alt="Gif" width="480" height="268"&gt;&lt;/a&gt;&lt;br&gt;
So now, on the ferry first day, your manager.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvw3v6eh4fret50koy8hr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvw3v6eh4fret50koy8hr.gif" alt="manager" width="480" height="480"&gt;&lt;/a&gt;&lt;br&gt;
asked you to update a Function ( let it be A) and report me. So now you really don't understand the codebase and it might take a month because it is a meta Code base with a billion line of Code.&lt;/p&gt;

&lt;p&gt;You are trying hard &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwzr23n7xpbguyevlcni.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwzr23n7xpbguyevlcni.gif" alt="worker" width="260" height="193"&gt;&lt;/a&gt;&lt;br&gt;
Now the Glean came into picture. It will help you by answering all these question&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where is the definition of this method?&lt;/li&gt;
&lt;li&gt;Where are all the callers of this function?&lt;/li&gt;
&lt;li&gt;Who inherits from this class?&lt;/li&gt;
&lt;li&gt;What are all the declarations in this file?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, let understand How actually the Glean helped you. &lt;br&gt;
So, lets Imange you are working a python project. The IDE ( let VS Code) along with whole python env setup, created a abstract syntax tree for you. &lt;br&gt;
Now the Glean Uses this abstract syntax tree, to understand the Code with the help of the binary it uses. &lt;/p&gt;

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

&lt;p&gt;It lists up all the Facts and store them in database, RockDB. to get answer you queries you need Angle which is a DQL for Glean.&lt;/p&gt;

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

&lt;p&gt;The Glean store each fact once and when you made some changes, it will update the corresponding facts, instead of all the facts.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Contributions to Glean
&lt;/h2&gt;

&lt;p&gt;For the Fellowship My task was to add support for Scip-Python Indexer and Dotnet Indexer.&lt;br&gt;
Scip-Python might sounds new but it is just a normal python indexer, scip is just a better code indexing format than LSIF. You can understand more about it on on SourceGraph page.&lt;/p&gt;

&lt;p&gt;Steps for adding any indexer can be divided into 4 steps&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updating the CI&lt;/li&gt;
&lt;li&gt;Added wrapper for that Indexer&lt;/li&gt;
&lt;li&gt;Writing Test Files&lt;/li&gt;
&lt;li&gt;Updatin the Docs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is one more steps which is related to Glass, a Glean's client.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updating the Glass Schema&lt;/li&gt;
&lt;li&gt;Writing Test files for Glass test&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are really excited to work on Glean, please checkout my blog on making Local Glean setup, because for the first time, Glean takes around 7-8+ hrs for build. It took for around 3-4 days to make my local setup working :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Working on my First Indexer
&lt;/h2&gt;

&lt;p&gt;So now, I know what you have to do.&lt;/p&gt;

&lt;p&gt;My first step was to look for python binary, for this I reachedout to sourcegraph and looked for scip-python binary.&lt;/p&gt;

&lt;p&gt;I updated all the 3 CI files, here you can check the code &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/facebookincubator/Glean/commit/f39bcf38a2c922af79265c2078202a3c4033e61a" rel="noopener noreferrer"&gt;Updating the CI for Scip-Python&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now my next task was to add a wrapper for scip-python. The wrapper code is in Haskell so you need a good knowledge to understand and write the Haskell code.&lt;/p&gt;

&lt;p&gt;At my time a took a course and tried a lot really to get it.&lt;/p&gt;

&lt;p&gt;Here is an image for wrapper code&lt;/p&gt;

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

&lt;p&gt;you can checkout this commit for scip-python wrapper. In this I made a number of other changes, so please have a look.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/facebookincubator/Glean/commit/76b024b5b7444f51fb3bb100cbc5f22751660400" rel="noopener noreferrer"&gt;Scip-Python Wrapper&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Writing test cases for scip-python indexer.
&lt;/h3&gt;

&lt;p&gt;This is the most exciting part, here I need to add an example Python project. For this, first I was confused what to add and what should be the complexity of that project. At last, I added a snake game that uses the Python-tkinter module. &lt;/p&gt;

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

</description>
      <category>mlh</category>
      <category>haskell</category>
      <category>glean</category>
      <category>opensource</category>
    </item>
    <item>
      <title>GSoC 2023 : A Tale of Passion❤️‍🔥, Perseverance😣, and Personal Growth🚀🚀</title>
      <dc:creator>Abhishek Tiwari</dc:creator>
      <pubDate>Wed, 08 Nov 2023 19:46:11 +0000</pubDate>
      <link>https://forem.com/abhishektiwari23/gsoc-2023-a-tale-of-passion-perseverance-and-personal-growth-1jko</link>
      <guid>https://forem.com/abhishektiwari23/gsoc-2023-a-tale-of-passion-perseverance-and-personal-growth-1jko</guid>
      <description>&lt;p&gt;Hi, I am Abhishek Tiwari, an engineering guy👨‍💻 from India. Everyone has its own journey and yes I have mine, I started open-source contribution in October 2022, ya you are right! with HactoberFest ( for that cool t-shirt 👕), and meanwhile also HackSquad hackathon with my team we merged around 100+ PRs!!. &lt;br&gt;
And this is the start of journey, after that I contributed to Mozilla Firefox ( 22+ PRs and even 2 Bugs!😎 ) and some other well known projects. During this I came to know about GSoC, GSoD, SoB and so many other programs. But I coosen GSoC.&lt;/p&gt;

&lt;p&gt;Thinking Why? Let's Discuss&lt;/p&gt;
&lt;h1&gt;
  
  
  &lt;strong&gt;What is GSoC&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;GSoC is an annual program by Google that requires you to dedicate your complete summer to work on a coding project ( Non - Coding projects are also there )under an organisation. At that time, the most exciting thing about GSoC for me was getting a stipend (but the real treasure is the work experience)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Know more about stipend [here](/)
For India it is 3000$ for large project and 1500$ for small and medium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  **
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Just A Blog to Use Dev.to API</title>
      <dc:creator>Abhishek Tiwari</dc:creator>
      <pubDate>Sun, 25 Dec 2022 06:26:13 +0000</pubDate>
      <link>https://forem.com/abhishektiwari23/just-a-blog-to-use-devto-api-5hcf</link>
      <guid>https://forem.com/abhishektiwari23/just-a-blog-to-use-devto-api-5hcf</guid>
      <description>&lt;p&gt;Please ignore this blog, I made to check the dev.to api&lt;/p&gt;

&lt;p&gt;"There is no one who loves pain itself, who seeks after it and wants to have it, simply because it is pain..."&lt;br&gt;
What is Lorem Ipsum?&lt;br&gt;
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.&lt;/p&gt;

&lt;p&gt;Why do we use it?&lt;br&gt;
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).&lt;/p&gt;

&lt;p&gt;Where does it come from?&lt;br&gt;
Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.&lt;/p&gt;

&lt;p&gt;The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.&lt;/p&gt;

&lt;p&gt;Where can I get some?&lt;br&gt;
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text. All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.&lt;/p&gt;

&lt;p&gt;5&lt;br&gt;
    paragraphs&lt;br&gt;
    words&lt;br&gt;
    bytes&lt;br&gt;
    lists&lt;br&gt;
    Start with 'Lorem&lt;br&gt;
ipsum dolor sit amet...'&lt;/p&gt;

</description>
      <category>howtofix</category>
    </item>
  </channel>
</rss>
