<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Airbrake.io</title>
    <description>The latest articles on DEV Community by Airbrake.io (@airbrake).</description>
    <link>https://dev.to/airbrake</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%2F39881%2Fb370bbc8-e2f4-47cf-b413-51d6f93f0799.png</url>
      <title>DEV Community: Airbrake.io</title>
      <link>https://dev.to/airbrake</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/airbrake"/>
    <language>en</language>
    <item>
      <title>Developer Affirmations to Keep You Going in 2023</title>
      <dc:creator>Airbrake.io</dc:creator>
      <pubDate>Mon, 23 Jan 2023 15:57:21 +0000</pubDate>
      <link>https://dev.to/airbrake/developer-affirmations-to-keep-you-going-in-2023-1p56</link>
      <guid>https://dev.to/airbrake/developer-affirmations-to-keep-you-going-in-2023-1p56</guid>
      <description>&lt;p&gt;It's a new year, which is a great time for some positive, what we're calling &lt;em&gt;Airbrake Affirmations&lt;/em&gt;! We hope a few of these affirmations help you combat some of the imposter syndrome and self-doubt you might have felt last year.&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%2F3zu12rihe0hq9nkmtijo.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%2F3zu12rihe0hq9nkmtijo.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feju0jtdjnyzh8u1cll8s.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%2Feju0jtdjnyzh8u1cll8s.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4m312hxm4u8s4qpndm4d.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%2F4m312hxm4u8s4qpndm4d.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu15xtoglrsabx4mcglwq.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%2Fu15xtoglrsabx4mcglwq.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wq4b3ppy36rx6q201mm.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%2F1wq4b3ppy36rx6q201mm.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4fs0sgjdsfdpd68b5kxr.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%2F4fs0sgjdsfdpd68b5kxr.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do you have your own favorite affirmation? Let us know in the comments! &lt;/p&gt;

</description>
      <category>localstack</category>
      <category>security</category>
      <category>cloud</category>
      <category>discuss</category>
    </item>
    <item>
      <title>What is Prompt Engineering?</title>
      <dc:creator>Airbrake.io</dc:creator>
      <pubDate>Thu, 22 Dec 2022 15:27:52 +0000</pubDate>
      <link>https://dev.to/airbrake/what-is-prompt-engineering-2oo</link>
      <guid>https://dev.to/airbrake/what-is-prompt-engineering-2oo</guid>
      <description>&lt;p&gt;Today, we want to share with you a new way of developing code that has been gaining traction lately, sometimes referred to as : &lt;strong&gt;prompt engineering&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;First invented by Github Copilot, prompt engineering is the process of using tools like chatGPT or Copilot to generate code snippets based on a given prompt.&lt;/p&gt;

&lt;p&gt;It allows us to quickly prototype and iterate on different ideas, saving us time and effort in the development process.&lt;/p&gt;

&lt;p&gt;For those who are not familiar with chatGPT or Github Co-pilot, they are state-of-the-art language models that can generate human-like text based on a given prompt. It has been a popular way to generate code snippets that can be built upon and incorporated into projects. &lt;/p&gt;

&lt;h2&gt;
  
  
  Here's how prompt engineering works
&lt;/h2&gt;

&lt;p&gt;We start by providing chatGPT with a brief description of the code snippet we need, along with any relevant details or constraints. &lt;/p&gt;

&lt;p&gt;For example, if we need a function to calculate the average of a list of numbers, we might provide chatGPT with the following prompt:&lt;/p&gt;

&lt;p&gt;"Write a function in Python that takes a list of numbers as an argument and returns the average of those numbers."&lt;/p&gt;

&lt;p&gt;Based on this prompt, chatGPT generates a code snippet that looks something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calculate_average&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, chatGPT was able to generate a complete, functional code snippet based on just a few sentences of input. From here, we can build upon this snippet and customize it to fit our specific needs.&lt;/p&gt;

&lt;p&gt;Here is an example of using prompt engineering with chatGPT to generate a starting point for a Node.js API in JavaScript:&lt;/p&gt;

&lt;p&gt;"Write a Node.js API in JavaScript that has routes for creating, reading, updating, and deleting resources. Use Express as the web framework and MongoDB as the database. The API should include a way to authenticate users using JWT and handle form data using Multer."&lt;/p&gt;

&lt;p&gt;The snippet we get is then a full boiler plate for this API:&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;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&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;express&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;mongoose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&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;mongoose&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;jwt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&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;jsonwebtoken&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;multer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&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;multer&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;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Connect to MongoDB&lt;/span&gt;
&lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mongodb://localhost/my-api&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;useNewUrlParser&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="na"&gt;useUnifiedTopology&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="c1"&gt;// Use Multer to handle form data&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;multer&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;none&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Middleware to authenticate users using JWT&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&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="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&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;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-auth-token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;401&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Access denied. No token provided.&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;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;decoded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&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-secret-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;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;decoded&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;next&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;ex&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="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Invalid token.&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="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Routes for creating, reading, updating, and deleting resources&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/resources&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;req&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="c1"&gt;// Create a new resource&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&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;/resources&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;req&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="c1"&gt;// Get a list of all resources&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&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;/resources/:id&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;req&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="c1"&gt;// Get a single resource by ID&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/resources/:id&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;req&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="c1"&gt;// Update a resource by ID&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/resources/:id&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;req&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="c1"&gt;// Delete a resource by ID&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;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Listening on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;...`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This snippet includes the basic setup for an API using Express and MongoDB, as well as routes for creating, reading, updating, and deleting resources. It also includes middleware to authenticate users using JWT and handle form data using Multer.&lt;/p&gt;

&lt;p&gt;Of course, this is just a starting point, and we would still need to add the logic for each route and potentially make other modifications to fit our specific needs. But it should give us a good foundation to work from and save you some time in setting up the basic structure of our API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quickly prototype with prompt engineering
&lt;/h2&gt;

&lt;p&gt;This approach can be extremely helpful when working on both complex projects and simple ones, as it allows us to quickly prototype and iterate on different ideas without having to start from scratch every time. &lt;/p&gt;

&lt;p&gt;It's also great for when you’re stuck and need a little bit of inspiration to get moving again.&lt;/p&gt;

&lt;p&gt;So if you, like us, are looking for a new way to streamline the code development process, we highly recommend giving prompt engineering a try.&lt;/p&gt;

&lt;p&gt;GitHub Copilot is available &lt;a href="https://github.com/features/copilot"&gt;as a free trial&lt;/a&gt;, and ChatGPT is currently in &lt;a href="https://chat.openai.com/auth/login"&gt;open beta and free to use&lt;/a&gt;. If you use Replit, you can also try out their variant of this, &lt;a href="https://blog.replit.com/ghostwriter"&gt;Replit Ghostwriter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Comparing Popular Web Stacks: MERN, MEAN, MEVN, MENG, LAMP, and Ruby on Rails</title>
      <dc:creator>Airbrake.io</dc:creator>
      <pubDate>Tue, 20 Dec 2022 17:59:48 +0000</pubDate>
      <link>https://dev.to/airbrake/comparing-popular-web-stacks-mern-mean-mevn-meng-lamp-and-ruby-on-rails-51kc</link>
      <guid>https://dev.to/airbrake/comparing-popular-web-stacks-mern-mean-mevn-meng-lamp-and-ruby-on-rails-51kc</guid>
      <description>&lt;p&gt;“Any application that can be written in JavaScript, will eventually be written in JavaScript." - Jeff Atwood&lt;/p&gt;

&lt;p&gt;Web development can be a daunting task, especially for those new to the field. One of the first decisions you'll need to make is choosing a stack, or a combination of technologies, to build your web application. There are many different stacks to choose from, each with its own set of pros and cons.&lt;/p&gt;

