<?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: Amruth Pillai</title>
    <description>The latest articles on DEV Community by Amruth Pillai (@amruthpillai).</description>
    <link>https://dev.to/amruthpillai</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%2F175621%2Fc65b987e-6125-4130-bc0f-4e3b3d796340.jpeg</url>
      <title>DEV Community: Amruth Pillai</title>
      <link>https://dev.to/amruthpillai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amruthpillai"/>
    <language>en</language>
    <item>
      <title>Building Standup Roulette</title>
      <dc:creator>Amruth Pillai</dc:creator>
      <pubDate>Wed, 23 Jun 2021 13:27:43 +0000</pubDate>
      <link>https://dev.to/amruthpillai/building-standup-roulette-1afh</link>
      <guid>https://dev.to/amruthpillai/building-standup-roulette-1afh</guid>
      <description>&lt;p&gt;At &lt;a href="https://www.grover.com/de-en"&gt;Grover&lt;/a&gt;, in my squad, like most squads, we do stand-ups every day. To make things interesting and to keep the whole team active, we suggest to have different hosts every single day within our team. Someone to run through the Kanban board and take down action points.&lt;/p&gt;

&lt;p&gt;For a short while, we were doing this manually, where we would nominate someone at the end of the call, which was going great, but it has its pitfalls. Like not remembering who we nominated the previous day, or forgetting to nominate someone altogether.&lt;/p&gt;

&lt;p&gt;Hence, &lt;strong&gt;Standup Roulette&lt;/strong&gt; was born.&lt;/p&gt;

&lt;p&gt;This is a simple Node.js script, hosted on &lt;a href="https://pipedream.com/"&gt;Pipedream&lt;/a&gt;, that runs about 30 minutes before our actual stand-up, which does the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get all members of our Slack channel&lt;/li&gt;
&lt;li&gt;Exclude members who are on specific schedules&lt;/li&gt;
&lt;li&gt;Pick a random announcement message, replace the placeholder with the user ID&lt;/li&gt;
&lt;li&gt;Post the message on Slack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the meanwhile, it also makes use of Pipedream's &lt;a href="https://pipedream.com/docs/workflows/steps/code/state/#workflow-state"&gt;workflow-level state&lt;/a&gt; management, &lt;code&gt;$checkpoint&lt;/code&gt;, so we are able to store information across runs. So I simply store an array of &lt;code&gt;history&lt;/code&gt; which contains the last &lt;code&gt;n - 1&lt;/code&gt; user IDs who have already hosted recently, where &lt;code&gt;n&lt;/code&gt; is the number of members in the channel. &lt;/p&gt;

&lt;p&gt;This &lt;code&gt;history&lt;/code&gt; array is also appended to the exclusion list so we don't get the same person hosting twice in a row, or too often.&lt;/p&gt;

&lt;p&gt;You can check out the Pipedream workflow we use right here:&lt;br&gt;
&lt;a href="https://pipedream.com/@AmruthPillai/standup-roulette-grover-x-squad-scheduled-trigger-p_n1CowNy"&gt;https://pipedream.com/@AmruthPillai/standup-roulette-grover-x-squad-scheduled-trigger-p_n1CowNy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try it out at your workplace as well and let me know how it goes!&lt;/p&gt;

&lt;p&gt;Thank you for reading.&lt;/p&gt;

</description>
      <category>pipedream</category>
      <category>automation</category>
      <category>standup</category>
      <category>slack</category>
    </item>
    <item>
      <title>Introducing, Reactive Resume v2!</title>
      <dc:creator>Amruth Pillai</dc:creator>
      <pubDate>Sat, 18 Jul 2020 03:12:28 +0000</pubDate>
      <link>https://dev.to/amruthpillai/introducing-reactive-resume-v2-709</link>
      <guid>https://dev.to/amruthpillai/introducing-reactive-resume-v2-709</guid>
      <description>&lt;p&gt;It’s with extreme excitement, happiness and relief that I can now say, introducing… Reactive Resume v2.&lt;/p&gt;

&lt;p&gt;With nearly 1.7k stars on GitHub, around 100 closed issues and feature requests, I heard you loud and clear and revamped the project from the ground up, and boy, am I excited to hear what you guys think about this!&lt;/p&gt;

