<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Nahrin Jalal</title>
    <description>The latest articles on Forem by Nahrin Jalal (@nahrinjalal).</description>
    <link>https://forem.com/nahrinjalal</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%2F20808%2F87fab82f-1ae2-41e4-9518-b1c01c278324.jpg</url>
      <title>Forem: Nahrin Jalal</title>
      <link>https://forem.com/nahrinjalal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nahrinjalal"/>
    <language>en</language>
    <item>
      <title>Hacktoberfest 2021: Celebrate Open Source With CodeSee</title>
      <dc:creator>Nahrin Jalal</dc:creator>
      <pubDate>Fri, 01 Oct 2021 20:21:27 +0000</pubDate>
      <link>https://forem.com/codesee/hacktoberfest-2021-celebrate-open-source-with-codesee-4d9d</link>
      <guid>https://forem.com/codesee/hacktoberfest-2021-celebrate-open-source-with-codesee-4d9d</guid>
      <description>&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%2Flearn.codesee.io%2Fcontent%2Fimages%2F2021%2F10%2FHacktoberfest-announcement-post.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%2Flearn.codesee.io%2Fcontent%2Fimages%2F2021%2F10%2FHacktoberfest-announcement-post.png" alt="Hacktoberfest 2021: Celebrate Open Source With CodeSee"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the past 8 years, the days leading up to October have seen a flurry of activity in the open source community—2021 was no different.&lt;/p&gt;

&lt;p&gt;It’s all in anticipation of the official start of &lt;a href="https://hacktoberfest.digitalocean.com/" rel="noopener noreferrer"&gt;Hacktoberfest&lt;/a&gt;—a month-long global celebration of open-source software. The event encourages giving back to the open source community by participating in donating effort, time, and funds to code-based events and projects.&lt;/p&gt;

&lt;p&gt;At CodeSee, we’re passionate about this mission and committed to launching &lt;a href="//oss-port.com"&gt;OSS Port&lt;/a&gt; just in time for Hacktoberfest 2021!&lt;/p&gt;

&lt;h2&gt;
  
  
  On OSS Port
&lt;/h2&gt;

&lt;p&gt;With OSS Port, we aim to &lt;strong&gt;connect projects to people and ease codebase onboarding for all&lt;/strong&gt;. Maintainers are invited to provide contribution best practices, support guidance, and interactive visual walkthroughs of their codebase using &lt;a href="https://learn.codesee.io/new-features-and-functionality-in-codesee-maps/" rel="noopener noreferrer"&gt;CodeSee Maps&lt;/a&gt;. Using Maps, contributors can readily onboard to a new project, with features to understand how files are connected, see how a pull request fits into the larger architecture, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  About Hacktoberfest
&lt;/h2&gt;

&lt;p&gt;Last Hacktoberfest saw more than 66,000 challenge completions, with a total of &lt;strong&gt;387,052 pull requests&lt;/strong&gt; opened across &lt;strong&gt;116,361 repositories&lt;/strong&gt;. And this year’s event is expected to deliver even stronger results!&lt;/p&gt;

&lt;p&gt;All of us on Team CodeSee are eager to support maintainers and contributors alike, share our knowledge, and connect with members across the community to do what we can to help lower the barrier of entry to open source!&lt;/p&gt;

&lt;h2&gt;
  
  
  OSS Port x Hacktoberfest Challenges
&lt;/h2&gt;

&lt;p&gt;It all starts with the basic Hacktoberfest qualifications. &lt;a href="https://hacktoberfest.digitalocean.com/register" rel="noopener noreferrer"&gt;Registered&lt;/a&gt; Hacktoberfest participants who are contributors must submit &lt;a href="https://hacktoberfest.digitalocean.com/faq" rel="noopener noreferrer"&gt;four quality pull requests&lt;/a&gt; to public GitHub or GitLab repositories in the month of October. Maintainers are also eligible to earn a reward for showing that they've completed 4 or more actions on unique pull requests.&lt;/p&gt;

&lt;p&gt;To &lt;strong&gt;boost your impact (and swag haul)&lt;/strong&gt;, we invite you to take part in our OSS Port x Hacktoberfest Challenges. Head over to our &lt;a href="https://www.oss-port.com/swag/" rel="noopener noreferrer"&gt;landing page&lt;/a&gt; for complete details on how you can partake in the fun as a Maintainer, Contributor, or both!&lt;/p&gt;

&lt;p&gt;Once you've completed our challenge(s), let us know by filling out &lt;a href="https://www.oss-port.com/swag/#swag" rel="noopener noreferrer"&gt;this form&lt;/a&gt;. After the month of October is over, CodeSee will process and verify all submissions, then let you know how you can claim your limited edition OSS Port swag.&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%2Flearn.codesee.io%2Fcontent%2Fimages%2F2021%2F10%2FScreen-Shot-2021-10-01-at-3.30.56-PM.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%2Flearn.codesee.io%2Fcontent%2Fimages%2F2021%2F10%2FScreen-Shot-2021-10-01-at-3.30.56-PM.png" alt="Hacktoberfest 2021: Celebrate Open Source With CodeSee"&gt;&lt;/a&gt;OSS Port x Hacktoberfest Challenge Rewards&lt;/p&gt;

&lt;h2&gt;
  
  
  We’ve got you!
&lt;/h2&gt;

&lt;p&gt;Hacktoberfest expects hundreds of thousands of participants in 2021. To fully immerse yourself in the festivities, be sure to &lt;a href="https://twitter.com/Codeseeio" rel="noopener noreferrer"&gt;stay tuned&lt;/a&gt; for all that we have planned at CodeSee. October will be packed with weekly streams on our &lt;a href="https://www.twitch.tv/codeseeio" rel="noopener noreferrer"&gt;Twitch channel&lt;/a&gt;, helpful tutorials on the &lt;a href="https://learn.codesee.io/" rel="noopener noreferrer"&gt;blog&lt;/a&gt;, and even a series of weekly challenges in Port for some supremely wicked swag!&lt;/p&gt;

&lt;p&gt;At CodeSee, we believe every level of developer can confidently contribute to open source and help the community. If you have any questions or require support, reach out to us on &lt;a href="https://twitter.com/Codeseeio" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or the &lt;a href="https://discord.gg/eJtytwEZdF" rel="noopener noreferrer"&gt;OSS Port Discord Server&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;From all of us at CodeSee, happy hacking!&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>opensource</category>
      <category>developer</category>
    </item>
    <item>
      <title>Announcing the CodeSee Emerging Developer Track</title>
      <dc:creator>Nahrin Jalal</dc:creator>
      <pubDate>Thu, 08 Jul 2021 14:27:29 +0000</pubDate>
      <link>https://forem.com/codesee/announcing-the-codesee-emerging-developer-track-35jk</link>
      <guid>https://forem.com/codesee/announcing-the-codesee-emerging-developer-track-35jk</guid>
      <description>&lt;p&gt;As a team largely comprised of self-taught developers and educators, we've noticed a plethora of technical tutorials for beginners at the start of their tech journey and for those well-established in their careers. However, we've also seen &lt;strong&gt;significant gaps&lt;/strong&gt; in the information available for folks looking to get into their first jobs in tech and/or be successful in those first years of that role. &lt;/p&gt;

&lt;p&gt;With CodeSee's &lt;strong&gt;Emerging Developer Track&lt;/strong&gt;, we hope to bridge those gaps and empower folks with the &lt;strong&gt;resources needed to develop core skills, build confidence, and advance professionally&lt;/strong&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  What Are Emerging Developers?
&lt;/h3&gt;

&lt;p&gt;We have classified folks preparing to end their studies and start looking for a job, up to folks through their early years in work in tech, as emerging developers. If you are in this "advanced beginner" stage, our resources were created with you in mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Will You Learn?
&lt;/h2&gt;

&lt;p&gt;You can look forward to weekly blog posts and live streams, video tutorials, infographics and visuals, challenges, and opportunities to expand your knowledge with insights from industry guests. Our content will span across platforms and allow you the opportunity to ask questions, seek support, and engage with our team. Each week, we will deep-dive into various key topics, such as: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to Get Unstuck &lt;/li&gt;
&lt;li&gt;Finding Your First Job in Tech&lt;/li&gt;
&lt;li&gt;Top Mistakes New Developers Make and How to Avoid Them&lt;/li&gt;
&lt;li&gt;Understanding Your First Real-World Codebase&lt;/li&gt;
&lt;li&gt;Getting Started With OSS Projects&lt;/li&gt;
&lt;li&gt;How To Get the Most Out of Pair Programming&lt;/li&gt;
&lt;li&gt;Ways to Ace Your First Year as a Developer&lt;/li&gt;
&lt;li&gt;Best Practices: Code Reviews&lt;/li&gt;
&lt;li&gt;Introduction to Software Architecture&lt;/li&gt;
&lt;li&gt;And much more!&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;We recognize any piece of content is best as a conversation. Whether you're new to tech, a student, or a long-time developer, we hope you'll share with us your experiences, lessons learned, and advice for others. Drop us an email at devrel[ at ]codesee.io or chat with us in real-time on our &lt;a href="https://www.twitch.tv/codeseeio" rel="noopener noreferrer"&gt;streams&lt;/a&gt;—we would be delighted to hear from you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Meet the Team
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Staff&lt;/th&gt;
&lt;th&gt;Introduction&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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%2F17tjuy0kh3a18l8hewbd.jpg" alt="Jess Rose"&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Jessica Rose&lt;/strong&gt; is a longtime tech educator passionate about access to technical education and meaningful work in tech.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&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%2Fv2nzfsf34nscyw64a8bp.png" alt="ramon"&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Ramón Huidobro&lt;/strong&gt; is a web/macOS/mobile software dev and community organizer based in Vienna, Austria. He's spent a lot of his time mentoring, coaching and introducing folks on their development journey, as well as previously ran an after-school coding club to introduce children to programming..&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&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%2Fbulk3ksjg7yiupo9vwkz.png" alt="nahrin"&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Nahrin Jalal&lt;/strong&gt; is a developer, educator, and community organizer based in Toronto, Canada. She is passionate about building inclusive communities, addressing real-world needs with pragmatic software solutions, and creating technical content accessible to all skill levels.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Join Us!
&lt;/h2&gt;

&lt;p&gt;To fully immerse yourself in the CodeSee Emerging Developer Track, be sure to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stay tuned on &lt;a href="https://twitter.com/Codeseeio" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; to be informed of new content and all that we have planned&lt;/li&gt;
&lt;li&gt;Follow us on &lt;a href="https://www.twitch.tv/codeseeio" rel="noopener noreferrer"&gt;Twitch&lt;/a&gt; to catch our jam-packed weekly streams&lt;/li&gt;
&lt;li&gt;Subscribe to our &lt;a href="https://www.youtube.com/channel/UCpSaehFim9yqyBT-L81urAg" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt; channel to never miss out on innovative video tutorials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We could not be more excited to support you in your tech journey. We hope to see you online! 👋&lt;/p&gt;

&lt;p&gt;&lt;em&gt;At CodeSee, we are committed to helping you understand codebases. In just 5 clicks, CodeSee will generate a self-updating visual map of your codebase's dependencies, providing you with a single source of truth for your entire system. For exclusive beta access, &lt;a href="https://www.codesee.io/architecture-diagram" rel="noopener noreferrer"&gt;sign up&lt;/a&gt; to join the waitlist.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>beginners</category>
      <category>showdev</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>The Importance of Self-Advocacy for Career Advancement</title>
      <dc:creator>Nahrin Jalal</dc:creator>
      <pubDate>Mon, 08 Mar 2021 15:15:55 +0000</pubDate>
      <link>https://forem.com/nahrinjalal/the-importance-of-self-advocacy-for-career-advancement-2nh6</link>
      <guid>https://forem.com/nahrinjalal/the-importance-of-self-advocacy-for-career-advancement-2nh6</guid>
      <description>&lt;p&gt;This year marks five years (!) since I &lt;a href="https://dev.to/nahrinjalal/the-one-where-i-share-my-journey-to-tech-anj"&gt;started my career in the tech industry&lt;/a&gt;. To commemorate the milestone, I want to share a practice that has played a monumental role in my career advancement over this time:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consistent self-advocacy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I often tell &lt;a href="https://twitter.com/NahrinJalal/status/1050078722605416450"&gt;my students&lt;/a&gt; how imperative it is to share their accomplishments and elevate their visibility regularly. A lot goes into this, such as weekly accomplishment tracking, connecting your achievements to compensation, scheduling weekly meetings with your manager, collecting testimonials, and more. However, the most repeated blocker I hear is this:&lt;/p&gt;

&lt;p&gt;People don't know how to tell their story effectively.&lt;/p&gt;

&lt;p&gt;Stories have three parts: a problem, a solution, and a result. If you accomplished something at work recently, you likely had to go through all three of those phases. So now it's time to think about yourself as the protagonist of the story and share it with others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crafting Your Story
&lt;/h2&gt;

&lt;p&gt;Firstly, reflect on a professional accomplishment that you're proud of—ideally one that took place recently. Then, answer these questions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What challenge did you overcome?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Did you break into a new industry or find success with a difficult client? What is the headline of your story?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Highlight your contribution.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Briefly share how &lt;em&gt;your&lt;/em&gt; solution addressed the issue. How were your strengths and passions essential?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What was the business impact?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How did you make money or save money for the company? Did you contribute to innovation, revenue, growth, or culture?&lt;/p&gt;

&lt;p&gt;Remember to keep your story short! Your final result should be about 3-4 sentences (or bullet points) long. Your manager doesn't have time to read an essay, but she will appreciate and remember your impact if she can quickly understand how you solved a problem for the company.&lt;/p&gt;

&lt;p&gt;Also, bear in mind that not every key accomplishment may fit into this storytelling structure. Please still share those other accomplishments with your manager—ensuring that you're still effectively highlighting how you impacted the business.&lt;/p&gt;

