<?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: Anthony</title>
    <description>The latest articles on DEV Community by Anthony (@anthonyjdella).</description>
    <link>https://dev.to/anthonyjdella</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%2F733817%2F32b6001e-0ecb-4a24-bfa4-bc54b73f219a.png</url>
      <title>DEV Community: Anthony</title>
      <link>https://dev.to/anthonyjdella</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anthonyjdella"/>
    <language>en</language>
    <item>
      <title>Data is like Radioactive Material! ☢️</title>
      <dc:creator>Anthony</dc:creator>
      <pubDate>Thu, 03 Nov 2022 16:44:07 +0000</pubDate>
      <link>https://dev.to/anthonyjdella/data-is-like-radioactive-material-5aa5</link>
      <guid>https://dev.to/anthonyjdella/data-is-like-radioactive-material-5aa5</guid>
      <description>&lt;p&gt;&lt;em&gt;Think of handling personal data like handling radioactive material.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Leaks
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgdhybykht1zunmf36zz0.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgdhybykht1zunmf36zz0.jpeg" alt="Image description" width="750" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’ve got people moving it around all over the place, that increases the chance of them to leak that material. The same thing applies to personal data. &lt;strong&gt;Try not to move it around too much because you run the risk of data leaks&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disposal
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb5wng93qrqqcsd2uehdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb5wng93qrqqcsd2uehdg.png" alt="Image description" width="498" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, think about how you’re going to dispose of that radioactive material. You’re not just going to throw it away in a trash can, &lt;strong&gt;you need to dispose of it with care&lt;/strong&gt;. The same goes for sensitive data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stockpiling
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9q6nfltko3e8kbe2s1t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9q6nfltko3e8kbe2s1t.png" alt="Image description" width="600" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don’t just gather as much radioactive material as possible. Stockpiling that is a huge risk! The same goes for data. You shouldn’t just be collecting large amounts of data, &lt;strong&gt;only collect what you need&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handle with Care
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8tfm0ljl5pd5w0tac07.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8tfm0ljl5pd5w0tac07.png" alt="Image description" width="200" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, you wouldn’t want any Jane or Joe handling that radioactive material, you need someone who is trained and experienced to handle it. The same applies to your organization. &lt;strong&gt;Have trained professionals working with that data&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>data</category>
      <category>security</category>
      <category>career</category>
    </item>
    <item>
      <title>Why you should use a developer font</title>
      <dc:creator>Anthony</dc:creator>
      <pubDate>Fri, 28 Jan 2022 06:54:46 +0000</pubDate>
      <link>https://dev.to/anthonyjdella/why-you-should-use-a-developer-font-2gio</link>
      <guid>https://dev.to/anthonyjdella/why-you-should-use-a-developer-font-2gio</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TLDR:&lt;/strong&gt; Developers, the fonts that you use matter! They help you find bugs and lessen eye strain.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why do Fonts Matter?
&lt;/h2&gt;

&lt;p&gt;Did you know that there's a whole industry revolved around fonts? Typeface and typography are some terms used in this space, and their goals are to design fonts/letters to improve experiences or give products identity. As developers, we look at code all day long. Shouldn't we try to improve that experience, so that we can be more productive? Well, there are many fonts out there that do just that! Some popular ones include Fira Code, Source Code Pro, Jetbrains Mono, and Ubuntu Mono. But these are just a few, there are tons more.&lt;/p&gt;

&lt;p&gt;Here are some reasons why picking the right font will help you, as a developer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Easily find typos.&lt;/li&gt;
&lt;li&gt;Quickly find variables and functions.&lt;/li&gt;
&lt;li&gt;Identify programming-specific characters.&lt;/li&gt;
&lt;li&gt;Reduce eye strain.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Plus, they just look cool, and who doesn't like that? 🤣&lt;/p&gt;




&lt;h2&gt;
  
  
  Differences Between Normal Fonts
&lt;/h2&gt;

&lt;p&gt;Fonts for programmers are designed with programmers in mind. The philosophy behind these ideas differ amongst typefaces, but they aim to do the same thing: improve the developer experience.&lt;/p&gt;

