<?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: Michael Crump</title>
    <description>The latest articles on Forem by Michael Crump (@mbcrump).</description>
    <link>https://forem.com/mbcrump</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%2F149332%2F7f1171d7-a05b-4d15-909f-ae3b2b3b8d1f.jpeg</url>
      <title>Forem: Michael Crump</title>
      <link>https://forem.com/mbcrump</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mbcrump"/>
    <language>en</language>
    <item>
      <title>How to Write a GREAT Git Commit Message</title>
      <dc:creator>Michael Crump</dc:creator>
      <pubDate>Fri, 02 Aug 2024 13:02:09 +0000</pubDate>
      <link>https://forem.com/vonagedev/how-to-write-a-great-git-commit-message-1a54</link>
      <guid>https://forem.com/vonagedev/how-to-write-a-great-git-commit-message-1a54</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Crafting effective Git commit messages can significantly enhance collaboration, code readability, and project maintainability for years. Yet, it's often overlooked or treated as an afterthought in the development process. In this blog post, I'll cut straight to the chase and outline the key principles for writing outstanding Git commit messages that every developer should follow!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start with a Capitalized Imperative Verb for the Subject Line
&lt;/h2&gt;

&lt;p&gt;A commit message should clearly state what this commit does. Use a capitalized imperative verb at the start for easier readability and maintainability.&lt;/p&gt;

&lt;p&gt;Example&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add new feature for user login&lt;/li&gt;
&lt;li&gt;Fix bug in payment processing&lt;/li&gt;
&lt;li&gt;Update documentation for API endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Keep the Subject Line Concise
&lt;/h2&gt;

&lt;p&gt;Your commit message should be descriptive enough to convey the purpose of the commit but concise enough to be quickly scanned. Aim for around 50 characters for the subject line and use the body for additional details.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Good Commit Message: Refactor user authentication module&lt;/li&gt;
&lt;li&gt;Bad Commit Message: Refactored the user authentication module to improve performance and readability&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Separate the Summary from the Body with a Blank Line
&lt;/h2&gt;

&lt;p&gt;If your commit message needs more detail, add a body. Make sure to add a blank line between the summary and the body to make it more readable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add local caching to improve application performance

This change implements a local caching mechanism to reduce database load
and improve overall response times over the network. The cache invalidates every ten minutes to ensure data freshness.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Use the Imperative Mood
&lt;/h2&gt;

&lt;p&gt;Keeping in mind the standard convention, write commit messages in the imperative mood, a tense typically associated with commands and actions. This is instructing about what is being done when the commit is applied.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Correct: Add user authentication&lt;/li&gt;
&lt;li&gt;Incorrect: Added user authentication&lt;/li&gt;
&lt;li&gt;Correct: Fix user authentication&lt;/li&gt;
&lt;li&gt;Incorrect: Fixed user authentication&lt;/li&gt;
&lt;li&gt;Correct: Update user authentication&lt;/li&gt;
&lt;li&gt;Incorrect: Updated user authentication&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Explain the "What" and "Why" in the Body
&lt;/h2&gt;

&lt;p&gt;Use the body to give more detail about the commit: explain what was done and why it was done. This makes it easier for others—and your future self—to understand the context and reason for the change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What: Refactor authentication logic&lt;/li&gt;
&lt;li&gt;Why: Improve performance and reduce code duplication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Refactor authentication logic

Extracted the authentication logic from a class into a separate module to improve performance and reduce code duplication. This change
will also make future enhancements easier to implement.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Use Bullet Points for Lists
&lt;/h2&gt;

&lt;p&gt;If the commit includes several changes, then list them in bullet points. This makes it easier to read and understand each change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Improve error handling in payment processing

- Add validation for payment input fields
- Handle API errors with retry mechanism
- Log detailed error messages for debugging
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Reference Relevant Issues or Tickets
&lt;/h2&gt;

&lt;p&gt;If your commit resolves or is related to a specific issue or task, reference it in your project management system—e.g., GitHub Issues, Jira. This helps keep the issues' status up to date, and the context would be quite helpful for readers later.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fix incorrect total calculation (#4342)

Corrected the calculation logic for order totals, ensuring
taxes and discounts are applied.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. Review and Revise
&lt;/h2&gt;

&lt;p&gt;Before committing and pushing it to the repository, take a moment to review your message. Check for spelling errors, grammar mistakes, and clarity. A well-written commit message reflects professionalism and attention to detail, which can save time and headaches downstream.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Capitalize: Did you start your subject line with a capital letter?&lt;/li&gt;
&lt;li&gt;Concise: Is your subject line 50 characters or less?&lt;/li&gt;
&lt;li&gt;Blank Line: Did you add a blank line after the summary if there’s a body?&lt;/li&gt;
&lt;li&gt;Imperative Mood: Is the message in the imperative mood?&lt;/li&gt;
&lt;li&gt;Detail: Does the body (if present) explain the what, why, and how?&lt;/li&gt;
&lt;li&gt;Lists: Did you use Bullet Points for your list? &lt;/li&gt;
&lt;li&gt;References: Did you reference any relevant issues or PRs?&lt;/li&gt;
&lt;li&gt;Proofread: Did you check for clarity and typos?&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Writing great Git commit messages enhances collaboration and project maintainability. By following these simple guidelines—using imperative verbs, keeping the subject concise, explaining the "what" and "why," and referencing relevant issues—you'll create a valuable project history that's easy to navigate and understand. We also have another post titled "&lt;a href="https://developer.vonage.com/en/blog/3-reasons-why-you-should-use-conventional-commits" rel="noopener noreferrer"&gt;3 Reasons Why You Should Use Conventional Commits&lt;/a&gt;" if you're eager to learn more. &lt;/p&gt;

&lt;p&gt;We’d also love to have you join us on the &lt;a href="https://developer.vonage.com/en/community/slack" rel="noopener noreferrer"&gt;Vonage Community Slack&lt;/a&gt; or send us a Post on &lt;a href="https://twitter.com/VonageDev" rel="noopener noreferrer"&gt;X&lt;/a&gt; and we will get back to you. Thanks again for reading, and I will catch up with you on the next one!&lt;/p&gt;

