<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: hardik singh</title>
    <description>The latest articles on DEV Community by hardik singh (@realhardik18).</description>
    <link>https://dev.to/realhardik18</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%2F841020%2F2c28bba4-2e01-452c-8803-76e64222ff20.png</url>
      <title>DEV Community: hardik singh</title>
      <link>https://dev.to/realhardik18</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/realhardik18"/>
    <language>en</language>
    <item>
      <title>I created a tool that helps you learn from YouTube faster and more efficiently!</title>
      <dc:creator>hardik singh</dc:creator>
      <pubDate>Thu, 03 Apr 2025 10:05:51 +0000</pubDate>
      <link>https://dev.to/realhardik18/i-created-a-tool-that-helps-you-learn-from-youtube-faster-and-more-efficiently-2pkd</link>
      <guid>https://dev.to/realhardik18/i-created-a-tool-that-helps-you-learn-from-youtube-faster-and-more-efficiently-2pkd</guid>
      <description>&lt;p&gt;This week, I officially launched my tool, &lt;a href="https://mykozu.xyz/dashboard" rel="noopener noreferrer"&gt;Kozu&lt;/a&gt;! 🎉&lt;/p&gt;

&lt;p&gt;Kozu is designed to help you cover YouTube videos faster, more efficiently, and with better organization. With Kozu, you can add videos you want to watch and set deadlines to complete them, ensuring you stay on track with your learning. The intuitive dashboard provides a clear overview of all your courses, making it easy to manage your progress.&lt;/p&gt;

&lt;p&gt;Additionally, the Tasks page gives you real-time updates on whether you're keeping up with your schedule or falling behind, helping you stay accountable. The goal is to make learning through YouTube more structured and effective.&lt;/p&gt;

&lt;p&gt;Check it out and let me know what you think! 🚀 Here are some screenshots:&lt;/p&gt;

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

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

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

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

&lt;p&gt;Once again, do check it out &lt;a href="https://mykozu.xyz/dashboard" rel="noopener noreferrer"&gt;https://mykozu.xyz/dashboard&lt;/a&gt;&lt;br&gt;
Thank you!&lt;/p&gt;

</description>
      <category>learning</category>
      <category>tool</category>
      <category>startup</category>
    </item>
    <item>
      <title>QuizMe.mp3: Turn Your Audio Lessons into Fun Quizzes</title>
      <dc:creator>hardik singh</dc:creator>
      <pubDate>Mon, 25 Nov 2024 07:34:21 +0000</pubDate>
      <link>https://dev.to/realhardik18/quizmemp3-turn-your-audio-lessons-into-fun-quizzes-3136</link>
      <guid>https://dev.to/realhardik18/quizmemp3-turn-your-audio-lessons-into-fun-quizzes-3136</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/assemblyai"&gt;AssemblyAI Challenge &lt;/a&gt;: No More Monkey Business.*&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Quizme.mp3 is a platform where students and learners can upload their audio lessons and receive a generated quiz with 10 questions based on the content of the audio file. Users can then attempt the quiz and receive a report of their responses along with an accuracy score. The website is built using HTML, Tailwind CSS, and the Flask web framework. It integrates AssemblyAI's Lemur for audio transcription and dynamic question generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://quizme-mp3.onrender.com/" rel="noopener noreferrer"&gt;Visit Quizme.mp3&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftviu4cz02ywll4xzaste.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftviu4cz02ywll4xzaste.png" alt="Home Page" width="800" height="359"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://vimeo.com/1032980330?share=copy" rel="noopener noreferrer"&gt;Demo Video&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;To create quiz questions from uploaded audio files, I used LeMUR with AssemblyAI's Lemur model. First, the audio file is transcribed using AssemblyAI’s Transcriber. Once we have the transcript, I craft a prompt that asks Lemur to generate 10 multiple-choice questions based solely on the transcript’s content. The questions are designed to be clear, accurate, and directly related to the audio, with the options and correct answers formatted in a neat JSON structure. The Claude 3.5 Sonnet model of Lemur is then used to generate these questions, and the result is returned to the user. This approach ensures the quiz is tailored to the specific audio content, making the whole process dynamic and context-driven.&lt;/p&gt;