&lt;p&gt;In this post, we will compare some of the most popular stacks: MERN, MEAN, MEVN, MENG, LAMP, and Ruby on Rails. We'll take a look at the frontend framework, middleware, backend, database, and any other notable technologies used in each stack. By the end of this post, you should have a better understanding of the different options available and be able to make an informed decision about which stack is right for your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparing web stacks
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stack&lt;/th&gt;
&lt;th&gt;Frontend&lt;/th&gt;
&lt;th&gt;Middleware&lt;/th&gt;
&lt;th&gt;Backend&lt;/th&gt;
&lt;th&gt;Database&lt;/th&gt;
&lt;th&gt;Other&lt;/th&gt;
&lt;th&gt;Benefit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MERN&lt;/td&gt;
&lt;td&gt;React&lt;/td&gt;
&lt;td&gt;Express&lt;/td&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Full-Stack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MEAN&lt;/td&gt;
&lt;td&gt;Angular&lt;/td&gt;
&lt;td&gt;Express&lt;/td&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Full-Stack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MEVN&lt;/td&gt;
&lt;td&gt;Vue.js&lt;/td&gt;
&lt;td&gt;Express&lt;/td&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Full-Stack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MENG&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Express&lt;/td&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;td&gt;GPT&lt;/td&gt;
&lt;td&gt;Full-Stack + AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LAMP&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Apache&lt;/td&gt;
&lt;td&gt;MySQL&lt;/td&gt;
&lt;td&gt;PHP&lt;/td&gt;
&lt;td&gt;Versatility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ruby on Rails&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Rails&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Ruby&lt;/td&gt;
&lt;td&gt;Productivity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As you can see, the main difference between each web stack is the components they advocate using. This also influences their scope. &lt;/p&gt;

&lt;p&gt;For example, MERN, MEAN, MEVN, and MENG all use similar technologies and offer the benefit of being full-stack frameworks, meaning they provide a complete solution for building web applications from front to back. LAMP is a more general stack that can be used to build a wide range of applications and is known for its versatility. Ruby on Rails is a framework for building web applications using the Ruby programming language and is known for its focus on productivity, with features like convention over configuration and automated testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Individual web stack components
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;React&lt;/strong&gt; is a JavaScript library for building user interfaces. It is known for its ability to efficiently update and render complex UIs, making it a popular choice for building dynamic and interactive web applications. React is used by companies like Facebook, Netflix, Airbnb, Uber.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vue.js&lt;/strong&gt; is a popular JavaScript framework for building web applications. It is known for its simplicity, flexibility, and efficient rendering. Vue.js allows developers to create reusable components and has a rich ecosystem of plugins and libraries. It is lightweight and versatile, making it a good choice for building modern web applications. Vue.js is used by companies like Alibaba, Grammarly, Behance, Gitlab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular&lt;/strong&gt;  is a JavaScript framework for building front-end web applications. It provides several features and tools for building user interfaces, including templates, data binding, and dependency injection. Angular is used by companies like Google, Microsoft, Forbes and Weather.com.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby on Rails&lt;/strong&gt; is a popular web framework for Ruby that is designed to make it easy to build web applications quickly and efficiently. It provides a set of tools and conventions that make it simple to implement common web development tasks, such as routing, request handling, and database interaction. Ruby on Rails is used by companies like Airbnb, Shopify, Github, Twitch and Hulu.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Express&lt;/strong&gt; is a web application framework that simplifies the development of server-side logic and APIs. It provides a robust set of features for routing, middleware, and other common web development tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node.js&lt;/strong&gt; is a JavaScript runtime that allows developers to run JavaScript on the server. This allows them to build server-side applications using the same language that they use for client-side development, providing a consistent and familiar development environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apache&lt;/strong&gt; is a free and open-source web server software that is widely used to host websites and web applications. It was originally developed by the Apache Software Foundation and is currently the most popular web server in the world, according to Netcraft's Web Server Survey. Apache is known for its security, reliability, and performance, making it a great choice for hosting websites and web applications. It is also highly configurable, allowing administrators to customize the server's behavior to meet the needs of their specific application or environment. In addition to serving static and dynamic content, Apache can also be used to host applications written in a variety of languages, including PHP, Python, and Ruby. Overall, Apache is a powerful and reliable web server that is well-suited for a wide range of applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MongoDB&lt;/strong&gt;  is a NoSQL database that allows developers to store data in a flexible, JSON-like format. This makes it easy to work with complex data structures and provides a high level of scalability and performance.GPT (Generative Pretrained Transformer) is a natural language processing model trained to generate human-like responses to text input. It can be used in web applications to create chatbots or other types of applications that involve interacting with users through natural language. Famous companies integrating GPT in their services include OpenAI, Microsoft, Huawei, Google, and Alibaba.&lt;/p&gt;

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

&lt;p&gt;In conclusion, choosing the right web stack for your project is an important decision that can have a significant impact on the success of your application. In this post, we compared some of the most popular web stacks: MERN, MEAN, MEVN, MENG, LAMP, and Ruby on Rails. &lt;/p&gt;

&lt;p&gt;Each stack has its unique set of technologies, including frontend frameworks, middleware, backend, and databases. By considering the specific needs of your project, you can choose the stack best suited for your needs.&lt;/p&gt;

&lt;p&gt;It is important to keep in mind that web development is a constantly evolving field, and new technologies and frameworks are being introduced all the time. It is worth staying updated with the latest developments and considering new options as they become available. Regardless of which stack you choose, the most important thing is to choose a set of technologies that you are comfortable with and that will allow you to build the best application possible.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>New Pybrake Framework Packages Are Here</title>
      <dc:creator>Airbrake.io</dc:creator>
      <pubDate>Mon, 19 Dec 2022 16:00:32 +0000</pubDate>
      <link>https://dev.to/airbrake/new-pybrake-framework-packages-are-here-2ecm</link>
      <guid>https://dev.to/airbrake/new-pybrake-framework-packages-are-here-2ecm</guid>
      <description>&lt;p&gt;With everyone talking about ChatGPT and the amazing things that AI is capable of, Python is having a moment (not that it wasn’t pretty popular before 😉). But that’s not the only reason why we’re hyped about Python. &lt;/p&gt;

&lt;p&gt;We’re happy to announce new &lt;a href="https://www.airbrake.io/error-monitoring"&gt;Airbrake Error Monitoring&lt;/a&gt; support for the following Python frameworks: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/python/falcon/"&gt;Falcon&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/python/hug/"&gt;Hug&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/python/starlette/"&gt;Starlette&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/python/tornado/"&gt;Tornado&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/python/turbogears/"&gt;Turbogears&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can use Airbrake Error Monitoring right out of the box with the frameworks mentioned above. &lt;/p&gt;

&lt;p&gt;For additional information, check out our &lt;a href="https://docs.airbrake.io/docs/platforms/python/"&gt;Python docs page&lt;/a&gt;. There, you’ll find the full list of Python frameworks we do support along with installation instructions. &lt;/p&gt;

&lt;p&gt;Want to stay up to date with the latest Airbrake news? Take a moment and give us a follow on &lt;a href="https://twitter.com/airbrake"&gt;Twitter&lt;/a&gt;, &lt;a href="https://www.linkedin.com/company/airbrake-io"&gt;LinkedIn&lt;/a&gt;, and/or &lt;a href="https://www.facebook.com/airbrake.io/"&gt;Facebook&lt;/a&gt;. You can also join the &lt;a href="https://bit.ly/Airbrake-Discord"&gt;Airbrake Dev Community Discord&lt;/a&gt;! Our discord community features Airbrake announcements, office hours, programming help, and more!&lt;/p&gt;

</description>
      <category>news</category>
      <category>python</category>
    </item>
    <item>
      <title>Check Out These New Gobrake Framework Packages</title>
      <dc:creator>Airbrake.io</dc:creator>
      <pubDate>Thu, 15 Dec 2022 13:55:07 +0000</pubDate>
      <link>https://dev.to/airbrake/check-out-these-new-gobrake-framework-packages-2em7</link>
      <guid>https://dev.to/airbrake/check-out-these-new-gobrake-framework-packages-2em7</guid>
      <description>&lt;p&gt;Recently, Golang released their “&lt;a href="https://go.dev/blog/survey2022-q2-results" rel="noopener noreferrer"&gt;Go Developer Survey 2022 Q2 Results&lt;/a&gt;” showing some essential insights about Go. One insight in particular caught our eye: around 11% of &lt;a href="https://blog.airbrake.io/blog/golang/golang-error-handling-basics" rel="noopener noreferrer"&gt;Golang users struggle with error handling&lt;/a&gt; and working with stack traces, ranking it as their biggest challenge that they personally face using Go today. If you happen to be one of those developers, don’t worry, because Airbrake has your back! &lt;/p&gt;

&lt;p&gt;Over the last few months, we’ve been hard at work updating our Gobrake packages and, now, we’re happy to announce several new Go frameworks that we support! &lt;/p&gt;