&lt;p&gt;Ultimately, it all boils down to how you made a difference. Be proud of what you have achieved and share your accomplishments widely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seek Support When You Need It
&lt;/h2&gt;

&lt;p&gt;Self-advocacy is difficult.&lt;/p&gt;

&lt;p&gt;If you're struggling, remember that you are &lt;strong&gt;not&lt;/strong&gt; the only one feeling this way, and it &lt;strong&gt;will&lt;/strong&gt; get easier with practice. &lt;/p&gt;

&lt;p&gt;Also, never think you need to go it alone. Reach out to a mentor. Vent to a trusted friend. Let this incredible community support you.&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>choosetochallenge</category>
      <category>career</category>
      <category>womenintech</category>
    </item>
    <item>
      <title>In Celebration of International Women's Day 2021</title>
      <dc:creator>Nahrin Jalal</dc:creator>
      <pubDate>Mon, 08 Mar 2021 03:51:44 +0000</pubDate>
      <link>https://forem.com/vonagedev/in-celebration-of-international-women-s-day-2021-3k2n</link>
      <guid>https://forem.com/vonagedev/in-celebration-of-international-women-s-day-2021-3k2n</guid>
      <description>&lt;p&gt;The official theme of &lt;a href="https://www.internationalwomensday.com/" rel="noopener noreferrer"&gt;International Women's Day&lt;/a&gt; 2021 is "Choose to Challenge." At Vonage, we believe that together, we can choose to challenge and call out gender bias and inequity. We can choose to seek out and celebrate women's achievements. Collectively, we can &lt;em&gt;all&lt;/em&gt; help create a more inclusive world.&lt;/p&gt;

&lt;p&gt;Each year, in honour of International Women's Day, the global Vonage community comes together to celebrate the incredible journeys, stories and voices of our colleagues and the amazing people around us. 2021 is no exception.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stories and Journeys From Our Colleagues
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://www.nexmo.com/legacy-blog/2020/03/10/in-celebration-of-international-womens-day-2020" rel="noopener noreferrer"&gt;2020&lt;/a&gt;, we began the tradition of collecting personal stories from the Vonage community for Dev.to's "&lt;a href="https://dev.to/devteam/shecoded-2021-stories-from-women-building-software-and-the-allies-supporting-them-49pf"&gt;Nevertheless, She Coded&lt;/a&gt;" initiative. Dev.to's annual celebration has blossomed into a beautiful collection of experiences, with each voice adding powerful perspective, wisdom, and advice. We're proud to help amplify the voices of the Vonage community and support members in participating in this incredible program.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/vonagedev/biochemist-turned-solutions-engineer-23k3"&gt;Biochemist turned Solutions Engineer&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Siobhan Lettice&lt;/strong&gt; is a &lt;strong&gt;Solutions Engineer&lt;/strong&gt; for Vonage. Siobhan shares how her experiences in tech drove her to create a Women at Vonage Employee Resource Group, focusing on removing barriers to entry and empowering women seeking to move into leadership roles.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Everyone deserves an equal voice and opportunity&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/marklewin/a-plea-an-apology-and-a-passing-reference-to-batman-pgf"&gt;A Plea, an Apology, and a Passing Reference to Batman&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mark Lewin&lt;/strong&gt; is a &lt;strong&gt;Technical Writer&lt;/strong&gt; for Vonage. Mark talks about the ways in which privilege has shaped his life, the importance of diversity in the industry, and implores those previously dissuaded from pursuing a career in tech to join now.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are a woman or non-binary person who has been put off joining us in the past, I plead you to reconsider now. You're not the heroes we deserve, but you are the heroes we need&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/bb_loft/nevertheless-i-changed-my-goals-3hnf"&gt;Nevertheless, I changed my goals&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Bethany Loft&lt;/strong&gt; is a &lt;strong&gt;Community Manager&lt;/strong&gt; for Vonage. Bethany reflects on the previous year and emphasizes the importance of normalizing goals changing to adapt and accommodate new interests.  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My message for others is to take time to rest amongst challenging situations, protect your energy and if you have some to lend, spread it around your community to those who could benefit&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/danielaf/how-i-improved-my-coding-skills-in-2020-21-1fl5"&gt;How I improved my coding skills in 2020/21&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Daniela Facchinetti&lt;/strong&gt; is a &lt;strong&gt;Developer Education Coordinator&lt;/strong&gt; for Vonage. Daniela shares the progress she has made to improve her coding skills and advice for others in the same pursuit.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You will never be done learning or improving, but carrying on gets easier with practice&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/integrator9004/we-need-you-i-m-integrator9004-and-i-encourage-women-devs-in-2021-imh"&gt;We Need YOU! I'm Andrew Rice, and I encourage women devs in 2021!&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Andrew Rice&lt;/strong&gt; is a &lt;strong&gt;Head of Information Security (API)&lt;/strong&gt; for Vonage. Andrew discusses the importance of creating an inclusive industry and shares advice on attracting top talent to Cyber Security.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We needed different thinking, we needed a broader pool of talent, we needed equality, we needed to encourage the brightest minds and guess what, they are not always men&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/czajkowski/nevertheless-i-will-continue-to-choosetochallenge-myself-3egb"&gt;Nevertheless, I Will Continue to #ChooseToChallenge Myself&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Laura Czajkowski&lt;/strong&gt; is a &lt;strong&gt;Developer Relations Manager&lt;/strong&gt; for Vonage. Laura outlines how she is pushing past her comfort zone and choosing to challenge herself this year.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This year will no doubt be challenging. However, I know that I have allies, supportive colleagues, and I'm fortunate to know some amazing people that inspire me daily&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/lolocoding/nevertheless-lauren-focused-on-her-coding-community-13h8"&gt;Nevertheless, Lauren Focused on Community&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Lauren Lee&lt;/strong&gt; is a &lt;strong&gt;Developer Education Manager&lt;/strong&gt; for Vonage. On the second anniversary of Lauren's &lt;a href="https://webelongpodcast.com/" rel="noopener noreferrer"&gt;#WeBelongHere podcast&lt;/a&gt;, she shares key lessons learned from those conversations and the community of career changers and those diversifying the tech industry.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As a bootcamp grad and career changer myself, I remember craving community and wanting to know that I was not alone in my journey to tech&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/vonageaida/i-m-aida-pourshirazi-and-i-support-women-devs-in-2021-25k3"&gt;I'm Aida Pourshirazi, and I support women devs in 2021!&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Aida Pourshirazi&lt;/strong&gt; is a &lt;strong&gt;Support Engineer&lt;/strong&gt; for Vonage. Aida reflects on how her upbringing inspired her to follow an engineering path.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My message to others is that life is shorter than we think, so we should do what we like and enjoy the path to achieve our goals&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/nahrinjalal/the-importance-of-self-advocacy-for-career-advancement-2nh6"&gt;The Importance of Self-Advocacy for Career Advancement&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Nahrin Jalal&lt;/strong&gt; is a &lt;strong&gt;Developer Educator&lt;/strong&gt; for Vonage. Nahrin shares the practice that has made the most significant impact on her career advancement to date: self-advocacy.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It's time to think about yourself as the protagonist of this story and share it with others&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/imclarisseng/my-journey-in-tech-2263"&gt;My Journey in Tech&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Clarisse Ng&lt;/strong&gt; is an &lt;strong&gt;APAC Community Manager&lt;/strong&gt; for Vonage. Clarisse reflects on how she ended up in tech by pure coincidence. She also discusses the importance of caring for yourself while working towards goals.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It was the constant struggle of getting stuff done, making sure I remain creative, relevant, and giving meaning to my work, while staying on top of everything else going on in my life, including my role as a daughter, sister, friend, etc.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/lukeocodes/i-m-luke-and-i-support-women-in-tech-23gk"&gt;I'm Luke, and I support women in tech.&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Luke Oliff&lt;/strong&gt; is a &lt;strong&gt;Developer Educator&lt;/strong&gt; for Vonage. Luke shares the work and content of some of the folks who have inspired him.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Last year I wrote about things I advocated that we can all do to further equality in tech. This year, I'd rather give space to those in tech who have or do inspire me&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/vonagedev/resilience-is-key-to-my-success-2ajo"&gt;Resilience is key to my success&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Tatiana Xyda&lt;/strong&gt; is an &lt;strong&gt;Enterprise Relationship Manager&lt;/strong&gt; for Vonage. Tatiana reflects on her journey to tech, the struggles she has had to overcome along the way, and an important message for others.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I deserve credit for never giving up on what I wanted and the path I took to get there. I learned to receive a ‘No’ and learn from it&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  International Women's Day 2021 Panel
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/t5wPcUK4lpI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;To kick off the celebrations for International Women's Day 2021, we held a panel discussion with some of our Vonage leaders on March 2, 2021. Featured speakers Amitha Pulijala, Danielle Vergara, Lauren Lee, Marina Serrano Montes, and Nahrin Jalal provided insight into their experiences, both as women and as advocates for women in technology. Through their stories, we learned how they navigated the tech industry and what their experience has taught them. Watch the recording on &lt;a href="https://youtu.be/t5wPcUK4lpI" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  In Closing
&lt;/h2&gt;

&lt;p&gt;We are proud to be elevating voices and shining a light on issues women and non-binary folks face in the software industry this International Women's Day. At Vonage, we will continue to choose to seek out and celebrate women's achievements in an effort to help create a more inclusive world.&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>theycoded</category>
      <category>choosetochallenge</category>
    </item>
    <item>
      <title>Visual Studio Code Extensions To Enhance Productivity in 2021</title>
      <dc:creator>Nahrin Jalal</dc:creator>
      <pubDate>Wed, 06 Jan 2021 16:27:33 +0000</pubDate>
      <link>https://forem.com/vonagedev/visual-studio-code-extensions-to-enhance-productivity-in-2021-263o</link>
      <guid>https://forem.com/vonagedev/visual-studio-code-extensions-to-enhance-productivity-in-2021-263o</guid>
      <description>&lt;p&gt;Visual Studio Code is a simple yet highly extensible code editor. As developers, we spend a lot of time here—which is why it's so important to get the most out of our editors and streamline and automate where possible.&lt;/p&gt;

&lt;p&gt;As we enter 2021, I've compiled a list of extensions that I personally use daily in the hopes that it will help you save time and enhance productivity this year. Do note that while the extensions highlighted below are suitable for all languages, there are language-specific plugins that are also worth exploring.&lt;/p&gt;

&lt;h2&gt;
  
  
  How To Install a VS Code Extension
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open your Visual Studio Code.&lt;/li&gt;
&lt;li&gt;Click the marked button on the panel located left.&lt;/li&gt;
&lt;li&gt;In the "Search Extensions" box, type in the name of the extension you would like to download.&lt;/li&gt;
&lt;li&gt;Choose the correct search result and click "Install."&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Selected VS Code Extensions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2" rel="noopener noreferrer"&gt;Bracket Pair Colorizer 2&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Bracket Pair Colorizer 2 allows matching brackets to be identified with colors. The user can define which tokens to match and which colors to use.&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%2Faw3gd8l0hfj2ijgv3e7j.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%2Faw3gd8l0hfj2ijgv3e7j.png" alt="Bracket Pair Colorizer 2" width="625" height="119"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers" rel="noopener noreferrer"&gt;Remote Containers&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Remote Containers lets you use a Docker container as a full-featured development environment. Whether you deploy to containers or not, containers make a great development environment because you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Develop with a consistent, easily reproducible toolchain on the same operating system you deploy to.&lt;/li&gt;
&lt;li&gt;Quickly swap between different, isolated development environments and safely make updates without worrying about impacting your local machine.&lt;/li&gt;
&lt;li&gt;Make it easy for new team members/contributors to get up and running in a consistent development environment.&lt;/li&gt;
&lt;li&gt;Try out new technologies or clone a copy of a codebase without impacting your local setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost" rel="noopener noreferrer"&gt;Import Cost&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Import Cost will display inline in the editor the size of the imported package. The extension utilizes webpack with babili-webpack-plugin to detect the imported size.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense" rel="noopener noreferrer"&gt;Path Intellisense&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Path Intellisense helps to autocomplete filenames. This extension supports developers to define file paths with accuracy.&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%2Fuhqww9akiy2fc7gbhv1a.gif" 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%2Fuhqww9akiy2fc7gbhv1a.gif" alt="Path Intellisense" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://visualstudio.microsoft.com/services/live-share/?rr=https%3A%2F%2Fcode.visualstudio.com%2Fblogs%2F2017%2F11%2F15%2Flive-share" rel="noopener noreferrer"&gt;Live Share&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Live Share provides you with the ability to co-edit, co-debug, have an audio call, chat with your peers, share terminals, servers, look at comments, and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-peacock" rel="noopener noreferrer"&gt;Peacock&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Peacock subtly changes the color of your Visual Studio Code workspace. It's udeal when you have multiple VS Code instances, use VS Live Share, or use VS Code's Remote features, and you want to identify your editor quickly.&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%2Fhcwfc43o9kbvn16qxgz6.jpg" 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%2Fhcwfc43o9kbvn16qxgz6.jpg" alt="Peacock" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Prettier is an opinionated code formatter. It enforces a consistent style by parsing your code and re-printing it with its own rules that take the maximum line length into account, wrapping code when necessary.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=WallabyJs.quokka-vscode" rel="noopener noreferrer"&gt;Quokka&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Quokka.js is a developer productivity tool for rapid JavaScript / TypeScript prototyping. Runtime values are updated and displayed in your IDE next to your code as you type.&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%2Fzjm5ee7izv2wmtd89egk.gif" 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%2Fzjm5ee7izv2wmtd89egk.gif" alt="Quokka" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments" rel="noopener noreferrer"&gt;Better Comments&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Better Comments will help you create more human-friendly comments in your code. With this extension, you will be able to categorize your annotations into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alerts&lt;/li&gt;
&lt;li&gt;Queries&lt;/li&gt;
&lt;li&gt;TODOs&lt;/li&gt;
&lt;li&gt;Highlights&lt;/li&gt;
&lt;li&gt;Commented out code can also be styled to make it clear the code shouldn't be there&lt;/li&gt;
&lt;li&gt;Any other comment styles you'd like can be specified in the settings&lt;/li&gt;
&lt;/ul&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%2Ftkj0gxowtx0kach1ed29.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%2Ftkj0gxowtx0kach1ed29.png" alt="Better comments" width="459" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync" rel="noopener noreferrer"&gt;Settings Sync&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Settings Sync synchronizes settings, snippets, themes, file icons, launch, keybindings, workspaces, and extensions across multiple machines using GitHub Gist.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh" rel="noopener noreferrer"&gt;Remote - SSH&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Remote - SSH lets you use any remote machine with an SSH server as your development environment. This can significantly simplify development and troubleshooting in a wide variety of situations. You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Develop on the same operating system you deploy to or use larger, faster or more specialized hardware than your local machine.&lt;/li&gt;
&lt;li&gt;Quickly swap between different, remote development environments and safely make updates without worrying about impacting your local machine.&lt;/li&gt;
&lt;li&gt;Access an existing development environment from multiple machines or locations.&lt;/li&gt;
&lt;li&gt;Debug an application running somewhere else, such as a customer site or in the cloud.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No source code needs to be on your local machine to gain these benefits since the extension runs commands and other extensions directly on the remote machine. You can open any folder on the remote machine and work with it just as you would if the folder were on your machine.&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%2Fg457lir34bz9ur9ze4ck.gif" 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%2Fg457lir34bz9ur9ze4ck.gif" alt="Remote SSH" width="600" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=pnp.polacode" rel="noopener noreferrer"&gt;Polacode&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This last extension is a fun one—create a Polaroid for your code! If you were planning on taking a screenshot of your code to share on Twitter or a blog post, I highly recommend using this tool for a more aesthetically appealing result.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are Your Favorite Extensions?
&lt;/h2&gt;