&lt;p&gt;Let me go into some details about the font: &lt;strong&gt;Jetbrains Mono&lt;/strong&gt;, my current font of choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jetbrains Mono&lt;/strong&gt; has the following features:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Increased font height, so code is easier to read.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How does this help? Well, a more readable font will help you find typos because you can easily identify each character you type. And no more squinting! You're eye's will be much less strained since you don't need to squint anymore.&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;2. Ligatures which help you identify special characters used in programming.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Take a look at what I mean from the images below. Notice how arrow functions go from =&amp;gt; to an actual arrow. This makes special characters stand out and look how they should.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OFF&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;ON&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;3. Each character is distinct.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm sure you've experienced something like this. You look at a character and wonder if its a capital I or a lowercase l. They look the same with a lot of standard fonts (like this one that I'm using for my blog!).&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;4. Letters flow vertically&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When we code, we do a lot of vertical scrolling and, in tern, a lot of vertical reading. Jetbrains Mono is designed to be super legible and flow vertically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1643353000026%2FCAVo5oM5-.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1643353000026%2FCAVo5oM5-.gif" alt="font-eyes.gif"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;MonoLisa&lt;/strong&gt; is another popular dev font. Part of their design philosophy includes horizontal flow, so each character flows to the right, making horizontal reading much smoother.&lt;/p&gt;

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

&lt;p&gt;MonoLisa also has a wider font, which makes your code less condensed and easier to read.&lt;/p&gt;

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




&lt;h2&gt;
  
  
  Test Them Out Yourself!
&lt;/h2&gt;

&lt;p&gt;If you're not sure which font will work best for you, check out this &lt;a href="https://coding-fonts.css-tricks.com/fonts/jetbrains-mono/?theme=dark&amp;amp;language=js" rel="noopener noreferrer"&gt;font playground&lt;/a&gt;. You'll be able to select from a bunch of different fonts to try out.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;If you're a developer, I highly recommend downloading some programming fonts and see what works best for you. They can improve your workflow by reading code more easily. And you'll have less eye strain since everything's more legible.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;For more information:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.jetbrains.com/lp/mono/" rel="noopener noreferrer"&gt;Jetbrains Mono font&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.monolisa.dev/" rel="noopener noreferrer"&gt;MonoLisa font&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coding-fonts.css-tricks.com/fonts/jetbrains-mono/?theme=dark&amp;amp;language=js" rel="noopener noreferrer"&gt;Font Playground&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Thanks for reading!&lt;br&gt;
Consider following me for more!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.anthonydellavecchia.com/" rel="noopener noreferrer"&gt;My Blog&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/anthonyjdella" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/anthonyjdella"&gt;Dev Community&lt;/a&gt;&lt;br&gt;
&lt;a href="https://hashnode.com/" rel="noopener noreferrer"&gt;HashNode&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/@anthonyjdella" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Keep your Social Media Avatars up to Date</title>
      <dc:creator>Anthony</dc:creator>
      <pubDate>Wed, 19 Jan 2022 23:54:46 +0000</pubDate>
      <link>https://dev.to/anthonyjdella/keep-your-social-media-avatars-up-to-date-fk9</link>
      <guid>https://dev.to/anthonyjdella/keep-your-social-media-avatars-up-to-date-fk9</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TLDR:&lt;/strong&gt; Refreshed my outdated avatar, which I use for social media.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  New Avatar
&lt;/h2&gt;

&lt;p&gt;Since I use an illustrative self-portrait for my social media handles, it's sometimes hard for people to tell what I really look like IRL. Originally, I made my avatar back in 2018 or 2019. But since then, I have a different hairstyle. It's important to make your profile picture (regardless of medium) look like you as much as possible.&lt;/p&gt;

&lt;p&gt;The original avatar was made in Photoshop, so the scaling doesn't work well since Photoshop is pixel based. I converted it to a vector image, and edited it in Illustrator so it scales to any image size (in SVG).&lt;/p&gt;

&lt;p&gt;So here's my new avatar to match my curly hair:&lt;/p&gt;

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




&lt;h2&gt;
  
  
  Design Process
&lt;/h2&gt;

&lt;p&gt;This highlights the vector changes I made in this iteration (using Illustrator).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zd5w38srkx82h4397fu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zd5w38srkx82h4397fu.png" alt="Image description" width="800" height="948"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Old Avatar
&lt;/h2&gt;

&lt;p&gt;And this is what my original avatar looked like (with my 2019 hair):&lt;/p&gt;

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




&lt;p&gt;Thanks for reading!&lt;br&gt;
Consider following me for more!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.anthonydellavecchia.com/"&gt;My Blog&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/anthonyjdella"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/anthonyjdella"&gt;Dev Community&lt;/a&gt;&lt;br&gt;
&lt;a href="https://hashnode.com/"&gt;HashNode&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/@anthonyjdella"&gt;Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>design</category>
      <category>branding</category>
      <category>ui</category>
      <category>logo</category>
    </item>
    <item>
      <title>MongoDB with Django</title>
      <dc:creator>Anthony</dc:creator>
      <pubDate>Tue, 18 Jan 2022 05:21:38 +0000</pubDate>
      <link>https://dev.to/anthonyjdella/mongodb-with-django-472d</link>
      <guid>https://dev.to/anthonyjdella/mongodb-with-django-472d</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TLDR:&lt;/strong&gt; Django doesn't support NoSQL databases like MongoDB, but this shows how it's possible.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Virtual Environments in Python
&lt;/h1&gt;

&lt;p&gt;Before installing Django, its good to understand &lt;code&gt;venv&lt;/code&gt;, a virtual environment for Python. &lt;code&gt;venv&lt;/code&gt; is a self-contained directory that has the Python installation plus external packages. Think of it as any other virtual environment. They should &lt;strong&gt;NOT&lt;/strong&gt; be committed to your repo (you can put it outside the directory or just add it to &lt;code&gt;.gitignore&lt;/code&gt;)!&lt;/p&gt;

&lt;p&gt;Create a &lt;code&gt;venv&lt;/code&gt; with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m venv name-of-virtual-env-directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create the &lt;code&gt;name-of-virtual-env-directory&lt;/code&gt; as well as the Python installation and any packages your project needs.&lt;/p&gt;

&lt;p&gt;A best practice for handling virtual environments is to store them all in the same place. So, you might want to store them in your home directory or wherever your Git repos are stored. i.e.:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m venv ~/.virtualenvs/project-virtual-env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that, you can activate the virtual environment with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source ~./virtualenvs/project-virtual-env/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Anytime you install a package with &lt;code&gt;pip&lt;/code&gt;, it will be installed in the active virtual environment you're in.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gives a list of all the installed packages within the &lt;strong&gt;venv&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After installing dependencies into the virtual environment, make sure to deactivate it when you're done. Use command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;deactivate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;pip freeze&lt;/code&gt; is similar to &lt;code&gt;pip list&lt;/code&gt;, but it also give specific version numbers. Copy the contents of that list into a &lt;code&gt;reqirements.txt&lt;/code&gt; file (which is committed into version control AKA Git). Then, when a user clones your project, they run the following, to install all of the project dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Think of &lt;code&gt;requirements.tx&lt;/code&gt; as &lt;code&gt;package.json&lt;/code&gt; used in NPM.&lt;/p&gt;

&lt;p&gt;| Another option: &lt;strong&gt;virtualenv&lt;/strong&gt; is an even more popular option than &lt;strong&gt;venv&lt;/strong&gt;. Look into using it &lt;a href="https://pypi.org/project/virtualenv/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  MongoDB
&lt;/h1&gt;

&lt;p&gt;MongoDB is a NoSQL, non-relational, schema-less, document-based database. Document-based means that the data is stored in key-value pairs, think about JSON. Check out the table below for a comparison between SQL and NoSQL.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;SQL&lt;/th&gt;
&lt;th&gt;NoSQL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;td&gt;Table based databases&lt;/td&gt;
&lt;td&gt;Document based, like key-value pairs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schema&lt;/td&gt;
&lt;td&gt;Uses a schema&lt;/td&gt;
&lt;td&gt;No need for a schema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scaling&lt;/td&gt;
&lt;td&gt;Not preferred (vertical)&lt;/td&gt;
&lt;td&gt;Preferred for scaling (horizontal)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ACID&lt;/td&gt;
&lt;td&gt;Best for &lt;a href="https://www.geeksforgeeks.org/acid-properties-in-dbms/"&gt;ACID properties&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Not ACID compliant&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnow2astqvmgaypp9b0ed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnow2astqvmgaypp9b0ed.png" alt="Image description" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This shows how you need to create a schema with relational databases, and how it's not needed in MongoDB.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Django
&lt;/h1&gt;

&lt;p&gt;MongoDB isn't officially supported by Django, a popular web framework with Python. PostresSQL, MySQL, Oracle, and SQLite are. But it is possible to do this per the &lt;a href="https://www.mongodb.com/compatibility/mongodb-and-django"&gt;MongoDB docs&lt;/a&gt;. This is because, usually, you'll want to use a relational database with Django. &lt;/p&gt;

&lt;p&gt;Flask is another popular web framework in Python. It's a better choice to use with NoSql databases. You can also use &lt;a href="https://github.com/django-nonrel/mongodb-engine"&gt;django-nonrel&lt;/a&gt;, which is a community fork to add NoSQL support to Django. However, it is not supported and uses an old Django version.&lt;/p&gt;

&lt;p&gt;There are 3 options to connect to MongoDB with Django. &lt;strong&gt;Pymongo, MongoEngine, and Djongo&lt;/strong&gt;. But by using &lt;strong&gt;PyMongo&lt;/strong&gt;, a driver, you can connect MongoDB and Django. Instructions for this are in the subsequent section.&lt;/p&gt;

&lt;p&gt;After activating the virtual env (from above), installing &lt;a href="https://docs.djangoproject.com/en/4.0/topics/install/#installing-official-release"&gt;Django&lt;/a&gt; can be done with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -m install Django
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;View the Django version with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -m django --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;cd&lt;/code&gt; into a directory and enter the command to create a project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;django-admin startproject name-of-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To start the server &amp;amp; application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python manage.py runserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Earlier, we created a project named &lt;code&gt;name-of-project&lt;/code&gt;. We can also create apps within the project. Projects can have multiple apps (think of apps as modules). Use this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python manage.py startapp name-of-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Directory&lt;/th&gt;
&lt;th&gt;Summary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;name-of-project&lt;/td&gt;
&lt;td&gt;The root directory (can be named anything)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;  » manage.py&lt;/td&gt;
&lt;td&gt;CLI utility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;  » name-of-project&lt;/td&gt;
&lt;td&gt;Directory for the Python package (e.g. name-of-project.settings)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    » &lt;strong&gt;init&lt;/strong&gt;.py&lt;/td&gt;
&lt;td&gt;Tells Python this directory is a package&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    » settings.py&lt;/td&gt;
&lt;td&gt;Settings for Django&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    » urls.py&lt;/td&gt;
&lt;td&gt;Table of contents and URL routing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    » asgi.py&lt;/td&gt;
&lt;td&gt;Entry-point for ASGI web servers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    » wsgi.py&lt;/td&gt;
&lt;td&gt;Entry-point for WSGI web servers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  PyMongo
&lt;/h1&gt;

&lt;p&gt;According to &lt;a href="https://www.mongodb.com/compatibility/mongodb-and-django"&gt;MongoDB docs&lt;/a&gt;, &lt;strong&gt;Pymongo&lt;/strong&gt; is the preferred way to use MongoDB with Django. But as mentioned above, there are some other options using &lt;strong&gt;MongoEngine&lt;/strong&gt; and &lt;strong&gt;Djongo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Install &lt;strong&gt;PyMongo&lt;/strong&gt; with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m pip install pymongo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For installation with MongoDB, it might be good to install some optional dependencies with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install pymongo[snappy,gssapi,srv,tls]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As well as this (for using mongodb+srv://):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install dnspython
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There's a couple of ways to connect to our database session. One of which involves creating a &lt;code&gt;utils.py&lt;/code&gt; file in the PROJECT folder (where &lt;code&gt;manage.py&lt;/code&gt; is).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from pymongo import MongoClient

def get_db_handle(db_name, host, port, username, password):

 client = MongoClient(host=host,
                      port=int(port),
                      username=username,
                      password=password
                     )
    db_handle = client['db_name']
 return db_handle, client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Use env variables to hide the username and password from being exposed. That's out of scope of this tutorial, but if you have questions, just ask.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then, in the &lt;code&gt;app&lt;/code&gt; directory, find &lt;code&gt;views.py&lt;/code&gt;. From here, the function &lt;code&gt;get_db_handle()&lt;/code&gt; can be accessed. &lt;/p&gt;

&lt;p&gt;Now, our MongoDB client is connected! If you'd like to check out how to set this up with MongoEngine or Djongo, just check out this &lt;a href="https://www.mongodb.com/compatibility/mongodb-and-django"&gt;tutorial&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;For more information:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/tutorial/venv.html"&gt;Virtual Environments in Python using venv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/virtualenv/"&gt;Virtual Environments in Python using virtualenv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.djangoproject.com/en/4.0/topics/install/#installing-official-release"&gt;Installing Django&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.djangoproject.com/en/4.0/intro/tutorial01/"&gt;Django Tutorial 1-7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.djangoproject.com/en/4.0/misc/design-philosophies/"&gt;Django Design Philosophies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pymongo.readthedocs.io/en/stable/"&gt;PyMongo Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mongoengine.org/"&gt;MongoEngine Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Thanks for reading!&lt;br&gt;
Consider following me for more!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.anthonydellavecchia.com/"&gt;My Blog&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/anthonyjdella"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://hashnode.com/"&gt;HashNode&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/@anthonyjdella"&gt;Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>django</category>
      <category>python</category>
      <category>database</category>
    </item>
    <item>
      <title>Bat Tracker - MongoDB Atlas Hackathon Submission</title>
      <dc:creator>Anthony</dc:creator>
      <pubDate>Fri, 14 Jan 2022 06:12:48 +0000</pubDate>
      <link>https://dev.to/anthonyjdella/bat-tracker-mongodb-atlas-time-series-5df2</link>
      <guid>https://dev.to/anthonyjdella/bat-tracker-mongodb-atlas-time-series-5df2</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zfb8apnvs4wtwxbg50t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zfb8apnvs4wtwxbg50t.jpg" alt="Image description" width="243" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TRACK BAT LOCATION MOVEMENTS OVER TIME&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.movebank.org/cms/movebank-main"&gt;Movebank&lt;/a&gt;, is a public database, where scientists track animal movements by attaching a GPS device to the animal. Based on a certain frequencies, that data is recorded by the device and stored in the database.&lt;/p&gt;

&lt;p&gt;There is a public API which gets this data, so developers can use it in various projects.&lt;/p&gt;

&lt;p&gt;My idea for this was to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get European free-tailed bat tracking data from Movebank's API.&lt;/li&gt;
&lt;li&gt;Store that data in MongoDB.&lt;/li&gt;
&lt;li&gt;Convert it to Time Series data.&lt;/li&gt;
&lt;li&gt;Display that data on a Map to track their movement history.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Unfortunately, I saw this Hackathon only a few days before the due date and did not have enough time to complete my idea. But I am submitting it as is. I may want to complete it in the future.&lt;/p&gt;

&lt;p&gt;What I completed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅  Get European free-trailed bat tracking data from Movebank's API&lt;/li&gt;
&lt;li&gt;✅  Store that data in MongoDB.&lt;/li&gt;
&lt;li&gt;⛔ Convert it to Time Series data.&lt;/li&gt;
&lt;li&gt;⛔ Display that data on a Map to track their movement history.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Prime Time with Atlas Time Series&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2lc7j3h4urpq53xfu13.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2lc7j3h4urpq53xfu13.jpg" alt="Image description" width="800" height="170"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp48hsjg810t3vwsduvj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp48hsjg810t3vwsduvj0.png" alt="Image description" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/anthonyjdella"&gt;
        anthonyjdella
      &lt;/a&gt; / &lt;a href="https://github.com/anthonyjdella/atlas-hackathon-time-series"&gt;
        atlas-hackathon-time-series
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      💚 My submission for the Atlas Hackathon sponsored by MongoDB. This is a Time Series app.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Bat Tracker&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/anthonyjdella/atlas-hackathon-time-series/bat.jpg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zotSzzhJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/anthonyjdella/atlas-hackathon-time-series/bat.jpg" alt="bat-tracker"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;MongoDB Atlas Hackathon Time Series&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;💚 This is my submission for the &lt;a href="https://dev.to/devteam/announcing-the-mongodb-atlas-hackathon-on-dev-4b6m" rel="nofollow"&gt;MongoDB Atlas Hackathon&lt;/a&gt; on DEV. The category is "Prime Time" for &lt;a href="https://github.com/anthonyjdella/atlas-hackathon-time-seriesv"&gt;Time Series Collections&lt;/a&gt;. You can view my submission &lt;a href="https://dev.to/anthonyjdella/bat-tracker-mongodb-atlas-time-series-5df2" rel="nofollow"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Disclaimer&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;For this project, I wanted to work with technologies that I've never used. These were Django and MongoDB.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;About&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://www.movebank.org/cms/movebank-main" rel="nofollow"&gt;Movebank&lt;/a&gt;, is a public database, where scientists track animal movements by attaching a GPS device to the animal. Based on a certain frequencies, that data is recorded by the device and stored in the database.&lt;/p&gt;
&lt;p&gt;There is a public API which gets this data, so developers can use it in various projects.&lt;/p&gt;
&lt;p&gt;My idea for this was to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Get European free-tailed bat tracking data from Movebank's API.&lt;/li&gt;
&lt;li&gt;Store that data in MongoDB.&lt;/li&gt;
&lt;li&gt;Convert it to Time Series data.&lt;/li&gt;
&lt;li&gt;Display that data on a Map to track their movement history.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Incomplete&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Unfortunately, I saw…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/anthonyjdella/atlas-hackathon-time-series"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A helpful guide:&lt;br&gt;
&lt;a href="https://www.mongodb.com/features/mongodb-time-series-data"&gt;https://www.mongodb.com/features/mongodb-time-series-data&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tutorial for inserting data using &lt;code&gt;PyMongo&lt;/code&gt;:&lt;br&gt;
&lt;a href="https://kb.objectrocket.com/mongo-db/how-to-bulk-insert-multiple-documents-to-a-mongodb-collection-using-python-352"&gt;https://kb.objectrocket.com/mongo-db/how-to-bulk-insert-multiple-documents-to-a-mongodb-collection-using-python-352&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Referencing this MongoDB PyMongo Guide on Github:&lt;br&gt;
&lt;a href="https://github.com/mongodb-developer/django-pymongo"&gt;https://github.com/mongodb-developer/django-pymongo&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Movebank Study where I got the Data:&lt;br&gt;
&lt;a href="https://www.movebank.org/cms/webapp?gwt_fragment=page=studies,path=study312057662"&gt;https://www.movebank.org/cms/webapp?gwt_fragment=page=studies,path=study312057662&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Movebank API:&lt;br&gt;
&lt;a href="https://github.com/movebank/movebank-api-doc"&gt;https://github.com/movebank/movebank-api-doc&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to Migrate Data into a Time Series Collection:&lt;br&gt;
&lt;a href="https://docs.mongodb.com/manual/core/timeseries/timeseries-migrate-data-into-timeseries-collection/"&gt;https://docs.mongodb.com/manual/core/timeseries/timeseries-migrate-data-into-timeseries-collection/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To install MongoDB Shell and login: &lt;a href="https://docs.mongodb.com/mongodb-shell/"&gt;https://docs.mongodb.com/mongodb-shell/&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mongosh mongodb+srv://USER:PASS@cluster0.9ptvo.mongodb.net/Bat_DB?retryWrites=true&amp;amp;w=majority
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;To install MongoDB Community Edition 5.0: &lt;a href="https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/#install-mongodb-community-edition"&gt;https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/#install-mongodb-community-edition&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew tap mongodb/brew
brew install mongodb-community@5.0

brew services stop mongodb-community@5.0

brew services list

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;To download and configure MongoDB CLI: &lt;a href="https://docs.mongodb.com/mongocli/master/configure/#std-label-mcli-configure"&gt;https://docs.mongodb.com/mongocli/master/configure/#std-label-mcli-configure&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mongocli config describe default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;To connect to a Remote Host: &lt;a href="https://docs.mongodb.com/mongodb-shell/connect/#mongodb-instance-on-a-remote-host"&gt;https://docs.mongodb.com/mongodb-shell/connect/#mongodb-instance-on-a-remote-host&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; mongosh "mongodb+srv://USER:PASS@cluster0.9ptvo.mongodb.net/Bat_DB?retryWrites=true&amp;amp;w=majority"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thanks for sponsoring this great Hackathon! Although my submission is incomplete, I learned a lot.&lt;/p&gt;

</description>
      <category>atlashackathon</category>
    </item>
    <item>
      <title>How a Rogue Developer Ruined Millions of Software (happened this weekend)</title>
      <dc:creator>Anthony</dc:creator>
      <pubDate>Mon, 10 Jan 2022 05:27:31 +0000</pubDate>
      <link>https://dev.to/anthonyjdella/how-a-rogue-developer-ruined-millions-of-software-happened-this-weekend-4bp</link>
      <guid>https://dev.to/anthonyjdella/how-a-rogue-developer-ruined-millions-of-software-happened-this-weekend-4bp</guid>
      <description>&lt;h3&gt;
  
  
  TLDR: A software developer who made some highly used open source software, decided to go rogue and inject a bug into his software, making it usable. This affected every other dependency (and developer) using his software.
&lt;/h3&gt;




&lt;h4&gt;
  
  
  Bug Breaks my Software Deployment
&lt;/h4&gt;

&lt;p&gt;Over the weekend, I was deploying some software (to Firebase) with CI/CD pipelines. But for some reason, the pipelines were failing. The failure occurred at this stage of my GitHub Actions workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    - uses: FirebaseExtended/action-hosting-deploy@v0
    with:
        repoToken: '${{ secrets.GITHUB_TOKEN }}'
        firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_ANTHONYDELLAVECCHIA }}'
        channelId: live
        projectId: anthonydellavecchia
        entryPoint: "./anthonyjdella"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the visual representation of my failed pipeline:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmohnv7zjt6ng88pka384.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmohnv7zjt6ng88pka384.png" alt="Image description" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I then went over to the Firebase Extended &lt;a href="https://github.com/FirebaseExtended/action-hosting-deploy"&gt;Github repo&lt;/a&gt; to see if anyone else was having similar issues. And yep, many others were experiencing the same issue:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwndfu71am50zat0vimz9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwndfu71am50zat0vimz9.png" alt="Image description" width="800" height="776"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://github.com/FirebaseExtended/action-hosting-deploy/issues/188"&gt;(link)&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  Rogue Developer, Marak