&lt;p&gt;You can use &lt;a href="https://www.airbrake.io/error-monitoring" rel="noopener noreferrer"&gt;Airbrake Error Monitoring&lt;/a&gt; right out of the box with the following Go frameworks:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/go/beego/" rel="noopener noreferrer"&gt;Beego&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/go/buffalo/" rel="noopener noreferrer"&gt;Buffalo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/go/echo/" rel="noopener noreferrer"&gt;Echo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/go/fasthttp/" rel="noopener noreferrer"&gt;FastHttp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/go/fiber/" rel="noopener noreferrer"&gt;Fiber&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/go/gin/" rel="noopener noreferrer"&gt;Gin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/go/gorilla/" rel="noopener noreferrer"&gt;Gorilla/Mux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.airbrake.io/docs/platforms/framework/go/iris/" rel="noopener noreferrer"&gt;Iris&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For additional information, head on over to our &lt;a href="https://docs.airbrake.io/docs/platforms/go-lang/" rel="noopener noreferrer"&gt;Go docs page&lt;/a&gt;. There, you’ll find more  information on how to install the Gobrake package for any application using these frameworks.&lt;/p&gt;

&lt;p&gt;Airbrake is always making updates and improvements to our software. So, don’t forget to follow Airbrake either on &lt;a href="https://twitter.com/airbrake" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;, &lt;a href="https://www.linkedin.com/company/airbrake-io" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, and/or &lt;a href="https://www.facebook.com/airbrake.io/" rel="noopener noreferrer"&gt;Facebook&lt;/a&gt;. We also have the &lt;a href="https://bit.ly/Airbrake-Discord" rel="noopener noreferrer"&gt;Airbrake Dev Community Discord&lt;/a&gt; that anyone can join! Our discord community features Airbrake announcements, office hours, programming help, and more!&lt;/p&gt;

</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>Keep Track of Your Application's Health via Apdex Score</title>
      <dc:creator>Airbrake.io</dc:creator>
      <pubDate>Tue, 13 Dec 2022 19:51:03 +0000</pubDate>
      <link>https://dev.to/airbrake/keep-track-of-your-applications-health-via-apdex-score-2pj1</link>
      <guid>https://dev.to/airbrake/keep-track-of-your-applications-health-via-apdex-score-2pj1</guid>
      <description>&lt;p&gt;As a developer, how do you know whether or not your application's user experience (UX) is excellent? Allow us to introduce you to Apdex, also known as the Application Performance Index, which allows you to quantify your user's satisfaction within your app. In this article, we'll discuss in more detail what an Apdex Score is, why it's essential, and how to find it. &lt;/p&gt;

&lt;p&gt;Let's get to it! &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Apdex?
&lt;/h2&gt;

&lt;p&gt;An Apdex is a formula used to measure user satisfaction with the response time of web applications. How does it do this? With one simple formula. &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%2F35g45j7gryx891990xbg.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%2F35g45j7gryx891990xbg.png" alt="Image description" width="616" height="56"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Image source from &lt;a href="https://en.wikipedia.org/wiki/Apdex#:~:text=So%20it%20is%20easy%20to,perceptions%20of%20satisfactory%20application%20responsiveness.&amp;amp;text=The%20Apdex%20formula%20is%20equivalent,given%20a%20score%20of%200." rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The key variables to know from this formula include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;T&lt;/strong&gt;: Time spent on a successful transaction &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Satisfied Count&lt;/strong&gt;: The number of transactions that equal to or are less than "T."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tolerating Count&lt;/strong&gt;: The number of transactions within four times the satisfied count. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frustrated Count&lt;/strong&gt;: The number of transactions that do not meet the above guidelines. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total Samples&lt;/strong&gt;: The total number of transactions within a specific timeframe. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When used in the formula, your Apdex Score should fall between 0 and 1. A 0 means that users are most likely unsatisfied with your application, while a 1 equals excellent response times. So, the closer to 1 you are, the better! &lt;/p&gt;

&lt;p&gt;You can see an example of this in Airbrake's blog post, "&lt;a href="https://blog.airbrake.io/blog/apm/what-is-an-apdex-score" rel="noopener noreferrer"&gt;What is an Apdex Score?&lt;/a&gt;" &lt;/p&gt;

&lt;p&gt;Apdex Scores are critical in giving you a quick look at how well your application serves your users. If your results are below 0.70, that means users are most likely giving up on your application due to poor response times. &lt;/p&gt;

&lt;p&gt;While it is possible to find your Apdex Score with a smaller data set, if your application goes through thousands, if not millions, of transactions, it's simply not feasible to calculate your Apdex Score on your own. &lt;/p&gt;

&lt;p&gt;Fortunately, there are applications out there that do it for you. &lt;/p&gt;

&lt;h2&gt;
  
  
  Where Can You Find Your Apdex Score?
&lt;/h2&gt;

&lt;p&gt;There are several places where you can see your Apdex Score. Unfortunately, I could not find a tool available online to share where you wouldn't be required to create an account with a company to use their Apdex Score feature. If you do know of one that is free and doesn't require someone to sign up for an account, let me know in the comments! &lt;/p&gt;

&lt;p&gt;Since it looks like you'll need to create an account with a company anyways, why not with &lt;a href="https://www.airbrake.io/performance-monitoring" rel="noopener noreferrer"&gt;Airbrake Error and Performance Monitoring&lt;/a&gt;? Airbrake Performance Monitoring includes an Apdex Score feature and tools to drill down into problematic and error-prone routes that could impact your score. Here's our &lt;a href="https://docs.airbrake.io/docs/overview/apm/" rel="noopener noreferrer"&gt;Performance Monitoring docs page&lt;/a&gt; in case you would like to learn more. &lt;/p&gt;

&lt;p&gt;Okay, enough with that promo spiel. In our next article going over Apdex Score, we'll discuss how to improve your Apdex Score. Give us a follow, so you don't miss out 😄&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Hello world: Building a Python API with Replit and Airbrake</title>
      <dc:creator>Airbrake.io</dc:creator>
      <pubDate>Wed, 09 Nov 2022 17:56:40 +0000</pubDate>
      <link>https://dev.to/airbrake/hello-world-building-a-python-api-with-replit-and-airbrake-1n2g</link>
      <guid>https://dev.to/airbrake/hello-world-building-a-python-api-with-replit-and-airbrake-1n2g</guid>
      <description>&lt;p&gt;As we outlined in the previous blog post “&lt;a href="https://blog.airbrake.io/best-serverless-platforms-to-deploy-your-react-app"&gt;Top Serverless Platforms to Deploy Your React App&lt;/a&gt;”, there is a lot happening in the space of developer tools. Especially in the workflow around writing and deploying code. One workflow that’s gaining traction: Replit. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://replit.com/"&gt;Replit&lt;/a&gt; takes the development experience one step further from Netlify, Vercel, and other click-to-deploy platforms by offering a full editor experience in the environment and a community for sharing code in the form of Repls. It’s a great way to write a proof of concept code. Due to its unique structure, we wanted to write a blog post walking you through setting up and monitoring a Python project on &lt;a href="https://replit.com/"&gt;Replit&lt;/a&gt; using Airbrake Error and Performance Monitoring.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll create a simple Hello World API and explore how Airbrake can provide visibility into errors and performance of the API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating our HelloWorld Repl
&lt;/h2&gt;

&lt;p&gt;First, we need to create an account on &lt;a href="//replit.com"&gt;replit.com&lt;/a&gt;. In this example, we created our first Repl using the Python template. We named it “HelloWorld” to capture the service we will be providing to the world. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wvqdlN0D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9jta2miot5adn8ylu9x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wvqdlN0D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9jta2miot5adn8ylu9x.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once we initiate the project, we are brought into the main view of Replit. &lt;/p&gt;