&lt;p&gt;Without much ado, here’s the link to the all new Reactive Resume:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://rxresu.me"&gt;https://rxresu.me&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;For those of you who are not aware of the project, here’s the cliff note: Reactive Resume is a free, open source, ad-free, private app that focuses on making the mundane tasks of creating, updating and sharing your resume a piece of cake.&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A8hyAuqD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/a3lzy6hquwzegvdo092i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A8hyAuqD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/a3lzy6hquwzegvdo092i.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HJCxAMKo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4n301a0fe0y22xhe522a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HJCxAMKo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4n301a0fe0y22xhe522a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--brz__tGh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nw58m0yjk4gbfg9eskc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--brz__tGh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nw58m0yjk4gbfg9eskc1.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here is a subset of features introduced in the all new revamp:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manage multiple resumes with one account, and sync your data across devices&lt;/li&gt;
&lt;li&gt;Sign in with Google, or sign in anonymously just to test the app&lt;/li&gt;
&lt;li&gt;Send your resume to others with a unique sharable link&lt;/li&gt;
&lt;li&gt;Structure sections and change layouts the way you want to&lt;/li&gt;
&lt;li&gt;Import your existing JSON Resume in one click&lt;/li&gt;
&lt;li&gt;Everything is still free, and always will be.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the link to the GitHub Repository, if you'd like to go through the code (it's in React, hence the name)&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--i3JOwpme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/AmruthPillai"&gt;
        AmruthPillai
      &lt;/a&gt; / &lt;a href="https://github.com/AmruthPillai/Reactive-Resume"&gt;
        Reactive-Resume
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. Try it out today!
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Also, if you have an itch to contribute to the project, it would be extremely helpful to translate the app into your own language so people across the world would be able to use it with ease.&lt;/p&gt;

&lt;p&gt;Please do take a few minutes to go through the app, and if you loved it, let me know in the comments below on what could be better. Thank you so much for all the support!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Redesigning Reactive Resume, and I need your inputs!</title>
      <dc:creator>Amruth Pillai</dc:creator>
      <pubDate>Thu, 02 Jul 2020 09:15:19 +0000</pubDate>
      <link>https://dev.to/amruthpillai/redesigning-reactive-resume-and-i-need-your-inputs-5ga6</link>
      <guid>https://dev.to/amruthpillai/redesigning-reactive-resume-and-i-need-your-inputs-5ga6</guid>
      <description>&lt;p&gt;Hey everyone!&lt;/p&gt;

&lt;p&gt;So, as a long-term side project, I've been developing this app called Reactive Resume (live on &lt;a href="https://rxresu.me"&gt;https://rxresu.me&lt;/a&gt;) for a while now and it has had overwhelming responses. People use it day in and day out to create, update or share their resumes. This has motivated me to spend some more time in making it much better.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/amruthpillai" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cnQJXdAY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--gw0hCYDG--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/175621/c65b987e-6125-4130-bc0f-4e3b3d796340.jpeg" alt="amruthpillai"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/amruthpillai/ever-dreamed-of-a-free-and-open-source-resume-builder-that-doesn-t-store-your-data-meet-reactive-resume-1dpl" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Ever dreamed of a free and open-source resume builder that doesn't store your data? Meet Reactive Resume!&lt;/h2&gt;
      &lt;h3&gt;Amruth Pillai ・ Mar 26 '20 ・ 3 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#resume&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#react&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;For those of you who don't know, Reactive Resume is a &lt;strong&gt;free and open-source&lt;/strong&gt; resume builder that focuses on privacy, great design and ease of use. Never did I imagine that so many people would want the same thing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ieqTEykS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1crtjoir0pxueouitehg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ieqTEykS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1crtjoir0pxueouitehg.png" alt="Google Analytics Screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the new version, I hope to add a bunch of new features and also make the usability of the application a lot more smoother. I would like your inputs on the design and UX of the app, if you have the time. Please visit the Figma design below to see the new design and also collaborate with me using the comments.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://www.figma.com/file/CIhmjEx8ByQKoIp3D0p0Rx/Reactive-Resume-v2?node-id=1%3A12"&gt;https://www.figma.com/file/CIhmjEx8ByQKoIp3D0p0Rx/Reactive-Resume-v2?node-id=1%3A12&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Please do let me know in the comments below, or you may leave comments on the Figma file I've linked above on how I can make Reactive Resume better, what features you are looking for in a resume builder. No answer barred, I'd love to hear from each and every one of you.&lt;/p&gt;