&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/realhardik18" rel="noopener noreferrer"&gt;
        realhardik18
      &lt;/a&gt; / &lt;a href="https://github.com/realhardik18/quizme.mp3" rel="noopener noreferrer"&gt;
        quizme.mp3
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>assemblyaichallenge</category>
      <category>ai</category>
      <category>api</category>
    </item>
    <item>
      <title>CuriShot: A Minimalist File Sharing and Organization Tool for Students</title>
      <dc:creator>hardik singh</dc:creator>
      <pubDate>Sun, 13 Oct 2024 15:37:05 +0000</pubDate>
      <link>https://dev.to/realhardik18/curishot-a-minimalist-file-sharing-and-organization-tool-for-students-1kha</link>
      <guid>https://dev.to/realhardik18/curishot-a-minimalist-file-sharing-and-organization-tool-for-students-1kha</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/pinata"&gt;The Pinata Challenge &lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;CuriShot is a simple, minimalistic yet functional web app that allows college students to save code files and screenshots from software like MATLAB, LTspice, etc., during their lab classes. These files can be stored in the cloud and organized with tags, making it easier for students to access them later from their home systems. As a college fresher, I wanted to create something minimalistic yet intuitive, which led to the development of CuriShot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;CuriShot is live on this domain. register for an account and get started!&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%2Fi2cpw5szm8z5uu56wrqn.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%2Fi2cpw5szm8z5uu56wrqn.png" alt="dashboard" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://curishot.onrender.com/" rel="noopener noreferrer"&gt;https://curishot.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/realhardik18" rel="noopener noreferrer"&gt;
        realhardik18
      &lt;/a&gt; / &lt;a href="https://github.com/realhardik18/CuriShot" rel="noopener noreferrer"&gt;
        CuriShot
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      a webapp to organize and store code and screenshots take during my college lab classes
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;CuriShot: A Minimalist File Sharing and Organization Tool for Students&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/pinata" rel="nofollow"&gt;The Pinata Challenge &lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What I Built&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;CuriShot is a simple, minimalistic yet functional web app that allows college students to save code files and screenshots from software like MATLAB, LTspice, etc., during their lab classes. These files can be stored in the cloud and organized with tags, making it easier for students to access them later from their home systems. As a college fresher, I wanted to create something minimalistic yet intuitive, which led to the development of CuriShot.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Demo&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;CuriShot is live on this domain. register for an account and get started!
&lt;a href="https://curishot.onrender.com/" rel="nofollow noopener noreferrer"&gt;https://curishot.onrender.com/&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;My Code&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;{% embed &lt;a href="https://github.com/realhardik18/CuriShot" rel="noopener noreferrer"&gt;https://github.com/realhardik18/CuriShot&lt;/a&gt; %}&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;More Details&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Pinata was used to store and retrieve all the files uploaded by users onto CuriShot. The IPFS hash of each uploaded file was saved in the user's profile on our MongoDB database…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/realhardik18/CuriShot" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  More Details
&lt;/h2&gt;

&lt;p&gt;Pinata was used to store and retrieve all the files uploaded by users onto CuriShot. The IPFS hash of each uploaded file was saved in the user's profile on our MongoDB database. Along with Pinata, the web app was built using Flask, Tailwind CSS, HTML, CSS, JavaScript, and MongoDB.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>pinatachallenge</category>
      <category>webdev</category>
      <category>api</category>
    </item>
    <item>
      <title>How YOU can type faster</title>
      <dc:creator>hardik singh</dc:creator>
      <pubDate>Mon, 02 Jan 2023 08:11:16 +0000</pubDate>
      <link>https://dev.to/realhardik18/how-you-can-type-faster-4n3f</link>
      <guid>https://dev.to/realhardik18/how-you-can-type-faster-4n3f</guid>
      <description>&lt;p&gt;Typing is a very underrated skill. Typing faster can not only make you seem cool but will also get your work done quicker. In this short article, I'll tell you how you can get a typing speed of about 100WPM in about 90 days!&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the keyboard
&lt;/h2&gt;

&lt;p&gt;The first step to achieving this goal is to understand and get familiar with the layout of your keyboard. to get started study, your keyboard and slowly try to type short sentences without looking at your keyboard itself. Don't worry about speed at this point. The purpose of this is to get familiar with your tool.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmquoc2we2iwyh7jmhzg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmquoc2we2iwyh7jmhzg.png" alt="The ideal keyboard position" width="350" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Now all you got to do is just practice!
&lt;/h2&gt;

&lt;p&gt;Once you can type shorter sentences without looking at the keyboard, All you have to do is work on doing this faster and faster. You can track how quickly you have been typing by taking typing tests on the internet. One of the most amazing websites to do this is monkey type. You ideally want to take the 30 seconds tests which are perfect for this stage. even typing for 15 minutes daily consistently can improve your speed weekly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources for typing faster
&lt;/h2&gt;

&lt;p&gt;Now ill be listing some resources which are FREE to use. These can help you reach your goal of typing faster!&lt;br&gt;
1)&lt;a href="https://www.keybr.com/" rel="noopener noreferrer"&gt;https://www.keybr.com/&lt;/a&gt;&lt;br&gt;
2)&lt;a href="https://monkeytype.com/" rel="noopener noreferrer"&gt;https://monkeytype.com/&lt;/a&gt;&lt;br&gt;
That's pretty much it, These two resources can help you reach your goal. It's now all just up to you for practicing on these websites!&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>solidprinciples</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Introducing BookWheat, The ultimate twitter bookmark tool</title>
      <dc:creator>hardik singh</dc:creator>
      <pubDate>Sun, 28 Aug 2022 18:50:02 +0000</pubDate>
      <link>https://dev.to/realhardik18/introducing-bookwheat-the-ultimate-twitter-bookmark-tool-4b64</link>
      <guid>https://dev.to/realhardik18/introducing-bookwheat-the-ultimate-twitter-bookmark-tool-4b64</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;i always had an issue of saving important resources and tweets on twitter. so to tackle this issue i built bookwheat. bookwheat is a twitter bot which can save the tweets which you feel are important. alongside this it also supports discord integration! this means after a quick set up, you can now automatically send the tweets which you feel are important straight to the discord text channel of your choice!&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;Wacky Wildcards&lt;/p&gt;

&lt;h3&gt;
  
  
  Video Explainer of My Project!
&lt;/h3&gt;