&lt;p&gt;Happy committing!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Vonage Welcomes Twilio Programmable Video Customers</title>
      <dc:creator>Michael Crump</dc:creator>
      <pubDate>Thu, 09 May 2024 10:30:40 +0000</pubDate>
      <link>https://forem.com/vonagedev/vonage-welcomes-twilio-programmable-video-customers-2edp</link>
      <guid>https://forem.com/vonagedev/vonage-welcomes-twilio-programmable-video-customers-2edp</guid>
      <description>&lt;p&gt;Hello Video Enthusiasts!&lt;/p&gt;

&lt;p&gt;At Vonage, we welcome all developers looking for a programmable video solution. As a &lt;a href="https://www.vonage.com/about-us/awards/gartner-magic-quadrant-cpaas/" rel="noopener noreferrer"&gt;recognized API leader&lt;/a&gt;, we want to help you discover the possibilities with our Video API and our long-time commitment to video innovation.&lt;/p&gt;

&lt;p&gt;Twilio recently announced that its &lt;a href="https://www.twilio.com/en-us/changelog/programmable-video-eol-notice" rel="noopener noreferrer"&gt;Programmable Video product&lt;/a&gt; has reached end-of-life and customers have a year to migrate to other solutions. We know that change is always tough - especially when it wasn't part of your plan, hence we want you to know how Vonage can help with your future video plans by providing a Twilio video alternative*.&lt;/p&gt;

&lt;p&gt;So let's dive into the most mature and versatile programmable video solution in the industry.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;* Vonage is not a Twilio partner, but is an independent provider of a leading programmable Video API.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Test-Drive the Vonage Video API Right Now
&lt;/h2&gt;

&lt;p&gt;We've developed a &lt;a href="https://developer.vonage.com/en/cloud-runtime/1dc909c1-e04c-4cab-92d8-8866fa97a953_vonage-video-learning-server-node-js" rel="noopener noreferrer"&gt;Vonage Video sample app&lt;/a&gt; that gets you up and running fast, no server required! With almost no setup, you can create Vonage sessions, generate tokens for those sessions, archive (or record) sessions, and download those archives, all in a serverless infrastructure.&lt;/p&gt;

&lt;p&gt;Another great resource for your project are these &lt;a href="https://developer.vonage.com/en/blog/migration-from-twilio-to-vonage-video-guides-for-web-ios-android" rel="noopener noreferrer"&gt;migration guides for Web (JavaScript), Android, and iOS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can also jump straight into the &lt;a href="https://developer.vonage.com/video" rel="noopener noreferrer"&gt;developer docs&lt;/a&gt; or &lt;a href="https://www.vonage.com/communications-apis/contact-api/" rel="noopener noreferrer"&gt;contact us&lt;/a&gt; if you have a burning question.   &lt;/p&gt;

&lt;p&gt;&lt;a href="/content/blog/vonage-welcomes-twilio-programmable-video-customers/codehub-video-sample.png" class="article-body-image-wrapper"&gt;&lt;img src="/content/blog/vonage-welcomes-twilio-programmable-video-customers/codehub-video-sample.png" title="Sample Vonage Video NodeJS Server App" alt="Vonage Video Learning Server (Node.js)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.vonage.com/en/cloud-runtime/1dc909c1-e04c-4cab-92d8-8866fa97a953_vonage-video-learning-server-node-js" rel="noopener noreferrer"&gt;Get Started with the Sample Application&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;We've got Video Sample Apps in a few different flavors on Github: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Vonage-Community/sample-video-node-learning_server" rel="noopener noreferrer"&gt;Video Sample App in NodeJs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Vonage-Community/sample-video-php-learning_server" rel="noopener noreferrer"&gt;Video Sample App in PHP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our sample apps can go way beyond the basics! Check out the &lt;a href="https://github.com/Vonage-Community/video-api-web-samples" rel="noopener noreferrer"&gt;Video API Web Samples&lt;/a&gt; to see powerful from background blur to advanced topics on how to apply custom grayscale, sepia, and invert filters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Need Further Proof? Here Are Some Highlights of Vonage Video API
&lt;/h2&gt;

&lt;p&gt;The Vonage Video API has been leading video innovation since way back in &lt;strong&gt;2007&lt;/strong&gt;! We were one of the first to build on WebRTC when it debuted in 2012 and introduced the very first WebRTC mobile SDKs on the market.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More Powerful Video Rooms:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More participants:&lt;/strong&gt; Rooms (we call them sessions) can scale up 15,000 participants (depending on the number of publishers), ideal for webinars and mid-sized broadcasts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full HD:&lt;/strong&gt; Support for 1080p video resolution within sessions, and most importantly for recordings and broadcast streams.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud-Based Dynamic Recording:&lt;/strong&gt; Recording layouts and selections can be fully controlled during the session so that the properly composed result is immediately available without further work, shortly after the session ends.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Tooling:&lt;/strong&gt; Our award-winning &lt;strong&gt;&lt;a href="https://www.vonage.com/communications-apis/video/features/experience-composer/" rel="noopener noreferrer"&gt;Experience Composer&lt;/a&gt;&lt;/strong&gt; allows all web elements of your application to be captured for both recording and broadcast.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Low-code Choices:&lt;/strong&gt; The powerful Vonage Video API gives you complete flexibility in how you design your applications. Building on our core API, our low-code &lt;a href="https://developer.vonage.com/en/video/vonage-video-express/guide?source=video" rel="noopener noreferrer"&gt;Video Express package&lt;/a&gt; allows web-level developers to quickly build multi-party applications with all the video optimizations taken care of automatically as room sizes and layouts dynamically change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalable Awesomeness and Global Reach:&lt;/strong&gt; Whether you're a startup or an enterprise, we've got your back! Our global platform scales effortlessly, ensuring that your video applications can grow and evolve with your business needs. Vonage Video brings your video applications to a global stage, breaking down geographical barriers and making your reach truly international.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compliance and Security:&lt;/strong&gt; We take security seriously. Over a decade of investment ensures our video platform is designed to meet the highest compliance standards, giving you the peace of mind to focus on creating exceptional video applications. Here are a couple of highlights: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Certifications:&lt;/strong&gt; Vonage Video complies with HIPAA, SOC 2 Type II, GDPR, and CCPA standards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;End-to-End Encryption:&lt;/strong&gt; Following WebRTC standards, all traffic is transport encrypted. We also support full end-to-end encryption when needed for incoming and outgoing  traffic (including through our media servers), ensuring even greater privacy and security.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encrypted Recordings&lt;/strong&gt;: Your recordings can be encrypted at rest, as they are created so that they are secure even within your own application. All recordings are quickly transferred to your S3, Azure, or Google Cloud storage and Vonage does not retain them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regional Media Isolation:&lt;/strong&gt; allows you to meet different regional compliance needs by isolating all media traffic to selected regions around the world. 
&lt;strong&gt;AI-enabled:&lt;/strong&gt; Vonage Video Media Processor provides access to WebRTC client media streams (publisher and subscriber) and easy use of standard ML transformer libraries for video interpretation and manipulation. The API has Blur and Background Replace built-in, but developers can build what they want! Audio Connector is a server-side feature that allows any selection of audio streams to be sent to external AI engines for processing. Vonage has an add-on Captions capability using this, and again, developers have full flexibility in how they process session audio in real time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Oh, and one more thing…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Broadcast&lt;/strong&gt;: All the capabilities you were hoping for in the former &lt;strong&gt;Twilio Live&lt;/strong&gt; have been built-in to the Vonage Video API since 2016 and are continuously enhanced. This includes easy stream composition with either our dynamic video composer or full Experience Composer, and broadcast up to 1080p to RTMP (any social platform and others), HLS, and LL-HLS. Our large rooms (sessions) up to 15,000 participants allow broadcasts of this size to be delivered all over WebRTC, plus allowing these audiences to easily be “brought on stage.”&lt;/p&gt;