&lt;p&gt;Thank you so much! :)&lt;/p&gt;

</description>
      <category>help</category>
      <category>redesign</category>
      <category>figma</category>
      <category>design</category>
    </item>
    <item>
      <title>Postman Collection: I Give You Best Price</title>
      <dc:creator>Amruth Pillai</dc:creator>
      <pubDate>Tue, 23 Jun 2020 05:43:02 +0000</pubDate>
      <link>https://dev.to/amruthpillai/postman-collection-i-give-you-best-price-4jkn</link>
      <guid>https://dev.to/amruthpillai/postman-collection-i-give-you-best-price-4jkn</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gasIfH2C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.imgur.com/ojqy8RQ.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gasIfH2C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.imgur.com/ojqy8RQ.gif" alt="I Give You Best Price"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Looking to buy something soon? Make sure you get the best price.
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; I recently started working at Postman, and this post is in an attempt to explore what the app can do and it's abilities in terms of automation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;This is a simple collection that you can run/monitor to search for a specific product on various e-commerce websites (made for Indian markets) and shows you a graph of all the prices, along with where you get the product the cheapest.&lt;/p&gt;

&lt;p&gt;It also sends you a slack notification at the end with information about the daily deal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Run
&lt;/h3&gt;

&lt;p&gt;Try the collection right here by clicking on the button and running on Postman. Be sure to create an environment before you start :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.getpostman.com/run-collection/c17d494ece7c11628797"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V37vEqA7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://run.pstmn.io/button.svg" alt="Run in Postman"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow
&lt;/h3&gt;

&lt;p&gt;For example, I've been looking to buy a simple keyboard for my secondary PC that my dad works on. I've been looking at the Dell KB216 for some time now, but just looking for the best deal.&lt;/p&gt;

&lt;p&gt;I've set up the collection as shown below to look for the Dell KB216 on various websites.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lJA0at2o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/NUSq1eA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lJA0at2o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/NUSq1eA.png" alt="Amazon - Dell KB216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each request has an associated Test Script along with it to be able to scrape the data off of the HTML body. Here's the test script for Amazon India.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cheerio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;responseBody&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstProductElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.s-result-item&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;priceElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;firstProductElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.a-price-whole&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;parseFloat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;priceElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Amazon has returned a valid price&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;number&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;amazon_price&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Going through individual websites like Flipkart, Snapdeal, Shopclues and eBay, it collects the price information and stores it as environment variables in the workspace.&lt;/p&gt;

&lt;p&gt;Finally, using Postman's Visualize Tab, I draw up a chart courtesy of Charts.js and pit against the prices from all the sites.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6MTaA63d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/YZrVa4J.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6MTaA63d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/YZrVa4J.png" alt="Price Graph"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This eventually sends out a notification on a Slack Channel that I've made specifically for this purpose.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bTHFrMAQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/etpUvGg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bTHFrMAQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/etpUvGg.png" alt="Slack Notification"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see here, over the course of waiting just a single day, I've saved ₹100. Do this over and over again, and you'll be a millionaire in no time! :)&lt;/p&gt;

&lt;p&gt;That's my time, hope you found this useful!&lt;/p&gt;

</description>
      <category>postman</category>
      <category>collection</category>
      <category>automation</category>
      <category>scraping</category>
    </item>
    <item>
      <title>Postman ft. Spotify, a study into the automation capabilities of Postman</title>
      <dc:creator>Amruth Pillai</dc:creator>
      <pubDate>Mon, 15 Jun 2020 08:01:28 +0000</pubDate>
      <link>https://dev.to/amruthpillai/postman-ft-spotify-a-study-into-the-automation-capabilities-of-postman-256b</link>
      <guid>https://dev.to/amruthpillai/postman-ft-spotify-a-study-into-the-automation-capabilities-of-postman-256b</guid>
      <description>&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;p&gt;Most of you may have read my previous article on how I lost a job opportunity that I was lucky to get to COVID. Well, fast forward two months later and here I am, working for one of the companies I've always admired and used on a day-to-day basis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I started working for Postman from last week&lt;/strong&gt;, and it's been a wild roller coaster ride of self-judgement and amazement, but the people around me have kept me motivated to working at my best.&lt;/p&gt;