&lt;/h4&gt;

&lt;p&gt;Well, it turns out, &lt;code&gt;Action-hosting-deploy&lt;/code&gt; was using a dependency called &lt;code&gt;colors&lt;/code&gt;, created by &lt;a href="https://github.com/Marak"&gt;Marak&lt;/a&gt; (the rogue developer), which is a tool that colors and styles your node.js console. This npm package gets over 20 million downloads per week, so its very popular! The dependency tree for this GitHub action looks something like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Action-hosting-deploy

&lt;ul&gt;
&lt;li&gt;Firebase-tools

&lt;ul&gt;
&lt;li&gt;cli-table

&lt;ul&gt;
&lt;li&gt;colors (subdependancy which is causing the issue)&lt;/li&gt;
&lt;/ul&gt;


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

&lt;ul&gt;
&lt;li&gt;logform

&lt;ul&gt;
&lt;li&gt;colors (subdependancy which is causing the issue)&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;So what? Well, &lt;code&gt;Marak&lt;/code&gt;, the creator of &lt;code&gt;colors&lt;/code&gt; (mentioned above) added some code into his project to purposely break it. &lt;strong&gt;He added an infinite loop to purposely break his code!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft4x522wtes0mmvzu5l0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft4x522wtes0mmvzu5l0f.png" alt="Image description" width="800" height="674"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Marak/colors.js/commit/074a0f8ed0c31c35d13d28632bd8a049ff136fb6"&gt;(link to Marak's evil commit)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is very much intentional and not an accidental bug. It was malicious.&lt;/strong&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  Why is Breaking his own Software Bad?
&lt;/h4&gt;

&lt;p&gt;You may be wondering why breaking his own software is bad? Well, Marak knows that his software is being used by other software. So if his breaks, so will theirs. Think of it as a chain reaction. If his breaks, other software that uses it will break too. Because of &lt;a href="https://en.wikipedia.org/wiki/Dependency_hell"&gt;"dependency hell"&lt;/a&gt;, this affects millions of developers.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why Did Marak Do This?
&lt;/h4&gt;

&lt;p&gt;Marak was upset that corporations were using his open-source software and not paying for it. It's basically that simple. He posted an &lt;a href="https://web.archive.org/web/20210628030444/https://marak.com/blog/2021-04-25-monetizing-open-source-is-problematic"&gt;article on his blog&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  How Do You Fix It?
&lt;/h4&gt;

&lt;p&gt;If your software was using &lt;code&gt;colors&lt;/code&gt;, you would have to revert to the previous (non-broken) version. But because of this developer's poor work, you should definitely use another package instead. &lt;a href="https://github.com/chalk/chalk"&gt;Chalk&lt;/a&gt; is another alternative that is recommended.&lt;/p&gt;

&lt;p&gt;It's really important to have a dependency management system in place for your projects. Tools like &lt;a href="https://snyk.io/"&gt;Snyk&lt;/a&gt;, or &lt;a href="https://www.sonarqube.org/"&gt;SonarQube&lt;/a&gt; will help you detect dependency issues so you can quickly resolve them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For more information:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://snyk.io/blog/open-source-maintainer-pulls-the-plug-on-npm-packages-colors-and-faker-now-what/"&gt;https://snyk.io/blog/open-source-maintainer-pulls-the-plug-on-npm-packages-colors-and-faker-now-what/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/"&gt;https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Thanks for reading! 🙌&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For more of my articles, check out (anthonydellavecchia.com)[&lt;a href="https://anthonydellavecchia.com"&gt;https://anthonydellavecchia.com&lt;/a&gt;]!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>npm</category>
      <category>devops</category>
      <category>security</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Add Search to Hugo Static Sites</title>
      <dc:creator>Anthony</dc:creator>
      <pubDate>Sat, 08 Jan 2022 23:59:38 +0000</pubDate>
      <link>https://dev.to/anthonyjdella/how-to-add-search-to-hugo-static-sites-58ke</link>
      <guid>https://dev.to/anthonyjdella/how-to-add-search-to-hugo-static-sites-58ke</guid>
      <description>&lt;p&gt;&lt;strong&gt;TLDR: This tutorial explains how to add search functionality to your Hugo Website&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After writing multiple &lt;a href="https://anthonydellavecchia.com/blog"&gt;blog posts&lt;/a&gt;, I quickly realized that more pages meant more clutter. If someone wants to find a post, they'd have to manually search for it by digging through each page. Imagine if I have 10 pages, with 6 blog posts per page. Finding an article would be difficult and a bad user experience. Adding a search bar, as well as tag filters, would fix this issue, so I did some research on how to implement this for &lt;a href="https://anthonydellavecchia.com/"&gt;my website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'm using Hugo as my static site generator and the documentation isn't the best. Their &lt;a href="https://gohugo.io/tools/search/"&gt;docs&lt;/a&gt; show multiple options for implementing search, but their explanations are pretty bad. Some options include: using native Javascript, Elasticsearch, lunr.js, etc. But I went with a third-party service, called Algolia, just because I found the documentation to be great.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;To enable searching on a static site, you need to first create a JSON search index which acts as a database for your search results. From there, you update this JSON search index each time you update/create new pages. Then, you access/query the data by using REST API's provided by Algolia. Finally, you display the results on your page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Started
&lt;/h3&gt;

&lt;p&gt;First thing to do is &lt;a href="https://www.algolia.com/users/sign_up"&gt;sign up for a free&lt;/a&gt; Algolia account (since we're using this service). Algolia is nice because they have great documentation, built-in widgets, provides fast results, and is easy to implement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generate JSON Search Index
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Configure Output to JSON
&lt;/h4&gt;

&lt;p&gt;Hugo can output content into multiple different file formats (like javascript, xml, toml, etc.). So, we want to set up our project to output JSON. Do this by configuring the &lt;code&gt;config.toml/yaml&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;config.toml&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[outputFormats.Algolia]
baseName = "algolia"
isPlainText = true
mediaType = "application/json"
notAlternative = true

[params.algolia]
vars = ["title", "summary", "date", "publishdate", "permalink"]
params = ["tags"]

[outputs]
home = ["HTML", "Algolia"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, we are creating a custom outputFormat called Algolia, which is of type JSON. We're also giving it some variables which will be used later.&lt;/p&gt;

&lt;h4&gt;
  
  
  Creating a Search Index Template
&lt;/h4&gt;

&lt;p&gt;Next, create a file which will generate the JSON search index output. This file is the template for creating our output JSON. In the &lt;code&gt;layouts/&lt;/code&gt; directory, create a file like: &lt;code&gt;search-index.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;search-index.json&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{- $.Scratch.Add "index" slice -}}

{{- range where .Site.RegularPages ".Type" "blog" -}}

    {{- $.Scratch.Add "index" (dict "objectID" .UniqueID "date" .Date.UTC.Unix "fuzzywordcount" .FuzzyWordCount "kind" .Kind "lastmod" .Lastmod.UTC.Unix "permalink" .Permalink "publishdate" .PublishDate "readingtime" .ReadingTime "relpermalink" .RelPermalink "summary" .Summary "title" .Title "type" .Type "url" .RelPermalink "wordcount" .WordCount "section" .Section "tags" .Params.Tags "authors" .Params.Authors "image" .Params.FeatureImage "writtendate" .Params.WrittenDate)}}

{{- end -}}
{{- $.Scratch.Get "index" | jsonify -}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I only want my search look for blog posts, not every static page. To do this, I loop through my pages with the type "blog". Then, I create a dictionary which contains multiple key/value pairs of the data that I want. For instance, I want the title of my blog posts, so I create a key ("title") and a value (.Title). You can scroll through the code to get an idea of how to scrape other data (like a description, date, etc).&lt;/p&gt;

&lt;h4&gt;
  
  
  Generating the JSON
&lt;/h4&gt;

&lt;p&gt;After the template is created, just re-build the project. Doing this will create a JSON file, which will be used as our search index. In my case, I have a Hugo theme called "portio". So, to build my project, I run the command &lt;code&gt;hugo -t portio&lt;/code&gt;. After running this command, I have a generated JSON file called &lt;code&gt;algolia.json&lt;/code&gt; in my build (public) directory.&lt;/p&gt;

&lt;p&gt;You can beautify this file and verify that all of the data is correctly collected. If data is null or not populated correctly, make some changes to &lt;code&gt;search-index.json&lt;/code&gt;. Make sure that you're using the correct &lt;a href="https://gohugo.io/variables/"&gt;Hugo variables&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Set up Algolia
&lt;/h3&gt;

&lt;p&gt;Now, you can head over to the ALgolia interface to create a New Application (using the free plan). Then, within that New Application, create a New Index.&lt;/p&gt;

&lt;p&gt;You'll have to jot down the Application ID, API key, and Index Name.&lt;/p&gt;

&lt;h3&gt;
  
  
  Send Search Index to Algolia
&lt;/h3&gt;

&lt;p&gt;Now that we have our search index file, we need to upload it to Algolia (so we can use their search algorithms). Using NPM, we have to install Algolia:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install atomic-algolia --save&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Within your &lt;code&gt;package.json&lt;/code&gt;, add a script called &lt;code&gt;algolia: atomic-algolia&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you run &lt;code&gt;npm run algolia&lt;/code&gt;, it won't work because Algolia doesn't know which project you're uploading this search index to. To fix this, you'll need to run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALGOLIA_APP_ID={{ YOUR_APP_ID }} ALGOLIA_ADMIN_KEY={{ YOUR_ADMIN_KEY }} ALGOLIA_INDEX_NAME={{ YOUR_INDEX NAME }} ALGOLIA_INDEX_FILE={{ PATH/TO/algolia.json }} npm run algolia
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the values of your app id, api key, etc into these brackets. Now, when you run that command, you're search index will be uploaded to Algolia! Check the Algolia interface to make sure your data is present in that service. From the UI, you can configure, manage, and view analytics related to your index.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07b8oc87vbqrdaajg9cc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07b8oc87vbqrdaajg9cc.png" alt="Image description" width="800" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also search within the Algolia UI itself to see how your search will look on your website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqf6ta32zq5aj6s9ezo4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqf6ta32zq5aj6s9ezo4.png" alt="Image description" width="800" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Displaying the Search Results
&lt;/h3&gt;

&lt;p&gt;We're going to have to write some Javascript to interact with Algolia API's to interact with our search index. First, we'll have to import Algolia as a module. Easiest way to do this is by adding node modules, but I went with embedding the scripts directly (from a CDN).&lt;/p&gt;

&lt;p&gt;To embed the modules via a CDN, I used JSDelivr, which is a large CDN for Javascript modules. Then I injected these scripts into my HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script src="https://cdn.jsdelivr.net/npm/instantsearch.js@4.37.1"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src="https://cdn.jsdelivr.net/npm/algoliasearch@4.11.0/dist/algoliasearch.umd.min.js"&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.css@7.4.5/themes/satellite-min.css" integrity="sha256-TehzF/2QvNKhGQrrNpoOb2Ck4iGZ1J/DI4pkd2oUsBc=" crossorigin="anonymous"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One of these is for a built-in theme, and the others are the modules to use Algolia search.&lt;/p&gt;

&lt;p&gt;Now, create a &lt;code&gt;search.js&lt;/code&gt; file which will interact with the Algolia API's to configure some things you'll need.&lt;/p&gt;

&lt;h4&gt;
  
  
  Initialize Search
&lt;/h4&gt;

&lt;p&gt;Start by initializing Search, by entering your index credentials.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const search = instantsearch({
    indexName: 'your-index-name',
    routing: true,
    searchClient: algoliasearch(
        'your-app-id',
        'your-api-key'
    )
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Display Results
&lt;/h4&gt;

&lt;p&gt;Go to the HTML page you want your results to be displayed. Then create an empty div which will be where your results are shown:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;div id="hits"&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Back in the &lt;code&gt;search.js&lt;/code&gt; file, we'll need to link that div to Algolia's API.&lt;/p&gt;

&lt;p&gt;Algolia is built around widgets, one of which is the Hits widget which displays all of your data results. Configure your Hits widget with the below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search.addWidget(
    instantsearch.widgets.hits({
        container: '#hits',
        templates: {
            empty: '&amp;lt;h3 style="text-align: center;"&amp;gt;No results found 😔. Search something else.&amp;lt;/h3&amp;gt;'
        }
    })
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The container finds your HTML element which we defined in our HTML above. After it finds it, it will inject the widget into that HTML. &lt;/p&gt;

&lt;p&gt;An empty template field will display whenever the search results are not found.&lt;/p&gt;

&lt;p&gt;To display the actual results, we'll need to add an item in our template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search.addWidget(
    instantsearch.widgets.hits({
        container: '#hits',
        templates: {
            empty: '&amp;lt;h3 style="text-align: center;"&amp;gt;No results found 😔. Search something else.&amp;lt;/h3&amp;gt;',
            item:
            `
            {{ range .Paginator.Pages }}
                &amp;lt;div class="image"&amp;gt;
                    &amp;lt;img src="{{ image }}"&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;div class="blog"&amp;gt;
                    &amp;lt;span&amp;gt;{{ writtendate }}&amp;lt;/span&amp;gt;
                    &amp;lt;h4&amp;gt;
                        &amp;lt;a href="{{ permalink }}"&amp;gt;
                            {{#helpers.highlight}}
                                { "attribute": "title", "highlightedTagName": "mark" }
                            {{/helpers.highlight}}
                        &amp;lt;/a&amp;gt;
                    &amp;lt;/h4&amp;gt;
                    &amp;lt;h6&amp;gt;
                    [ {{tags}} ]
                    &amp;lt;/h6&amp;gt;
                &amp;lt;/div&amp;gt;
            {{ end }}
            {{ partial "pagination" .}}
            `
        }
    })
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, I'm looping through all of my pages, then displaying an image for each page, followed by the date that the blog was written, and the title of each blog.&lt;/p&gt;

&lt;h4&gt;
  
  
  Search Bar
&lt;/h4&gt;

&lt;p&gt;Results should be displayed now. Next, we'll add the search box which will filter our results.&lt;/p&gt;

&lt;p&gt;In the HTML file, add the following div: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;div id="search-box"&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Back in the &lt;code&gt;search.js&lt;/code&gt; file, we'll initialize a search box widget:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search.addWidget(
    instantsearch.widgets.searchBox({
        container: '#search-box',
        placeholder: "Search for articles",
        autofocus: true
    })
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again, the container will look for the HTML element that you enter, and inject that widget into the HTML.&lt;/p&gt;

&lt;h4&gt;
  
  
  Adding Other Widgets
&lt;/h4&gt;

&lt;p&gt;As mentioned, Algolia has a &lt;a href="https://www.algolia.com/doc/guides/building-search-ui/widgets/showcase/js/"&gt;bunch of widgets&lt;/a&gt; that you can configure. We've already added the Hits widget, which displays our results, and the Search Box widget, which displays a search box.&lt;/p&gt;

&lt;p&gt;For my site, I also wanted categories/tags so that users can quickly sort an article by the category. I also wanted pagination below the results so users can navigate through my content.&lt;/p&gt;

&lt;p&gt;Again, we need an empty div in our HTML. So for these, I will add the following in my HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div id="menu"&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id="pagination"&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the categories/tags, you can use a Refinement List widget. But I went with the Menu widget which is pretty similar. Initialize it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search.addWidget(
    instantsearch.widgets.menu({
        container: '#menu',
        attribute: 'tags',
        showMore: true,
        limit: 3,
        sortBy: ['count:desc']
    })
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, we are filtering by tags, which is a data attribute in my search index JSON. I also enabled a "Show More" button that shows all of my tags.&lt;/p&gt;

&lt;p&gt;The Pagination widget was added like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search.addWidget(
    instantsearch.widgets.pagination({
        container: '#pagination',
        scrollTo: false,
        showFirst: false,
        showLast: false,
        showPrevious: true
    })
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Customizing Widgets
&lt;/h4&gt;

&lt;p&gt;Finally, we've got a fully functioning Search. But the CSS may not look the way we want it to. You can customize the CSS by overriding the classes to your needs. Remember to test it out for both mobile and desktop devices!&lt;/p&gt;

&lt;h3&gt;
  
  
  Finished!
&lt;/h3&gt;

&lt;p&gt;Now, we've got a fully functioning Search on our Hugo site!&lt;/p&gt;

&lt;p&gt;For more information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://forestry.io/blog/search-with-algolia-in-hugo/"&gt;https://forestry.io/blog/search-with-algolia-in-hugo/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Thanks for reading! 🙌&lt;/strong&gt;&lt;br&gt;
Check out more of my blog posts on &lt;a href="https://anthonydellavecchia.com"&gt;anthonydellavecchia.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>hugo</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Magic Numbers (in programming)</title>
      <dc:creator>Anthony</dc:creator>
      <pubDate>Thu, 06 Jan 2022 04:55:21 +0000</pubDate>
      <link>https://dev.to/anthonyjdella/magic-numbers-in-programming-19h0</link>
      <guid>https://dev.to/anthonyjdella/magic-numbers-in-programming-19h0</guid>
      <description>&lt;p&gt;Today, I got feedback from a code review and learned something new. It was about &lt;a href="https://en.wikipedia.org/wiki/Magic_number_(programming)"&gt;"magic numbers"&lt;/a&gt;, which are unique values with unexplained meaning or multiple occurrences which could (preferably) be replaced with named constants.&lt;/p&gt;

&lt;p&gt;I've known about the concept of using constants rather than hard-coding values, but I didn't think of that for "magic number" situations. It's a pretty simple concept but I just wanted to share what I learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Magic Numbers are Bad
&lt;/h2&gt;

&lt;p&gt;Magic numbers are language agnostic, but below, you'll see a code snippet in Java WITH magic numbers (the bad way).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class MagicNumber {

    String pipeDelimitedString = "This|is|an|example|of|Magic|Numbers|123 Parker Road|cityline@gmail.com";
    String [] splitString = pipeDelimitedString.split("\\|");

    obj.doSomething(splitString[7]);
    obj.doSomething(splitString[8]);           
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, I am simply splitting a pipe delimited string that contains some useful data (Home Address and Email Address).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;splitString[7]&lt;/code&gt; refers to the 8th element, or 123 Parker Road, which is a Home Address&lt;/p&gt;

&lt;p&gt;&lt;code&gt;splitString[8]&lt;/code&gt; refers to the 9th element, or &lt;a href="mailto:cityline@gmail.com"&gt;cityline@gmail.com&lt;/a&gt;, which is an Email Address&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is that bad? We’ll it’s not easy to read.
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;splitString[n]&lt;/code&gt;, where n is a number, may not mean anything from an outsider looking at your code. The numbers 7 &amp;amp; 8 have no meaning!&lt;/p&gt;

&lt;p&gt;Now, you’ll see a code snippet in Java WITHOUT magic numbers (the good way).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class MagicNumber {

  String pipeDelimitedString = "This|is|an|example|of|Magic|Numbers|123 Parker Road|cityline@gmail.com";
  String [] splitString = pipeDelimitedString.split("\\|");

  obj.doSomething(splitString[Constants.HOME_ADDRESS]);
  obj.doSomething(splitString[Constants.EMAIL_ADDRESS]);           
}

class Constants {

  public static final int HOME_ADDRESS = 7;
  public static final int EMAIL_ADDRESS = 8;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I’ve created a constants class, with some constants &lt;code&gt;(HOME_ADDRESS = 7 and EMAIL_ADDRESS = 8)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Constants.HOME_ADDRESS&lt;/code&gt; &amp;amp; &lt;code&gt;Constants.EMAIL_ADDRESS&lt;/code&gt; are much easier to understand and now have meaning!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you aren’t convinced, what’s easier to read:&lt;br&gt;
&lt;code&gt;splitString[Constants.HOME_ADDRESS]&lt;/code&gt; or &lt;code&gt;splitString[7]&lt;/code&gt;?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Again, this is just ONE example of magic numbers but there are many more. Thanks for reading!&lt;/p&gt;

&lt;p&gt;Thanks for reading! Check out my blog for more articles like this @ &lt;a href="https://www.anthonydellavecchia.com"&gt;www.anthonydellavecchia.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>webdev</category>
      <category>java</category>
    </item>
    <item>
      <title>How to Animate an Emoji with CSS</title>
      <dc:creator>Anthony</dc:creator>
      <pubDate>Wed, 05 Jan 2022 03:45:11 +0000</pubDate>
      <link>https://dev.to/anthonyjdella/how-to-animate-an-emoji-with-css-5eb9</link>
      <guid>https://dev.to/anthonyjdella/how-to-animate-an-emoji-with-css-5eb9</guid>
      <description>&lt;p&gt;If you go to the home page of &lt;a href="https://anthonydellavecchia.com"&gt;this website&lt;/a&gt;, you might find some hidden "easter eggs" around the page. One of which is an emoji that is animated using CSS. 👋 is the emoji. It's just a waving hand, that doesn't actually wave. There is no animation, so I wanted to make it move. It's actually pretty easy!&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create HTML
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;div class="waving" data-hover="👋"&amp;gt;Hi&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;All I've done here is create a simple div with the text, "Hi". Then I've given it 2 HTML attributes, &lt;code&gt;class&lt;/code&gt; and &lt;code&gt;data-hover&lt;/code&gt;. The contents within &lt;code&gt;data-hover&lt;/code&gt; ( 👋 ) is what will be animated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create CSS
&lt;/h3&gt;

&lt;p&gt;`.waving:before {&lt;br&gt;
  content: attr(data-hover);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.waving:hover {&lt;br&gt;
  animation-name: wave-animation;&lt;br&gt;
  animation-duration: 3.0s;&lt;br&gt;
  animation-iteration-count: infinite;&lt;br&gt;
  transform-origin: 70% 70%;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;@keyframes wave-animation {&lt;br&gt;
  0% {&lt;br&gt;
      transform: rotate( 0.0deg)&lt;br&gt;
  }&lt;br&gt;
  10% {&lt;br&gt;
      transform: rotate(14.0deg)&lt;br&gt;
  }&lt;br&gt;
  20% {&lt;br&gt;
      transform: rotate(-8.0deg)&lt;br&gt;
  }&lt;br&gt;
  30% {&lt;br&gt;
      transform: rotate(14.0deg)&lt;br&gt;
  }&lt;br&gt;
  40% {&lt;br&gt;
      transform: rotate(-4.0deg)&lt;br&gt;
  }&lt;br&gt;
  50% {&lt;br&gt;
      transform: rotate(10.0deg)&lt;br&gt;
  }&lt;br&gt;
  60% {&lt;br&gt;
      transform: rotate( 0.0deg)&lt;br&gt;
  }&lt;br&gt;
  100% {&lt;br&gt;
      transform: rotate( 0.0deg)&lt;br&gt;
  }&lt;br&gt;
}`&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.waving:before&lt;/code&gt; defines the content of which is to be displayed ( 👋 ).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.waving:hover&lt;/code&gt; defines what action happens when we hover over that element. In this case we have an &lt;code&gt;animation-name&lt;/code&gt; which is defined below in &lt;code&gt;@keyframes wave-animation&lt;/code&gt;. We also give it an animation-duration of &lt;code&gt;3 seconds&lt;/code&gt; and tell it to &lt;code&gt;animate infinitely&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@keyframes wave-animation&lt;/code&gt; is where we create the actual animation. In this case, I wanted to make the hand wave, so to do this I just want the hand to rotate back and forth. I add different keyframes and tell it to rotate a certain number of degrees in certain intervals. This mimics 👋 actually waving!&lt;/p&gt;

&lt;p&gt;You can apply this basic template to any emoji. Be creative! For example, you can try to animate a rocket 🚀 using CSS. Just think of what type of animation you want it to do (possibly translate up and down).&lt;/p&gt;

&lt;p&gt;For more articles check out my blog @ &lt;a href="https://anthonydellavecchia.com"&gt;anthonydellavecchia.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>css</category>
      <category>design</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Is 99% Good?</title>
      <dc:creator>Anthony</dc:creator>
      <pubDate>Wed, 05 Jan 2022 03:24:15 +0000</pubDate>
      <link>https://dev.to/anthonyjdella/is-99-good-57d3</link>
      <guid>https://dev.to/anthonyjdella/is-99-good-57d3</guid>
      <description>&lt;p&gt;If you ever took at test at school, you’d probably be really happy with getting a 99 grade. After all, it’s almost a perfect score.&lt;/p&gt;

&lt;p&gt;But when you’re talking about software systems, is 99% availability good?&lt;/p&gt;

&lt;p&gt;Well, if your system needs to be available 24/7 everyday, 99% won’t cut it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Downtime Table
&lt;/h2&gt;

&lt;p&gt;Take a look at the below table. It shows how much downtime (in time) equals a given percentage.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Availability       &lt;/th&gt;
&lt;th&gt;Annual Downtime&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;99%&lt;/td&gt;
&lt;td&gt;3 days, 15 hours, 40 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;99.9%&lt;/td&gt;
&lt;td&gt;8 hours, 46 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;99.99%&lt;/td&gt;
&lt;td&gt;52 minutes, 36 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;99.999%&lt;/td&gt;
&lt;td&gt;5.26 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What's this Mean?
&lt;/h2&gt;

&lt;p&gt;If your system should be available at all times, a 99% availability means that your system can have almost 4 days of downtime per year! For a system that needs to be available, that is a terribly long time.&lt;/p&gt;

&lt;p&gt;Imagine if you have a business critical system that fails. If it was down for almost 4 days, your company could lose millions/billions of dollars! Take for example, when &lt;a href="https://en.wikipedia.org/wiki/2021_Facebook_outage"&gt;Facebook was down in 2021&lt;/a&gt; for about 7 hours. Their stock dropped 5%, or $40 billion dollars! This was only for a 7 hour outage. Can you imagine if they had just 99% availability and Facebook was down for 4 days?&lt;/p&gt;

&lt;h2&gt;
  
  
  What should you aim for?
&lt;/h2&gt;

&lt;p&gt;This depends on your system, and usually a probability or downtime measurement (rather than percentage) should be given. "Five 9's" is a common "standard" that systems try to aim for. &lt;strong&gt;That is 99.999% availability (hence five 9s)&lt;/strong&gt;. Standards is in quotes because it really isn't a standard, it's just what's commonly mentioned in the industry as a goal to achieve.&lt;/p&gt;

&lt;p&gt;Check out this &lt;a href="https://en.wikipedia.org/wiki/High_availability"&gt;Wikipedia article&lt;/a&gt; for more information. &lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;br&gt;
Visit &lt;a href="https://anthonydellavecchia.com"&gt;anthonydellavecchia.com&lt;/a&gt; for more articles!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>sre</category>
      <category>monitoring</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