&lt;p&gt;To the left, we see our project files, with main.py being central to our example here. In the middle pane, we see our actual code and, to the right, the application's output as it runs. As we create an HTTP API, we will also see a web browser tab for previewing the API output. Neat 😁&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Syi1kizw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uufgkg95l0u312ha8vzb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Syi1kizw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uufgkg95l0u312ha8vzb.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on “examples” for a few basic code examples by Replit and choose the Flask option (a very popular framework for building Web APIs). Plus, Airbrake has great support for Flask, which makes the process of installing an error monitoring tool very simple. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4hzR-vob--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9aqcybavdu667dg2tk2s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4hzR-vob--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9aqcybavdu667dg2tk2s.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now the code is in our editor window. Click the big green button that says Run on the top of the screen to run the application. With that, our API is live in the Webview pane, and the console output of the service is below. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H7XkyCOe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gxhjnx4c1y0usp4zhptm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H7XkyCOe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gxhjnx4c1y0usp4zhptm.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can also browse the service with a browser: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VZudJlG4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iqzfsm8dahazdijc04c4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VZudJlG4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iqzfsm8dahazdijc04c4.png" alt="Image description" width="880" height="105"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up monitoring with Airbrake
&lt;/h2&gt;

&lt;p&gt;During the entire setup process, monitoring was not a priority. But the moment our API goes live, we need to have a way to see how it’s doing. Is it responsive enough for users? Have any queries gone wrong? Have any errors popped up? &lt;/p&gt;

&lt;p&gt;This is where Airbrake comes in handy. Airbrake, once installed, will alert you to any errors and performance issues within your application. Once we identify problems, we can get back to our code again.&lt;/p&gt;

&lt;p&gt;First things first, we need to create an Airbrake account (it’s free for projects like this!), where we’ll be able to create a project for your Replit API, and call it “Helloworld.” In Airbrake, each software project or service is typically its own Airbrake project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EGUKI90N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b69wzxsvcywe42ogi66c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EGUKI90N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b69wzxsvcywe42ogi66c.png" alt="Image description" width="880" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As we outlined in the previous blog post “top serverless platforms to deploy your react app”, there is a lot happening in the space of developer tools. Especially in the workflow around writing and deploying code. One workflow that’s gaining traction: Replit. &lt;/p&gt;

&lt;p&gt;Replit takes the development experience one step further from Netlify, Vercel, and other click-to-deploy platforms by offering a full editor experience in the environment and a community for sharing code in the form of Repls. It’s a great way to write a proof of concept code. Due to its unique structure, we wanted to write a blog post walking you through setting up and monitoring a Python project on Replit using Airbrake Error and Performance Monitoring.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll create a simple Hello World API and explore how Airbrake can provide visibility into errors and performance of the API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating our HelloWorld Repl
&lt;/h2&gt;

&lt;p&gt;First, we need to create an account on replit.com. In this example, we created our first Repl using the Python template. We named it “HelloWorld” to capture the service we will be providing to the world. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iZOAZ1Br--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ki02ydsitd22tvbvy1jh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iZOAZ1Br--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ki02ydsitd22tvbvy1jh.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once we initiate the project, we are brought into the main view of Replit. &lt;/p&gt;

&lt;p&gt;To the left, we see our project files, with main.py being central to our example here. In the middle pane, we see our actual code and, to the right, the application's output as it runs. As we create an HTTP API, we will also see a web browser tab for previewing the API output. Neat 😁&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HFPpJ03S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xjj8icpwi90ld7rkolmb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HFPpJ03S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xjj8icpwi90ld7rkolmb.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on “examples” for a few basic code examples by Replit and choose the Flask option (a very popular framework for building Web APIs). Plus, Airbrake has great support for Flask, which makes the process of installing an error monitoring tool very simple. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4py0vFML--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v4fo3raatwc1cp4mdzq7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4py0vFML--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v4fo3raatwc1cp4mdzq7.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now the code is in our editor window. Click the big green button that says Run on the top of the screen to run the application. With that, our API is live in the Webview pane, and the console output of the service is below. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SFxvF-AL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jpkaslny0w7tyuww0jty.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SFxvF-AL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jpkaslny0w7tyuww0jty.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can also browse the service with a browser: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nquvqFIb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o5ycm7d3jb01ohhxr5d6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nquvqFIb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o5ycm7d3jb01ohhxr5d6.png" alt="Image description" width="880" height="105"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up monitoring with Airbrake
&lt;/h2&gt;

&lt;p&gt;During the entire setup process, monitoring was not a priority. But the moment our API goes live, we need to have a way to see how it’s doing. Is it responsive enough for users? Have any queries gone wrong? Have any errors popped up? &lt;/p&gt;

&lt;p&gt;This is where Airbrake comes in handy. Airbrake, once installed, will alert you to any errors and performance issues within your application. Once we identify problems, we can get back to our code again.&lt;/p&gt;

&lt;p&gt;First things first, we need to create an &lt;a href="https://airbrake.io/account/new"&gt;Airbrake account&lt;/a&gt; (it’s free for projects like this!), where we’ll be able to create a project for your Replit API, and call it “Helloworld.” In Airbrake, each software project or service is typically its own Airbrake project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q7hxzHdg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ohfhpmlcgx9fh05thq1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q7hxzHdg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ohfhpmlcgx9fh05thq1.png" alt="Image description" width="880" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Upon creating the project, we are greeted with a guide to instrument the code we want monitored. Choose Flask, as this is the framework we used in our service. We can quickly set up our monitoring using the Pybrake SDK and follow the Flask instructions. AirbrakeSDKs know how to automatically catch errors and performance events without any error-specific code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aEu1XN9q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q580jxy0fjmqr3ysjael.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aEu1XN9q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q580jxy0fjmqr3ysjael.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qV2Rh8We--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9swpn8mkj9spa76rf2ey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qV2Rh8We--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9swpn8mkj9spa76rf2ey.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see from the instructions that we need to install the pybrake module into our Python environment. Fortunately, this is not needed on Replit, as it will see the imports we used and automatically install the necessary dependencies. We’ll also need to set our Airbrake configuration parameters, so Airbrake knows where to send the errors. You’ll then be able to view these errors within your Airbrake account. Finally, we need to wrap our Flask app object with Pybrake init_app() for it to pick up errors and performance stats.&lt;/p&gt;

&lt;p&gt;Let’s do this in Replit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DJ25T-TJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4a75qpujeubi4krc9xln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DJ25T-TJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4a75qpujeubi4krc9xln.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We start with importing Pybrake. Note that we need to install the blinker library. If you’re not familiar with the blinker library, check out &lt;a href="https://pypi.org/project/blinker/"&gt;PyPi’s project description&lt;/a&gt; about it. &lt;/p&gt;

&lt;p&gt;Run the app, so Replit detects these imports and installs them into the environment. Follow the process in the console output in the bottom right of your Replit window.&lt;/p&gt;

&lt;p&gt;Once we have imported the Pybrake notifier and installed it, add our Airbrake-specific project configuration and initialize the SDK. Note that this code comes after the actual Flask app initialization.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6riJDB5d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ydpj3c28d1ew60u0ewgm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6riJDB5d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ydpj3c28d1ew60u0ewgm.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the application again and interact with it. Then head on over to our Airbrake account. We should start seeing performance issues and errors pop up in our Airbrake project. A good way to test this is to hit CTRL+R to refresh the Webview or browse directly to the URL using a browser. &lt;/p&gt;

&lt;p&gt;Since we don’t have any errors in this simple code (we think!), we should see performance events first. Every request to the API will generate a performance event with statistics on response time.&lt;/p&gt;

&lt;p&gt;We go to the Performance tab in Airbrake to see that we indeed have 1 request with a response time of 0.19 ms and no errors. From this view, we can see the different routes that have been identified. The most important one for us is the " / "route, which is the root of our API and the one we query by default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EbWhQpH1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w42t308te1pa2nigbgdj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EbWhQpH1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w42t308te1pa2nigbgdj.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We now want to see how errors manifest themselves in Airbrake. All we have to do is create an error in our code. The easiest way to do this is to add a simple division by zero problem (x = 1/0) within our hello world API function. This will trigger an error when the API is queried. &lt;/p&gt;

&lt;p&gt;Run the code again, and you’ll see an Internal Server Error within the Webview. Our division by zero problem broke the request.  We can also see this in the console output.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gq8DnnMf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r10reupi7udroebbew8h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gq8DnnMf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r10reupi7udroebbew8h.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take a look at the performance view in Airbrake. There should be a request that issues a &lt;a href="https://blog.airbrake.io/blog/http-errors/500-internal-server-error"&gt;500 Response Code&lt;/a&gt; (internal server error). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gn237sK5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aflbt3pg8lzygue9l96v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gn237sK5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aflbt3pg8lzygue9l96v.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Often, frameworks use generic error messages, but since this is a known bug in our application, we may want to capture it better.&lt;/p&gt;