&lt;p&gt;That concludes my list of most-used extensions! I hope you came across one that will improve your developer productivity this year. What are your favorite VS Code extensions? Please share them in the comments or let me know on &lt;a href="https://twitter.com/NahrinJalal" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>12 Bots To Better Your Open Source Project</title>
      <dc:creator>Nahrin Jalal</dc:creator>
      <pubDate>Wed, 28 Oct 2020 14:35:06 +0000</pubDate>
      <link>https://forem.com/vonagedev/12-bots-to-better-your-open-source-project-mc0</link>
      <guid>https://forem.com/vonagedev/12-bots-to-better-your-open-source-project-mc0</guid>
      <description>&lt;p&gt;The longer an open source project exists and grows, the more issues and unmerged pull requests it will accumulate. Keeping up with new contributions, especially if there are still unresolved problems from the past, is no easy task.&lt;/p&gt;

&lt;p&gt;Enter, bots! Automating and outsourcing labour to bots eases maintainers’ burden, freeing up time for more impactful tasks.&lt;/p&gt;

&lt;p&gt;This post will cover 12 ways to improve your open source project with &lt;a href="https://probot.github.io/" rel="noopener noreferrer"&gt;Probot&lt;/a&gt; (GitHub Apps) and &lt;a href="https://docs.github.com/en/free-pro-team@latest/actions" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt;—two separate projects with a shared goal of &lt;strong&gt;enabling and empowering developers to extend their workflows&lt;/strong&gt; and &lt;strong&gt;customizing the way GitHub functions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you’d like to know more about how the projects differ, Jason Etcovitch’s excellent &lt;a href="https://jasonet.co/posts/probot-app-or-github-action-v2/" rel="noopener noreferrer"&gt;blog post&lt;/a&gt; on the topic could help. Here’s his comparison of the two:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/10/apps-vs-actions.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F10%2Fapps-vs-actions.png" alt="github apps vs actions" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, let’s begin highlighting automation tools that will ease your life as a project maintainer. Without further ado, here are bots to better your open source project!&lt;/p&gt;

&lt;h2&gt;
  
  
  Probot (GitHub Apps)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://probot.github.io/apps/request-info/" rel="noopener noreferrer"&gt;Request Info&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Requests more information on issues and pull requests with the default title or an empty body.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Request-Info requests more information from newly opened Pull Requests and Issues that contain either default titles or whose description is left blank. It does so by taking data from a .github/config.yml.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/10/req-info.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F10%2Freq-info.png" alt="Request-Info bot" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://probot.github.io/apps/no-response/" rel="noopener noreferrer"&gt;No Response&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Closes Issues where the author hasn’t responded to a request for more information.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Very often, issues get filed without enough information to be adequately investigated. When this happens, maintainers can label an issue as requiring more information from the original author. If the author doesn’t provide the necessary information within a timely manner, the issue is automatically closed by the bot. If the original author comes back and gives more information, the No Response bot removes the label, and the issue gets automatically reopened if necessary.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/10/no-response-test.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F10%2Fno-response-test.png" alt="No response bot" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://probot.github.io/apps/mergeable/" rel="noopener noreferrer"&gt;Mergeable&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Prevent merging of Pull Requests based on configurations.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Make your Pull Requests “mergeable” only when specific terms are not in the title or label, the milestone on the pull request matches with what is configured, and there is at least n number of approved reviews, where n is configurable.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://probot.github.io/apps/auto-assign/" rel="noopener noreferrer"&gt;Auto Assign&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Add reviewers/assignees to pull requests when pull requests are opened.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When the pull request is opened, this bot will automatically add reviewers/assignees to the pull request. If the number of reviewers/assignees is specified, it will randomly add reviewers/assignees to the pull request. If the pull request title contains a specific keyword, the bot does not add reviewers/assignees to the pull request.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://probot.github.io/apps/stale/" rel="noopener noreferrer"&gt;Stale&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Automatically close stale Issues and Pull Requests that tend to accumulate during a project.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After a period of inactivity, a label will be applied to mark an issue as stale, and optionally a comment will be posted to notify contributors that the Issue or Pull Request will be closed. If the Issue or Pull Request is updated, or anyone comments, then the stale label is removed, and nothing further is done until it becomes stale again. If no more activity occurs, the Issue or Pull Request will be automatically closed with an optional comment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/10/stale.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F10%2Fstale.png" alt="Stale bot" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://probot.github.io/apps/first-timers/" rel="noopener noreferrer"&gt;First Timers&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Creates starter issues to help onboard new open source contributors.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The process of creating a pull request is the most significant barrier for new contributors. First Timers streamlines the process to create straightforward contributor-friendly issues to help onboard more people to become Open Source contributors for the first time.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Actions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/wearerequired/lint-action" rel="noopener noreferrer"&gt;Lint&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Show and auto-fix linting errors for many programming languages.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Lint shows linting errors on GitHub commits and PRs, allows auto-fixing issues, and supports many linters and formatters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/10/lint-action.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F10%2Flint-action.png" alt="Lint Action" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/andresz1/size-limit-action" rel="noopener noreferrer"&gt;Size Limit&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Compares the real cost to run your JS application or library to keep good performance in every pull request.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This action uses Size Limit (performance budget tool for JavaScript) to calculate your JavaScript’s real cost for end-users. This action’s main features are to comment on pull requests with the comparison of Size Limit output and reject a pull request if the cost exceeds the limit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/10/size-limit.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F10%2Fsize-limit.png" alt="Size limit action" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/protontypes/libreselery" rel="noopener noreferrer"&gt;LibreSelery&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Continuous distribution of funding to your project contributors and dependencies.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;LibreSelery is a tool to distribute funding in free and open source projects. With a new funding model, it offers transparent, automated and adaptable compensation of contributors. The aim is to replace the middleman in donation distribution as far as possible with a free and transparent algorithm. Unlike most other donation systems, LibreSelery only offers a decentralized tool and not a platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/dessant/lock-threads" rel="noopener noreferrer"&gt;Lock Threads&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Locks closed issues and pull requests after a period of inactivity.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The action uses GitHub’s updated search qualifier to determine inactivity. Any change to an issue or pull request is considered an update, including comments, changing labels, applying or removing milestones, or pushing commits. Lock Threads is a GitHub Action that locks closed issues and pull requests after a period of inactivity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/10/lock-threads.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F10%2Flock-threads.png" alt="Lock Threads Action" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/Decathlon/pull-request-labeler-action" rel="noopener noreferrer"&gt;Pull Request Labeler&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Automatically labels a pull request based on committed files.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When pushing, the action will be triggered and will look for committed files over the branch. It applies configured labels whenever it finds a file whose name matches the associated regular expression.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/10/labeler.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F10%2Flabeler.png" alt="PR Labeler Action" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/theashraf/alex-action" rel="noopener noreferrer"&gt;alex&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Catches insensitive, inconsiderate writing.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Alex helps you find gender favouring, polarizing, race-related, religion inconsiderate, or any other unequal phrasing in text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;There are &lt;em&gt;many&lt;/em&gt; more automation tools out there that may improve your workflow as a maintainer. I encourage you to explore more options or try your hand at building your own!&lt;/p&gt;

&lt;p&gt;Probot apps can be &lt;a href="https://docs.github.com/en/free-pro-team@latest/developers/apps" rel="noopener noreferrer"&gt;written, deployed, and shared&lt;/a&gt;. Many of the most popular Probot apps are hosted, so there’s nothing for you to deploy and manage. You can also create your actions or customize actions shared by the GitHub community with the help of &lt;a href="https://docs.github.com/en/free-pro-team@latest/actions/creating-actions" rel="noopener noreferrer"&gt;tutorials&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What are your favourite open source automation tools? Have you built one yourself? Let us know in the comments section below, on &lt;a href="https://twitter.com/VonageDev" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;, or the &lt;a href="https://developer.nexmo.com/community/slack" rel="noopener noreferrer"&gt;Vonage Developer Community Slack&lt;/a&gt;!&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Resources
&lt;/h3&gt;

&lt;p&gt;Vonage is thrilled to be a Hacktoberfest 2020 partner. We’re &lt;a href="https://youtu.be/zYJpYMCy6PA" rel="noopener noreferrer"&gt;no strangers to open source&lt;/a&gt;, with our libraries, code snippets, and demos all on GitHub. To fully immerse yourself in the festivities, be sure to check out our &lt;a href="https://nexmo.dev/2GZcyHc" rel="noopener noreferrer"&gt;Hacktoberfest page&lt;/a&gt; for details on all that we have planned.&lt;/p&gt;

&lt;p&gt;You may also find more of our open source related blog posts below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nexmo.com/blog/2020/09/28/vonage-joins-hacktoberfest-2020" rel="noopener noreferrer"&gt;Vonage Joins Hacktoberfest 2020&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nexmo.com/blog/2020/09/29/an-introduction-to-git-dr" rel="noopener noreferrer"&gt;An Introduction To Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nexmo.com/blog/2020/10/01/how-to-create-a-pull-request-with-github-desktop" rel="noopener noreferrer"&gt;How To Create a Pull Request With GitHub Desktop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nexmo.com/blog/2020/10/02/version-control-guis" rel="noopener noreferrer"&gt;Version Control GUIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nexmo.com/blog/2020/10/06/opening-multiple-pull-requests-dr" rel="noopener noreferrer"&gt;Opening Multiple Pull Requests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nexmo.com/blog/2020/10/08/hacktoberfest-using-github-desktop" rel="noopener noreferrer"&gt;Hacktoberfest: Using GitHub Desktop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nexmo.com/blog/2020/10/09/other-ways-to-contribute-to-opensource-this-hacktoberfest" rel="noopener noreferrer"&gt;Other Ways to Contribute to Open Source This Hacktoberfest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nexmo.com/blog/2020/10/13/surviving-hacktoberfest-a-guide-for-maintainers" rel="noopener noreferrer"&gt;Surviving Hacktoberfest: A Guide for Maintainers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nexmo.com/blog/2020/10/16/33-high-impact-open-source-projects-seeking-contributors" rel="noopener noreferrer"&gt;33 High Impact Open Source Projects Seeking Contributors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The post &lt;a href="https://www.nexmo.com/blog/2020/10/28/12-bots-to-better-your-open-source-project" rel="noopener noreferrer"&gt;12 Bots To Better Your Open Source Project&lt;/a&gt; appeared first on &lt;a href="https://www.nexmo.com" rel="noopener noreferrer"&gt;Vonage Developer Blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>career</category>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>33 High Impact Open Source Projects Seeking Contributors</title>
      <dc:creator>Nahrin Jalal</dc:creator>
      <pubDate>Fri, 16 Oct 2020 13:36:54 +0000</pubDate>
      <link>https://forem.com/vonagedev/33-high-impact-open-source-projects-seeking-contributors-4k6h</link>
      <guid>https://forem.com/vonagedev/33-high-impact-open-source-projects-seeking-contributors-4k6h</guid>
      <description>&lt;p&gt;There is no shortage of open source projects dedicated to social change and improving lives. However, projects with a social good application often do not get the support and attention they deserve. This is unfortunate as the collaborative nature of open source can spark innovation and accelerate social good.&lt;/p&gt;

&lt;p&gt;Therefore, in the spirit of Hacktoberfest, we have put together thirty-three projects that show the potential for open source to make a real social impact. The projects have various open issues, many of which are labelled &lt;code&gt;hacktoberfest&lt;/code&gt; and will count towards the four pull requests required of the challenge. Whether you’re new to development, a student, or a long-time contributor, you can make positive contributions and help drive open source growth in an ever-growing global community.&lt;/p&gt;

&lt;p&gt;The projects below are organized according to technology. We encourage you to contribute to projects within your skillset &lt;strong&gt;and&lt;/strong&gt; explore projects that inspire growth—all while changing the world, one pull request at a time.&lt;/p&gt;

