<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ian Iversen</title>
    <description>The latest articles on Forem by Ian Iversen (@waylandi).</description>
    <link>https://forem.com/waylandi</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%2F891116%2F5eb7c338-16d5-4d67-a6f0-4cc7005a51d8.jpeg</url>
      <title>Forem: Ian Iversen</title>
      <link>https://forem.com/waylandi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/waylandi"/>
    <language>en</language>
    <item>
      <title>Posting Audio Recordings to Your Web App Database as Blob Datatypes</title>
      <dc:creator>Ian Iversen</dc:creator>
      <pubDate>Tue, 04 Oct 2022 16:18:48 +0000</pubDate>
      <link>https://forem.com/waylandi/posting-audio-recordings-to-your-web-app-database-as-blob-datatypes-30kb</link>
      <guid>https://forem.com/waylandi/posting-audio-recordings-to-your-web-app-database-as-blob-datatypes-30kb</guid>
      <description>&lt;p&gt;The goal is to receive audio from the users microphone to and store that audio on a database. To do this, we first need to ask the user, in their browser if we can use their microphone.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const [trackOne, setTrackOne] = useState(
    {
      isRecording: false,
      blobURL: '',
      isBlocked: false,
    })

  // one time check for mic permissions
  useEffect(() =&amp;gt; {
    navigator.getUserMedia({ audio: true },
      () =&amp;gt; {
        console.log('Permission Granted');
        setTrackOne({ isBlocked: false });
      },
      () =&amp;gt; {
        console.log('Permission Denied');
        setTrackOne({ isBlocked: true })
      },
    );

  }, [])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once permission is granted, a function can be called to start the recording.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  const startOne = (e) =&amp;gt; {
    if (trackOne.isBlocked) {
      console.log('Permission Denied');
    } else {
      Mp3Recorder
        .start()
        .then(() =&amp;gt; {
          setTrackOne({ isRecording: true });
        }).catch((e) =&amp;gt; console.error(e));
    }
  };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to stop the recording a function must be called that stops the recording.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const stopOne = () =&amp;gt; {
    Mp3Recorder
      .stop()
      .getMp3()
      .then(([buffer, blob]) =&amp;gt; {
        const file = new File(buffer, 'track-one.mp3', {
          type: audioType
        })
        setAudioData(file)
        const blobURL = URL.createObjectURL(blob)
        setTrackOne({ blobURL, isRecording: false })
      })
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then a useEffect can be used to post the data whenever the stop button is clicked.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const formData = new FormData()
  formData.append('audio_data', audioData)

  useEffect(()=&amp;gt;{
    fetch('/tracks', {
      method: 'POST',
      body: formData,
    })
    .then((r) =&amp;gt; {
      if (r.ok) {
        fetch('/tracks')
        .then(r =&amp;gt; r.json())
        .then(data =&amp;gt; setAllTracks(data))
      }
    })
  }, [audioData])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The included fetch GET request at the end is to immediately render the new track.&lt;/p&gt;

&lt;p&gt;libraries involved:&lt;br&gt;
import MicRecorder from 'mic-recorder-to-mp3';&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;important&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
A bit rate must be set in your audio recording component&lt;br&gt;
const Mp3Recorder = new MicRecorder({ bitRate: 128 });&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>audio</category>
    </item>
    <item>
      <title>The Blob Data Type</title>
      <dc:creator>Ian Iversen</dc:creator>
      <pubDate>Mon, 12 Sep 2022 16:09:59 +0000</pubDate>
      <link>https://forem.com/waylandi/the-blob-data-type-p64</link>
      <guid>https://forem.com/waylandi/the-blob-data-type-p64</guid>
      <description>&lt;p&gt;There are varying data types that exist in the world of programming. Common data types include: strings, integers, floats, characters, booleans. All of these data types can be used along with tables and data to create rich and expressive databases for web apps. But what can developers do if they would like to use images, video, or audio?&lt;/p&gt;

&lt;h2&gt;
  
  
  ENTER type:blob
&lt;/h2&gt;

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

&lt;p&gt;A blob data type is used for storing information in databases just like a string or an integer. However, blobs can store binary data which allows for the storage of files. Images, videos and audio can then be stored in databases as blobs.&lt;/p&gt;

&lt;p&gt;The term "blob" actually stands for "Binary Large Object" and is used for storing information, as binary, in databases.&lt;/p&gt;

&lt;p&gt;Through the use of blobs, common social media features such as photo albums can be constructed where a photo album table would contain photos:blob and photo_caption:string.&lt;/p&gt;

&lt;p&gt;Because blobs are used to store objects such as images, audio files, and video clips, they often require significantly more space than other data types. The amount of data a blob can store varies depending on the database type, but some databases allow blob sizes of several gigabytes.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "data" : {
    "image": "/9j/4AAQSkZJRgABAQEAYABgAAD//gA7Q1JFQVRPUjogZ2===",
  },
  "time": &amp;lt;Optional Timestamp&amp;gt;,
  "flowVersion": &amp;lt;Optional Workflow Version Name&amp;gt;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;How to record and play audio in JavaScript:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@bryanjenningz/how-to-record-and-play-audio-in-javascript-faa1b2b3e49b"&gt;https://medium.com/@bryanjenningz/how-to-record-and-play-audio-in-javascript-faa1b2b3e49b&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How can I get the blob file (i.e recorder voice) to send the server:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mattdiamond/Recorderjs/issues/188"&gt;https://github.com/mattdiamond/Recorderjs/issues/188&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Sources:&lt;br&gt;
&lt;a href="https://techterms.com/definition/blob"&gt;https://techterms.com/definition/blob&lt;/a&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Binary_large_object"&gt;https://en.wikipedia.org/wiki/Binary_large_object&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.losant.com/devices/blobs/"&gt;https://docs.losant.com/devices/blobs/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>datatype</category>
      <category>database</category>
    </item>
    <item>
      <title>JavaScript Full-Stack</title>
      <dc:creator>Ian Iversen</dc:creator>
      <pubDate>Mon, 22 Aug 2022 12:16:55 +0000</pubDate>
      <link>https://forem.com/waylandi/javascript-full-stack-12gg</link>
      <guid>https://forem.com/waylandi/javascript-full-stack-12gg</guid>
      <description>&lt;p&gt;So... you know how to program your backend using Ruby and SQL. Is there any other way to build a backend? There certainly is!&lt;/p&gt;

&lt;p&gt;In this blog post I will explore, MERN, a web development stack that only requires knowledge of Javascript and JSON.&lt;/p&gt;

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

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

&lt;p&gt;MERN is an acronym that stands for mongoDB, Express.js, React, and Node.js. In other words--the database, the backend framework, the frontend library and the runtime environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does MERN work?
&lt;/h2&gt;

&lt;p&gt;To understand how MERN works, we must take a more in depth look at each MERN element. Let's move through MERN back to front.&lt;/p&gt;

&lt;h2&gt;
  
  
  Node.js
&lt;/h2&gt;

&lt;p&gt;First comes Node.js, without it, JavaScript would only be allowed to run in the browser. Node allows for JS to exist in our files and open-source packages, awaiting the signal to execute.&lt;/p&gt;

&lt;p&gt;"Node.js is an open-source, cross-platform, back-end JavaScript runtime environment that runs on a JavaScript Engine and executes JavaScript code outside a web browser, which was designed to build scalable network applications." - Wikipedia &lt;a href="https://en.wikipedia.org/wiki/Node.js"&gt;https://en.wikipedia.org/wiki/Node.js&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;where did node come from?&lt;/p&gt;

&lt;p&gt;In 2009, software engineer Ryan Dahl took built a runtime environment for JS outside of the browser using C++ and Google's V8 JS engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  React
&lt;/h2&gt;

&lt;p&gt;Second comes React, a JavaScript library that makes building a modern interactive front end easier. React allows for more dynamic and versatile applications through its ability to control state.&lt;/p&gt;

&lt;p&gt;React can be run without Node.js, but if a developer wants to use dependent libraries, or dependencies, they must install them using node.&lt;/p&gt;

&lt;h2&gt;
  
  
  Express.js
&lt;/h2&gt;

&lt;p&gt;Third: Express.js, which is used as our backend framework. Express.js allows developers to create a fully featured server using JavaScript.&lt;/p&gt;

&lt;p&gt;Familiar JS syntax can be used in a developer's code editor.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  mongoDB
&lt;/h2&gt;

&lt;p&gt;Finally, we have MongoDB which is MERN's database.&lt;/p&gt;

&lt;p&gt;It's a no-sequel and non-relational database. This means that the database is not immediately configured for SQL or strictly predefining datatypes. Mongo is structured using objects with key/value pairs.&lt;/p&gt;

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

&lt;p&gt;The benefits to using MERN are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Large node ecosystem for open source libraries&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Constrains your web app to JS (React front end)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MongoDB essentially uses JSON&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

</description>
      <category>javascript</category>
      <category>node</category>
      <category>express</category>
      <category>mongodb</category>
    </item>
    <item>
      <title>Bootstrap: Introduction to the Modern Front-end Framework</title>
      <dc:creator>Ian Iversen</dc:creator>
      <pubDate>Tue, 02 Aug 2022 13:47:00 +0000</pubDate>
      <link>https://forem.com/waylandi/bootstrap-introduction-to-the-modern-front-end-framework-o4g</link>
      <guid>https://forem.com/waylandi/bootstrap-introduction-to-the-modern-front-end-framework-o4g</guid>
      <description>&lt;h2&gt;
  
  
  What is Bootstrap?
&lt;/h2&gt;

&lt;p&gt;Bootstrap is a front-end framework designed to make website development faster and more responsive to a user's device (desktop, tablet, phone).&lt;/p&gt;

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

&lt;p&gt;Bootstrap is a framework built on top of CSS. Although not accurate, I think it is helpful to think of Bootstrap as React for styling--where React makes JavaScript "easier", Bootstrap makes CSS "easier".&lt;/p&gt;

&lt;p&gt;Bootstrap began as an internal project at Twitter in 2011, aimed at simplifying design principles on web pages. Over the last decade, the framework has become free and open-source while also growing to be one of the most popular front-end frameworks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bootstrap is a framework built on top of CSS.
&lt;/h2&gt;

&lt;p&gt;Cascading Style Sheets (CSS) is what bootstrap is based on, though HTML structure and underlying JavaScript are included in some Bootstrap components.&lt;/p&gt;

&lt;p&gt;Though technically CSS provides you with the most flexibility and no installation is required, CSS takes more time to develop web applications.&lt;/p&gt;

&lt;p&gt;Bootstrap is quicker to work with, installation is required, but can be avoided with jsDelivr. If you desire, you can have more flexibility by customizing the underlying CSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Importing Bootstrap
&lt;/h2&gt;

&lt;p&gt;Developers can install Bootstrap using node in the corresponding project's console window.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install bootstrap&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Or
&lt;/h2&gt;

&lt;p&gt;Developers can also use jsDelivr to use a cached version of Bootstrap rather than download the framework.&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;!doctype html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;!-- Required meta tags --&amp;gt;
    &amp;lt;meta charset="utf-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"&amp;gt;

    &amp;lt;!-- Bootstrap CSS --&amp;gt;
    &amp;lt;link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"&amp;gt;

    &amp;lt;title&amp;gt;Hello, world!&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Hello, world!&amp;lt;/h1&amp;gt;

    &amp;lt;!-- Optional JavaScript --&amp;gt;
    &amp;lt;!-- jQuery first, then Popper.js, then Bootstrap JS --&amp;gt;
    &amp;lt;script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.7/dist/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Working with Bootstrap
&lt;/h2&gt;

&lt;p&gt;Bootstrap uses a responsive grid, meaning that components you create will be displayed in somewhat fixed positions. These grids will be effectively re-rendered on other devices in stylistically pleasant ways with little effort required from the developer. This is referred to as the "responsiveness" of Bootstrap. Although you are building your site on a desktop, you can be confident that a mobile user's experience won't be drastically different.&lt;/p&gt;

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

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

&lt;p&gt;Bootstrap contains pre-packaged HTML components that are immediately ready for use. Buttons, nav-bar, cards, drop-downs, and useful form components are all at the developer's fingertips.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other great info
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bootstrap works across all modern browsers.&lt;/li&gt;
&lt;li&gt;You can use bootstrap only knowing basic HTML and CSS.&lt;/li&gt;
&lt;li&gt;Large developer community for documentation and 3rd party themes. &lt;/li&gt;
&lt;li&gt;Like react, Bootstrap is actively developed, upgraded, and fixed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Check Out Bootstrap
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://getbootstrap.com/"&gt;https://getbootstrap.com/&lt;/a&gt;&lt;/p&gt;

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

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

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>react</category>
      <category>bootstrap</category>
    </item>
    <item>
      <title>Distributed File Storage and Peer-To-Peer Networks</title>
      <dc:creator>Ian Iversen</dc:creator>
      <pubDate>Wed, 13 Jul 2022 02:07:51 +0000</pubDate>
      <link>https://forem.com/waylandi/distributed-file-storage-and-hopefully-free-money-3ic5</link>
      <guid>https://forem.com/waylandi/distributed-file-storage-and-hopefully-free-money-3ic5</guid>
      <description>&lt;p&gt;The internet is a hyper-connected web of clients and servers. Clients make requests to servers and servers return files, software, data, and applications. However things have evolved quite a bit from the static client/server model. For instance, cloud computing infrastructure accounts for much of the internet’s requests and responses these days. Cloud services like Amazon Web Services (AWS) host massive warehouses filled with servers that can be rented out by users or companies. Companies like Netflix purchase server functionality from AWS, allowing Netflix to only worry about their video content and website design. All of the infrastructure, storage, and hardware concerns are left in the hands of AWS. &lt;/p&gt;

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

&lt;p&gt;Cloud computing has proved itself very useful in the last decade. Netflix is only one of thousands of companies that have built successful businesses using cloud computing. But unfortunately cloud storage can be somewhat centralized. A bad scenario would look like an entire server center getting destroyed, and by extension databases and files can be lost forever. Another bad scenario could be that Amazon, Google, and Facebook know everything about you and they own that information and can do whatever they want with it. Other models have also emerged and evolved over the last two decades, namely the Torrent file sharing protocol. &lt;/p&gt;

&lt;p&gt;The Torrent protocol, in simple terms, allows for clients to act as servers. Files stored on local machines can be requested from other local machines. The benefit of this is in the design of the torrent protocol which attempts to speed up the file download time for a user by downloading the file from multiple client machines. This is useful for very large file types and, in theory, distributes information amongst users which can defend against government censorship or corporate ownership of user data. However there aren’t many incentives currently for a person to database information for others without compensation.&lt;/p&gt;

&lt;p&gt;Looking into the future, torrenting may rise to more prominence as local storage becomes cheaper and blockchain technology becomes more trusted. There may be a future in which cryptocurrency is rewarded to anyone willing to rent out their free gigabytes of storage to hold encrypted data that can be accessed by anyone in the world. There are many hurdles to this, more than the centralized cloud computing models we have now, but I think it’s a pretty cool thought that your computer storing other peoples data might be able to buy you a free meal once a week.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