&lt;p&gt;They have this tradition where everyone who joins is supposed to make a first collection and demo it, mainly to explore the product and find out more of what it can do. This article is a documentation of just that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I've recently moved to Spotify from YouTube Music, and ever since, I've been in love with it's recommendation engine, and more than that, it's developer APIs. It's a delight to work with APIs that have so much to do with music, machine learning and personalization.&lt;/p&gt;

&lt;p&gt;My idea here was to build my very first collection on what I am most passionate about... and since Unsplash APIs for photography were too restrictive, I went with my second passion, music.&lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9wnU_ote--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/nCmOsU2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9wnU_ote--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/nCmOsU2.png" alt="Spotify Screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Google Cloud Auth Token, with Natural Language API enabled&lt;/li&gt;
&lt;li&gt;Spotify Developer Application (Client ID, Client Secret)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BkCzxF-m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/B7Tr0C3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BkCzxF-m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/B7Tr0C3.png" alt="Documentation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://documenter.getpostman.com/view/281418/SzzdE2VK"&gt;https://documenter.getpostman.com/view/281418/SzzdE2VK&lt;/a&gt;
&lt;/h4&gt;

&lt;h2&gt;
  
  
  Automation Workflow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  On-Demand Personalized Playlists based on your Current Mood
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yVU9UjDa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/4nlfk33.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yVU9UjDa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/4nlfk33.png" alt="On-Demand Personalized Playlists based on your Current Mood"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The flow of this automated Postman Collection is as follows:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User enters a small and simple sentence describing their mood.

&lt;ul&gt;
&lt;li&gt;Get a Sentiment Score using Google's Natural Language API&lt;/li&gt;
&lt;li&gt;Use math to map the value from an original range of (-1, 1) to (0, 1)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Get Currently Logged In User's Profile on Spotify

&lt;ul&gt;
&lt;li&gt;Run Test to check if User was Returned Successfully&lt;/li&gt;
&lt;li&gt;Store user_id value to Collection Variables&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Get Current User's 5 Recently Played Tracks

&lt;ul&gt;
&lt;li&gt;Run Test to check if 5 Tracks were returned&lt;/li&gt;
&lt;li&gt;Store Track IDs in recently_played Collection Variable as CSV&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Create Private Playlist "Postman ft. Spotify", if not already created

&lt;ul&gt;
&lt;li&gt;Go to next request if already created using postman.setNextRequest()&lt;/li&gt;
&lt;li&gt;Run Test to check if status code is 201 Created&lt;/li&gt;
&lt;li&gt;Store playlist_id value to Collection Variables&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Get Recommendation of Tracks for Current User

&lt;ul&gt;
&lt;li&gt;Use target_energy to gauge the energy of tracks, we will be using the mapped sentiment value for this&lt;/li&gt;
&lt;li&gt;Use the value of recently_played for the query param seed_tracks which takes a max. of 5 track IDs to seed it's recommendations&lt;/li&gt;
&lt;li&gt;Run Test to check if status code is 200 OK and snapshot_id was returned&lt;/li&gt;
&lt;li&gt;Store the recommended tracks into a comma-separated variable called recommended_tracks in the Collection Variables&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Replace the Original Playlist Tracks with New Recommended Tracks

&lt;ul&gt;
&lt;li&gt;Run Test to check if status code is 201 Created&lt;/li&gt;
&lt;li&gt;Check Spotify for the newly updated playlist, strap on your headphones and enjoy!&lt;/li&gt;
&lt;/ul&gt;


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

&lt;h3&gt;
  
  
  One-Click Lyrics for the Current Playing Song
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Another later added feature to this collection&lt;/strong&gt; was the ability to view lyrics to songs that were currently playing on your Spotify account. This is something I do very often, and found it useful for me since I would be able to get the lyrics to a song on-demand with just one click.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yyjMEswf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/ZR21hFV.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yyjMEswf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/ZR21hFV.png" alt="Get Lyrics for the Current Playing Song"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get Currently Playing Song on Spotify

&lt;ul&gt;
&lt;li&gt;Extract artist_name and track_name from the response and store as a collection variable&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Get Lyrics to the Song from lyrics.ovh APIs