&lt;p&gt;Technology Directory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Ruby&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;R&lt;/li&gt;
&lt;li&gt;PHP&lt;/li&gt;
&lt;li&gt;C#, .NET&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;C, C++&lt;/li&gt;
&lt;li&gt;Jupyter Notebook&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Python
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/project-callisto/callisto-core"&gt;Callisto&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Callisto is a non-profit that creates technology to detect repeat perpetrators of sexual coercion and sexual assault. The &lt;a href="https://mycallisto.org/" rel="noopener noreferrer"&gt;Callisto online reporting system&lt;/a&gt; is used for intake, escrow, matching and secure delivery code.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/nvaccess/nvda"&gt;NVDA&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;NVDA (NonVisual Desktop Access) allows blind and vision-impaired people to access and interact with the Windows operating system and many third-party applications.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with C, C++ knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/dimagi/commcare-hq"&gt;CommCare&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.dimagi.com/open-source/" rel="noopener noreferrer"&gt;CommCareHQ&lt;/a&gt; is the server backend for CommCare, the world’s largest platform for designing, managing, and deploying robust, offline-first, mobile applications to frontline workers worldwide. By replacing paper-based forms, frontline workers can use CommCare to track and support their clients with registration forms, checklists, SMS reminders, and multimedia.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with JavaScript knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/ConservationInternational/trends.earth"&gt;Trends.earth&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Trends.Earth (formerly the Land Degradation Monitoring Toolbox) is a &lt;a href="https://www.qgis.org/en/site/" rel="noopener noreferrer"&gt;QGIS&lt;/a&gt; plugin that supports land change monitoring, including changes in productivity, land cover, and soil organic carbon. The tool can help to monitor land degradation for reporting to the Global Environment Facility (GEF) and the United Nations Convention to Combat Desertification (UNCCD), as well as tracking progress towards the achievement of Sustainable Development Goal (SDG) target 15.3, Land Degradation Neutrality (LDN).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/inasafe/inasafe"&gt;InaSafe&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.inasafe.org/" rel="noopener noreferrer"&gt;InaSAFE&lt;/a&gt; is a &lt;a href="https://qgis.org/en/site/" rel="noopener noreferrer"&gt;QGIS&lt;/a&gt; plugin that produces realistic natural hazard impact scenarios for better planning, preparedness and response activities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ruby
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/code-dot-org/code-dot-org"&gt;Code.org&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://code.org/" rel="noopener noreferrer"&gt;Code.org&lt;/a&gt; is a non-profit dedicated to expanding access to computer science in schools and increasing participation by young women and students from other underrepresented groups.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with JavaScript knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/consul/consul"&gt;Consul&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://consulproject.org/en/" rel="noopener noreferrer"&gt;Consul&lt;/a&gt; is a complete citizen participation tool for an open, transparent and democratic government.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/GliaX/Stethoscope"&gt;Stethoscope&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This open source stethoscope is research-validated to operate as well as a Littmann Cardiology III (the market gold standard), but can be produced using 3D printed parts for a fraction of the price. The cost of the entire stethoscope is between $2.5 to $5 to make!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/primeroIMS/primero"&gt;Primero&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.primero.org/" rel="noopener noreferrer"&gt;Primero&lt;/a&gt; is an application designed to help child protection workers and social workers in humanitarian and development contexts manage data on vulnerable children and survivors of violence.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with JavaScript knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/RefugeRestrooms/refugerestrooms"&gt;REFUGE&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.refugerestrooms.org/" rel="noopener noreferrer"&gt;REFUGE restrooms&lt;/a&gt; indexes and maps safe restroom locations for trans, intersex, and gender-nonconforming individuals. It provides a free resource to trans* and queer individuals in need of gender-neutral and other safe restrooms.&lt;/p&gt;

&lt;h2&gt;
  
  
  R
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/unep-grid/map-x-mgl"&gt;UNEP-GRID MapX&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://app.mapx.org/?project=MX-YBJ-YYF-08R-UUR-QW6&amp;amp;language=en" rel="noopener noreferrer"&gt;MapX&lt;/a&gt; is a spatial data infrastructure that aims to support the sustainable use of natural resources and the environment by increasing access to the best available geospatial information and related monitoring technologies.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with JavaScript knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/PecanProject/pecan"&gt;PEcAn Project&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://pecanproject.github.io/" rel="noopener noreferrer"&gt;The Predictive Ecosystem Analyzer (PEcAn)&lt;/a&gt; is an integrated ecological bioinformatics toolbox. This project is motivated by the fact that many of the most pressing questions about global change are not necessarily limited by the need to collect new data as much as by our ability to synthesize existing data. PEcAn seeks to improve this ability by developing a framework for sensibly integrating multiple data sources.&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/signdict/website" rel="noopener noreferrer"&gt;SignDict&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://signdict.org/?locale=en" rel="noopener noreferrer"&gt;SignDict&lt;/a&gt; is an open sign language dictionary in which you can contribute to its source code or to the dictionary itself by adding a sign that is missing. SignDict believes that communication is the key to an open society and has created a living dictionary to help increase the integration of deaf communities.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with HTML or Elixer knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/learningequality/kolibri"&gt;Kolibri&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://learningequality.org/kolibri/" rel="noopener noreferrer"&gt;Kolibri&lt;/a&gt; makes high quality education technology available in low-resource communities such as rural schools, refugee camps, orphanages, non-formal school systems, and prison systems.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with Python knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/Terrastories/terrastories"&gt;Terrastories&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://terrastories.io/" rel="noopener noreferrer"&gt;Terrastories&lt;/a&gt; is a geostorytelling application built to enable indigenous and other local communities to locate and map their own oral storytelling traditions about places of significant meaning or value to them. Powered by the Mapbox platform, Terrastories is designed to be entirely offline-compatible, so that remote communities can access the application entirely without needing internet connectivity.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with Ruby or Docker knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/Vizzuality/gfw"&gt;Global Forest Watch&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.globalforestwatch.org/" rel="noopener noreferrer"&gt;Global Forest Watch (GFW)&lt;/a&gt; is a dynamic online forest monitoring and alert system that empowers people everywhere to better manage and protect forests. This repository contains the GFW web app.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/medic/cht-core" rel="noopener noreferrer"&gt;Community Health Toolkit&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Community Health Toolkit is the core repository for &lt;a href="http://medicmobile.org/tools" rel="noopener noreferrer"&gt;Medic Mobile’s community health application framework&lt;/a&gt;, which you can use to build responsive, offline-first community health apps. The framework is highly configurable, with support for interactive messaging, decision support, task management, health records, data collection, and analytics.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/openMF/community-app"&gt;Mifos Community App&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://mifos.org/" rel="noopener noreferrer"&gt;Mifos&lt;/a&gt; enables financial service providers to effectively and efficiently deliver responsible financial services to the world’s 2 billion poor and unbanked to speed the elimination of poverty. This repository contains the default web application built on top of the MifosX platform for the Mifos user community.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/sahana/eden"&gt;Sahana Eden&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://eden.sahanafoundation.org/" rel="noopener noreferrer"&gt;Sahana Eden&lt;/a&gt; is an Open Source Humanitarian Platform by Sahana Software Foundation which can be used to provide solutions for disaster management, development, and environmental management sectors.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with Python knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  C#, .NET
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/OptiKey/OptiKey"&gt;OptiKey&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=HLkyORh7vKk" rel="noopener noreferrer"&gt;OptiKey&lt;/a&gt; is an on-screen keyboard that is designed to help Motor Neuron Disease (MND) patients interact with Windows computers. OptiKey’s on-screen keyboard allows MND patients to complete tasks, such as email composition, using only their eyes when used with an eye-tracking device. OptiKey can also be used with a mouse or webcam. Optikey is free, reliable, and easy to use.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/shadowsocks/shadowsocks-windows"&gt;Shadowsocks Windows&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Shadowsocks is a secure socks5 proxy designed to protect your Internet traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  C, C++
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/NREL/EnergyPlus"&gt;EnergyPlus&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://energyplus.net/" rel="noopener noreferrer"&gt;EnergyPlus&lt;/a&gt; is a whole building energy simulation program that engineers, architects, and researchers use to model both energy consumption—for heating, cooling, ventilation, lighting and plug and process loads—and water use in buildings.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/obsproject/obs-studio"&gt;OBS Studio&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://obsproject.com/" rel="noopener noreferrer"&gt;OBS Studio&lt;/a&gt; is free software designed for capturing, compositing, encoding, recording, and streaming video content, efficiently.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/jcl5m1/ventilator"&gt;Low Cost OS Ventilator&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;A low-cost open source ventilator-ish device or Powered Air Purifying Respirator (PAPR).&lt;/p&gt;

&lt;h2&gt;
  
  
  PHP
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/openml/OpenML"&gt;Open Machine Learning&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.openml.org/" rel="noopener noreferrer"&gt;OpenML&lt;/a&gt; is an online machine learning platform for sharing and organizing data, machine learning algorithms and experiments. It is designed to create a frictionless, networked ecosystem, that you can readily integrate into your existing processes/code/environments, allowing people all over the world to collaborate and build directly on each other’s latest ideas, data and results, irrespective of the tools and infrastructure they happen to use.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with JavaScript knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/LibreHealthIO/lh-ehr"&gt;LibreHealth EHR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The mission of LibreHealth is to help provide high-quality medical care to all people, regardless of race, socioeconomic status, or geographic location, by providing medical practices and clinics across the globe access to free of charge medical software. The LibreHealth EHR application is a clinically-focused electronic health record (EHR) system designed to be easy to use “out of the box” and customizable for use in various healthcare settings.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with JavaScript knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/moodle/moodle"&gt;Moodle&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://moodle.org/" rel="noopener noreferrer"&gt;Moodle&lt;/a&gt; is a learning platform designed to provide educators, administrators and learners with a single robust, secure and integrated system to create personalized learning environments.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with JavaScript knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Java
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/OpenAPITools/openapi-generator"&gt;Openapi Generator&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://openapi-generator.tech/" rel="noopener noreferrer"&gt;OpenAPI Generator&lt;/a&gt; allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an &lt;a href="https://github.com/OAI/OpenAPI-Specification" rel="noopener noreferrer"&gt;OpenAPI Spec&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/WorldHealthOrganization/app"&gt;WHO App&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;There is a global need for an official WHO App to help contain and mitigate COVID-19. The app should support the &lt;a href="https://www.who.int/" rel="noopener noreferrer"&gt;WHO&lt;/a&gt; efforts and be available worldwide, with information tailored to the user’s location, culture, and language.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/rfcx"&gt;Rainforest Connection Guardian&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://www.rfcx.org/" rel="noopener noreferrer"&gt;Rainforest Connection (RFCx)&lt;/a&gt; is a non-profit tech startup building scalable, open-source solutions to illegal logging, poaching and environmental threats. Notably, it creates acoustic monitoring systems for those who wish to end illegal deforestation in real-time.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Also has contributor opportunities for those with C, C++ knowledge.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/guardianproject/haven"&gt;The Guardian Project – Haven&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://guardianproject.github.io/haven/" rel="noopener noreferrer"&gt;Haven&lt;/a&gt; turns any Android phone into a motion, sound, vibration and light detector, watching for unexpected guests and unwanted intruders. Haven was designed for investigative journalists, human rights defenders and people at risk of forced disappearance to create a new kind of herd immunity. By combining the array of sensors found in any smartphone, Haven prevents the worst kind of people from silencing citizens without getting caught in the act with the world’s most secure communications technologies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jupyter Notebook
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="//github.com/Welthungerhilfe/cgm-ml"&gt;Child Growth Monitor&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By determining weight and height through a 3D scan of children, the &lt;a href="https://youtu.be/f2doV43jdwg" rel="noopener noreferrer"&gt;Child Growth Monitor&lt;/a&gt; can instantly detect malnutrition of children under five years of age.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/uptake/autofocus" rel="noopener noreferrer"&gt;AutoFocus&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This project uses deep learning computer vision to label images taken by motion-activated “camera traps” according to the animals they contain. Accurate models for this labelling task can address a significant bottleneck for wildlife conservation efforts.&lt;/p&gt;

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

&lt;p&gt;That concludes our collection of thirty-three open source projects that you can immediately help and, in turn, impact lives. If you made it all the way through, we would love to hear which projects you’re most excited about! Alternatively, if you have or know of another project that you believe is trying to make a change in the world, let us know by commenting below, reaching out on &lt;a href="https://twitter.com/VonageDev" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;, or by joining our &lt;a href="https://developer.nexmo.com/community/slack" rel="noopener noreferrer"&gt;Developer Community Slack Channel&lt;/a&gt;. We would love to highlight more projects in the future and support initiatives that benefit us all.&lt;/p&gt;

&lt;p&gt;Lastly, if you are in the process of completing the &lt;a href="https://nexmo.dev/2GZcyHc" rel="noopener noreferrer"&gt;Vonage Hacktoberfest challenge&lt;/a&gt;, you’ll have the option to receive a pair of Vonage socks &lt;em&gt;or&lt;/em&gt; a $5 Open Collective gift card. An &lt;a href="https://opencollective.com/discover?show=open%20source&amp;amp;offset=0" rel="noopener noreferrer"&gt;Open Collective&lt;/a&gt; is a group of people with a shared mission that operates in full transparency. Many of the projects mentioned in this post, and other projects you may already use, manage their funding with Open Collective. If feasible, we encourage you to continue supporting the projects you’re passionate about by donating.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Vonage is thrilled to be a Hacktoberfest 2020 partner. We’re &lt;a href="https://youtu.be/zYJpYMCy6PA" rel="noopener noreferrer"&gt;no strangers to open source&lt;/a&gt;, with our libraries, code snippets, and demos all on GitHub. To fully immerse yourself in the festivities, be sure to check out our &lt;a href="https://nexmo.dev/2GZcyHc" rel="noopener noreferrer"&gt;Hacktoberfest page&lt;/a&gt; for details on all that we have planned!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.nexmo.com/blog/2020/10/16/33-high-impact-open-source-projects-seeking-contributors" rel="noopener noreferrer"&gt;33 High Impact Open Source Projects Seeking Contributors&lt;/a&gt; appeared first on &lt;a href="https://www.nexmo.com" rel="noopener noreferrer"&gt;Vonage Developer Blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>career</category>
      <category>hacktoberfest</category>
      <category>contributorswanted</category>
    </item>
    <item>
      <title>Vonage Joins Hacktoberfest 2020</title>
      <dc:creator>Nahrin Jalal</dc:creator>
      <pubDate>Fri, 25 Sep 2020 09:53:28 +0000</pubDate>
      <link>https://forem.com/vonagedev/vonage-joins-hacktoberfest-2020-lap</link>
      <guid>https://forem.com/vonagedev/vonage-joins-hacktoberfest-2020-lap</guid>
      <description>&lt;p&gt;October is just around the corner—and that means &lt;a href="https://hacktoberfest.digitalocean.com/" rel="noopener noreferrer"&gt;Hacktoberfest&lt;/a&gt; is nearly upon us! This year, Vonage is thrilled to be a Hacktoberfest 2020 partner. We’re &lt;a href="https://youtu.be/zYJpYMCy6PA" rel="noopener noreferrer"&gt;no strangers to open source&lt;/a&gt;, with our libraries, code snippets, and demos all on GitHub. We couldn’t be more excited to support participants, share our knowledge, and chat about how important open source contributions can be!&lt;/p&gt;