&lt;p&gt;you can understand how bookwheat was made and the which tools were used, by watching this YouTube video!&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/UKb11J7cTY0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Language Used
&lt;/h3&gt;

&lt;p&gt;BookWheat was made using python!&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Code
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/realhardik18"&gt;
        realhardik18
      &lt;/a&gt; / &lt;a href="https://github.com/realhardik18/Book-Wheat"&gt;
        Book-Wheat
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      a twitter bot which can categorically save your tweets and supports discord integration!
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
BookWheat, The ultimate twitter bookmark tool&lt;/h1&gt;
&lt;p&gt;BookWheat is a Twitter bot that helps you save important tweets which are relevant to you categorically! it also supports discord integration, which means with a quick setup, you can now send important tweets to your favorite discord text channel!&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/421519c4d7af1bf688447e9404f33fb68178c8df69e8c6b71e3700091ee2b5a5/68747470733a2f2f6d656469612e646973636f72646170702e6e65742f6174746163686d656e74732f3934393533363231393738363738343737392f313031333437333536393134333030353231352f756e6b6e6f776e2e706e673f77696474683d343734266865696768743d343232"&gt;&lt;img src="https://camo.githubusercontent.com/421519c4d7af1bf688447e9404f33fb68178c8df69e8c6b71e3700091ee2b5a5/68747470733a2f2f6d656469612e646973636f72646170702e6e65742f6174746163686d656e74732f3934393533363231393738363738343737392f313031333437333536393134333030353231352f756e6b6e6f776e2e706e673f77696474683d343734266865696768743d343232" alt="BookWheat on twitter"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
Overview video!&lt;/h1&gt;
&lt;p&gt;Here's a short video that explains how BookWheat was made, and the tools it uses such as Redis,Tweepy,Heroku and Discord.py&lt;/p&gt;
&lt;p&gt;#todo&lt;/p&gt;
&lt;h2&gt;
How it works&lt;/h2&gt;
&lt;h3&gt;
How the data is stored:&lt;/h3&gt;
&lt;p&gt;the data is stored in the form of redis keys. each key stores the information related to a particular user
the file &lt;a href="https://github.com/realhardik18/Book-Wheat/blob/main/twitter-bot/db_methods.py"&gt;db_methods.py&lt;/a&gt; has various methods to retrive the data and store it
in a particular key, the bot stores the twitter handle and user id of the associated user, along side this it also stores the data of all the saved tweets of that particular user
this data has the name of…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/realhardik18/Book-Wheat"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Check out &lt;a href="https://redis.io/docs/stack/get-started/clients/#high-level-client-libraries"&gt;Redis OM&lt;/a&gt;, client libraries for working with Redis as a multi-model database.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Use &lt;a href="https://redis.info/redisinsight"&gt;RedisInsight&lt;/a&gt; to visualize your data in Redis.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Sign up for a &lt;a href="https://redis.info/try-free-dev-to"&gt;free Redis database&lt;/a&gt;.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>redishackathon</category>
    </item>
    <item>
      <title>the dog api!</title>
      <dc:creator>hardik singh</dc:creator>
      <pubDate>Thu, 04 Aug 2022 12:38:51 +0000</pubDate>
      <link>https://dev.to/realhardik18/the-dog-api-1l1i</link>
      <guid>https://dev.to/realhardik18/the-dog-api-1l1i</guid>
      <description>&lt;p&gt;i really wanted to share this api called the &lt;a href="https://dog.ceo/dog-api/"&gt;dogs api&lt;/a&gt; which is really easy to use and you can build very cool projects with this!&lt;/p&gt;

&lt;h2&gt;
  
  
  overview
&lt;/h2&gt;

&lt;p&gt;this api is the largest collection of open source dog pictures. all these images were taken from the &lt;a href="http://vision.stanford.edu/aditya86/ImageNetDogs/"&gt;stanford dogs data set&lt;/a&gt;&lt;br&gt;
you can also submit pictures of your own dogs and &lt;a href="https://github.com/jigsawpieces/dog-api-images#dog-api-images"&gt;add it to the data set&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  endpoints
&lt;/h2&gt;

&lt;p&gt;there are a handful of endpoints available on this api&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;list of all breeds available&lt;/li&gt;
&lt;li&gt;random image of a dog&lt;/li&gt;
&lt;li&gt;get images of dog with a specific breed&lt;/li&gt;
&lt;li&gt;get sub-breeds of a breed
&lt;a href="https://dog.ceo/dog-api/documentation/"&gt;here is a more in-depth overview of the enpoints&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;have fun with this api! :)&lt;/p&gt;

</description>
      <category>api</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>learn to make a RESTful API with flask!</title>
      <dc:creator>hardik singh</dc:creator>
      <pubDate>Sat, 30 Jul 2022 08:29:00 +0000</pubDate>
      <link>https://dev.to/realhardik18/learn-to-make-a-restful-api-with-flask-3job</link>
      <guid>https://dev.to/realhardik18/learn-to-make-a-restful-api-with-flask-3job</guid>
      <description>&lt;h2&gt;
  
  
  so what are we building here?
&lt;/h2&gt;

&lt;p&gt;we will be building a very simple and basic API which can showcase some stats of various countries with a pre existing dataset in the form of a csv. to begin, download this &lt;a href="https://www.kaggle.com/datasets/fernandol/countries-of-the-world"&gt;dataset&lt;/a&gt; and save it in your working directory&lt;/p&gt;