&lt;ul&gt;
&lt;li&gt;Use artist_name and track_name as query parameters to the GET request made to api.lyrics.ovh&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Display Lyrics using Postman Visualizer

&lt;ul&gt;
&lt;li&gt;Response of the API is in a JSON format, unreadable and unsuitable for karaoke with friends, so display them on a Postman Visualize Template.&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EMmR8w3E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/DHKlmSB.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EMmR8w3E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/DHKlmSB.png" alt="One Click Lyrics"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What else can Postman do?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YgkG3pq8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/VfO9D9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YgkG3pq8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/VfO9D9r.png" alt="Postman Collection Runner"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks to &lt;strong&gt;Postman's Collection Runner&lt;/strong&gt;, and the branching functionality provided through &lt;strong&gt;Postman’s Test Scripts&lt;/strong&gt;, I was able to automate the process and get a new batch of fresh music to discover on-demand with just a click of a button.&lt;/p&gt;

&lt;p&gt;Another added advantage is &lt;strong&gt;Postman's Monitor&lt;/strong&gt; feature to mimic the work of cron jobs (at least that's how I see it), to be able to make these requests on a regular interval, quite similar to Spotify's Discover Weekly feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Learning that Postman can do a lot more than just Documentation, it can perform Automation Tasks which usually require some scripting knowledge, but a part of the weight is lifted off here.&lt;/li&gt;
&lt;li&gt;Making use of tools like Postman Collection Runner, Postman Monitor, Newman (always found the name interesting, Seinfeld #Represent)&lt;/li&gt;
&lt;li&gt;Trying to Authenticate with different kind of APIs in different ways: OAuth 2.0 for Spotify, JWT Bearer Token for Google Cloud and handling them within the Postman User Interface&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Thank you for reading!
&lt;/h3&gt;

</description>
    </item>
    <item>
      <title>Recreating Lodash: _.pull()</title>
      <dc:creator>Amruth Pillai</dc:creator>
      <pubDate>Tue, 26 May 2020 08:19:42 +0000</pubDate>
      <link>https://dev.to/amruthpillai/recreating-lodash--pull-4jei</link>
      <guid>https://dev.to/amruthpillai/recreating-lodash--pull-4jei</guid>
      <description>&lt;p&gt;I want to start a series where I'll look at various lodash functions and recreate them to the best of my knowledge using plain ol' Javascript.&lt;/p&gt;

&lt;p&gt;I did look around for this on DEV, but couldn't find any articles related to this, so saw an opportunity to make one (or maybe I'm just really bad at searching).&lt;/p&gt;

&lt;p&gt;I'm starting out with the &lt;a href="https://lodash.com/docs/4.17.15#pull"&gt;&lt;code&gt;_.pull()&lt;/code&gt;&lt;/a&gt; function cause that's one I know how to recreate easily, but feel free to suggest functions in the comments below and I'll consider them for the next edition of the series.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does it do?
&lt;/h2&gt;

&lt;p&gt;The _.pull() method simply takes an array and a variable number of values after it and modifies the array with the values removed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pull&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// =&amp;gt; ['b', 'b']&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  How can we make it better?
&lt;/h1&gt;

&lt;p&gt;Now, if there's one thing I do not like, it's functions mutating my original array. I'd much rather have it return a new array thus not modifying the original data.&lt;/p&gt;

&lt;p&gt;Another change I'll be making is instead of working on variable arguments, to make this tutorial simple, I'll just pass another array with all the values, so the finished function would look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pull&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// =&amp;gt; ['b', 'b']&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is similar to another function in lodash, &lt;a href="https://lodash.com/docs/4.17.15#difference"&gt;&lt;code&gt;_.difference()&lt;/code&gt;&lt;/a&gt;, so we're essentially rebuilding that.&lt;/p&gt;

&lt;h1&gt;
  
  
  How do we build it?
&lt;/h1&gt;

&lt;p&gt;Right off the bat, we'll be using the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter"&gt;&lt;code&gt;Array.prototype.filter()&lt;/code&gt;&lt;/a&gt; method for this.&lt;/p&gt;

&lt;p&gt;Let's write our function definition first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;pull&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// insert magic here&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's call the filter method on the array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;pull&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// insert more magic here&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, we're going to check if the item inside the values array exists inside the array. We can do this by using the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf"&gt;&lt;code&gt;Array.prototype.indexOf()&lt;/code&gt;&lt;/a&gt; function.&lt;/p&gt;