&lt;h2&gt;
  
  
  Wait, What &lt;em&gt;Is&lt;/em&gt; Hacktoberfest?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://hacktoberfest.digitalocean.com/" rel="noopener noreferrer"&gt;Hacktoberfest&lt;/a&gt;—brought to you by DigitalOcean in partnership with Dev &amp;amp; Intel—is a month-long celebration of open source software. Maintainers are invited to guide potential contributors towards issues that will help move the project forward, and contributors get the opportunity to give back to projects they like and others they’ve just discovered.&lt;/p&gt;

&lt;p&gt;To take part, Hacktoberfest participants must submit four &lt;a href="https://hacktoberfest.digitalocean.com/details#quality" rel="noopener noreferrer"&gt;quality pull requests&lt;/a&gt; to public GitHub repositories between October 1-31.&lt;/p&gt;

&lt;p&gt;Upon completing four pull requests, you will have the option to choose either a Hacktoberfest shirt or the option to donate a tree. If you have made a valid contribution to a Vonage repository, you can &lt;strong&gt;also&lt;/strong&gt; receive either a pair of Bamboo Vonage Socks or a $5 &lt;a href="https://opencollective.com/" rel="noopener noreferrer"&gt;Open Collective&lt;/a&gt; Gift Card! You’ll be able to claim your prize &lt;a href="https://airtable.com/shrMXMw6Nwd3Rnjn4" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;FYI: Open source refers to publicly accessible source code. Anyone is free to inspect, modify, or learn from the code. Pull requests are proposed code changes you can submit to a branch in a repository on GitHub. Once submitted, a project maintainer will review the changes before they become final.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I Need To Know How To Code?
&lt;/h3&gt;

&lt;p&gt;No! Hacktoberfest is open to everyone. Whether you’re new to development, a student, or a long-time contributor, you can make positive contributions and help drive open source growth in an ever-growing global community. &lt;strong&gt;All backgrounds and skill levels&lt;/strong&gt; are encouraged to complete the challenge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready To Dive In?
&lt;/h2&gt;

&lt;p&gt;Firstly, make sure you’ve &lt;a href="https://hacktoberfest.digitalocean.com/" rel="noopener noreferrer"&gt;registered&lt;/a&gt;! Then, contribute to Vonage projects by finding issues tagged with &lt;code&gt;hacktoberfest&lt;/code&gt; on our GitHub repositories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Vonage" rel="noopener noreferrer"&gt;https://github.com/Vonage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nexmo" rel="noopener noreferrer"&gt;https://github.com/nexmo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nexmo-community" rel="noopener noreferrer"&gt;https://github.com/nexmo-community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/opentok" rel="noopener noreferrer"&gt;https://github.com/opentok&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/opentok-community" rel="noopener noreferrer"&gt;https://github.com/opentok-community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alternatively, you may find a comprehensive list of suggested issues on our &lt;a href="https://developer.nexmo.com/hacktoberfest" rel="noopener noreferrer"&gt;Hacktoberfest page&lt;/a&gt; with difficulties ranging from updating documentation to adding brand new features.&lt;/p&gt;

&lt;h2&gt;
  
  
  We Want To Help You Win
&lt;/h2&gt;

&lt;p&gt;Hacktoberfest expects hundreds of thousands of participants in 2020. To fully immerse yourself in the festivities, be sure to &lt;a href="https://nexmo.dev/3iuREgZ" rel="noopener noreferrer"&gt;stay tuned&lt;/a&gt; for all that we have planned! October will be jam-packed with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Virtual events in the &lt;a href="https://organize.mlh.io/participants/events/4079-hacktoberfest-tuesdays-east-coast-and-more" rel="noopener noreferrer"&gt;Americas&lt;/a&gt;, &lt;a href="https://organize.mlh.io/participants/events/4101-hacktoberfest-tuesdays-london-and-more" rel="noopener noreferrer"&gt;Europe&lt;/a&gt;, &lt;a href="https://organize.mlh.io/participants/events/4100-hacktoberfest-tuesdays-israel" rel="noopener noreferrer"&gt;Israel&lt;/a&gt;, and &lt;a href="https://organize.mlh.io/participants/events/4099-hacktoberfest-tuesdays-asia" rel="noopener noreferrer"&gt;Asia&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Daily Hacktoberfest streams on our &lt;a href="https://nexmo.dev/HacktoberfestStream" rel="noopener noreferrer"&gt;Twitch channel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Exciting blog posts and innovative tutorials and loads more!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We believe every level of developer can contribute to open source and help the community. If you have any questions or require support, reach out to us on our Developer Community &lt;a href="https://nexmo.dev/2GSUSNe" rel="noopener noreferrer"&gt;Slack channel&lt;/a&gt;, Hacktoberfest &lt;a href="https://nexmo.dev/hacktoberfestdiscord" rel="noopener noreferrer"&gt;Discord Server&lt;/a&gt;, or &lt;a href="https://nexmo.dev/3iuREgZ" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;From all of us at Vonage, happy hacking!&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.nexmo.com/blog/2020/09/25/vonage-joins-hacktoberfest-2020" rel="noopener noreferrer"&gt;Vonage Joins Hacktoberfest 2020&lt;/a&gt; appeared first on &lt;a href="https://www.nexmo.com" rel="noopener noreferrer"&gt;Vonage Developer Blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>developer</category>
      <category>hacktoberfest</category>
      <category>hacktoberfest2020</category>
      <category>opensource</category>
    </item>
    <item>
      <title>5 Ways To Make HTTP Requests In Node.js – 2020 Edition</title>
      <dc:creator>Nahrin Jalal</dc:creator>
      <pubDate>Wed, 23 Sep 2020 13:24:24 +0000</pubDate>
      <link>https://forem.com/vonagedev/5-ways-to-make-http-requests-in-node-js-2020-edition-4m91</link>
      <guid>https://forem.com/vonagedev/5-ways-to-make-http-requests-in-node-js-2020-edition-4m91</guid>
      <description>&lt;p&gt;Learning how to make HTTP requests can feel overwhelming as there are dozens of libraries available, with each solution claiming to be more efficient than the last. Some libraries offer cross-platform support, while others focus on bundle size or developer experience. In this post, we’ll explore five of the most popular ways to achieve this core functionality in Node.js.&lt;/p&gt;

&lt;p&gt;The code demonstrations will use the Lord of the Rings themed API, &lt;a href="https://the-one-api.dev/" rel="noopener noreferrer"&gt;one API to rule them all&lt;/a&gt;, for all interactions—simply because I accidentally binge-watched the entirety of this excellent series last weekend.&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%2F1q05876srtx54fblh0w5.gif" 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%2F1q05876srtx54fblh0w5.gif" alt="Lord of the Rings gif" width="250" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;Ensure you have &lt;a href="https://nodejs.org/en/download/" rel="noopener noreferrer"&gt;npm and Node.js&lt;/a&gt; installed on your machine, and you’re good to go!&lt;/p&gt;

&lt;p&gt;Prefer to jump ahead? This post will cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP (The Standard Library)&lt;/li&gt;
&lt;li&gt;SuperAgent&lt;/li&gt;
&lt;li&gt;Axios&lt;/li&gt;
&lt;li&gt;Node Fetch&lt;/li&gt;
&lt;li&gt;Got&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  HTTP (The Standard Library)
&lt;/h2&gt;

&lt;p&gt;The standard library comes equipped with the default &lt;code&gt;http&lt;/code&gt; module. This module can be used to make an HTTP request without needing to add bulk with external packages. However, as the module is low-level, it isn’t the most developer-friendly. Additionally, you would need to use &lt;a href="https://nodejs.org/api/stream.html#stream_streams_compatibility_with_async_generators_and_async_iterators" rel="noopener noreferrer"&gt;asynchronous streams&lt;/a&gt; for chunking data as the async/await feature for HTTP requests can’t be used with this library. The response data would then need to be parsed manually.&lt;/p&gt;

&lt;p&gt;The following code demonstrates how to use the standard &lt;code&gt;http&lt;/code&gt; library to make a &lt;code&gt;GET&lt;/code&gt; request to retrieve names of books in the Lord of the Rings series:&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;https&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://the-one-api.dev/v2/book?api_key=MY_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// a data chunk has been received.&lt;/span&gt;
  &lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chunk&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="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// complete response has been received.&lt;/span&gt;
  &lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;end&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Error: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&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;h2&gt;
  
  
  Super Agent
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/visionmedia/superagent" rel="noopener noreferrer"&gt;SuperAgent&lt;/a&gt; is a small HTTP request library that may be used to make AJAX requests in Node.js and browsers. The fact that SuperAgent has &lt;a href="https://github.com/visionmedia/superagent#plugins" rel="noopener noreferrer"&gt;dozens of plugins&lt;/a&gt; available to accomplish things like prevent caching, convert server payloads, or prefix or suffix URLs, is pretty impressive. Alternatively, you could extend functionality by writing your own plugin. SuperAgent also conveniently parses JSON data for you.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The browser-ready, minified version of SuperAgent is only 6KB (minified and gzipped) and very popular amongst developers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Enter the following command in your terminal to install SuperAgent from npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;superagent &lt;span class="nt"&gt;--save&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following code snippet showcases how to use SuperAgent to make a request:&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;superagent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;superagent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &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;try&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;queryArguments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MY_KEY&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;superagent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://the-one-api.dev/v2/book&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queryArguments&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&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;h2&gt;
  
  
  Axios
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/axios/axios" rel="noopener noreferrer"&gt;Axios&lt;/a&gt; is a promise based HTTP client for the browser and Node.js. Like SuperAgent, it conveniently parses JSON responses automatically. What sets it further apart is its capability to make concurrent requests with &lt;code&gt;axios.all&lt;/code&gt;—which, for example, would be an efficient way to retrieve quotes from the Lord of the Rings movies &lt;em&gt;and&lt;/em&gt; books at the same time.&lt;/p&gt;

&lt;p&gt;Enter the following command in your terminal to install Axios from npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;axios &lt;span class="nt"&gt;--save&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following code snippet showcases how to use Axios to make a request:&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;axios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &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;try&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://the-one-api.dev/v2/book?api_key=MY_KEY&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&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;h2&gt;
  
  
  Node Fetch
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/node-fetch/node-fetch" rel="noopener noreferrer"&gt;Node Fetch&lt;/a&gt; is a light-weight module that brings the Fetch API to Node.js. With fetch (in the browser or via Node Fetch) you can mix the &lt;code&gt;.then&lt;/code&gt; and &lt;code&gt;await&lt;/code&gt; syntax to make converting the readable stream into JSON a bit nicer—so data, as demonstrated in the snippet below, has the JSON without needing an awkward middle variable. Additionally, note that useful extensions such as redirect limit, response size limit, explicit errors for troubleshooting are available to use with Node Fetch.&lt;/p&gt;

&lt;p&gt;Enter the following command in your terminal to install Node Fetch from npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;node-fetch &lt;span class="nt"&gt;--save&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following code snippet showcases how to use Node Fetch to make a request:&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;fetch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node-fetch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &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;try&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;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://the-one-api.dev/v2/book? 
    api_key=MY_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&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;h2&gt;
  
  
  Got
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/sindresorhus/got" rel="noopener noreferrer"&gt;Got&lt;/a&gt; is another intuitive and powerful HTTP request library for Node.js. It was initially created as a light-weight alternative to the popular &lt;a href="https://www.npmjs.com/package/request" rel="noopener noreferrer"&gt;Request&lt;/a&gt; (now deprecated) package. To see how Got compares to other libraries, check out this &lt;a href="https://github.com/sindresorhus/got#comparison" rel="noopener noreferrer"&gt;detailed chart&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Unlike Axios and SuperAgent, Got does not parse JSON by default. Note that &lt;code&gt;{ json: true }&lt;/code&gt; was added as an argument in the code snippet below to achieve this functionality.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For modern browsers and &lt;a href="https://deno.land/" rel="noopener noreferrer"&gt;Deno&lt;/a&gt; usage, the folks behind Got produced &lt;a href="https://github.com/sindresorhus/ky" rel="noopener noreferrer"&gt;Ky&lt;/a&gt;. Ky is a tiny HTTP client with no dependencies based on the browser Fetch API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Enter the following command in your terminal to install Got from npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;got &lt;span class="nt"&gt;--save&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following code snippet showcases how to use Got to make a request:&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;got&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;got&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &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;try&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;got&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://the-one-api.dev/v2/book?api_key=MY_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;json&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&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;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;This post demonstrated how to achieve HTTP request functionality using some of what are currently considered to be the most popular libraries in Node.js.&lt;/p&gt;