&lt;p&gt;Read more about our &lt;a href="https://www.vonage.com/communications-apis/video/features/" rel="noopener noreferrer"&gt;extensive video features&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to Embark on Your Video Adventure?
&lt;/h2&gt;

&lt;p&gt;Vonage has deep video expertise and provides rich support and services to help organizations migrate from Twilio to Vonage Video, including architecture consulting and code review through to full professional services to add skills to any part of your migration work. Please &lt;a href="https://www.vonage.com/communications-apis/contact-api/" rel="noopener noreferrer"&gt;contact us&lt;/a&gt; to discuss your needs and set up a technical review of how we can support your migration.&lt;/p&gt;

&lt;p&gt;If you have questions, see our &lt;a href="https://www.vonage.com/communications-apis/video/" rel="noopener noreferrer"&gt;Video API Product page&lt;/a&gt;, &lt;a href="https://developer.vonage.com/en/video/overview" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, and &lt;a href="https://developer.vonage.com/en/video/twilio-vonage-video-migration-guide?source=video" rel="noopener noreferrer"&gt;Migration Guide&lt;/a&gt;. Join us on the &lt;a href="https://developer.vonage.com/community/slack" rel="noopener noreferrer"&gt;Vonage Developer Slack&lt;/a&gt; or send us a post on &lt;a href="https://twitter.com/VonageDev" rel="noopener noreferrer"&gt;X&lt;/a&gt;, and we will get back to you. You may also leave our team some &lt;a href="https://forms.gle/ioSER1qBoAS3i9J98" rel="noopener noreferrer"&gt;feedback&lt;/a&gt;&lt;span&gt; &lt;/span&gt;on your experience. Join our community of WebRTC enthusiasts which values reliability and innovation, making your video experiences seamless and worry-free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Come for Video, Stay for Communication APIs
&lt;/h2&gt;

&lt;p&gt;Vonage empowers developers with a robust suite of Communication APIs designed to enable you to communicate with your customers using your preferred channels. From &lt;a href="https://www.vonage.com/communications-apis/messages/" rel="noopener noreferrer"&gt;Messaging &lt;/a&gt;and &lt;a href="https://www.vonage.com/communications-apis/programmable-voice/" rel="noopener noreferrer"&gt;Voice &lt;/a&gt;to &lt;a href="https://www.vonage.com/communications-apis/video/" rel="noopener noreferrer"&gt;Video&lt;/a&gt;, &lt;a href="https://www.vonage.com/communications-apis/protection-suite/" rel="noopener noreferrer"&gt;Authentication&lt;/a&gt;, and &lt;a href="https://www.vonage.com/communications-apis/ai-studio/" rel="noopener noreferrer"&gt;AI&lt;/a&gt;, Vonage APIs provide a versatile toolkit that developers can seamlessly integrate into their applications. The APIs offer extensive customization options, allowing developers to tailor communication solutions to their specific needs. Whether it's &lt;strong&gt;sending or receiving programmable SMS&lt;/strong&gt;, leveraging AI, facilitating voice interactions, or implementing real-time video capabilities, Vonage APIs provide the building blocks for you to create engaging communication experiences for your customers.&lt;/p&gt;

&lt;p&gt;Vonage is also part of Ericsson, giving us long-term stability while also expanding our APIs with new 5G network-based capabilities (see announcements &lt;a href="https://www.ericsson.com/en/press-releases/2022/7/ericsson-completes-acquisition-of-vonage" rel="noopener noreferrer"&gt;here&lt;/a&gt; and &lt;a href="https://www.ericsson.com/en/press-releases/2023/9/ericsson-executes-on-strategy-to-build-platform-business-with-strategic-partnership-to-provide-access-to-network-apis?adobe_mc=MCMID%3D57042663416617738262563603632588574783%7CMCORGID%3DA8833BC75245AF9E0A490D4D%2540AdobeOrg%7CTS%3D1701899339" rel="noopener noreferrer"&gt;here&lt;/a&gt;) - such as upcoming Quality-on-Demand APIs for boosting network performance for mission-critical video apps!&lt;/p&gt;

&lt;p&gt;Thanks again for reading, and you can look forward to further blogs on how Vonage can provide you with a great Twilio video alternative!&lt;/p&gt;