&lt;h2&gt;
  
  
  getting the data from the csv
&lt;/h2&gt;

&lt;p&gt;first we will get the data from the csv and format it all in the form of a dictionary, so that we can display this dictionary via our api&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#this bit is to set up the csv file as pandas data frame object. it will now become easier to work with our data!
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt;
&lt;span class="n"&gt;dataset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'countries of the world.csv'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now we will write a function which can give us the data of a specified country!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;InfoAboutCountry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;country_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'Country'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s"&gt;' '&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;country_data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;so first we make a variable called 'headers' which will store all the parameters in the form of a list.&lt;br&gt;
now we retrieve the data of the specified country using the &lt;strong&gt;loc&lt;/strong&gt; function.&lt;br&gt;
finally we zip them together and then explicitly convert it into a dictionary!&lt;br&gt;
we will get the following output if we call this function for 'Australia'&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lRC4Yo99--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bix11yrnqsp9riau3w8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lRC4Yo99--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bix11yrnqsp9riau3w8y.png" alt="Image description" width="880" height="129"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  now on to making the api!
&lt;/h2&gt;

&lt;p&gt;we first import our modules and then make a flask app and then initialize our api with the flask app which we just made&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;flask_restful&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Resource&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Api&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reqparse&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Api&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now we make an api instance and add a Resource to it. Then we make a parser object which can help us to parse multiple arguments in the form of a single request. and finally we add an argument which needs to be parsed(in our case country)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CountryAPI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Resource&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;parser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reqparse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RequestParser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'country'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we then get the argument and call our function and return the data&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CountryAPI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Resource&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;parser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reqparse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RequestParser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'country'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;country&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse_args&lt;/span&gt;&lt;span class="p"&gt;())[&lt;/span&gt;&lt;span class="s"&gt;'country'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;InfoAboutCountry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now to finsh things up we add this resource to our api and run the flask app&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_resource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CountryAPI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'/data'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'data'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  final output
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--REGQIUpx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i2yyi2311cv9y6itl4y4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--REGQIUpx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i2yyi2311cv9y6itl4y4.png" alt="Image description" width="808" height="397"&gt;&lt;/a&gt;&lt;br&gt;
as you can see our api returns the data we require!&lt;/p&gt;

&lt;h2&gt;
  
  
  code
&lt;/h2&gt;

&lt;p&gt;you can find the code here!&lt;br&gt;
&lt;a href="https://gist.github.com/realhardik18/6d9975e8b21989afadd836c800df8b31"&gt;https://gist.github.com/realhardik18/6d9975e8b21989afadd836c800df8b31&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>best resources for practicing data structures and algorithms</title>
      <dc:creator>hardik singh</dc:creator>
      <pubDate>Mon, 25 Jul 2022 10:57:06 +0000</pubDate>
      <link>https://dev.to/realhardik18/best-resources-for-practicing-data-structures-and-algorithms-8ci</link>
      <guid>https://dev.to/realhardik18/best-resources-for-practicing-data-structures-and-algorithms-8ci</guid>
      <description>&lt;p&gt;today ill be sharing my favorite sites and places to practice dsa for FREE!&lt;/p&gt;

&lt;h2&gt;
  
  
  why even need dsa?
&lt;/h2&gt;

&lt;p&gt;practicing dsa will help you improve the way you write code and can be differentiating factor between a good developer and a great developer. alongside getting you 6 figure jobs, it will also help to optimize your code and make it more readable!&lt;/p&gt;

&lt;h2&gt;
  
  
  on to the resources!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://projecteuler.net/"&gt;project euler&lt;/a&gt; contains a series of challenging mathematical and programming language. this requires a balanced need of both math and programming. the problems range in difficulty from easy to hard and are aimed at people who are keen to practice their problem solving skills&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codeforces.com/"&gt;codeforces&lt;/a&gt; has various contests and problem sets. you can solve problems and get rated on the basis of how you perform in these competitions. it also has a large and growing community of around 600K people&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.codewars.com/dashboard"&gt;codewars.com&lt;/a&gt; is one of my personal favorites. over here you level up based on Kyu/Dan Ranks. This rank system has borrowed from a system in Japanese martial arts. one can level up by completing katas(problem sets) which are at or above their level. harder the kata, the faster you level up&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://boot.dev/"&gt;boot.dev&lt;/a&gt; has a collection of 17 tracks on python, JavaScript and go. it includes an environment where the user can learn the required concepts and then immediately implement in a code playground integrated into the website. it also  makes it really easy to track your progress and keeps you engaged as it has a ton of badges and achievements to collect as you code!&lt;br&gt;
-&lt;a href="https://www.hackerrank.com/"&gt;hacerrank&lt;/a&gt;&lt;br&gt;
has kits and problem sets based around questions which are to be asked to asked in job interviews. companies like Amplify, Quora, and Capital One use hackerrank in their technical recruiting process&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  conclusion
&lt;/h2&gt;

&lt;p&gt;if you want to master dsa, all it takes is practice. so just pick a couple of places and consistently practice problems! if you have any other resources, feel free to share them in the comments below!!&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>programming</category>
      <category>discuss</category>
    </item>
    <item>
      <title>everything you need to know about carbon!</title>
      <dc:creator>hardik singh</dc:creator>
      <pubDate>Sun, 24 Jul 2022 09:55:39 +0000</pubDate>
      <link>https://dev.to/realhardik18/everything-you-need-to-know-about-carbon-4op4</link>
      <guid>https://dev.to/realhardik18/everything-you-need-to-know-about-carbon-4op4</guid>
      <description>&lt;p&gt;yesterday, on 23rd July carbon-lang launched a &lt;a href="https://www.youtube.com/watch?v=omrY53kbVoA&amp;amp;feature=youtu.be&amp;amp;ab_channel=CppNorth"&gt;YouTube video&lt;/a&gt; with cpp north. in this post ill talk about everything you need to know about carbon, the experimental successor of c++&lt;/p&gt;

&lt;h2&gt;
  
  
  why do we need carbon in the first place?
&lt;/h2&gt;

&lt;p&gt;c++ is the dominant programming language for software which focus on performance. it also has massive and constantly growing codebases and investments. unfortunately, it is struggling to further improve.  it is hard to improve  it because of years of accumulating technical debt and challenges with its evolution process.&lt;/p&gt;

&lt;h2&gt;
  
  
  plus points of carbon
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;it's performance level(which is really important) matches that of c++. c++ is still one of the fastest languages today&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;existing c++ libraries can easily adopt carbon&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;carbon has a gentle learning curve(plus points if you are familiar with c++) and it's syntax is similar to that of c++&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;carbon can be built on top of c++'s existing ecosystem. this means the already existing investments, codebases and the most important aspect, developers will also be part of the new carbon ecosystem&lt;/p&gt;

&lt;p&gt;as the developers of carbon themselves said that "Carbon aims to fill an analogous role for C++"&lt;/p&gt;

&lt;h2&gt;
  
  
  goals of carbon-lang
&lt;/h2&gt;

&lt;p&gt;the main aims of carbon are to support performance critical software, code which is easy to understand, write and read, fast and scalable development. &lt;a href="https://github.com/carbon-language/carbon-lang/blob/trunk/docs/project/goals.md"&gt;there is a detailed goals document which you can check out too!&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  project status
&lt;/h2&gt;

&lt;p&gt;carbon currently is still an experimental language and it will take a time before we can see it being used in the mainstream market. the developers are trying to better understand weather they can build a language which meets their successor language criteria and also gather a critical mass of interest within the c++ community. they are currently focused on getting more feedback and participation from the c++ community. &lt;a href="https://github.com/carbon-language/carbon-lang/blob/trunk/docs/project/roadmap.md"&gt;here is the document which lists their objectives and goals for the year&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;here is the carbon-lang repo on github&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/carbon-language"&gt;
        carbon-language
      &lt;/a&gt; / &lt;a href="https://github.com/carbon-language/carbon-lang"&gt;
        carbon-lang
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Carbon Language's main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Carbon Language: &lt;br&gt; An experimental successor to C++&lt;/h1&gt;
&lt;p&gt;
  &lt;a href="https://github.com/carbon-language/carbon-lang#why-build-carbon"&gt;Why?&lt;/a&gt; |
  &lt;a href="https://github.com/carbon-language/carbon-lang#language-goals"&gt;Goals&lt;/a&gt; |
  &lt;a href="https://github.com/carbon-language/carbon-lang#getting-started"&gt;Getting started&lt;/a&gt; |
  &lt;a href="https://github.com/carbon-language/carbon-lang#join-us"&gt;Join us&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See our &lt;a href="https://youtu.be/omrY53kbVoA" rel="nofollow"&gt;announcement video&lt;/a&gt; from
&lt;a href="https://cppnorth.ca/" rel="nofollow"&gt;CppNorth&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;a href="https://github.com/carbon-language/carbon-langdocs/images/snippets.md#quicksort"&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---CNWnG1O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/carbon-language/carbon-langdocs/images/quicksort_snippet.svg" width="575" alt="Quicksort code in Carbon. Follow the link to read more."&gt;
&lt;/a&gt;
&lt;div&gt;&lt;a href="https://github.com/carbon-language/carbon-lang#"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I8XGmLD0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/carbon-language/carbon-langdocs/images/bumper.png"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Fast and works with C++&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Performance matching C++ using LLVM, with low-level access to bits and
addresses&lt;/li&gt;
&lt;li&gt;Interoperate with your existing C++ code, from inheritance to templates&lt;/li&gt;
&lt;li&gt;Fast and scalable builds that work with your existing C++ build systems&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Modern and evolving&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Solid language foundations that are easy to learn, especially if you have
used C++&lt;/li&gt;
&lt;li&gt;Easy, tool-based upgrades between Carbon versions&lt;/li&gt;
&lt;li&gt;Safer fundamentals, and an incremental path towards a memory-safe subset&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Welcoming open-source community&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clear goals and priorities with robust governance&lt;/li&gt;
&lt;li&gt;Community that works to be welcoming, inclusive, and friendly&lt;/li&gt;
&lt;li&gt;Batteries-included approach: compiler, libraries, docs, tools, package
manager, and more&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Why build Carbon?&lt;/h2&gt;
&lt;p&gt;C++ remains the dominant programming language for performance-critical software
with massive and growing codebases and investments. However, it is struggling to
improve and meet…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/carbon-language/carbon-lang"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>cpp</category>
      <category>programming</category>
      <category>news</category>
    </item>
    <item>
      <title>LinkedIn API Python Library</title>
      <dc:creator>hardik singh</dc:creator>
      <pubDate>Sat, 23 Jul 2022 08:19:00 +0000</pubDate>
      <link>https://dev.to/realhardik18/linkedin-api-python-library-1cn8</link>
      <guid>https://dev.to/realhardik18/linkedin-api-python-library-1cn8</guid>
      <description>&lt;h1&gt;
  
  
  LinkedIn API Python Library
&lt;/h1&gt;

&lt;p&gt;here is what we will be covering in this article:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;why get data from LinkedIn with python in the first place?&lt;/li&gt;
&lt;li&gt;introduction &amp;amp; advantages&lt;/li&gt;
&lt;li&gt;download and setup&lt;/li&gt;
&lt;li&gt;retrieving profile information&lt;/li&gt;
&lt;li&gt;retrieving company details&lt;/li&gt;
&lt;li&gt;remove connections&lt;/li&gt;
&lt;li&gt;get conversation details&lt;/li&gt;
&lt;li&gt;disadvantages and possible alternatives&lt;/li&gt;
&lt;li&gt;conclusion &amp;amp; project ideas&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  why get data from LinkedIn with python in the first place?
&lt;/h1&gt;

&lt;p&gt;well im glad you asked! getting data with python from LinkedIn has many benefits. first of all, it's faster. REALLY FAST compared to a human being. let's say you're an HR manager at a company and you have to retrieve information from about 100+ profiles and create a database. this would take forever if a person were to do this. and on top of this, there is a huge scope of human error. there can always be a mistype or an invalid entry which to some extent might ruin the whole database. that's why automating this process will both save you time and save you from potential errors!&lt;/p&gt;

&lt;h2&gt;
  
  
  introduction &amp;amp; advantages
&lt;/h2&gt;

&lt;p&gt;we will be using the &lt;a href="https://linkeadin-api.readthedocs.io/en/latest/"&gt;linkedin-api&lt;/a&gt; python library. we already have some advantages of using this library.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it just needs the credentials to your LinkedIn account to work&lt;/li&gt;
&lt;li&gt;it is very easy to set up and has a variety of endpoints which we will discuss further in this article
# download and setup
to download this library, we can simply run this pip command in our terminal
&lt;code&gt;pip install linkedin-api&lt;/code&gt;
now we will create a &lt;code&gt;creds.py&lt;/code&gt; file in our project to store our login information!
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#use the information associated with your linkedin account
&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'********@gmail.com'&lt;/span&gt;
&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'**********'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now we can make a &lt;code&gt;main.py&lt;/code&gt; file. we will also be making all of our functions in this file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;linkedin_api&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Linkedin&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;creds&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;

&lt;span class="n"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Linkedin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;over here we first import the password and email which we saved in the &lt;code&gt;creds.py&lt;/code&gt; file and then use that information to log in to LinkedIn!&lt;/p&gt;

&lt;h1&gt;
  
  
  retrieving profile information
&lt;/h1&gt;

&lt;p&gt;before we start retrieving data from this endpoint, we need to get the public id of the LinkedIn account whose information we want to scrape. this can be done by getting the value between the last 2 slashes in the url of the profile. for example in the case of '&lt;a href="https://www.linkedin.com/in/hardik-singh-0b9ab4225/"&gt;https://www.linkedin.com/in/hardik-singh-0b9ab4225/&lt;/a&gt;', the public id would be 'hardik-singh-0b9ab4225' we can now use this to get some data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_profile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'hardik-singh-0b9ab4225'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;this gives us a dictionary that contains useful information like country of origin, birthday, first &amp;amp; last name, url to the profile picture, education, skills, and work experience &lt;br&gt;
the whole list of available keys in this dictionary is given below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;dict_keys&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s"&gt;'lastName'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'student'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'geoCountryUrn'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="s"&gt;'geoLocationBackfilled'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'entityUrn'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'headline'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="s"&gt;'industryName'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'locationName'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'geoCountryName'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="s"&gt;'elt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'profilePictureOriginalImage'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'birthDate'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
 &lt;span class="s"&gt;'industryUrn'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'firstName'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'profilePicture'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
 &lt;span class="s"&gt;'geoLocation'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'geoLocationName'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'location'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
 &lt;span class="s"&gt;'backgroundPicture'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'backgroundPictureOriginalImage'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'displayPictureUrl'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;'profile_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'experience'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'skills'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'education'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you can further get the specific info by getting the value of these dict keys. for example, to retrieve the education of the user, we can do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'education'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;#output:
&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s"&gt;'entityUrn'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'urn:li:fs_education:(ACoAADiU3o0BpIMjtuPu3LEwZgu6XmN8_zdNY3s,785025469)'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'school'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'objectUrn'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'urn:li:school:3244736'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'entityUrn'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'urn:li:fs_miniSchool:3244736'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="s"&gt;'active'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'schoolName'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Delhi Public School - India'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'trackingId'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'skI/DaQYTW23ZkqbA4FrPA=='&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="s"&gt;'logoUrl'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'https://media-exp2.licdn.com/dms/image/C510BAQFJWBCrV-fjMg/company-logo_'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; 
&lt;span class="s"&gt;'timePeriod'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'endDate'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'month'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'year'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2024&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="s"&gt;'startDate'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'month'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'year'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2009&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt; 
&lt;span class="s"&gt;'schoolName'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Delhi Public School - India'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'schoolUrn'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'urn:li:fs_miniSchool:3244736'&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;as you can see, it returns all the relevant information related to the relevant field&lt;/p&gt;

&lt;h1&gt;
  
  
  retrieving company details
&lt;/h1&gt;

&lt;p&gt;we can also retrieve information for any company. this is very similar to retrieving information from user profiles.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_company&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'google'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;this will also give us a large dictionary. you can get information such as industries in which the company is involved in, staff count, headquarters, funding data, and many more parameters. they are as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;dict_keys&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s"&gt;'staffingCompany'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'companyIndustries'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'callToAction'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="s"&gt;'staffCount'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'adsRule'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'companyEmployeesSearchPageUrl'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="s"&gt;'viewerFollowingJobsUpdates'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'staffCountRange'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'permissions'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'logo'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="s"&gt;'claimable'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'affiliatedCompaniesResolutionResults'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'specialities'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="s"&gt;'confirmedLocations'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'followingInfo'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'viewerEmployee'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="s"&gt;'affiliatedCompaniesWithEmployeesRollup'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'lcpTreatment'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'affiliatedCompaniesWithJobsRollup'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="s"&gt;'name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'tagline'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'$recipeType'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'fundingData'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'overviewPhoto'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'multiLocaleTaglines'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'description'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="s"&gt;'entityUrn'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'headquarter'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'showcasePagesResolutionResults'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'paidCompany'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'universalName'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="s"&gt;'viewerPendingAdministrator'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'companyPageUrl'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'viewerConnectedToAdministrator'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'affiliatedCompanies'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
 &lt;span class="s"&gt;'dataVersion'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'companyType'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'coverPhoto'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'associatedHashtags'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'groups'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'url'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'showcasePages'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
 &lt;span class="s"&gt;'claimableByViewer'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'jobSearchPageUrl'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'showcase'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'autoGenerated'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'backgroundCoverImage'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  remove connections
&lt;/h1&gt;

&lt;p&gt;let's say you have a huge list of people you want to un-connect with. this can be done by the following snippet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;remove_connection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'profile id'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;if you have a huge database of profile urls, you can loop over them and then remove your connection with them using the above snippet. note that the profile id can be obtained by the value between the last 2 slashes in the profile url as mentioned earlier in this article&lt;/p&gt;

&lt;h1&gt;
  
  
  get conversation details
&lt;/h1&gt;

&lt;p&gt;you can also retrieve ALL your conversations with everyone you have talked to on LinkedIn. this returns a huge dictionary with many elements. each of these elements contains data for each conversation in your inbox&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_conversations&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  disadvantages and possible alternatives
&lt;/h1&gt;

&lt;p&gt;however easy to use and cool this library sounds. it still has a couple of disadvantages which are listed below&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sometimes LinkedIn might stop you with a captcha test. a solution to this issue is to log out and log back into your browser&lt;/li&gt;
&lt;li&gt;this happens because of two-way factorization or rate limiting issues. The rough limit is said to be around 800 requests within a single session
some possible alternatives could be trying to make your own scraper using selenium. this would require a lot of work and experimentation but it would also offer customizability and some extra features which would otherwise not be available in this library. these features can literally be anything since you are the creator of the scrapper and you can add/make anything of your choice!
again it all comes down to what is the end result you want to achieve and use the tools available to you accordingly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  conclusion &amp;amp; project ideas
&lt;/h1&gt;

&lt;p&gt;this library can be very handy and useful for a large scope of problems. it will save you loads of time and is very easy to use and you can set it up and start playing around with it in a matter of minutes! you can make cool projects like comparing famous people/profiles as a data science project since there is so much data available on LinkedIn. you can also try to make an ai model which can predict weather a person would get a job based on their profile. the model can be trained on employee data which can also be scrapped from LinkedIn itself. these were some fun project ideas. have fun coding :) &lt;/p&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>record VC audio in discord!</title>
      <dc:creator>hardik singh</dc:creator>
      <pubDate>Sat, 16 Jul 2022 10:28:31 +0000</pubDate>
      <link>https://dev.to/realhardik18/record-vc-audio-in-discord-19ap</link>
      <guid>https://dev.to/realhardik18/record-vc-audio-in-discord-19ap</guid>
      <description>&lt;p&gt;I have been working on this side project where I can record the audio of a vc with the help of discord.py&lt;/p&gt;