&lt;p&gt;Other languages also have a myriad of libraries to tackle HTTP requests. What language do you want us to write about next? Let us know! We’d love to hear your thoughts or answer any questions on &lt;a href="https://twitter.com/VonageDev" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or the Vonage &lt;a href="https://developer.nexmo.com/community/slack" rel="noopener noreferrer"&gt;Developer Community Slack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.nexmo.com/blog/2020/09/23/5-ways-to-make-http-requests-in-node-js-2020-edition" rel="noopener noreferrer"&gt;5 Ways To Make HTTP Requests In Node.js – 2020 Edition&lt;/a&gt; appeared first on &lt;a href="https://www.nexmo.com" rel="noopener noreferrer"&gt;Vonage Developer Blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>node</category>
    </item>
    <item>
      <title>7 App Ideas to Build At Work (and 7 to Build At Home)</title>
      <dc:creator>Nahrin Jalal</dc:creator>
      <pubDate>Tue, 05 May 2020 13:32:58 +0000</pubDate>
      <link>https://forem.com/vonagedev/7-app-ideas-to-build-at-work-and-7-to-build-at-home-3h8p</link>
      <guid>https://forem.com/vonagedev/7-app-ideas-to-build-at-work-and-7-to-build-at-home-3h8p</guid>
      <description>&lt;p&gt;It isn’t easy navigating through uncertainty. But nothing happens in isolation, and even when we’re apart, it’s essential we find ways to bring us together. More than ever, we need each other to help us through these unprecedented times. We have to stay connected by using the tools out there—and when required, build our own solutions. Below you’ll find 14 exciting ideas that we hope will help you create or enhance communications between you and your peers, loved ones, or clients.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ideas for Work
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2020/04/09/build-a-secure-video-appointments-application-using-vonage-api-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F04%2FBlog_Video-Appointments_1200x600.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2020/04/09/build-a-secure-video-appointments-application-using-vonage-api-dr" rel="noopener noreferrer"&gt;Build a Secure Video Appointments Application Using Vonage API&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;In today’s world, video is an essential and powerful tool for many use cases: whether you’re remotely joining a classroom, consulting with your doctor, or even sharing your whereabouts in an emergency. In a few simple steps, you can create video appointments, send a message with an appointment link to the participants, and start a video conversation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2019/08/26/transcribe-a-conference-call-using-amazon-transcribe-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2019%2F08%2FBlog_Transcribe_Conference-Call_1200x600.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2019/08/26/transcribe-a-conference-call-using-amazon-transcribe-dr" rel="noopener noreferrer"&gt;Transcribe a Conference Call Using Amazon Transcribe and Vonage&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;If you’re like me, you spend quite a lot of time in conference calls and often need to refer back to what was said in those calls. Wouldn’t it be great if you could have them transcribed automatically so that you can revisit them at your leisure?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2019/11/12/translate-sms-messages-with-ibm-watson-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2019%2F11%2FBlog_Translate-SMS-Messages_1200x600.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2019/11/12/translate-sms-messages-with-ibm-watson-dr" rel="noopener noreferrer"&gt;Translate SMS Messages With IBM Watson and Vonage&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Translating incoming text messages can help break down communication barriers and help you reach a broader audience. Learn how to do so with &lt;a href="https://www.nexmo.com/blog/2019/11/12/translate-sms-messages-with-ibm-watson-dr" rel="noopener noreferrer"&gt;IBM Watson&lt;/a&gt;, &lt;a href="https://www.nexmo.com/blog/2019/11/04/translating-sms-messages-with-aws-translate-dr" rel="noopener noreferrer"&gt;AWS Translate&lt;/a&gt;, or the &lt;a href="https://www.nexmo.com/blog/2019/10/24/extending-nexmo-google-cloud-translation-api-dr" rel="noopener noreferrer"&gt;Google Translation API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2020/01/13/sentiment-analysis-using-ibm-watson-tone-analyzer-in-php-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F01%2FBlog_Sentiment-Analysis_Watson_1200x600.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2020/01/13/sentiment-analysis-using-ibm-watson-tone-analyzer-in-php-dr" rel="noopener noreferrer"&gt;Sentiment Analysis using IBM Watson Tone Analyzer in PHP&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;In a world where data and text often take a front-row seat, it is increasingly important to understand the sentiment of communications we send and receive. A Tone Analyzer helps bridge the gap between what we say and what we mean.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2019/12/30/building-a-real-time-net-transcription-service-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2019%2F12%2FBlog_Real-Time_NET-Transcription_1200x600-1.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2019/12/30/building-a-real-time-net-transcription-service-dr" rel="noopener noreferrer"&gt;Building a Real-Time .NET Transcription Service&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Building speech to text transcription services has never been more straightforward.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2019/02/01/how-launch-video-meetings-slack-with-tokbox-app" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2019%2F02%2FBlog_Launch-Video-Meetings_1200x600.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2019/02/01/how-launch-video-meetings-slack-with-tokbox-app" rel="noopener noreferrer"&gt;How to Launch Video Meetings in Slack with Vonage&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This integration offers an easy way to launch a customized live video experience on Slack for end-users, without ever having to leave the workspace.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2020/04/08/build-a-video-conversation-platform-for-online-gatherings-with-nuxt-js-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F04%2FBlog_Online-Gatherings_1200x600.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2020/04/08/build-a-video-conversation-platform-for-online-gatherings-with-nuxt-js-dr" rel="noopener noreferrer"&gt;Build a Video Conversation Platform for Online Gatherings With Nuxt.js&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;During a time where many events are going online, one challenge community organizers face is how to facilitate conversations between attendees during breaks and after talks have ended. In this tutorial, learn how to build an application in which events have their own lobbies with multiple conversation tables.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ideas for Home
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2020/03/06/sms-notifications-google-sheets-nodered-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F03%2FBlog_Group-Notifications_NodeRED_1200x600.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2020/03/06/sms-notifications-google-sheets-nodered-dr" rel="noopener noreferrer"&gt;Sending Group Notifications with Google Sheets and Node-RED&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Quickly send out urgent notifications to a list of Google Sheet contacts with a Node-RED flow and the Vonage SMS API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2018/11/20/build-a-family-hotline-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2018%2F11%2FBlog_Family-Hotline_1200x600.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2018/11/20/build-a-family-hotline-dr" rel="noopener noreferrer"&gt;Build a Family Hotline with Vonage&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Have you ever had to fill out an important contact form and noticed it only had one slot for a phone number? What happens if you give them your details and you’re unavailable? Learn how to set up a phone number capable of forwarding calls between two contact numbers or to both!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2018/12/14/build-turkey-timer-laravel-facebook-messenger-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2018%2F12%2FBlog_Timer-Lavavel-FB_1200x600.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2018/12/14/build-turkey-timer-laravel-facebook-messenger-dr" rel="noopener noreferrer"&gt;Building a Turkey Timer with Laravel, Facebook Messenger and Vonage&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Streamline meal preparation for your family with this app that retrieves the list of steps your recipes require and sends you the next step when it’s time to do it. You can relax, safe in the knowledge that everything in the kitchen is under control, and when it’s time for human intervention, you’ll be notified!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2019/09/18/build-a-family-stand-up-app-with-nexmo-messages-and-dispatch-api-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2019%2F09%2FBlog_Family-Stand-Up-App_1200x600.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2019/09/18/build-a-family-stand-up-app-with-nexmo-messages-and-dispatch-api-dr" rel="noopener noreferrer"&gt;Build a Family Stand Up App with Vonage&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Stay better connected with your family (wherever in the world they may be) by reporting weekly highs and lows into one consolidated place to view.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2019/04/03/snapchat-filters-opentok-tracking-js-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2019%2F04%2FBlog_Snapchat-Style-Filters_1200x600.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2019/04/03/snapchat-filters-opentok-tracking-js-dr" rel="noopener noreferrer"&gt;Snapchat Style Filters with Tracking.js and Vonage&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Be Batman or just freak some people out. In this guide, you’ll learn to add facial tracking using Tracking.js and create some cool Snapchat style filters for a video stream.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2020/02/28/create-preact-netlify-cms-opentok-health-app-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2019%2F08%2Fpreact.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2020/02/28/create-preact-netlify-cms-opentok-health-app-dr" rel="noopener noreferrer"&gt;Build a Health Blog With Video Coaching Using Preact.js and Vonage&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Track your health by creating a blog to report daily activity, diet, energy levels, mood and more. Share your app with any professionals you work with (personal trainer, nutritionist, therapist) and receive live video coaching directly on the app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/blog/2020/01/27/sentiment-analysis-with-opentok-and-azure-face-api-dr" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F01%2FBlog_Sentiment-Analysis_Azure_1200x600.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nexmo.com/blog/2020/01/27/sentiment-analysis-with-opentok-and-azure-face-api-dr" rel="noopener noreferrer"&gt;I See What You’re Saying: Sentiment Analysis With Azure Face API and Vonage&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Learn how to build a multi-party video conference that analyzes the sentiment of each participant based on their facial expression.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get More From Vonage
&lt;/h2&gt;

&lt;p&gt;We’ve shared several posts on getting started with Vonage, but there’s &lt;strong&gt;so&lt;/strong&gt; much more that can be done.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explore more solutions pertaining to &lt;a href="https://www.vonage.com/solutions/healthcare/" rel="noopener noreferrer"&gt;healthcare&lt;/a&gt;, &lt;a href="https://www.vonage.com/solutions/education/" rel="noopener noreferrer"&gt;education&lt;/a&gt;, and &lt;a href="https://www.vonage.com/unified-communications/features/vonage-meetings/" rel="noopener noreferrer"&gt;video collaboration&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Watch &lt;a href="https://www.youtube.com/watch?v=pMFUb2dOK20&amp;amp;feature=youtu.be" rel="noopener noreferrer"&gt;this webinar&lt;/a&gt; to learn best practices for enabling employees to work from home, including critical insights for contact centres &lt;/li&gt;
&lt;li&gt;Learn more about using Vonage APIs in our &lt;a href="https://www.vonage.com/developer-center/?icmp=mainnav_developercenter_novalue#APIs" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Collaborate with other developers who are using Vonage APIs to build communications apps in the &lt;a href="https://developer.nexmo.com/community/slack" rel="noopener noreferrer"&gt;Vonage Community Slack&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The post &lt;a href="https://www.nexmo.com/blog/2020/05/05/7-app-ideas-to-build-at-work-and-7-to-build-at-home-dr" rel="noopener noreferrer"&gt;7 App Ideas to Build At Work (and 7 to Build At Home)&lt;/a&gt; appeared first on &lt;a href="https://www.nexmo.com" rel="noopener noreferrer"&gt;Vonage Developer Blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>sideprojects</category>
      <category>career</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>The One Where Nahrin Talks About Her Journey to Tech</title>
      <dc:creator>Nahrin Jalal</dc:creator>
      <pubDate>Mon, 09 Mar 2020 05:27:32 +0000</pubDate>
      <link>https://forem.com/nahrinjalal/the-one-where-i-share-my-journey-to-tech-anj</link>
      <guid>https://forem.com/nahrinjalal/the-one-where-i-share-my-journey-to-tech-anj</guid>
      <description>&lt;p&gt;I was in a good place in 2016. My life was going according to plan. If there had been a checklist, I would’ve been checking off boxes with gusto.&lt;/p&gt;

&lt;p&gt;As a pre-law student, I had dreamt of acing the Law School Admission Test, attending a top law school, and becoming a high-flying corporate litigator. Now, more than halfway there, the end was in sight. I was going to be successful, make my friends and family proud, and be happy.&lt;/p&gt;

&lt;p&gt;And while I have no doubt there are plenty of perfectly happy lawyers out there, in 2016, while I was working at a legal non-profit and counting down the days to my first day of law school, there didn’t seem to be. The thing no one tells you when you grow up wanting to be a lawyer is that while the trek there may be challenging, it doesn’t become less demanding. The women lawyers I aspired to one day join the ranks of worked all week tirelessly and took their work home with them on weekends. While they made a significant impact professionally, it seemed to be possible because of sacrifices made elsewhere. The end in sight now looked bleak, and I became disillusioned with my chosen path.&lt;/p&gt;

&lt;p&gt;I had been laser-focused on my future legal profession for so long that I had never allowed myself to consider other potentially rewarding paths. Accepting that this journey had taken a turn that no longer served me was the best thing I had ever done for myself. Because soon after, I was able to take a leap of faith to start again.&lt;/p&gt;

&lt;p&gt;This time, in pursuit of a career in tech. Having never shown a particular interest in computers as a child, I probably seemed very unlikely to end up working with them. And yet, it’s because I’m one of the least likely people to have ended up in tech that I feel that it’s important to talk about how I ended up here. While my path to tech may appear non-linear, it wasn’t random.&lt;/p&gt;

&lt;h2&gt;
  
  
  The One Where Nahrin Learns to Code
&lt;/h2&gt;

&lt;p&gt;Flashback to 2016, the Communications Manager at the legal non-profit I was working at had abruptly quit. In a constant effort to prove myself, I volunteered for tasks left, right, and centre—although I had no clue how to do most of them. Being optimistic about my ability to figure things out is one of my best traits and one that I often regret. As my employer struggled to fill the role, I found myself gravitating towards the more technical tasks: I learned to manage the database, design and disseminate communications, and update the website in a matter of weeks. And I was hooked.&lt;/p&gt;

&lt;p&gt;I had started learning how to code after work with resources like &lt;a href="https://www.freecodecamp.org/"&gt;freeCodeCamp.org&lt;/a&gt; and &lt;a href="https://www.codecademy.com/"&gt;codeacademy&lt;/a&gt;. I enjoyed what I was picking up, and I knew I wanted to continue. I wanted to build, learn, teach, and create.&lt;/p&gt;

&lt;p&gt;But how could I break into the tech industry? Could I justify going back to university and adding more debt to my already daunting student loans?&lt;/p&gt;

&lt;p&gt;I decided to visit a reputable coding bootcamp in Toronto and left feeling more excited and optimistic about my future than I had in months. I figured it didn’t hurt to apply. I got accepted.&lt;/p&gt;