&lt;p&gt;If the value exists, we would get a non-zero value, so we can return false to remove it from the array, otherwise we can return true to keep it in the array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;pull&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;indexOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is going to churn out our expected output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does this really work?
&lt;/h2&gt;

&lt;p&gt;Here's a CodePen to play around with and see the code in action.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/AmruthPillai/embed/BaoEvpE?height=600&amp;amp;default-tab=js,result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;Of course, in reality, lodash does a lot more in terms of type checking and it's well built out, but it would pay to know how it works under the hood :)&lt;/p&gt;

&lt;p&gt;Do let me know if you find this interesting with a reaction, and if you want to see other functions, mention them in the comments!&lt;/p&gt;

&lt;p&gt;Thank you so much for reading! :)&lt;/p&gt;

</description>
      <category>lodash</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Creating an Interactive Cartoon using HTML/CSS/JS</title>
      <dc:creator>Amruth Pillai</dc:creator>
      <pubDate>Sun, 03 May 2020 18:01:05 +0000</pubDate>
      <link>https://dev.to/amruthpillai/creating-an-interactive-cartoon-using-html-css-js-1bi7</link>
      <guid>https://dev.to/amruthpillai/creating-an-interactive-cartoon-using-html-css-js-1bi7</guid>
      <description>&lt;p&gt;I've always been amazed by what few people can do with CSS. They are truly artists, and that's what inspired me to make this.&lt;/p&gt;

&lt;p&gt;It's extremely simple, honestly noob-level, but I felt if anybody else wanted to get into the CSS artistry zone, this would be a great tutorial pen to see what makes everything work the way it should.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/AmruthPillai/embed/qBOVpqz?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I had so much fun making this, and maybe I might make a few more. Any suggestions on libraries to use that might make my life easier? Any CSS tricks to drawing perfect detailed faces? I'd love to hear your inputs.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I lost my job because of COVID19.</title>
      <dc:creator>Amruth Pillai</dc:creator>
      <pubDate>Fri, 24 Apr 2020 14:31:39 +0000</pubDate>
      <link>https://dev.to/amruthpillai/i-lost-my-job-because-of-covid19-1e29</link>
      <guid>https://dev.to/amruthpillai/i-lost-my-job-because-of-covid19-1e29</guid>
      <description>&lt;p&gt;I'm writing this as soon as I got off the call where they hit the nail right in the coffin of my career, so I might be blogging emotionally right now, which as we've all seen in the movie "The Social Network", is the best thing to do right now.&lt;/p&gt;

&lt;p&gt;As a brief background, let me summarise my fucked up situation. I used to work in a quaint little startup in Bangalore, India, where I currently live. I've given about 2 years of my life to that startup, watching it grow from its inception. Then, I made the big decision to decide to move closer to my girlfriend, who is in Berlin, Germany right now. In the first month of searching for a job, I got it. I couldn't believe my luck. I got through 3 rounds of interviews, they loved my profile and my technical skills and when I spoke to the CTO, they immediately offered me the job. It was the happiest day of my life.&lt;/p&gt;

&lt;p&gt;I risked everything, did the whole 9 yards. I left my company, I told my family about the great news, I shared the big news about me moving there finally and got her hopes up. I honestly felt like I did the right thing for once in my life.&lt;/p&gt;

&lt;p&gt;Fast forward to now, just getting off the call where the whole dream of me moving to Germany has been axed off, it's becoming a little hard to find a reason to even be alive right now. My career has been everything to me since a very young age. If you've been a part of my life's journey, all I've ever done is code, code, code, all in the hopes for a good job, stable life, and to be able to protect my family.&lt;/p&gt;

&lt;p&gt;I can't blame anyone, to be honest. It's just the hand that I've been dealt with. I've never been a gambling man, but for some reason, it feels like I gambled in my current life to get a better life, and a bouncer called Corona beat the shit out of me. Things feel bleak right now. My dad is supportive, my girlfriend is in tears, as am I.&lt;/p&gt;