&lt;p&gt;In Replit, add a condition that captures this problem, and raise a new Exception that more clearly describes the problem for us. The bug still causes the same problem when querying the API, but now it will raise an Exception that says, “Sorry, no numbers below zero.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HihiY3cQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uwoid9oepekb032lordl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HihiY3cQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uwoid9oepekb032lordl.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the Airbrake Error tab, we can see that we have two different errors listed. Clicking on the latter one will allow us to get additional information on the error. We can also view many times this error has been triggered and for which file and which API call. Furthermore, you should notice that the error message has changed from “ZeroDivisionError” to “Sorry, no numbers below zero.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z-HmI1go--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1xrz8vyiav08xsn9ejx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z-HmI1go--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1xrz8vyiav08xsn9ejx.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By moving to the Occurrences tab, we can get further information on the error. Including the full backtrace and a snippet of the offending code. This will allow us to see, straight from Airbrake, what the problem is. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---sil6ENb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtl9h5uhusfp9h1e5btr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---sil6ENb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtl9h5uhusfp9h1e5btr.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Aggregations tab provides further details and patterns across all occurrences of this error. For example,  this error has been triggered by users going to two different URLs. This represents the internal web view as well as our queries with the browser. In this tab, we can also see countries, environments, users, and any custom aggregations based on the parameters sent by the notifier. Very helpful in investigating why and where issues are happening.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R4EzhtCl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bm6u5qzv8ewo8odvp4fv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R4EzhtCl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bm6u5qzv8ewo8odvp4fv.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing the loop
&lt;/h2&gt;

&lt;p&gt;We can close the loop on our error by using Airbrake to keep track of and manage the status of bugs within our project. In the overview view of each error, you have the option to resolve, mute or create an issue in an external ticketing system, like JIRA or GitHub. &lt;/p&gt;

&lt;p&gt;Here’s how it works: &lt;/p&gt;

&lt;p&gt;Airbrake identified the problem (albeit a problem we created on purpose), and now we can fix it. &lt;/p&gt;

&lt;p&gt;Returning to Replit, we remove the “x = 1/0” bit of code, and viola, we fixed the error (if only debugging was always this easy)! Since we have fixed the bug, choose the Resolve option for this error within your Airbrake account. This will mean that the error is removed from the list, but it will pop up if this error occurs again. A good way to get it out of the way but, at the same time, be alerted if the same error shows up in the future. &lt;/p&gt;

&lt;p&gt;When we are in the process of fixing the error, we may want to Mute the error temporarily. This will hide it from the list, but it will not be marked as resolved. We may want to comment on the error to clarify why we muted or resolved it. &lt;/p&gt;

&lt;p&gt;If we want to make sure this is registered as a bug in our ticketing system, we can take steps to integrate Airbrake into our ticket system, which you can find &lt;a href="https://docs.airbrake.io/docs/integrations/all-integrations/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JQzVw2Je--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g8v8uib7z38nh2z0m3y2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JQzVw2Je--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g8v8uib7z38nh2z0m3y2.png" alt="Image description" width="880" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In this article, we have explored the combination of Replit and Airbrake. Replit is a great way to quickly get code to production, and Airbrake is a great way to keep an eye on the performance and errors within that code over time. This whole process took less than 15 minutes and shows how powerful modern dev tools can be in getting things done. &lt;/p&gt;

&lt;p&gt;We could easily have connected our code to GitHub. And as both Replit and Airbrake support that, it could vastly improve the debugging experience. For example, we could click down to the code and open up GitHub issues on problems we identify and then fix them in Replit. But that is for another time 🙂  &lt;/p&gt;

</description>
      <category>python</category>
      <category>tutorial</category>
      <category>flask</category>
    </item>
    <item>
      <title>A Guide for Developers Searching for Their Next Job</title>
      <dc:creator>Airbrake.io</dc:creator>
      <pubDate>Fri, 04 Nov 2022 21:29:20 +0000</pubDate>
      <link>https://dev.to/airbrake/a-guide-for-developers-searching-for-their-next-job-140n</link>
      <guid>https://dev.to/airbrake/a-guide-for-developers-searching-for-their-next-job-140n</guid>
      <description>&lt;p&gt;It’s been a tough time to be in tech. If you’ve been on Twitter lately, you know all about the &lt;a href="https://fortune.com/2022/11/03/tech-company-layoffs-are-a-recession-signal-apple-stripe-lyft-amazon-twitter/"&gt;major tech layoffs&lt;/a&gt;. That’s why we created this guide. We wanted to craft a list of resources and advice to help you in your job search as a developer. &lt;/p&gt;

&lt;p&gt;Did we miss anything? Have advice or additional resources? Perhaps you have a lead on a job? Let people know in the comments below!&lt;/p&gt;

&lt;h2&gt;
  
  
  Update your resume
&lt;/h2&gt;

&lt;p&gt;Yeah, we bet you saw this one coming 😁. All jokes aside, it’s important that you craft a perfect resume that can pass Applicant Tracking Systems (ATS). In case you’re unfamiliar with ATS, they’re the systems that prevent your resume from seeing the right people. If your resume doesn’t align with a company's job posting, it’s immediately thrown away by the system. According to this &lt;a href="https://www.jobscan.co/blog/8-things-you-need-to-know-about-applicant-tracking-systems/"&gt;Jobscan article&lt;/a&gt;, around 98% of Fortune 500 companies, 66% of large companies, and 35% of small organizations use an ATS. &lt;/p&gt;

&lt;p&gt;That’s why your developer resume needs to be tailored to beat ATS. Gone are the days of sending off uniform resumes to several different companies. Now, you got to put in some work to tailor your resume to job postings. &lt;/p&gt;

&lt;p&gt;Here’s our advice on how to do that: &lt;/p&gt;

&lt;p&gt;Create one large resume or CV: Put all your experience there. That way, you can copy and paste relevant information for the next part. &lt;br&gt;
Tailor your resume: Use your CV as the foundation for your other resumes. Make sure you’re getting the right keywords! &lt;br&gt;
Run your resume through a resume checker: We found a few open-source scanners that you can run your resume through and see if they’ll pass an ATS. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ZhengTzer/resume-scanner"&gt;https://github.com/ZhengTzer/resume-scanner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Vignesh0404/Resume-Scanner"&gt;https://github.com/Vignesh0404/Resume-Scanner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bonus: &lt;a href="https://www.jobscan.co/"&gt;Jobscan&lt;/a&gt; offers free scans! It’s one of the most robust resume-scanning software out there. After the free scans, it will cost money, though.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Updating and repurposing your resume sucks, but by putting in the extra effort, you’re more likely to land that first interview. &lt;/p&gt;

&lt;h2&gt;
  
  
  Brush up on your coding skills/knowledge
&lt;/h2&gt;

&lt;p&gt;It makes sense that after being in one job for a while, some of your other developer skills become a bit rusty. That’s okay! The internet is a wonderful place to relearn and improve your skills. &lt;/p&gt;