&lt;p&gt;I quit my job and started the web development immersive program at &lt;a href="https://junocollege.com/"&gt;Juno College of Technology&lt;/a&gt; (then HackerYou) in the spring of 2017. Nine weeks went by in a flash of classes, creating projects using new (to me) technologies, and interview prep. I graduated Juno College feeling empowered in knowing I was leaving with skills I could take anywhere. Even on the bad days now, I remind myself of that feeling, and I fall back in love with code all over again.&lt;/p&gt;

&lt;h2&gt;
  
  
  The One Where Nahrin Becomes A Professional Developer
&lt;/h2&gt;

&lt;p&gt;A combination of luck and preparation got me a job offer soon after I began applying. I had done it!&lt;/p&gt;

&lt;p&gt;Yet in my software development team, I was very aware of being an &lt;em&gt;only&lt;/em&gt;: the only junior, the only person of colour, and the only woman. While I loved what my work entailed, I wished I didn’t so often feel like the odd one out.&lt;/p&gt;

&lt;h2&gt;
  
  
  The One Where Nahrin Finds Community
&lt;/h2&gt;

&lt;p&gt;Mentors in my coding bootcamp had shared how valuable attending meetups could be, and now that I had free time again, I started attending them as often as possible. I found friends that I related to, role models that made me feel represented, and above all, a sense of community.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fben8l3lu2ib1h2cm3pyr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fben8l3lu2ib1h2cm3pyr.jpg" alt="Women Who Code Leadership team 2019" width="800" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am now a Lead for &lt;a href="https://www.meetup.com/Women-Who-Code-Toronto/"&gt;Women Who Code Toronto&lt;/a&gt;. We provide an avenue for women to pursue a career in technology, help them gain new skills and hone existing skills for professional advancement, and foster environments where networking and mentorship are valued.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F20dn3vy7dja7t8i3z5tq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F20dn3vy7dja7t8i3z5tq.jpg" alt="Women Who Code Toronto Execs" width="800" height="1043"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The One Where Nahrin Discovers A Love for Teaching
&lt;/h2&gt;

&lt;p&gt;I strongly believe in giving back and paying it forward every step of the way. We always have something to offer, even when we’re just starting out! I had started volunteering as a mentor at &lt;a href="https://www.canadalearningcode.ca/"&gt;Canada Learning Code&lt;/a&gt; workshops early in my bootcamp journey and carried this well into my first year as a developer. When approached with the opportunity to create an accessible technical education program, I took it. In mid-2018, I helped launch FemmTO at &lt;a href="http://uforchange.org/"&gt;UforChange&lt;/a&gt;—a 12-week web development program offered to marginalized youth from underserved communities interested in pursuing STEM careers. In small classes, and through hands-on project-based work, our students develop technical skills and increased confidence. &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1050078722605416450-533" src="https://platform.twitter.com/embed/Tweet.html?id=1050078722605416450"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1050078722605416450-533');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1050078722605416450&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  The One Where Nahrin Combines Passions
&lt;/h2&gt;

&lt;p&gt;I’m now in the privileged position of being a Developer Educator at &lt;a href="https://www.vonage.com/"&gt;Vonage&lt;/a&gt;, where my work revolves around creating resources that help and inspire developers using our communications APIs. This role blends my passions for learning about cutting-edge technology, supporting communities, and advancing technical education—and I'm so excited to have landed here.&lt;/p&gt;

&lt;p&gt;Parting advice: I understand the ability to take risks involves privilege, and there are many in circumstances that can’t afford to take big chances as I have. But when possible, I implore you not to settle. Don’t hold yourself back because you believe you’re not cut out for something. You’re not too old. It’s not too late. Always keep learning. Take risks. Don’t settle.&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>womenintech</category>
      <category>career</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Build a Health Blog With Video Using Preact.js, Netlify CMS, and Vonage</title>
      <dc:creator>Nahrin Jalal</dc:creator>
      <pubDate>Fri, 28 Feb 2020 18:06:06 +0000</pubDate>
      <link>https://forem.com/vonagedev/build-a-health-blog-with-video-using-preact-js-netlify-cms-and-vonage-35m3</link>
      <guid>https://forem.com/vonagedev/build-a-health-blog-with-video-using-preact-js-netlify-cms-and-vonage-35m3</guid>
      <description>&lt;p&gt;In this tutorial, we will build a Progressive Web App (PWA) that serves as a personal health blogging tool with live video chat functionality—allowing you to receive coaching directly on the app! PWAs are websites that have been enhanced to feel and function like native apps and boast many features that a traditional website doesn’t, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installable on mobile devices&lt;/li&gt;
&lt;li&gt;Push notifications&lt;/li&gt;
&lt;li&gt;Offline support&lt;/li&gt;
&lt;li&gt;Discoverable from web search results and app stores
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;And&lt;/em&gt; you can update your app by directly editing your web server code.&lt;/p&gt;

&lt;p&gt;So how do you get started?&lt;/p&gt;

&lt;p&gt;Just about any traditional web app can be converted into a baseline PWA with the addition of a &lt;code&gt;manifest.json&lt;/code&gt; file and a Service Worker JavaScript file. However, if you’re starting from scratch, several tools can streamline the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  PWAs with Create React App vs. Preact CLI
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/facebook/create-react-app" rel="noopener noreferrer"&gt;Create React App&lt;/a&gt; (CRA) is a tool for creating PWAs that is incredibly popular amongst developers, especially given the sheer size of the &lt;a href="https://reactjs.org/" rel="noopener noreferrer"&gt;React.js&lt;/a&gt; ecosystem. By default, every new CRA project is a PWA—amazing! However, a PWA should be as fast and performant as possible, and CRA doesn’t do much for code optimization.&lt;/p&gt;

&lt;p&gt;This is why our demo is built using &lt;a href="https://preactjs.com/" rel="noopener noreferrer"&gt;Preact.js&lt;/a&gt;, a lightweight and faster alternative to React, with the same built-in support for PWAs. Preact delivers on performance, size, efficiency, and compatibility in a big way. Notably, it’s only 3.5kb in size and is compatible with the React modules you would find on npm. Being able to write React/React DOM code without making changes to workflow or codebase also significantly limits any learning curve.&lt;br&gt;&lt;br&gt;
For more information on how the libraries differ and features unique to Preact, check out the &lt;a href="https://preactjs.com/guide/v10/differences-to-react/" rel="noopener noreferrer"&gt;Preact documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/preactjs/preact-cli/blob/master/README.md" rel="noopener noreferrer"&gt;Preact CLI&lt;/a&gt; functions like Create React App and is just as easy to use. It gets you up and running instantly with a minimal and understandable project structure &lt;em&gt;and&lt;/em&gt; puts your project on the path to excellent performance. New projects ship with only 4.5kB of JavaScript in production and become interactive in under 3s—even on slow devices and networks. Noteworthy features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100/100 &lt;a href="https://developers.google.com/web/tools/lighthouse" rel="noopener noreferrer"&gt;Lighthouse&lt;/a&gt; score, right out of the box&lt;/li&gt;
&lt;li&gt;Fully automatic code-splitting for routes&lt;/li&gt;
&lt;li&gt;Differential JavaScript serving&lt;/li&gt;
&lt;li&gt;Auto-generated Service Workers for offline caching powered by sw-precache&lt;/li&gt;
&lt;li&gt;Support for CSS Modules, LESS, Sass, and Stylus with Autoprefixer&lt;/li&gt;
&lt;li&gt;Monitoring of your bundle/chunk sizes with built-in tracking&lt;/li&gt;
&lt;li&gt;Push Render Pre-Cache Lazy-load (PRPL) pattern support for efficient loading&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More information regarding features may be found in the &lt;a href="https://preactjs.com/cli/" rel="noopener noreferrer"&gt;Preact CLI documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Build a Health Coaching PWA using Preact CLI and Vonage Video API
&lt;/h3&gt;
&lt;h4&gt;
  
  
  The Use Case
&lt;/h4&gt;

&lt;p&gt;Is becoming healthier one of your New Year’s resolutions? This application will help you track your progress by enabling you to blog about daily activity, diet, energy levels, mood and more using the Preact CLI &lt;a href="https://www.netlifycms.org/" rel="noopener noreferrer"&gt;Netlify CMS&lt;/a&gt; template. Share your app with any professionals you work with (personal trainer, nutritionist, therapist) and receive live video coaching directly from the platform with &lt;a href="https://tokbox.com/platform" rel="noopener noreferrer"&gt;Vonage Video API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In case you’ve fallen off track with your health goals, keeping a journal has been proven to help with accountability!&lt;/p&gt;

&lt;p&gt;The steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Preact CLI and Create Your Project&lt;/li&gt;
&lt;li&gt;Update Default Text and Styling&lt;/li&gt;
&lt;li&gt;Create a Vonage Video Project&lt;/li&gt;
&lt;li&gt;Add Custom Video Chat&lt;/li&gt;
&lt;li&gt;Deploy with Netlify&lt;/li&gt;
&lt;li&gt;Publish Posts with Netlify CMS&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Prerequisites
&lt;/h4&gt;

&lt;p&gt;Before getting started, you’ll need a couple of things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://tokbox.com/account/user/signup?utm_source=DEV_REL&amp;amp;utm_medium=github&amp;amp;utm_campaign=https://github.com/nexmo-community/health-coaching-app" rel="noopener noreferrer"&gt;Vonage Video API Account&lt;/a&gt; — create one for free if you haven’t already.&lt;/li&gt;
&lt;li&gt;Node and NPM installed on your development environment. This tutorial uses Node (&amp;gt; V6.x) and NPM 6. Check that they’re installed and up-to-date by running the following in your terminal:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node --version

npm --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If needed, navigate to &lt;a href="http://nodejs.org/" rel="noopener noreferrer"&gt;nodejs.org&lt;/a&gt; to install the correct version (&amp;gt; V6.x).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Want to skip to the end? You can find the code for this tutorial on &lt;a href="https://github.com/nexmo-community/health-coaching-app" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Step 1: Install Preact CLI and Create Your Project &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;To set up the application, we’ll need to have the Preact CLI installed globally. Use the following command to install the CLI.&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 -g preact-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, let’s create a new project using the &lt;code&gt;netlify-cms&lt;/code&gt; template. This will provide a simple blog that will serve as the base of our application. Remember to replace &lt;code&gt;my-project-name&lt;/code&gt; with what you would like to call the project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;preact create netlify my-project-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the development server with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd my-project-name &amp;amp;&amp;amp; npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’re all set! A new project has been created. Open your browser and go to &lt;code&gt;http://localhost:8080&lt;/code&gt; to check progress on the application as we continue with the tutorial.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2: Update Default Text and Styling &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;The application we are building is a platform personal to &lt;em&gt;you&lt;/em&gt;—and I encourage you to get creative and customize the design! If you’d like to quickly get started, for now, the &lt;a href="https://practical-bell-c77b62.netlify.com/" rel="noopener noreferrer"&gt;demo&lt;/a&gt; has some basic text and styling implemented, and the code can be found on &lt;a href="https://github.com/nexmo-community/health-coaching-app" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. To change the default text on the homepage, update the code in &lt;code&gt;home/index.js&lt;/code&gt;. For styling changes, &lt;code&gt;style/index.css&lt;/code&gt;, &lt;code&gt;home/style.css&lt;/code&gt;, &lt;code&gt;blog/styles.css&lt;/code&gt;, and &lt;code&gt;contact/styles.css&lt;/code&gt; are good places to look.&lt;/p&gt;

&lt;p&gt;Feel free to revisit this step and change up the styling as often as inspiration hits!&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: Create a Vonage Video Project &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;In your &lt;a href="https://tokbox.com/account/user/signup?utm_source=DEV_REL&amp;amp;utm_medium=github&amp;amp;utm_campaign=https://github.com/nexmo-community/health-coaching-app" rel="noopener noreferrer"&gt;Vonage Video API account&lt;/a&gt;, click the &lt;strong&gt;Projects&lt;/strong&gt; menu and &lt;strong&gt;Create New Project&lt;/strong&gt;. You will have the option to &lt;strong&gt;Create Embed Project&lt;/strong&gt; or &lt;strong&gt;Create Custom Project&lt;/strong&gt;. The Video Chat Embed is the easiest way to add basic video functionality quickly and involves no coding. However, it does not currently allow for mobile app integration (which is a crucial PWA feature) and advanced features such as archiving, screen sharing, and text chat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/02/opentok-project-types.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F02%2Fopentok-project-types.png" alt="OpenTok Project types" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, let’s proceed by clicking the &lt;strong&gt;Create Custom Project&lt;/strong&gt; button. Give your new project a name and press the &lt;strong&gt;Create&lt;/strong&gt; button. You can leave the preferred codec as ‘VP8’.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/02/create-opentok-project.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F02%2Fcreate-opentok-project.png" alt="Create Custom Project" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, click on &lt;strong&gt;View Project&lt;/strong&gt;. At the bottom of the project detail page, you’ll find the Project Tools where you can create a Session ID and Token. Leave &lt;strong&gt;Routed&lt;/strong&gt; as your session’s media mode and press the &lt;strong&gt;Create Session ID&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/02/create-session.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F02%2Fcreate-session.png" alt="Create Video session" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, paste the generated session ID into the Session ID field of the Generate Token form and press the &lt;strong&gt;Generate Token&lt;/strong&gt; button.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: The default expiration time for the token is one hour. Feel free to prolong that for up to 30 days at a time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/02/generate-token.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F02%2Fgenerate-token.png" alt="Generate OpenTok token" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We’re now all set to start building out the video component!&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 4: Add Custom Video Chat &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;One of the benefits of Preact is its ability to be used in the browser, with no build tools needed. As &lt;a href="https://reactjs.org/docs/introducing-jsx.html" rel="noopener noreferrer"&gt;JSX&lt;/a&gt;, the syntax commonly used in React apps needs to be transpiled, Preact uses an alternative called &lt;a href="https://github.com/developit/htm" rel="noopener noreferrer"&gt;HTM&lt;/a&gt;. Instead of using a custom syntax, it relies on native tagged template strings which are already in JavaScript.&lt;/p&gt;