&lt;p&gt;I spent the better part of this whole lockdown and being unemployed, building two-three products, all open-sourced, just to help people. I believe in karma a lot. The good you do to others will come back to you. So I didn't work on anything else but just kept building ideas that would help people. Ironically, I made a resume builder that I would have to use now to apply for jobs. It's fine if you laughed at that last part... I did.&lt;/p&gt;

&lt;p&gt;There's no wrongdoing by anyone here. The company that was going to hire me, they did the difficult thing by calling me and telling it to my face, they promised that if things do get back to normal, that they would get back to me, but they don't know when normal is... I truly respected them for it, and have no remorse.&lt;/p&gt;

&lt;p&gt;This news comes only a day later after I released my new website where I had proudly stated, that I got a job with a startup in Germany of all places. Almost a dozen people wrote back to me asking how I did it, how I made the transition. I felt like I was inspiring so many others who dreamed of the same, that they could do it. Now, it just feels heartbreaking.&lt;/p&gt;

&lt;p&gt;I'm writing all of this, I guess, not for the likes, not for the sympathy, but... just because I shouldn't go crazy drowned in my own sorrows. I didn't want to burden my girlfriend to have to listen to me cry. I didn't want my dad to feel bad looking at his son's break down. I didn't want to share the humiliating reversal of good news with my friends who had such high hopes and genuine happiness for me.&lt;/p&gt;