</description>
      <category>video</category>
      <category>api</category>
    </item>
    <item>
      <title>How to Use Environment Variables in Node.js</title>
      <dc:creator>Michael Crump</dc:creator>
      <pubDate>Fri, 23 Feb 2024 15:17:24 +0000</pubDate>
      <link>https://forem.com/vonagedev/how-to-use-environment-variables-in-nodejs-1h12</link>
      <guid>https://forem.com/vonagedev/how-to-use-environment-variables-in-nodejs-1h12</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Environment variables play a crucial role in configuring and securing Node.js applications. They allow developers to store sensitive information, configuration settings, and other variables outside the codebase, making it easier to manage different deployment environments (development, testing, production) without exposing sensitive information.&lt;/p&gt;

&lt;p&gt;In this blog post, we will explore how to use environment variables in Node.js, covering topics such as setting, accessing, and managing them in your applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding Environment Variables
&lt;/h2&gt;

&lt;p&gt;Environment variables are dynamic values that can affect the behavior of a running process. In Node.js, you can access environment variables using the &lt;code&gt;process.env&lt;/code&gt; object. These variables are set outside your application and read by your application during runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Environment Variables
&lt;/h2&gt;

&lt;p&gt;To set environment variables, you can use various methods depending on your operating system or deployment platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt; (Command Prompt) - &lt;code&gt;set VAR_NAME=value&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linux and macOS&lt;/strong&gt; (Bash Shell) - &lt;code&gt;export VAR_NAME=value&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Using a &lt;code&gt;.env&lt;/code&gt; File
&lt;/h2&gt;

&lt;p&gt;In many Node.js projects, developers use a &lt;code&gt;.env&lt;/code&gt; file to store and manage environment variables. &lt;/p&gt;

&lt;p&gt;Create a file named &lt;code&gt;.env&lt;/code&gt; in the root of your project and define your variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_HOST=localhost
DB_PORT=5432
SECRET_KEY=mysecretkey
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This file &lt;strong&gt;should not&lt;/strong&gt; be committed to the version control system to ensure sensitive information always remains on your local computer.&lt;/p&gt;

&lt;p&gt;Add &lt;code&gt;.env&lt;/code&gt; to your &lt;code&gt;.gitignore&lt;/code&gt; file to prevent it from being committed. Here's an &lt;a href="https://github.com/github/gitignore/blob/main/Node.gitignore" rel="noopener noreferrer"&gt;example file&lt;/a&gt; with it already added. You may also use &lt;a href="https://www.npmjs.com/package/dotenv" rel="noopener noreferrer"&gt;dotenv&lt;/a&gt; for advanced configuration and it will automatically load environment variables from a &lt;code&gt;.env&lt;/code&gt; file into &lt;code&gt;process.env&lt;/code&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Accessing Environment Variables in Node.js
&lt;/h2&gt;

&lt;p&gt;Once you've set your environment variables, you can access them in your Node.js application using &lt;code&gt;process.env&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const dbHost = process.env.DB_HOST;
const dbPort = process.env.DB_PORT;
const secretKey = process.env.SECRET_KEY;

console.log(`Database Host: ${dbHost}`);
console.log(`Database Port: ${dbPort}`);
console.log(`Secret Key: ${secretKey}`);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using a Module for Environment Variables
&lt;/h2&gt;