&lt;p&gt;Make sure that before your interview, you re-familiarize yourself with all of the following: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.techinterviewhandbook.org/algorithms/study-cheatsheet/"&gt;Algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.bigocheatsheet.com"&gt;Big O Notation&lt;/a&gt;: As one commenter pointed out, this is important if you apply to companies like Google that require you to have some common algorithm knowledge. &lt;/li&gt;
&lt;li&gt;Your chosen language, trending libraries, and trending tech stacks &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Okay, we know this was already linked above as Algorithms, but the Tech Interview Handbook(&lt;a href="https://www.techinterviewhandbook.org/algorithms/study-cheatsheet/"&gt;https://www.techinterviewhandbook.org/algorithms/study-cheatsheet/&lt;/a&gt;) really does deserve a shoutout. We highly recommend you take some time and look it over!&lt;/p&gt;

&lt;p&gt;In addition to this, you can also use these resources to practice coding: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://leetcode.com/"&gt;LeetCode&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codechef.com/"&gt;Codechef&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codewars.com/"&gt;Codewars&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Brushing up on your coding knowledge and skills is an excellent way to prepare yourself for when you do get an interview. &lt;/p&gt;

&lt;h2&gt;
  
  
  Prepare your GitHub
&lt;/h2&gt;

&lt;p&gt;Consider your GitHub as an extension of your resume. Whether you like it or not, recruiters will look at it if it’s available, and that’s not a bad thing. It’s where you can really show off your coding skills! This &lt;a href="https://blog.boot.dev/jobs/build-github-profile/"&gt;Boot.dev&lt;/a&gt; blog post does a great job of summarizing how you should update your GitHub profile. &lt;/p&gt;

&lt;p&gt;Some key takeaways include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Update your profile picture, short bio, and link to relevant websites&lt;/li&gt;
&lt;li&gt;Ensure all your projects have a README&lt;/li&gt;
&lt;li&gt;Introduce yourself with a profile README&lt;/li&gt;
&lt;li&gt;Code more if you’re heatmap is looking rather bare&lt;/li&gt;
&lt;li&gt;Hide embarrassing repositories (look, we were all beginners at some point) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For sure, check out the blog post linked above. It’s chock full of amazing advice! Once your GitHub is prepped and ready, reach out to your network. &lt;/p&gt;

&lt;h2&gt;
  
  
  Reach out to your network and community
&lt;/h2&gt;

&lt;p&gt;Developer communities are incredible because when someone is laid off, it feels like the rest of the community comes together to help them out. And not just during massive layoffs like the ones we’re seeing now. In general, I’ve seen tweets and LinkedIn posts help other developers find jobs. &lt;/p&gt;

&lt;p&gt;So, if you’ve been laid off, start reaching out to developer communities via LinkedIn, Facebook, and Twitter. Yes, even Twitter since I’ve seen many people recently laid off from Twitter offered job leads on Twitter…oh goddess, imagine if you had to take a shot for every time I wrote Twitter. &lt;/p&gt;

&lt;p&gt;Here are a few hashtags you can use to get started: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jobs&lt;/li&gt;
&lt;li&gt;JobSearching&lt;/li&gt;
&lt;li&gt;HireMe&lt;/li&gt;
&lt;li&gt;JobOpening&lt;/li&gt;
&lt;li&gt;HiringNow&lt;/li&gt;
&lt;li&gt;JoinOurTeam&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can find an extended list of hashtags in the article “&lt;a href="https://www.thebalancemoney.com/how-hashtags-can-help-your-job-search-4686298"&gt;How Hashtags Can Help Your Job Search&lt;/a&gt;.”&lt;/p&gt;

&lt;p&gt;While socials may help you get a lead on a job, nothing compares to reaching out to your personal network. Perhaps someone you know is working at a company you’re interested in? If so, get in touch with them! Ask them if there are any positions available for a developer. You can also get in touch with recruiters, as well (if they haven’t already reached out to you yet). &lt;/p&gt;

&lt;p&gt;If you use these strategies, there’s a great chance you’ll land some interviews. Once you land a few interviews, make sure that you remember your worth and value! &lt;/p&gt;

&lt;h2&gt;
  
  
  Remember your worth and value
&lt;/h2&gt;

&lt;p&gt;Going to get a bit self-help here, but you absolutely deserve to work for a company that will treat you well. Don't settle for less if you can help it. &lt;/p&gt;

&lt;p&gt;With that in mind, apply to jobs that you are not only interested in but that the company culture is a good fit. The last thing you want is to work for a toxic company. &lt;/p&gt;

&lt;p&gt;How do you know if a company is toxic? First things first, check &lt;a href="https://www.glassdoor.com/"&gt;Glassdoor&lt;/a&gt;. Yes, yes, we know that it sucks that you have to create an account, but it really is worth it. Don't want to sign up for a Glassdoor account? Check &lt;a href="https://www.indeed.com/companies"&gt;Indeed&lt;/a&gt; and view their review ratings for companies. Look for common complaints. Is there a pattern of burnout? Disrespect? Toxicity. If so, it might be best to avoid those companies. &lt;/p&gt;

&lt;p&gt;Another way you can suss out whether or not a company is a good fit is by asking questions. Typically, the interview process is broken into four phrases: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Screening&lt;/li&gt;
&lt;li&gt;Meeting someone on the team and completing a coding challenge&lt;/li&gt;
&lt;li&gt;Code critique &lt;/li&gt;
&lt;li&gt;Final interview/hang out at the office/offer &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That means you have four chances to ask questions regarding the company culture. Ask questions that will give you insight into how the team operates. Questions such as: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do you deal with failure and conduct postmortems?&lt;/li&gt;
&lt;li&gt;What are the company’s values? &lt;/li&gt;
&lt;li&gt;What does employee growth look like? &lt;/li&gt;
&lt;li&gt;What’s the turnover rate? &lt;/li&gt;
&lt;li&gt;How does the company deal with conflict?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a short list, but there are several other questions you can ask to decide if the company is a good fit. For additional questions, check out this &lt;a href="https://hbr.org/2022/05/38-smart-questions-to-ask-in-a-job-interview"&gt;Harvard Business Review&lt;/a&gt; article. &lt;/p&gt;

&lt;p&gt;If you are offered a job, but you need more time to decide between other offers, a good company should give you extended time. Hard deadlines during the offer phase can be a red flag. &lt;/p&gt;

&lt;p&gt;Still not sure about the company? See if someone from the company will speak to you one-on-one and get some real details. &lt;/p&gt;

&lt;p&gt;Remember: you are valuable (don't let imposter syndrome tell you otherwise), and you should treat yourself as such! &lt;/p&gt;

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

&lt;p&gt;Looking for a new job is always stressful, so we hope this article provided some good resources and advice! And, once again, if you have additional advice, resources, or leads on jobs, let people know in the comments below!&lt;/p&gt;

</description>
      <category>career</category>
      <category>socialmedia</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Nightmare on Dev Street: Terrifying Situations to Make Your Spine Tingle</title>
      <dc:creator>Airbrake.io</dc:creator>
      <pubDate>Thu, 27 Oct 2022 13:00:11 +0000</pubDate>
      <link>https://dev.to/airbrake/nightmare-on-dev-street-terrifying-situations-to-make-your-spine-tingle-50le</link>
      <guid>https://dev.to/airbrake/nightmare-on-dev-street-terrifying-situations-to-make-your-spine-tingle-50le</guid>
      <description>&lt;p&gt;As a developer, your worst fears may include losing all your production data, servers going down, and latent errors, among other worries. However, there are several free tools you can use to prevent these nightmares from coming true. In this blog, we'll go over five nightmare situations for developers along with some free solutions they can use to prevent them from coming to life.&lt;/p&gt;

&lt;h2&gt;
  
  
  😱 Your Data Center Goes Down
&lt;/h2&gt;

&lt;p&gt;Ideally, when planning out your systems, you want to set them up to handle any failure. Of course, there's always a chance you missed something during this initial phase. And also, mistakes happen. &lt;/p&gt;

&lt;p&gt;Take this story from &lt;a href="https://aws.amazon.com/message/41926/"&gt;Amazon&lt;/a&gt;. While Amazon is a huge enterprise, it can fall victim to its own mistakes. One example is when Amazon brought down the entire Northern Virginia Region in 2017! According to their summary of the incident, an Amazon Simple Storage Service (S3) member executed a command that accidentally removed a larger set of servers than intended. Oops. &lt;/p&gt;

&lt;p&gt;If Amazon can make mistakes like this, then it's all the more important to have an outage alerting tool at the ready.&lt;/p&gt;

&lt;p&gt;In this case, we would like to recommend &lt;a href="https://github.com/outages/outages"&gt;The Outages Project&lt;/a&gt;. This open-source project tracks outages using "git-scraping."&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚰️ Losing Your Production Data
&lt;/h2&gt;

&lt;p&gt;Deleting your production environment seems impossible, right? Well, think again. In &lt;a href="https://www.reddit.com/r/cscareerquestions/comments/6ez8ag/accidentally_destroyed_production_database_on"&gt;this Reddit post&lt;/a&gt;, a Junior Developer deleted their company's production environment. The worst part: the backups of production were unusable! What a nightmare. &lt;/p&gt;


&lt;div class="ltag__reddit--container"&gt;
  &lt;div class="ltag__reddit--title-container"&gt;
    
      &lt;div class="ltag__reddit--title"&gt;
        &lt;h1&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bCqI7Yj---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/reddit-icon-c6851eed10026b5707e2e8c814b5bbcbb4823de68d5b611a6f4b99c8beed6f05.svg" alt="Reddit Logo"&gt;
          &lt;a href="https://www.reddit.com/r/cscareerquestions/comments/6ez8ag/accidentally_destroyed_production_database_on" rel="noopener noreferrer"&gt;
            Accidentally destroyed production database on first day of a job, and was told to leave, on top of this i was told by the CTO that they need to get legal involved, how screwed am i?
          &lt;/a&gt;
        &lt;/h1&gt;
        &lt;div class="ltag__reddit--post-metadata"&gt;
          &lt;span&gt;Jun  3 '17&lt;/span&gt;
          &lt;span&gt;Author: cscareerthrowaway567&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__reddit--body"&gt;
    
&lt;p&gt;Today was my first day on the job as a Junior Software Developer and was my first non-internship position after university. Unfortunately i screwed up badly. &lt;/p&gt;
&lt;p&gt;I was basically given a document detailing how to setup my local development environment. Which involves run a small script to create my own personal DB instance from some test data. After running the…&lt;/p&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__reddit--btn--container"&gt;
    
      &lt;a href="https://www.reddit.com/r/cscareerquestions/comments/6ez8ag/accidentally_destroyed_production_database_on" rel="noopener noreferrer"&gt;See Full Post&lt;/a&gt;
    
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The big takeaway from this story: back up your data! Not only should you back it up, but this process should be automated.&lt;/p&gt;

&lt;p&gt;We found these open-source projects on GitHub that could help with this if you're using MongoDB. &lt;a href="https://github.com/hex7c0/mongodb-backup"&gt;The MongoDB-backup&lt;/a&gt; and &lt;a href="https://github.com/hex7c0/mongodb-restore"&gt;Mongodb-restore&lt;/a&gt; automate the process of backing up to MongoDB. If you're not using MongoDB or need something more robust, check out this article that reviews &lt;a href="https://www.comparitech.com/net-admin/best-database-backup-tools/"&gt;seven database backup tools&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Whatever you decide to go with, double-check that your backup system works. &lt;/p&gt;

&lt;h2&gt;
  
  
  👻 Invisible Errors
&lt;/h2&gt;

&lt;p&gt;Also referred to as &lt;a href="https://bit.ly/3Fjq4l6"&gt;Latent Errors&lt;/a&gt;. These are errors that, no matter how well-tested your code is in staging, still manage to sneak into production, just waiting for the right path to be activated. Once that path is activated the error surfaces. &lt;/p&gt;

&lt;p&gt;Here's a great example of a latent error brought to you by this &lt;a href="https://stackoverflow.com/questions/11720301/what-is-a-latent-error-an-example"&gt;Stackoverflow post&lt;/a&gt;. During takeoff, the pilots of a Boeing 777 received an error message while they were in autopilot mode that said their plane had stalled. The pilots took back manual control and landed the aircraft safely. Upon investigation, it was discovered that the issue was a latent error within data from a failed accelerometer.&lt;/p&gt;

&lt;p&gt;In the case of errors, whether they're active or latent, you need a reliable error monitoring tool. If you're not too familiar with error monitoring, it's a tool that alerts you when an error occurs within your project. One tool we're fond of is &lt;a href="https://bit.ly/3sxW39q"&gt;Airbrake Error and Performance Monitoring&lt;/a&gt; (obviously since we're Airbrake, lol), which has a free developer tier.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Memory Leaks
&lt;/h2&gt;

&lt;p&gt;In his article, "&lt;a href="https://medium.com/codex/memory-leaks-in-programming-d1b0447b9a73"&gt;Understanding Memory Leaks in Programming&lt;/a&gt;," Pierre DeBois describes a memory leak as "a type of resources mismanagement in programming…They occur when programming objects are stored in computer memory, be it a laptop or smartphone, but then the allocated memory is not released as designed with the programming." If left unchecked, memory leaks will consume memory and lead to performance degradation.&lt;/p&gt;

&lt;p&gt;How can you detect memory leaks? You probably already have the solution!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.chrome.com/docs/devtools/"&gt;Chrome Developer Tools&lt;/a&gt; allows you to take heap snapshot images and Allocation Instrumentation on Timeline recordings, which provide metrics such as jsHeapSizeLimit, usedJSHeapSize, and totalJSHeapSize. DeBois goes through the entire process step by step in the link above.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧟 Slow Response Time
&lt;/h2&gt;

&lt;p&gt;Everyone has experienced this! You're on a website or application, and it takes FOREVER for the page to load. Slow load times are common in programming due to several factors (new commits, new features, etc.). For a full explanation of why this occurs, check out the &lt;a href="http://software-lab.com/why-do-programs-get-slower-with-time"&gt;blog post at Johny's Software Lab&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;You can find out if your SaaS app is slowing down with &lt;a href="https://github.com/GoogleChrome/lighthouse"&gt;Google Chrome Lighthouse&lt;/a&gt;. Lighthouse should be a staple in your monitoring because it lets you see the performance, accessibility, and SEO metrics related to your app's performance.&lt;/p&gt;

&lt;p&gt;Now, if you want a free tool that allows you to see which of your paths have slowed down, again, we have to recommend &lt;a href="https://bit.ly/3W7LTKr"&gt;Airbrake Performance Monitoring&lt;/a&gt; because of its ability to pinpoint routes with slower response times.&lt;/p&gt;

&lt;h2&gt;
  
  
  😨 What's Your Nightmare?
&lt;/h2&gt;

&lt;p&gt;And those are just a few of the nightmare issues developers face. But we're hoping that you can alleviate some of the pain points associated with servers going down, data loss, latent errors, memory leaks, and slow response times by providing some free tools. &lt;/p&gt;

&lt;p&gt;Enough from us, though! What about you? What nightmare situations have you encountered as a developer? How did you get through it? Let us know in the comments!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>github</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Airbrake's Advice on Which PaaS App is Right For Your React Project</title>
      <dc:creator>Airbrake.io</dc:creator>
      <pubDate>Thu, 06 Oct 2022 15:36:44 +0000</pubDate>
      <link>https://dev.to/airbrake/airbrakes-advice-on-which-paas-app-is-right-for-your-react-project-79k</link>
      <guid>https://dev.to/airbrake/airbrakes-advice-on-which-paas-app-is-right-for-your-react-project-79k</guid>
      <description>&lt;p&gt;Serverless platforms are quickly evolving, and new ones are emerging as the industry is helping unleash React developers' creative powers by removing the burden of Ops from their plates. With so many options, it can be challenging to know which Platform as a service you should go with to deploy your React project. &lt;/p&gt;

&lt;p&gt;In this article, we'll explore the top 6 Serverless PaaS options available on the market (along with one bonus one!). We'll also offer recommendations for which one you should go with, depending on what you want from your PaaS. &lt;/p&gt;

&lt;h2&gt;
  
  
  PaaS Should Have These Three Elements
&lt;/h2&gt;

&lt;p&gt;Before we offer recommendations, let's talk about the three elements we felt needed for a serverless PaaS for an emerging React project. &lt;/p&gt;

&lt;p&gt;First, it should be easy to get started: you should be able to work and deploy directly from a Git repo.&lt;/p&gt;

&lt;p&gt;Second, it should be free to start—but scalable enough to support real-world production usage and commercialization.&lt;/p&gt;

&lt;p&gt;Third, it should be easy to operate: you should be able to A/B test your site and have analytics capabilities.&lt;/p&gt;

&lt;p&gt;With that in mind, we created the following chart with our &lt;a href="https://7307809.fs1.hubspotusercontent-na1.net/hubfs/7307809/Airbrakes%20Serverless%20PaaS%20comparison.pdf"&gt;PaaS scoring system&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;For more information, you can also check out our blog post, "&lt;a href="https://bit.ly/3CxU75F"&gt;Best Serverless Platforms to Deploy Your React App&lt;/a&gt;"&lt;/p&gt;

&lt;h2&gt;
  
  
  You should go with this PaaS if...
&lt;/h2&gt;

&lt;p&gt;There's no one size fits all solution, but we've got some recommendations based on which scenario we think these platforms will stand out for your app. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go with Netlify if...&lt;/strong&gt;&lt;br&gt;
You want a simple, all-encompassing experience with a strong community and built-in analytics but don't need to be part of that community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go with Vercel if...&lt;/strong&gt;&lt;br&gt;
You want a simple, and all-encompassing experience with built-in app analytics and want to be part of a community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go with AWS Amplify if...&lt;/strong&gt;&lt;br&gt;
You are already using the AWS ecosystem and/or are looking to scale out your app significantly with features and scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go with Cloudflare Pages if...&lt;/strong&gt;&lt;br&gt;
You want a capable experience focused on availability and performance but can forego some simplifying options such as plugins or app templates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go with Render if...&lt;/strong&gt;&lt;br&gt;
All you need is a bare-bones service that offers technical options and flexibility. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go with Fly if...&lt;/strong&gt;&lt;br&gt;
You love simplicity, and you're not at the point of scaling. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(Bonus) Go with GitHub Pages if...&lt;/strong&gt; &lt;br&gt;
You have no plans to commercialize your project and only need a simple static hosting site. &lt;/p&gt;

&lt;h2&gt;
  
  
  What to do next
&lt;/h2&gt;

&lt;p&gt;We hope this blog gave you a better idea of which PaaS might be suitable for your React project. &lt;/p&gt;

&lt;p&gt;With that, here are some next steps: &lt;/p&gt;

&lt;p&gt;Create an account with the PaaS of your choice.&lt;/p&gt;

&lt;p&gt;Deploy your app using these get started documentation: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.netlify.com/get-started/"&gt;Get Started with Neflify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://vercel.com/docs/concepts/get-started"&gt;Get Started with Vercel&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.googleadservices.com/pagead/aclk?sa=L&amp;amp;ai=CW5uYnM0pY6PaDIqWogbUuK-4CoeD9cFsrIigi9IP35z5ieovCAAQASC5VGDJ5piN7KSAEKABj8CR-wLIAQHIA9ggqgReT9Arg1XS5Ohyqu7o04Fl3OT7crgBkYAz68MyT8NOY4n2dWwbIviBzMkeUgDuhMce45xFcgXKQVOKk9pkvKpgRVwhVzKWu1rOkDs0ERfdIOG9SA0XXBtJYx7Pt8khz8AEpdiog_UDgAWQTogFkZz-9z3ABQSgBmaAB9m_7oQBiAcBkAcBqAemvhuoB7masQKoB_PRG6gH7tIbqAf_nLECqAfK3BuoB4-psQKoB9imsQKgCLzopQSwCAHACAHSCAwQAiCEATICg0A6AQCaCS9odHRwczovL2F3cy5hbWF6b24uY29tL2FtcGxpZnkvZ2V0dGluZy1zdGFydGVkL7EJmLNY5vNbTxG5CeHDDRyxuffc-AkBigqhAmh0dHBzOi8vcGl4ZWwuZXZlcmVzdHRlY2gubmV0LzQ0MjIvY3E_ZXZfc2lkPTMmZXZfbG49YW1hem9uJTIwYW1wbGlmeSZldl9seD1rd2QtMTY0MzM4MjcyMjE0MyZldl9jcng9NTg4OTcxMTM4MzU5JmV2X210PXAmZXZfbj1nJmV2X2x0eD1zbCUzQUdldCtTdGFydGVkK1dpdGgrQW1wbGlmeSZldl9wbD0mZXZfcG9zPSZldl9kdmM9YyZldl9kdm09JmV2X3BoeT05MDA4MTg4JmV2X2xvYz0mZXZfY3g9MTY2MjYxOTE4ODkmZXZfYXg9MTM0NDkzMTIxNTczJmV2X2VmaWQ9e2djbGlkfTpHOnMmdXJsPXtscHVybH2YCwHaCwsIHxDBi_2RhgEYAeALAaoMAggBuAwB6AwGghQSCAISDmFtYXpvbiBhbXBsaWZ5iBQFyBSn25_5nZ6sozHQFQH4FgGAFwGSFwgSBggBEAMYZw&amp;amp;ae=2&amp;amp;ved=2ahUKEwim_OzsyaP6AhViElkFHdo8AjcQqyQoAHoECAIQBQ&amp;amp;nis=8&amp;amp;dct=1&amp;amp;cid=CAASFORoyDiIbBc-6d6SGtm7LM01Oupo&amp;amp;dblrd=1&amp;amp;sival=AF15MECOhlsN9b19iUeY1aAEazH-BTv4Gv9zA1-fcGfBFrFlLHqjqAGIgGh_aCUoMjibzfwjdOZY5zBDkQFwKJ--LjA3hVPvU41xfdamyVv4yReqQMJdN8lUcxB5AqGdIiJDpVnPRMR0qsaeGUkn2yZ_t8QzGRi1Fi830pXHuZnuECjD2Qi4BOU8PqE_BiAYZfWZu7Cw66H3&amp;amp;sig=AOD64_1QPnkET8ZsFSgz4Hw_jM-QhcbiPQ&amp;amp;adurl=https://aws.amazon.com/amplify/getting-started/%3Ftrk%3D41731cf6-f5eb-4611-81ef-f2914ec706b5%26sc_channel%3Dps%26s_kwcid%3DAL!4422!3!588971138359!p!!g!!amazon%2520amplify%26ef_id%3D%7Bgclid%7D:G:s%26s_kwcid%3DAL!4422!3!588971138359!p!!g!!amazon%2520amplify"&gt;Get Started with AWS Amplify &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/pages/get-started/"&gt;Get Started With Coudflare pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://render.com/docs"&gt;Get Started with Render&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://fly.io/"&gt;Get Started with Fly&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/pages"&gt;Get Started with GitHub Pages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Implement an error-monitoring system like &lt;a href="https://www.airbrake.io"&gt;Airbrake Error and Performance Monitoring&lt;/a&gt; to catch errors while you're deploying your project&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>An Interview with Chris Cummer, WTFUtil</title>
      <dc:creator>Airbrake.io</dc:creator>
      <pubDate>Tue, 26 Apr 2022 19:21:16 +0000</pubDate>
      <link>https://dev.to/airbrake/an-interview-with-chris-cummer-wtfutil-134g</link>
      <guid>https://dev.to/airbrake/an-interview-with-chris-cummer-wtfutil-134g</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zeQwSYT5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8s4tuxzrzz52qj3ig6k5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zeQwSYT5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8s4tuxzrzz52qj3ig6k5.png" alt="Image description" width="880" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;WTFUtil (also known as WTF) is a personal information dashboard that allows you to monitor your systems, services, and other important information from your terminal. With over 13,000 stargazers and over 150 contributors on GitHub, it's a popular open-source project among Golang developers and DevOps.&lt;/p&gt;

&lt;p&gt;Airbrake interviewed the creator of WTFUtil, Chris Cummer, about WTF’s success.&lt;/p&gt;

&lt;p&gt;Read the full interview &lt;a href="////bit.ly/3KhZbg3"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>go</category>
      <category>devops</category>
    </item>
    <item>
      <title>Some New Software Error Trends Based on Airbrake's 2022 Error Data Report</title>
      <dc:creator>Airbrake.io</dc:creator>
      <pubDate>Thu, 03 Mar 2022 16:28:01 +0000</pubDate>
      <link>https://dev.to/airbrake/airbrake-identifies-most-common-software-error-trends-in-new-research-report-40h5</link>
      <guid>https://dev.to/airbrake/airbrake-identifies-most-common-software-error-trends-in-new-research-report-40h5</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OKp4H0kJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1byk6kwhgpys8xqze4lg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OKp4H0kJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1byk6kwhgpys8xqze4lg.png" alt="Image description" width="880" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The 2022 Airbrake Error Data Report dives into error trends based on nearly 2 billion occurrences from over 12,000 Airbrake projects.&lt;/p&gt;

&lt;p&gt;Some trends we have discovered based on our data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Around 5% of all projects produce multiple thousands of errors every month &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One-third of all software projects fix their errors in less than 2 weeks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;75.7% of all Java projects contain java.lang.NullPointerException&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;57% of all Golang Projects contain *errors.errorString&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;53.3% of all Ruby projects contain *NoMethodError&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;28.3% of all Python projects contain a ConnectionError&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;19.3% of all JavaScript projects contain a SecurityError&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read the full report here: &lt;a href="https://airbrake.io/blog/2022-airbrake-error-data-report?utm_medium=socials&amp;amp;utm_source=dev.to&amp;amp;utm_content=airbrake-error-report-webpage&amp;amp;utm_campaign=2022-error-report"&gt;https://airbrake.io/blog/2022-airbrake-error-data-report&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>news</category>
    </item>
  </channel>
</rss>