&lt;p&gt;So, moving on... (yes, I know it's been less than an hour since the call, but we gotta move on some time)... what's next? Do I look for a job here in Bangalore? Do I try my luck again and maybe get another job in Berlin? Do I ask for my old job back? Do I wait out the Corona Roller Coaster and hope they call me back?&lt;/p&gt;

&lt;p&gt;I'm not without options, I'm just without hope.&lt;/p&gt;

&lt;p&gt;Thank you for reading.&lt;/p&gt;

</description>
      <category>mentalhealth</category>
      <category>covid19</category>
      <category>career</category>
      <category>blog</category>
    </item>
    <item>
      <title>Upvote Reactive Resume on Product Hunt!</title>
      <dc:creator>Amruth Pillai</dc:creator>
      <pubDate>Wed, 22 Apr 2020 13:30:20 +0000</pubDate>
      <link>https://dev.to/amruthpillai/upvote-reactive-resume-on-product-hunt-1jk9</link>
      <guid>https://dev.to/amruthpillai/upvote-reactive-resume-on-product-hunt-1jk9</guid>
      <description>&lt;p&gt;I've never wanted anything more than to be on the front page of Product Hunt. I'd really love it if I could make that dream a reality, and I did whatever I could to make a good product, but I don't have the rockstar fan following to make it happen.&lt;/p&gt;

&lt;p&gt;If you have an account on Product Hunt, please help by upvoting, it would just take a second but it would mean a whole lot to me :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.producthunt.com/posts/reactive-resume"&gt;https://www.producthunt.com/posts/reactive-resume&lt;/a&gt;&lt;/p&gt;

</description>
      <category>help</category>
    </item>
    <item>
      <title>I rebuilt my personal portfolio using GatsbyJS, and I'm loving it!</title>
      <dc:creator>Amruth Pillai</dc:creator>
      <pubDate>Wed, 22 Apr 2020 04:55:20 +0000</pubDate>
      <link>https://dev.to/amruthpillai/i-rebuilt-my-personal-portfolio-using-gatsbyjs-and-i-m-loving-it-1dd4</link>
      <guid>https://dev.to/amruthpillai/i-rebuilt-my-personal-portfolio-using-gatsbyjs-and-i-m-loving-it-1dd4</guid>
      <description>&lt;p&gt;It's been about 4 years since I started my project, Resume on the Web, where I created a website that portrays who I am and my ever-changing personality. Every once in a while, I revamp the whole thing using new technologies so that I keep myself updated with the latest and greatest, and also gives me a creative outlet to experiment with new design ideas.&lt;/p&gt;

&lt;p&gt;This year, I kicked it up a notch by revamping the design of the old boring two-column resume look, to something a lot more vibrant, responsive and effective. I'll keep my words to a minimum and let the website do the talking :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introducing, the brand-new, Resume on the Web: &lt;br&gt;
&lt;a href="https://amruthpillai.com/"&gt;https://amruthpillai.com/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For those who want the technical deets, this version is built with GatsbyJS, a static-site React framework that I wanted to explore recently, as well as Tailwind CSS for the uber-cool utility classes.&lt;/p&gt;

&lt;p&gt;As always, the source code for the project is available on GitHub here: &lt;a href="https://github.com/AmruthPillai/ResumeOnTheWeb-Gatsby"&gt;https://github.com/AmruthPillai/ResumeOnTheWeb-Gatsby&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please do let me know if you liked it as much as I enjoyed making it! :)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Dealing with requests on your open-source projects</title>
      <dc:creator>Amruth Pillai</dc:creator>
      <pubDate>Thu, 16 Apr 2020 08:34:05 +0000</pubDate>
      <link>https://dev.to/amruthpillai/dealing-with-requests-on-your-open-source-projects-3mcp</link>
      <guid>https://dev.to/amruthpillai/dealing-with-requests-on-your-open-source-projects-3mcp</guid>
      <description>&lt;p&gt;Hey everyone!&lt;/p&gt;

&lt;p&gt;So, I launched a new project about 2-3 weeks ago, and I'm glad to report that it's still catching a lot of stars on GitHub... on one hand, it makes me highly motivated and happy to continue working on the project.&lt;/p&gt;

&lt;p&gt;But then, now and again, I receive emails like this:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EtM6dyUq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/aUEjwq7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EtM6dyUq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/aUEjwq7.png" alt="Image URL"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am at fault here cause I released a product out in the wild with, albeit, big problems but that's cause I assumed I would learn in the process. It's difficult to keep up the motivation when you hear that you've wasted someone's time or if someone calls your work useless.&lt;/p&gt;

&lt;p&gt;I know I might not be alone here, others might have received emails like this too or gotten requests with no acknowledgment on their GitHub Issues. How do you keep going? How do you stay strong to keep supporting the app? &lt;/p&gt;

&lt;p&gt;I know an obvious answer would be just to focus on those who give constructive criticism, as opposed to those who just give feedback like this, but it's not that easy for me to let go.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>psych</category>
      <category>mentalhealth</category>
      <category>motivation</category>
    </item>
    <item>
      <title>🔥 FireUp CLI: Upload anything, right from your command-line</title>
      <dc:creator>Amruth Pillai</dc:creator>
      <pubDate>Wed, 08 Apr 2020 07:10:45 +0000</pubDate>
      <link>https://dev.to/amruthpillai/fireup-cli-upload-anything-right-from-your-command-line-2k2h</link>
      <guid>https://dev.to/amruthpillai/fireup-cli-upload-anything-right-from-your-command-line-2k2h</guid>
      <description>&lt;p&gt;Hey DEV!&lt;/p&gt;

&lt;p&gt;I'm back again with another free and open-source project, one that I've always wanted but never found online, so I just built it myself. It definitely has a lot of work to do, but it's in a quite usable stage right now for me to share it with you all :)&lt;/p&gt;

&lt;p&gt;I've always found myself on the terminal 90% of the time when I'm on my computer. The first thing I do when I wake up is fire up the command line, git pull all my projects and then I drink my coffee.&lt;/p&gt;

&lt;p&gt;Given this lifestyle, I've also found it a pain to find a place to upload a certain file when I need to share them with friends privately or upload an image publicly that I want to post on a forum/message board. Thus, &lt;code&gt;fireup-cli&lt;/code&gt; was born. It taps into your Firebase Project's Storage Bucket to upload/download files to it, share links and delete them, all from your command line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All your data is completely secure, with files being stored in your Firebase Storage Bucket and no one else's.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZuigS29W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.imgur.com/Peyqklx.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZuigS29W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.imgur.com/Peyqklx.gif" alt="Demo GIF"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Installing it on your machine is as simple as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npm install --global fireup-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Check the README for documentation on further setup:&lt;/strong&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://res.cloudinary.com/practicaldev/image/fetch/s--i3JOwpme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/AmruthPillai"&gt;
        AmruthPillai
      &lt;/a&gt; / &lt;a href="https://github.com/AmruthPillai/fireup-cli"&gt;
        fireup-cli
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Upload anything, right from your command-line.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Eagerly awaiting your feedback and suggestions :)&lt;br&gt;
Thank you all!&lt;/p&gt;

</description>
      <category>firebase</category>
      <category>storage</category>
      <category>cli</category>
      <category>privacy</category>
    </item>
  </channel>
</rss>