&lt;p&gt;To help with readability, we will mostly use JSX in this tutorial. We can easily switch between JSX and HTM because of &lt;code&gt;preact-compat&lt;/code&gt;— more on that later!&lt;/p&gt;

&lt;h4&gt;
  
  
  Create a Video Component
&lt;/h4&gt;

&lt;p&gt;Inside the &lt;code&gt;components&lt;/code&gt; folder, create a &lt;code&gt;video&lt;/code&gt; folder to hold all the components we are about to add. The structure should look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/02/file-structure.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F02%2Ffile-structure.png" alt="project structure" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, add the following files to the &lt;code&gt;video&lt;/code&gt; folder:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;video.js&lt;/li&gt;
&lt;li&gt;publisher.js&lt;/li&gt;
&lt;li&gt;subscriber.js&lt;/li&gt;
&lt;li&gt;checkbox.js&lt;/li&gt;
&lt;li&gt;connectionStatus.js&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Go to &lt;code&gt;src/routes/contact/index.js&lt;/code&gt; and import the &lt;code&gt;Video&lt;/code&gt; component and call it within your return statement. This is where the video chat screen will be located in the app once we have built out the necessary components. The code should resemble this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { h } from 'preact';import { lazy, Suspense } from 'preact/compat';import style from './style';let Video;if (typeof window !== 'undefined') { Video = lazy(() =&amp;gt; import('../../components/video/video.js'));}const photographs = (props) =&amp;gt; { return ( &amp;lt;div class={style.pageContact}&amp;gt; &amp;lt;h1 class={style.pageTitle}&amp;gt;Hello.&amp;lt;/h1&amp;gt; &amp;lt;p&amp;gt;Enable your audio and video to begin.&amp;lt;/p&amp;gt; &amp;lt;div class={style.formWrapper}&amp;gt; &amp;lt;Suspense fallback={&amp;lt;div&amp;gt;loading...&amp;lt;/div&amp;gt;}&amp;gt; &amp;lt;Video /&amp;gt; &amp;lt;/Suspense&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; );};export default photographs;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Note: When the app is pre-rendering, our module as components are executed in a Node.js environment, where most Web APIs are not available. To account for this, we have wrapped the code in a check with: &lt;code&gt;if (typeof window !== ‘undefined’)&lt;/code&gt;. Neglecting this step will cause the deploy process to inevitably fail.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Install OpenTok
&lt;/h4&gt;

&lt;p&gt;In your terminal, run:&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 opentok-react
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You may be wondering if that command has a typo in it. Shouldn’t that read &lt;code&gt;opentok-preact&lt;/code&gt;? Interestingly enough, no!&lt;/p&gt;

&lt;p&gt;The Preact CLI includes &lt;code&gt;preact-compat&lt;/code&gt;, which is a thin layer over Preact that works to achieve 100% compatibility with React. &lt;code&gt;preact/compat&lt;/code&gt; adds around 2kb to our bundle size, but has the advantage of supporting the large majority of existing React modules you may find on npm. This also lets us continue writing React/ReactDOM code without any changes to workflow or codebase.&lt;/p&gt;

&lt;h4&gt;
  
  
  Build the Video Component
&lt;/h4&gt;

&lt;p&gt;Copy and insert the values for your &lt;code&gt;API Key&lt;/code&gt;, &lt;code&gt;Session ID&lt;/code&gt; and &lt;code&gt;Token&lt;/code&gt; to the &lt;code&gt;video.js&lt;/code&gt; component. These are the values we generated in our Vonage Video API account in Step 2.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;session&lt;/strong&gt; is essentially a room where the video chat will occur. It starts as unoccupied and listens for users to join.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { h, Component } from 'preact';import { OTSession, OTStreams, preloadScript } from 'opentok-react';import ConnectionStatus from './connectionStatus';import Publisher from './publisher';import Subscriber from './subscriber';class VideoComponent extends Component { constructor(props) { super(props); this.state = { error: null, connected: false }; this.sessionEvents = { sessionConnected: () =&amp;gt; { this.setState({ connected: true }); }, sessionDisconnected: () =&amp;gt; { this.setState({ connected: false }); } }; } onError = (err) =&amp;gt; { this.setState({ error: `Failed to connect: ${err.message}` }); } render() { return ( &amp;lt;OTSession apiKey='' sessionId='' token='' eventHandlers={this.sessionEvents} onError={this.onError} &amp;gt; {this.state.error ? &amp;lt;div id="error"&amp;gt;{this.state.error}&amp;lt;/div&amp;gt; : null} &amp;lt;ConnectionStatus connected={this.state.connected} /&amp;gt; &amp;lt;Publisher /&amp;gt; &amp;lt;OTStreams&amp;gt; &amp;lt;Subscriber /&amp;gt; &amp;lt;/OTStreams&amp;gt; &amp;lt;/OTSession&amp;gt; ); }}export default preloadScript(VideoComponent);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This component is responsible for displaying your video (if you’re first to join the session) with &lt;code&gt;&amp;lt;Publisher /&amp;gt;&lt;/code&gt;, your coach’s video with &lt;code&gt;&amp;lt;Subscriber /&amp;gt;&lt;/code&gt;, and whether you are connected in a session with &lt;code&gt;&amp;lt;ConnectionStatus /&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Video Publishing Functionality
&lt;/h4&gt;

&lt;p&gt;After the session has been established, the session ID and token are used to &lt;strong&gt;publish&lt;/strong&gt; an audio-video stream from the first user. At this point, there is one participant in the session.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;publisher.js&lt;/code&gt;, insert:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { h, Component } from 'preact';import { OTPublisher } from "opentok-react";import CheckBox from "./checkbox";class Publisher extends Component { constructor(props) { super(props); this.state = { error: null, audio: false, video: false, videoSource: "camera" }; } setAudio = audio =&amp;gt; { this.setState({ audio }); }; setVideo = video =&amp;gt; { this.setState({ video }); }; changeVideoSource = videoSource =&amp;gt; { this.state.videoSource !== "camera" ? this.setState({ videoSource: "camera" }) : this.setState({ videoSource: "screen" }); }; onError = err =&amp;gt; { this.setState({ error: `Failed to publish: ${err.message}` }); }; render() { return ( &amp;lt;div className="publisher"&amp;gt; {this.state.error ? &amp;lt;div id="error"&amp;gt;{this.state.error}&amp;lt;/div&amp;gt; : null} &amp;lt;OTPublisher properties={{ publishAudio: this.state.audio, publishVideo: this.state.video, videoSource: this.state.videoSource === "screen" ? "screen" : undefined }} onError={this.onError} /&amp;gt; &amp;lt;CheckBox label="Share Screen" checked={this.state.videoSource === "screen"} onChange={this.changeVideoSource} /&amp;gt; &amp;lt;CheckBox label="Enable Audio" checked={this.state.audio === "audio"} onChange={this.setAudio} /&amp;gt; &amp;lt;CheckBox label="Enable Video" checked={this.state.videoSource === "video"} onChange={this.setVideo} /&amp;gt; &amp;lt;/div&amp;gt; ); }}export default Publisher;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using the &lt;code&gt;CheckBox&lt;/code&gt; component, we are allowing the user to share their screen or choose to enable audio and/or video.&lt;/p&gt;

&lt;h4&gt;
  
  
  Video Subscribing Functionality
&lt;/h4&gt;

&lt;p&gt;When a new user launches the app, the app server will send the session ID and a unique token that is then used to connect to the session. Once connected, both users have the ability to &lt;strong&gt;publish&lt;/strong&gt; their audio-video stream and &lt;strong&gt;subscribe&lt;/strong&gt; to access the other user’s stream.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;subscriber.js&lt;/code&gt;, insert:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { h, Component } from 'preact';import { OTSubscriber } from "opentok-react";import CheckBox from "./checkbox";class Subscriber extends Component { constructor(props) { super(props); this.state = { error: null, audio: false, video: false }; } setAudio = audio =&amp;gt; { this.setState({ audio }); }; setVideo = video =&amp;gt; { this.setState({ video }); }; onError = err =&amp;gt; { this.setState({ error: `Failed to subscribe: ${err.message}` }); }; render() { return ( &amp;lt;div className="subscriber"&amp;gt; Guest {this.state.error ? &amp;lt;div id="error"&amp;gt;{this.state.error}&amp;lt;/div&amp;gt; : null} &amp;lt;OTSubscriber properties={{ subscribeToAudio: this.state.audio, subscribeToVideo: this.state.video }} onError={this.onError} /&amp;gt; &amp;lt;CheckBox label="Enable Guest Audio" initialChecked={this.state.audio} onChange={this.setAudio} /&amp;gt; &amp;lt;CheckBox label="Enable Guest Video" initialChecked={this.state.video} onChange={this.setVideo} /&amp;gt; &amp;lt;/div&amp;gt; ); }}export default Subscriber;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using the &lt;code&gt;CheckBox&lt;/code&gt; component once again, we are giving the second user the option to select whether to share their audio and/or video with you.&lt;/p&gt;

&lt;h4&gt;
  
  
  Enable/Disable Audio and Video Functionality
&lt;/h4&gt;

&lt;p&gt;In &lt;code&gt;checkbox.js&lt;/code&gt;, insert:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { h, Component } from 'preact';import { uniqueId } from "lodash";class CheckBox extends Component { constructor(props) { super(props); this.state = { id: uniqueId("Checkbox") }; } onChange = e =&amp;gt; { const checked = e.currentTarget.checked; if (checked !== this.props.value) { this.props.onChange(checked); } } render() { return &amp;lt;div&amp;gt; &amp;lt;label for={this.id}&amp;gt;{this.props.label}&amp;lt;/label&amp;gt; &amp;lt;input id={this.id} type="checkbox" checked={this.checked} onChange={this.onChange} /&amp;gt; &amp;lt;/div&amp;gt; }}export default CheckBox;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you would prefer to display a toggle or radio button for users, make that swap in this component.&lt;/p&gt;

&lt;h4&gt;
  
  
  Display Chat Connection Status
&lt;/h4&gt;

&lt;p&gt;With &lt;code&gt;connectionStatus.js&lt;/code&gt;, we display whether the chat session is connected to both users. This step is optional but recommended.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { h, Component } from 'preact';class ConnectionStatus extends Component { render() { let status = this.props.connected ? "Connected" : "Disconnected"; return ( &amp;lt;div className="connectionStatus"&amp;gt; &amp;lt;strong&amp;gt;Coaching Session Status:&amp;lt;/strong&amp;gt; {status} &amp;lt;/div&amp;gt; ); }}export default ConnectionStatus;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Congrats! You have now added all the components needed for your live chat sessions. Check &lt;code&gt;http://localhost:8080&lt;/code&gt; to test it all out.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 5: Deploy with Netlify &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Deploying with Netlify is highly recommended as the &lt;a href="https://app.netlify.com/start/deploy?repository=https://github.com/preactjs/preact-netlify&amp;amp;stack=cms" rel="noopener noreferrer"&gt;Netlify bot for Preact CLI&lt;/a&gt; is capable of launching your CMS-enabled health app with one click. Once the bot has been connected to your GitHub (or GitLab) account, it will create a repository for your health app. Then, once the deploy has completed, push your local changes to the repo. Each time you push more changes, the bot will automatically deploy them to the global CDN.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/02/netlify-deploy.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F02%2Fnetlify-deploy.png" alt="Netlify bot for easy deployment" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 6: Publish Posts with Netlify CMS &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;The template deploy process will have emailed you an invitation to your new app. Wait for the deployment to complete, then click the link to accept the invite. Your app will open with a prompt to create a password. Enter a password, sign in, and you’ll go to the CMS. For future visits, you can go straight to &lt;code&gt;&amp;lt;yoursiteaddress.com&amp;gt;/admin/&lt;/code&gt; to access the CMS. Try editing and publishing placeholder posts to get yourself familiar with the platform.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nexmo.com/wp-content/uploads/2020/02/cms.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nexmo.com%2Fwp-content%2Fuploads%2F2020%2F02%2Fcms.png" alt="CMS dashboard" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the CMS configured, our basic Health Coaching PWA is done!&lt;/p&gt;

&lt;h3&gt;
  
  
  Auditing
&lt;/h3&gt;

&lt;p&gt;To audit the PWA, use Google’s &lt;a href="https://developers.google.com/web/tools/lighthouse/" rel="noopener noreferrer"&gt;Lighthouse&lt;/a&gt; in the Chrome Dev Tools or add the Firefox &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/google-lighthouse/" rel="noopener noreferrer"&gt;extension&lt;/a&gt;. Lighthouse will simulate a mobile device and throttle the internet to 3G speeds and generate scores and advice for improvement.&lt;/p&gt;

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

&lt;p&gt;There are a number of ways this application could be enhanced for better utility and experience.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Archive and log your video coaching sessions. If you’d like to watch the videos offline, add &lt;a href="https://preactjs.com/cli/service-worker/" rel="noopener noreferrer"&gt;custom functionality&lt;/a&gt; to the Service Worker.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Import data from any additional health tools you may be using (e.g., My Fitness Pal API or FitBit API). This could help trainers provide more accurate coaching.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Send an SMS (or message on WhatsApp, Viber, or Facebook Messenger) to your coach when a new post has been published. Check out the Vonage &lt;a href="https://developer.nexmo.com/messages/overview" rel="noopener noreferrer"&gt;Messages&lt;/a&gt; API for more information.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The post &lt;a href="https://www.nexmo.com/blog/2020/02/28/create-preact-netlify-cms-opentok-health-app-dr" rel="noopener noreferrer"&gt;Build a Health Blog With Video Coaching Using Preact.js and Vonage&lt;/a&gt; appeared first on &lt;a href="https://www.nexmo.com" rel="noopener noreferrer"&gt;Vonage Developer Blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>preact</category>
      <category>netlify</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