&lt;p&gt;in this post ill talk about how did I achieve this. you can also check out the &lt;a href="https://www.youtube.com/watch?v=Bgy6gTPF4Gw&amp;amp;t=7s&amp;amp;ab_channel=realhardik18" rel="noopener noreferrer"&gt;YouTube video&lt;/a&gt; i made about this.&lt;/p&gt;

&lt;p&gt;before we get to the fun part, you will have to make and set up a bot via the &lt;a href="https://discord.com/developers" rel="noopener noreferrer"&gt;discord developer portal&lt;/a&gt;. you will also need to have a fairly good amount of knowledge about discord.py and how it works!&lt;/p&gt;

&lt;p&gt;now once you have a bot with a basic test command working, we can import the required modules!&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 python
import discord
from discord.ext import commands
from discord.ext.audiorec import NativeVoiceClient #important!
from secrets import token #bot's secret token
import random


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

&lt;/div&gt;
&lt;p&gt;now to record audio in the vc, we need to first make the bot join the vc in which the user is, which can be done using this command:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="nd"&gt;@client.command&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;discord&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;VoiceChannel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;author&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;voice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;voice_client&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;voice_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;move_to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;NativeVoiceClient&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rec&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;as you can see, this command invokes a command named 'rec'. this 'rec' command is the main command which we will use to record the audio in the vc!&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="nd"&gt;@client.command&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;voice_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;record&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Exception: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;embedVar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;discord&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Embed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Started the Recording!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                             &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;use !stop to stop!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mh"&gt;0x546e7a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;embedVar&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;we start the recording and then send an embed notifying the user that the recording has started!&lt;br&gt;
the recording can be stopped and saved by using this command&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="nd"&gt;@client.command&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;voice_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_recording&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Stopping the Recording&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;wav_bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;voice_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop_record&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;999999&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.wav&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;wb&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wav_bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;voice_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;over here the bot basically gets all the audio data in the form of bytes and then writes al the data into a wav file(this file's name is randomly generated), which is then saved to the system&lt;br&gt;
now since the bot's job is done, it leaves the vc!&lt;/p&gt;

&lt;p&gt;some extras:&lt;br&gt;
you can also add commands to make sure there is someone in the vc before the bot joins the vc, or uploading the audio file to a server on the cloud. all these points are discussed in my &lt;a href="https://www.youtube.com/watch?v=Bgy6gTPF4Gw&amp;amp;t=8s&amp;amp;ab_channel=realhardik18" rel="noopener noreferrer"&gt;youtube video&lt;/a&gt;, feel free to check it out!&lt;/p&gt;

&lt;p&gt;all the code for this project is available on github too!&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/realhardik18" rel="noopener noreferrer"&gt;
        realhardik18
      &lt;/a&gt; / &lt;a href="https://github.com/realhardik18/discord.py-voice-recorder" rel="noopener noreferrer"&gt;
        discord.py-voice-recorder
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      repo for recording the vc in an audio channel in discord.py
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>discord</category>
      <category>python</category>
    </item>
    <item>
      <title>convert images to ASCII characters!</title>
      <dc:creator>hardik singh</dc:creator>
      <pubDate>Sun, 15 May 2022 09:51:23 +0000</pubDate>
      <link>https://dev.to/realhardik18/convert-images-to-ascii-characters-46lp</link>
      <guid>https://dev.to/realhardik18/convert-images-to-ascii-characters-46lp</guid>
      <description>&lt;h2&gt;
  
  
  ever wanted to convert your image to Ascii characters? here is how you can achieve it!!
&lt;/h2&gt;

&lt;p&gt;we will be converting this image of Mario, into ascii characters&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eTAllIpF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wykjapahq2r9bgeh0e8f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eTAllIpF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wykjapahq2r9bgeh0e8f.png" alt="Image description" width="736" height="925"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  step 1:- loading in the image and resizing
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HVX46dJW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p688yy34wsm3jwtww1xv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HVX46dJW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p688yy34wsm3jwtww1xv.png" alt="Image description" width="513" height="108"&gt;&lt;/a&gt;&lt;br&gt;
we resize the image since there are a LOT of pixels. so we resize it by 50%! this will make the final output smaller and we will not be compromising on the quality(since there are a lot of pixels to begin with!) &lt;/p&gt;

&lt;h2&gt;
  
  
  step 2:- converting the image to a pure black and white image
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ifOyPrfc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n01wwl1yx57o5prnu2am.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ifOyPrfc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n01wwl1yx57o5prnu2am.png" alt="Image description" width="454" height="86"&gt;&lt;/a&gt;&lt;br&gt;
here we convert the image to a pure black and white image. we do this since text characters don't have color. now we can save this black and white data to a new image&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OC45FzpW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xdfu3ota572kkv9pevrg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OC45FzpW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xdfu3ota572kkv9pevrg.png" alt="Image description" width="368" height="462"&gt;&lt;/a&gt;&lt;br&gt;
here is what the image looks after the conversion!&lt;/p&gt;

&lt;h2&gt;
  
  
  step 3:- converting this black and white data to text characters
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZtQBmOOi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/il4no4spcn99trl5hiqb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZtQBmOOi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/il4no4spcn99trl5hiqb.png" alt="Image description" width="552" height="362"&gt;&lt;/a&gt;&lt;br&gt;
here we read in the data from the fresh black and white image which we saved in the last step. we also have a count variable which helps us to break the line for every time we finish a row section of the image &lt;br&gt;
now we check the color of each of these pixels, if its black(0), we simply write in a "~". on the other hand if its white(255), we write in a "."&lt;br&gt;
we now save this data into a text document!&lt;/p&gt;

&lt;h2&gt;
  
  
  here is how it looks like finally
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WMHyDwsg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aegf5539j2utsrg68are.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WMHyDwsg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aegf5539j2utsrg68are.png" alt="Image description" width="880" height="604"&gt;&lt;/a&gt;&lt;br&gt;
I have resized my code editor so you all can see this masterpiece! &lt;/p&gt;

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