&lt;p&gt;For better organization, consider creating a module to centralize environment variable access. Create a file named &lt;code&gt;config.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module.exports = {
  dbHost: process.env.DB_HOST,
  dbPort: process.env.DB_PORT,
  secretKey: process.env.SECRET_KEY,
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, you can easily import and use these variables in other parts of your application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const config = require('./config');

console.log(`Database Host: ${config.dbHost}`);
console.log(`Database Port: ${config.dbPort}`);
console.log(`Secret Key: ${config.secretKey}`);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Handling Default Values
&lt;/h2&gt;

&lt;p&gt;Sometimes, you can provide default values for environment variables if they are not set. You can achieve this using the &lt;code&gt;||&lt;/code&gt; operator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const dbHost = process.env.DB_HOST || 'localhost';
const dbPort = process.env.DB_PORT || 5432;
const secretKey = process.env.SECRET_KEY || 'defaultsecret';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Wrap-up
&lt;/h2&gt;

&lt;p&gt;Effectively using environment variables in your Node.js applications is crucial for maintaining security and configurability. By keeping sensitive information outside your codebase and using a standardized approach, you can easily manage different deployment environments and ensure a more secure application.&lt;/p&gt;

&lt;p&gt;Remember to exercise caution with sensitive information and follow best practices for securing your environment variables, especially in production environments.&lt;/p&gt;

&lt;p&gt;If you have questions, join us on the &lt;a href="https://developer.vonage.com/community/slack" rel="noopener noreferrer"&gt;Vonage Developer Slack&lt;/a&gt; or send us a Post on &lt;a href="https://twitter.com/VonageDev" rel="noopener noreferrer"&gt;X&lt;/a&gt;, and we will get back to you. Thanks again for reading, and I will catch up with you on the next one!&lt;/p&gt;

</description>
      <category>node</category>
      <category>programming</category>
      <category>http</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>5 Ways to Make HTTP Requests in Node.js</title>
      <dc:creator>Michael Crump</dc:creator>
      <pubDate>Tue, 20 Feb 2024 13:10:25 +0000</pubDate>
      <link>https://forem.com/vonagedev/5-ways-to-make-http-requests-in-nodejs-404m</link>
      <guid>https://forem.com/vonagedev/5-ways-to-make-http-requests-in-nodejs-404m</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Learning how to make HTTP requests in Node.js can feel overwhelming as dozens of libraries are 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. &lt;/p&gt;

&lt;p&gt;In this post, we’ll explore five of the most popular ways to make HTTP requests in Node.js, with step-by-step instructions for each method. &lt;/p&gt;

&lt;p&gt;First, we’ll cover HTTP requests and HTTPS requests using the standard library. After that, we’ll show you how to use alternatives like Node Fetch, Axios, and SuperAgent.&lt;/p&gt;

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

&lt;p&gt;Before you begin, make sure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/en/download/" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.npmjs.com/cli/v8/commands/npm-install" rel="noopener noreferrer"&gt;Node Package Manager (NPM)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Make HTTP Requests in Node.js (5 Methods)
&lt;/h2&gt;

&lt;p&gt;Below, we’ll show you how to make HTTP requests in Node.js via the following five methods:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Standard Library (HTTP Module)&lt;/li&gt;
&lt;li&gt;Standard Library (HTTPS Module)&lt;/li&gt;
&lt;li&gt;Axios&lt;/li&gt;
&lt;li&gt;Node Fetch&lt;/li&gt;
&lt;li&gt;SuperAgent&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1. Standard Library (HTTP Module)
&lt;/h3&gt;

&lt;p&gt;The standard library in Node.js comes equipped with the default &lt;code&gt;http&lt;/code&gt; module. It can make an HTTP request without adding bulk with external packages. However, as the module is low-level, it could be more developer-friendly.&lt;/p&gt;

&lt;p&gt;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;Typically, you'd use the HTTP Module for testing or demonstration purposes as it is not secure. &lt;/p&gt;

&lt;p&gt;Here's a simple example of making a &lt;code&gt;GET&lt;/code&gt; request using the &lt;code&gt;http&lt;/code&gt; module:&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;http&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;http&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;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&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="nx"&gt;res&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="nx"&gt;res&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;data&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="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Standard Library (HTTPS Module)
&lt;/h3&gt;

&lt;p&gt;If you need to make secure HTTPS requests in Node.js, you can use the &lt;code&gt;https&lt;/code&gt; module, which is also built into the standard library. The usage is quite similar to the &lt;code&gt;http&lt;/code&gt; module but with added security. Here's an example:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt; &lt;span class="o"&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;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&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="nx"&gt;res&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="nx"&gt;res&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;data&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="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Axios
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/axios/axios" rel="noopener noreferrer"&gt;Axios&lt;/a&gt; is a popular HTTP client library for Node.js that provides a more user-friendly and feature-rich way to make HTTP requests. Axios simplifies error handling and supports features like automatic JSON parsing and request/response interceptors, making it a great choice for many HTTP request scenarios.&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following code snippet showcases how to use Axios to make a &lt;code&gt;GET&lt;/code&gt; 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="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://example.com&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="nf"&gt;then&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="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;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="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="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;error&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Node Fetch
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/node-fetch" rel="noopener noreferrer"&gt;Node Fetch&lt;/a&gt; is a JavaScript library tailored for Node.js that simplifies making HTTP requests. It offers a straightforward and Promise-based approach for fetching resources from the internet or server, such as GET, POST, PUT, and DELETE requests. Designed for server-side applications, it's compatible with the Fetch API, allowing easy code transition between client-side and server-side environments. &lt;/p&gt;

&lt;p&gt;Additionally, note that &lt;a href="https://github.com/node-fetch/node-fetch" rel="noopener noreferrer"&gt;useful extensions&lt;/a&gt; such as redirect limit, response size limit, and &lt;a href="https://github.com/node-fetch/node-fetch/blob/main/docs/ERROR-HANDLING.md" rel="noopener noreferrer"&gt;explicit errors for troubleshooting&lt;/a&gt; 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;/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="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://example.com&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="nf"&gt;then&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&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;data&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;data&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="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="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;error&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. SuperAgent
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/superagent" rel="noopener noreferrer"&gt;SuperAgent&lt;/a&gt; is a lightweight and flexible HTTP client that supports promises and callback-style syntax. It is known for its simplicity and ease of use.&lt;/p&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;/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;request&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="nx"&gt;request&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://example.com&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="nf"&gt;then&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="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;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="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="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;error&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;/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.vonage.com/community/slack" rel="noopener noreferrer"&gt;Developer Community Slack&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.vonage.com/en/blog/3-ways-to-make-http-calls-with-python-requests-beginner-to-advanced" rel="noopener noreferrer"&gt;3 Ways to Make HTTP Requests in Python (Beginner to Advanced)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>node</category>
      <category>http</category>
    </item>
    <item>
      <title>Send an SMS Message From an Excel Spreadsheet</title>
      <dc:creator>Michael Crump</dc:creator>
      <pubDate>Thu, 02 Feb 2023 19:03:41 +0000</pubDate>
      <link>https://forem.com/mbcrump/send-an-sms-message-from-an-excel-spreadsheet-144c</link>
      <guid>https://forem.com/mbcrump/send-an-sms-message-from-an-excel-spreadsheet-144c</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Microsoft offers a way to add new functionality to Office applications such as Microsoft Excel to prompt and interact with the user in ways specific to your business needs. You can perform these tasks and accomplish more by using Visual Basic for Applications (VBA). It is a simple but powerful programming language that you can use to do such things as get your contacts from Microsoft Outlook into a Microsoft Excel spreadsheet.&lt;/p&gt;

&lt;p&gt;In this blog post, we'll use VBA in Microsoft Excel to send an SMS Message. Just enter the cell phone number and text to be sent and press a button to send it! You could modify the code to add additional functionality your business may require, such as scheduling. Let's get started!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To continue reading the full article, please &lt;a href="https://mcrump.me/excel" rel="noopener noreferrer"&gt;click here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;If you have questions or feedback, join us on the &lt;a href="https://developer.vonage.com/community/slack" rel="noopener noreferrer"&gt;Vonage Developer Slack&lt;/a&gt; or send me a Tweet on &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;, and I will get back to you. Thanks again for reading, and I will catch you on the next one!&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>crypto</category>
      <category>web3</category>
    </item>
    <item>
      <title>Send and Receive SMS Messages With Node.js and Express</title>
      <dc:creator>Michael Crump</dc:creator>
      <pubDate>Thu, 05 Jan 2023 19:26:36 +0000</pubDate>
      <link>https://forem.com/mbcrump/send-and-receive-sms-messages-with-nodejs-and-express-46p0</link>
      <guid>https://forem.com/mbcrump/send-and-receive-sms-messages-with-nodejs-and-express-46p0</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://developer.vonage.com/messages/overview" rel="noopener noreferrer"&gt;Vonage Messages API&lt;/a&gt; allows you to send and receive messages over SMS, MMS, Facebook Messenger, Viber, and WhatsApp. So you can communicate with your customers on whichever channel they love most. In this article, we'll focus on how to send and receive SMS messages with &lt;a href="https://nodejs.org/" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt; and &lt;a href="https://expressjs.com/" rel="noopener noreferrer"&gt;Express&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To begin, we'll perform the most straightforward implementation of the API and send an SMS message with Node.js and the &lt;a href="https://developer.vonage.com/messages/overview" rel="noopener noreferrer"&gt;Vonage Messages API&lt;/a&gt;. Next, we'll build a Webhook that can receive SMS messages (sent from your phone) using Express and perform an action once the message has been received. Finally, we'll wrap up a couple of steps that you can take to extend the application.&lt;br&gt;
Prerequisites&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To continue reading the full article, please &lt;a href="https://mcrump.me/node" rel="noopener noreferrer"&gt;click here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;If you have questions or feedback, join us on the &lt;a href="https://developer.vonage.com/community/slack" rel="noopener noreferrer"&gt;Vonage Developer Slack&lt;/a&gt; or send me a Tweet on &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;, and I will get back to you. Thanks again for reading, and I will catch you on the next one!&lt;/p&gt;

</description>
      <category>database</category>
      <category>postgres</category>
      <category>mongodb</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Low-Code and No-Code: What Option Is Best for You?</title>
      <dc:creator>Michael Crump</dc:creator>
      <pubDate>Tue, 06 Dec 2022 19:58:06 +0000</pubDate>
      <link>https://forem.com/mbcrump/low-code-and-no-code-what-option-is-best-for-you-3b5o</link>
      <guid>https://forem.com/mbcrump/low-code-and-no-code-what-option-is-best-for-you-3b5o</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I started my journey into computer science as a software developer for a Fortune 500 company many years ago. Throughout the years, I was able to experience the good (and the bad) of relying on a software development team to build and update apps. Fast forward to today, I've been hearing more and more about Low-Code and No-Code development platforms, such as Vonage's own AI Studio, and decided that it was time to take a closer look. In this post, you'll learn about the pros and cons of Low-Code and No-Code development platforms and why Vonage decided to go down that route with their latest conversational AI platform called AI Studio. This tool handles complex interactions between businesses and customers, lowering operational costs and significantly improving service levels.&lt;/p&gt;

&lt;p&gt;Let's break this down. &lt;/p&gt;

&lt;h2&gt;
  
  
  What are Low-Code and No-Code development platforms?
&lt;/h2&gt;

&lt;p&gt;Low-Code and No-Code development platforms are visual software development environments that allow business and traditionally non-technical users to drag and drop application components to build an app without writing any code. They typically have little to no coding knowledge. In contrast, a professional software developer might use an Integrated Development Environment (IDE) (such as Visual Studio) or an Editor (such as Visual Studio Code) to build an application with code and a solid understanding of computer science programming concepts. Keep in mind that both approaches allow you to create an application of various complexities, and both should be considered equal as it all depends on your business use case.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To continue reading the full article, please &lt;a href="https://mcrump.me/lowcode" rel="noopener noreferrer"&gt;click here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;If you have questions or feedback, join us on the &lt;a href="https://developer.vonage.com/community/slack" rel="noopener noreferrer"&gt;Vonage Developer Slack&lt;/a&gt; or send me a Tweet on &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;, and I will get back to you. Thanks again for reading, and I will catch you on the next one!&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>Create a Static Site using VitePress for Beautiful Help Documentation</title>
      <dc:creator>Michael Crump</dc:creator>
      <pubDate>Tue, 06 Dec 2022 19:40:20 +0000</pubDate>
      <link>https://forem.com/mbcrump/create-a-static-site-using-vitepress-for-beautiful-help-documentation-d3</link>
      <guid>https://forem.com/mbcrump/create-a-static-site-using-vitepress-for-beautiful-help-documentation-d3</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I've always been a fan of static site generators as a way to create a fully static HTML website based on data (typically in Markdown) with theming support. I've found that more of your time is focused on writing the content vs. the time spent managing the infrastrucutre for something such as a content managment system (CMS) like WordPress, which requires a database and a front-end UI to enter content. If I could sum up my three reasons why I like static site generators, it would be: Performance (pages are pre-rendered), Ability to Customize (Themes are typically baked in), and they don't require code to run on the server side. Let's jump into a popular one called, &lt;a href="https://vitepress.vuejs.org/" rel="noopener noreferrer"&gt;VitePress&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Primer on VitePress
&lt;/h2&gt;

&lt;p&gt;VitePress is listed in the documents as &lt;a href="https://vuepress.vuejs.org/" rel="noopener noreferrer"&gt;VuePress'&lt;/a&gt; little brother, and it is built on top of &lt;a href="https://vitejs.dev/" rel="noopener noreferrer"&gt;Vite&lt;/a&gt;. For those that don't know Vite is a build tool that aims to provide a faster and leaner development experience for modern web projects so it might sense to pair it with a static site generator such as VitePress. One of the original problems with VuePress was that it was a Webpack app and it took a lot of time to spin up a dev server for just a simple doc. VitePress solves these problems with nearly instant server start, an on-demand compilation that only compiles the page being served, and lightning-fast HMR. Let's get started! &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To continue reading the full article, please &lt;a href="https://mcrump.me/vitepress" rel="noopener noreferrer"&gt;click here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;If you have questions or feedback, join us on the &lt;a href="https://developer.vonage.com/community/slack" rel="noopener noreferrer"&gt;Vonage Developer Slack&lt;/a&gt; or send me a Tweet on &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;, and I will get back to you. Thanks again for reading, and I will catch you on the next one!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>aws</category>
    </item>
    <item>
      <title>Send and Request Data With Webhooks With AI Studio</title>
      <dc:creator>Michael Crump</dc:creator>
      <pubDate>Tue, 29 Nov 2022 17:55:17 +0000</pubDate>
      <link>https://forem.com/mbcrump/send-and-request-data-with-webhooks-with-ai-studio-156a</link>
      <guid>https://forem.com/mbcrump/send-and-request-data-with-webhooks-with-ai-studio-156a</guid>
      <description>&lt;p&gt;&lt;a href="https://www.vonage.com/communications-apis/ai-studio/?icmp=l3nav%7Cl3nav_gototheaistudiooverviewpage_novalue" rel="noopener noreferrer"&gt;Vonage AI Studio&lt;/a&gt; is a Low-Code / No-Code conversational AI platform that helps businesses handle complex customer interactions through voice and text. As you begin to create virtual agents with AI Studio, it won't take long before you'll need to retrieve data from a third-party source such as a Webhook. In this blog post, you'll learn: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to retrieve data from a Webhook in AI Studio from a REST Endpoint&lt;/li&gt;
&lt;li&gt;How to store the data as a parameter (for later use)&lt;/li&gt;
&lt;li&gt;Examples of conditional statements to perform operations with the data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In order to understand how to interact with a Webhook in AI Studio, we'll use a scenario in which a bank would like to validate a customer's identity by matching a pin number with the number retrieved from a Webhook. The payload might look like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"michael.crump@vonage.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"phone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"14259999999"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Michael Crump"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cc_balance"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"76.31"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"pin"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1234"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the customer dials the Bank's phone number, we'll use the &lt;strong&gt;phone&lt;/strong&gt; number to look up the correct value for the &lt;strong&gt;pin&lt;/strong&gt; via this Webhook. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To continue reading the full article, please &lt;a href="https://developer.vonage.com/blog/22/11/29/send-and-request-data-with-webhooks-with-ai-studio" rel="noopener noreferrer"&gt;click here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;If you have questions or feedback, join us on the &lt;a href="https://developer.vonage.com/community/slack" rel="noopener noreferrer"&gt;Vonage Developer Slack&lt;/a&gt; or send me a Tweet on &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;, and I will get back to you. Thanks again for reading, and I will catch you on the next one!&lt;/p&gt;

</description>
      <category>lowcode</category>
      <category>nocode</category>
      <category>aistudio</category>
      <category>webhooks</category>
    </item>
    <item>
      <title>Microsoft 365 Fundamentals (MS-900) certification</title>
      <dc:creator>Michael Crump</dc:creator>
      <pubDate>Mon, 14 Mar 2022 20:24:28 +0000</pubDate>
      <link>https://forem.com/mbcrump/microsoft-365-fundamentals-ms-900-certification-bam</link>
      <guid>https://forem.com/mbcrump/microsoft-365-fundamentals-ms-900-certification-bam</guid>
      <description>&lt;h1&gt;
  
  
  Microsoft 365 Fundamentals (MS-900) certification
&lt;/h1&gt;

&lt;p&gt;Below is just some notes that I collected from various resources around the web. &lt;/p&gt;

&lt;h2&gt;
  
  
  Exam details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;40-60 questions&lt;/li&gt;
&lt;li&gt;85 Minutes&lt;/li&gt;
&lt;li&gt;70% passing&lt;/li&gt;
&lt;li&gt;Valid for 2 years&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Exam outline
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE3VwVw"&gt;https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE3VwVw&lt;/a&gt; or you can view the certification page here - &lt;a href="https://docs.microsoft.com/en-us/learn/certifications/exams/ms-900"&gt;https://docs.microsoft.com/en-us/learn/certifications/exams/ms-900&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My main study method and notes are based on this learning path - &lt;a href="https://docs.microsoft.com/en-us/learn/certifications/microsoft-365-fundamentals/"&gt;https://docs.microsoft.com/en-us/learn/certifications/microsoft-365-fundamentals/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;M365 has a ton of apps and some of them include: Teams, Word, Excel, PowerPoint, Outlook, and Windows&lt;/p&gt;

&lt;h2&gt;
  
  
  Capability / Sample Products Covered
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Productivity and Teamwork - Teams / Outlook / OneDrive / Yammer&lt;/li&gt;
&lt;li&gt;Business Management - Microsoft Endpoint Manager (MEM) / Teams / Power Platform&lt;/li&gt;
&lt;li&gt;Security and Compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most M365 components are delivered as a SaaS model. &lt;/p&gt;

&lt;h2&gt;
  
  
  Productivity Benefits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Enable teamwork and simplify workflow - such as Teams&lt;/li&gt;
&lt;li&gt;Stay productive on the go - Move from computer to mobile devices&lt;/li&gt;
&lt;li&gt;Get more done with AI-enabled tools - Has built-in intelligence features&lt;/li&gt;
&lt;li&gt;Organizational productivity - process automation, capture the collective knowledge of their organization, etc.&lt;/li&gt;
&lt;li&gt;Harness organizational knowledge - such as Workplace Analytics&lt;/li&gt;
&lt;li&gt;Manage all your endpoints - such as Microsoft Endpoint Manager&lt;/li&gt;
&lt;li&gt;Protect your business - modernize your security, manage risk, and meet compliance standards&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Microsoft 365 subscription options
&lt;/h2&gt;

&lt;p&gt;M365 Enterprise &lt;a href="https://www.microsoft.com/en-us/microsoft-365/compare-microsoft-365-enterprise-plans?rtc=1"&gt;https://www.microsoft.com/en-us/microsoft-365/compare-microsoft-365-enterprise-plans?rtc=1&lt;/a&gt;. &lt;br&gt;
E3, E5, and F3 (formerly F1). E5 includes all of the same features as E3 plus the latest advanced threat protection, security, and collaboration tools. F3 is designed for Firstline Workers through purpose-built tools and resources that allow them to do their best work.&lt;/p&gt;

&lt;p&gt;Microsoft 365 for business - &lt;a href="https://www.microsoft.com/en-us/microsoft-365/business?rtc=1#compareProductsRegion"&gt;https://www.microsoft.com/en-us/microsoft-365/business?rtc=1#compareProductsRegion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Microsoft 365 for business is designed for small- and medium-sized organizations. &lt;br&gt;
It doesn’t include some of the more advanced information protection, compliance, or analytics tools available to enterprise subscribers. &lt;/p&gt;

&lt;p&gt;It’s designed for organizations that need up to 300 licenses&lt;br&gt;
Microsoft 365 for business: Basic, Standard, and Premium.&lt;/p&gt;

&lt;p&gt;Microsoft 365 Education - &lt;a href="https://www.microsoft.com/education/buy-license/microsoft365/default.aspx"&gt;https://www.microsoft.com/education/buy-license/microsoft365/default.aspx&lt;/a&gt;&lt;br&gt;
It is a single, affordable solution built for education&lt;/p&gt;

&lt;p&gt;Microsoft 365 Home - &lt;a href="https://products.office.com/compare-all-microsoft-office-products?&amp;amp;activetab=tab%3aprimaryr1"&gt;https://products.office.com/compare-all-microsoft-office-products?&amp;amp;activetab=tab%3aprimaryr1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Microsoft 365 Home exists to bring the same great productivity benefits into your personal and family life. Microsoft 365 Home comes in two plans: Microsoft 365 Family and Microsoft 365 Personal. &lt;/p&gt;

&lt;h2&gt;
  
  
  M365 Trials are available
&lt;/h2&gt;

&lt;p&gt;Free 30-day Microsoft 365 Business Premium subscription - &lt;a href="https://go.microsoft.com/fwlink/p/?LinkID=2102309&amp;amp;clcid=0x409&amp;amp;cultures&amp;amp;country=US"&gt;https://go.microsoft.com/fwlink/p/?LinkID=2102309&amp;amp;clcid=0x409&amp;amp;cultures&amp;amp;country=US&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  M365 admin center can be found a couple of ways:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;admin.microsoft.com &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many more parts will be coming soon!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App Launcher and select admin&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Kali Linux 2021.2 Review and What's New?</title>
      <dc:creator>Michael Crump</dc:creator>
      <pubDate>Fri, 11 Jun 2021 17:15:27 +0000</pubDate>
      <link>https://forem.com/mbcrump/kali-linux-2021-2-review-and-what-s-new-49e2</link>
      <guid>https://forem.com/mbcrump/kali-linux-2021-2-review-and-what-s-new-49e2</guid>
      <description>&lt;p&gt;Hello everyone, &lt;/p&gt;

&lt;p&gt;&lt;a href="https://kali.org"&gt;Kali Linux&lt;/a&gt; is geared for users who aim to meet the requirements of professional penetration testing and security auditing. It is completely free and has many amazing new features. Recently, Kali Linux 2021.2 was released. You can upgrade an existing install or start a new install. &lt;/p&gt;

&lt;p&gt;Several notable new items that I wanted to call out in this release are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Releasing Kaboxer v1.0 - Introducing Kali Applications Boxer v1.0! Applications in containers&lt;/li&gt;
&lt;li&gt;Releasing Kali-Tweaks v1.0 - Our way to make it easier to configure Kali Linux to your taste&lt;/li&gt;
&lt;li&gt;Disabled privileged ports - Opening a listener on ports 1024/TCP-UDP and below no longer requires super-user access&lt;/li&gt;
&lt;li&gt;Theme enhancements - We added a way to quickly swap between double &amp;amp; one-line terminal prompt and made Xfce4 Quick launch + file manager tweaks&lt;/li&gt;
&lt;li&gt;Desktop wallpaper &amp;amp; login background updates - Default images have changed with more to choose from&lt;/li&gt;
&lt;li&gt;Parallels support - Kali is fully supported for Apple M1 users who have Parallels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have created a video to show you all of this awesome stuff together! &lt;/p&gt;

&lt;p&gt;Video (24 mins)&lt;/p&gt;

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

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;Stay tuned for &lt;a href="https://twitch.tv/mbcrump"&gt;future Twitch streams&lt;/a&gt; as we learn about security and app development or you can watch the condensed version by subscribing to my &lt;a href="https://youtube.com/mbcrump"&gt;YouTube&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Stay connected with me on social platforms for daily software development news.&lt;/p&gt;

&lt;p&gt;-&lt;a href="https://twitter.com/intent/follow?screen_name=mbcrump"&gt;Twitter&lt;/a&gt; | &lt;a href="https://twitch.tv/mbcrump"&gt;Twitch&lt;/a&gt; | &lt;a href="https://instagram.com/mbcrump"&gt;Instagram&lt;/a&gt; | &lt;a href="https://youtube.com/mbcrump"&gt;YouTube&lt;/a&gt; | &lt;a href="https://github.com/mbcrump"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.michaelcrump.net"&gt;Website&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>os</category>
      <category>beginners</category>
      <category>kali</category>
    </item>
    <item>
      <title>How to easily test REST endpoints with Visual Studio Code</title>
      <dc:creator>Michael Crump</dc:creator>
      <pubDate>Thu, 03 Jun 2021 17:52:29 +0000</pubDate>
      <link>https://forem.com/mbcrump/how-to-easily-test-rest-endpoints-with-visual-studio-code-1bme</link>
      <guid>https://forem.com/mbcrump/how-to-easily-test-rest-endpoints-with-visual-studio-code-1bme</guid>
      <description>&lt;p&gt;Hello everyone, &lt;/p&gt;

&lt;p&gt;I've been asked a few times why I don't use PostMan anymore and the answer is because I can just do it all in Visual Studio Code with one single plug-in. Checkout the video below and hopefully you'll find it helpful! &lt;/p&gt;

&lt;p&gt;Video (13 mins)&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/LmfdPsq4IVs"&gt;
&lt;/iframe&gt;
 &lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;Feel free to checkout my &lt;a href="https://twitch.tv/mbcrump"&gt;Twitch streams&lt;/a&gt; as we learn about security and app development or you can watch the condensed version of all of my streams by subscribing to my &lt;a href="https://youtube.com/mbcrump"&gt;YouTube&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Stay connected with me on social platforms for daily software development news.&lt;/p&gt;

&lt;p&gt;-&lt;a href="https://twitter.com/intent/follow?screen_name=mbcrump"&gt;Twitter&lt;/a&gt; | &lt;a href="https://twitch.tv/mbcrump"&gt;Twitch&lt;/a&gt; | &lt;a href="https://instagram.com/mbcrump"&gt;Instagram&lt;/a&gt; | &lt;a href="https://youtube.com/mbcrump"&gt;YouTube&lt;/a&gt; | &lt;a href="https://github.com/mbcrump"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.michaelcrump.net"&gt;Website&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>productivity</category>
      <category>code</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
