<?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: gagecantrelle</title>
    <description>The latest articles on DEV Community by gagecantrelle (@gagecantrelle).</description>
    <link>https://dev.to/gagecantrelle</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%2F987436%2F9d1d8d39-c046-44ae-ba45-8db95f88dd1f.jpeg</url>
      <title>DEV Community: gagecantrelle</title>
      <link>https://dev.to/gagecantrelle</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gagecantrelle"/>
    <language>en</language>
    <item>
      <title>The Basics of TypeScript</title>
      <dc:creator>gagecantrelle</dc:creator>
      <pubDate>Tue, 20 May 2025 02:48:04 +0000</pubDate>
      <link>https://dev.to/gagecantrelle/the-basics-of-typescript-j52</link>
      <guid>https://dev.to/gagecantrelle/the-basics-of-typescript-j52</guid>
      <description>&lt;p&gt;TypeScript - sounds familiar to another coding language called JavaScript, right? Well, it's a language based on JavaScript; the only difference is that it focuses on type safety. This makes it easier to catch errors before you run your code. This makes working on big projects easier to manage and improves the coding process by making it smoother and more reliable. Luckily, it's not too hard to learn as long as you have a basic understanding of JavaScript. JavaScript was created by Microsoft and released in October 2012&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I start?&lt;/strong&gt;&lt;br&gt;
For starters, you need to install TypeScript as a developer(dev) dependency. If you're using Node.js, you must install the TypeScript node dependency as a dev dependency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install typescript --save-dev
npm install @types/node --save-dev
npm install ts-node --save-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you declare a variable, you need to declare the value type. If you've created a variable called box that is a boolean, you will declare it as a boolean. You also need to do the same for the function and its parameters. Other types, like objects and arrays, need to be declared differently. Also, any TypeScript file name will need .ts(TypeScript) instead of .js(JavaScript) at the end of the name&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var box: Noolean = true;
var obj = {n: Number}
let obj: Obj = {n: 1}
let arr: String[]
arr.push('test')

function checkbox(box: Boolean, {n}: {n: Number}): void{
if(box === true){
console.log(n)
}
}
checkbox(box, obj)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But wait, there's more to know. If you want an array to hold different types, use this method&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let test:  Array&amp;lt;string | number | boolean&amp;gt; = ["hello", 42, true];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your function returns a value, instead of saying void(returns no values), declare the return type&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function str(): String {
return "hey this is a string"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, depending on whether you plan to use a bundler like webpack, you need to install other dependencies. For some bundlers, like Next.js, you don't need to install any dependencies. Let's take a look at an example of Webpack using TypeScript.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');

module.exports = {
  mode: 'development',
  stats: {
    excludeModules: /node_modules/,
  },
  entry: path.resolve(__dirname, './Client/index.tsx'),
  output: { filename: "bundle.js", path: path.join(__dirname, './Client/dist'),  publicPath: '/'},
  resolve: {
    extensions: ['.ts', '.tsx', '.js', '.jsx'],
    plugins: [new TsconfigPathsPlugin()],
  },
  module: {
    rules: [
      {
        test: /\.(ts|tsx|js|jsx)$/,
        use: [{
          loader: "babel-loader",
          options: {
            presets: ['@babel/preset-env', '@babel/preset-react']
          }
        },
        {
          loader: 'ts-loader',
          options: {
            transpileOnly: true,
          },
        },
      ],
      exclude: /node_modules/,
      },
    ]
  },  
  plugins: [
    new HtmlWebpackPlugin({template: path.join(__dirname, "./Client/index.html")}),
  ]
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What is a Tsconfig?&lt;/strong&gt;&lt;br&gt;
 Now you're probably wondering what TsconfigPathsPlugin is? Well, it's a plugin that helps Webpack work with a TsConfig file. This is a file that tells TypeScript how to understand and then build your project. The TsconfigPathsPlugin is not needed, but can cause some TypeScript files to be compiled/built incorrectly if you don't use it. Let's take a look at what the TsConfig file would look like.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "compilerOptions": {
    "outDir": "./dist/",
    "noImplicitAny": true,
    "module": "ES2022",
    "target": "es5",
    "allowJs": true,
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But what do all of those options do?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;outDir: Puts all compiled JS files into a specific directory&lt;/li&gt;
&lt;li&gt;noImplicitAny: Stop 'any' type from being used in the project&lt;/li&gt;
&lt;li&gt;module: Tells how to use modules are handled (import/export) based on JavaScript standards(2022 standard)&lt;/li&gt;
&lt;li&gt;Convert the code to work with older browsers that can only understand ES5&lt;/li&gt;
&lt;li&gt;allowJs: mix TypeScript and JavaScript files together
-moduleResolution: Tell TypeScript to look for modules like Node.js does (using node_modules)&lt;/li&gt;
&lt;li&gt;allowSyntheticDefaultImports: Let you import default exports even if it not written properly for TypeScript&lt;/li&gt;
&lt;li&gt;esModuleInterop: easyer inports from old commonJs module(import express from 'express')&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are plenty more options, but those 8 options are a good base for a default TsConfig file. If you want to know more about the other options, run this command in the terminal. It will create a default TsConfig file with all the options commented out. With each line describing what each option does. Now, some options won't be in the file when created, the reason being that they're advanced or rarely used.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx tsc --init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;type: Manually tells TypeScript which package to use( instead of making it guess like normal)&lt;/li&gt;
&lt;li&gt;incremental: only rebuild changed files(make building faster)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;@type/&lt;/strong&gt;&lt;br&gt;
Since TypeScript is a different language, any dependency you use will need to be compatible with it. Luckily, some dependencies have a TypeScript version. Let's take a look at the React version of TypeScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @types/react @types/react-dom --save-dev
///////////////////////////////////////////////////
"@types/react": "^19.1.0",
"@types/react-dom": "^19.1.1",
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fun Fact 1: There is also an option for React in the TsConfig called jsx. This allows you to write JSX files in TypeScript.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jsx: "react-jsx"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fun Fact 2: You can't declare a React file with .jsx; it will need to be declared with .tsx at the end of the file name&lt;/p&gt;

&lt;p&gt;That's it for the basics of TypeScript. If you find this blog helpful, leave a like and/or comment. Thanks for reading and have a nice day&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Beginner set up for Video game development(Unreal Engine or others)</title>
      <dc:creator>gagecantrelle</dc:creator>
      <pubDate>Sat, 15 Feb 2025 20:55:03 +0000</pubDate>
      <link>https://dev.to/gagecantrelle/beninger-set-up-for-video-game-developmentunreal-engine-or-others-4o83</link>
      <guid>https://dev.to/gagecantrelle/beninger-set-up-for-video-game-developmentunreal-engine-or-others-4o83</guid>
      <description>&lt;p&gt;So you are looking into setting up your computer and/or laptop for video game development. It's not too hard to set up but it can be tricky if you don't know your own computer/laptop. Even the software you are planning to use may throw some problems during game development. I'll show you some tips that can help you on your journey. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Knowing your computer and/or laptop&lt;/strong&gt;&lt;br&gt;
Understanding your computer’s capabilities is crucial before you begin. A gaming PC is ideal, but a standard PC or laptop can also work. You need to know your system specifications and how old your hardware is, as newer software often demands more power and storage or certain software to run programs. it may sound simple, you can buy more storage and update your computer when needed but it's not that simple.&lt;/p&gt;

&lt;p&gt;You want to know why, well it is because of &lt;strong&gt;MONEY&lt;/strong&gt;. some of you might have some to spend to buy upgrades for your computer but others don't. since your computer/laptop may be the latest model since 2019 it might run into some incompatibility issues. like trying to add new upgrades to your computers meant for 2025 computers. For software updates like graphic cards updates can be a problem. Normally they don't send updated alerts like normal pc/laptop updates, where you click the update button. You will manually have to go into your computer system and update it since the graphics card is one of the major components of your computer. If you try to mess with it you may have some problems. For example, if you try to update your graphic there is a chance that you get the blue screen of death. That may or may not be permanent if you're lucky. You can even try to use a different graphic card but be warned, that switch may also break your computer. Each computer runs using different tech/software, The other graphic cards you are trying to use may have some incompatibility issues.&lt;/p&gt;

&lt;p&gt;With these problems, you might run into you may want to seek help from someone you know with some computer knowledge. To try and stop or minimize any damage you may cause when updating or changing important software like your graphic card. If not, let's hope you don't break your computer and end up buying a new one. Computers can be around $300 to $600, which isn't cheap. so be careful and check your computer's capability before making major changes. One option to avoid those problems is to try and build your PC. It is cheaper than buying one and you can choose what components you want to use. Just make sure you know what you're doing when building your computer. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What software do I use&lt;/strong&gt;&lt;br&gt;
Some free software you will see can be used with other game engines. Some are optional depending on how you want to build your game project. For starters let's Start with Unreal Engine version 4 or 5&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unreal Engine&lt;/strong&gt;
To Download Unreal Engine you need to download the Epic Games store. Once you get it you need to choose what version you want to download. Some might think why not just download the latest version? Well, there are some benefits in the later version that some like.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-Unreal 4&lt;br&gt;
   -Install Size 20-50GB&lt;br&gt;
   -Minimum RAM to run 8Gb&lt;br&gt;
   -Recommended RAM 16GB&lt;/p&gt;

&lt;p&gt;-Unreal 5&lt;br&gt;
   -new Features&lt;br&gt;
    - Nanite Virtualized Geometry(better handle highly models without a &lt;br&gt;
      drop in performance)&lt;br&gt;
    - Lumen Global Illumination(better dynamic  lighting for realistic &lt;br&gt;
      scenes)&lt;br&gt;
    - World Partition(handles open world projects better)&lt;br&gt;
    - MetaHumans(enhanced lifelike humans characters)&lt;br&gt;
    - Chaos Physics(better physics)&lt;br&gt;
   -Install Size 50-100GB&lt;br&gt;
   -Minimum RAM to run 16Gb&lt;br&gt;
   -Recommended RAM 32GB&lt;/p&gt;

&lt;p&gt;After comparing the difference you can see that Unreal 5 has more benefits. Depending on what you're planning for your game project you may not need those features. So it is better to get Unreal 4 to save some memory instead of wasting them. If you plan to use Unreal 5 at some point in time don't worry. Unreal has a handy feature to make projects in older versions, work in new versions of Unreal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ubunto(optional)&lt;/strong&gt;&lt;br&gt;
It's a Linux-based operating system known for its stability, security, and performance. It's more efficient using its resources than Windows. should be installed first before VS Code(Visual Studio Code)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual Studio Code(Optional)&lt;/strong&gt;&lt;br&gt;
It's a lightweight code editor for General coding, web development, and open source. It has free extensions that you can use for whatever project you're working on. It can also be used with an Unreal engine, just set Unreal to use it in the setting. Great for when you're just using Visual Studio(different software) for the SDK. After it's installed get this extension since the Unreal engine uses C++ to code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; C/C++(language)&lt;/li&gt;
&lt;li&gt;C#(language)&lt;/li&gt;
&lt;li&gt;C# dev kit(development kit)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Visual Studio&lt;/strong&gt;&lt;br&gt;
An integrated development environment or IDE similar to Visual Studio Code but without extensions. when installing you are asked to select some additional features to be installed with. Select the Game Development feature, and then go to the right side of the installation screen. You see some checkboxes, Select the flowing&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; .NET desktop development(optional)&lt;/li&gt;
&lt;li&gt;Desktop development with C++&lt;/li&gt;
&lt;li&gt;MSVC v143 - C++ build tools&lt;/li&gt;
&lt;li&gt;Windows 10 or 11 SDK(latest versions)&lt;/li&gt;
&lt;li&gt;C++ profiling tools&lt;/li&gt;
&lt;li&gt;CMake tools for Windows&lt;/li&gt;
&lt;li&gt;Git for Windows(optional)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Visual Studio is free but for a limited time then you have to pay for it after the free trial. Luckily you can still use the SDK tool even after your free trial is over, But what is an SDK? It's a Software Development Kit that can turn C++ language into machine language. It is used when building/packaging a game project in Unreal. The SDK is not required for Unreal Engine to build/package projects, but it can help stop any problem after being built/packaged. This can range from stopping small bugs, game crashes, or even soft locks(stopping game progress).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Others software&lt;/strong&gt;&lt;br&gt;
Since there is a game market there is also a game assets market. When making a game project you need some assets like sounds/music, 3d models, and textures. You could go and look for some free assets or buy some. There is also the option to make some from scratch. Here is a list of some free software you can use.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blender(3d modeler and can make animation along with visual effects)
-Lmms(Linux MultiMedia Studio, music making software)
-Audacity(voice/sound editing software)
-Gimp(a general photo editing software)
-Tiled(create tile-based maps used in 2d game)

&lt;ul&gt;
&lt;li&gt;Unreal engine has a similar built-in feature, so if you're using 
Unreal you might not want to install this software&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;I hope you enjoy this blog and find it helpful. This blog is based on my experience in game development with Unreal Engine 4 and 5. some images used were screenshots taken from my PC and one from chat GBT. I am currently working on a game project Called Marble Runner, if you are interested I posted videos on YouTube (&lt;a href="https://www.youtube.com/@InflatablePenguinGames" rel="noopener noreferrer"&gt;https://www.youtube.com/@InflatablePenguinGames&lt;/a&gt;). I even have a LinkedIn account(&lt;a href="https://www.linkedin.com/public-profile/settings?trk=d_flagship3_profile_self_view_public_profile" rel="noopener noreferrer"&gt;https://www.linkedin.com/public-profile/settings?trk=d_flagship3_profile_self_view_public_profile&lt;/a&gt;)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What is EmailJs</title>
      <dc:creator>gagecantrelle</dc:creator>
      <pubDate>Sun, 18 Aug 2024 21:28:02 +0000</pubDate>
      <link>https://dev.to/gagecantrelle/what-is-emailjs-3kme</link>
      <guid>https://dev.to/gagecantrelle/what-is-emailjs-3kme</guid>
      <description>&lt;p&gt;Long ago in the past when computers weren’t created, people would write letters and send them to others. At the time, it would always be delivered by hand, which sometimes could be a problem since some messages need to be read immediately and not later. Other times these letters could be as simple as small talk, like “How are you today?” Luckily in 1965 at Mit when computers were around, Ray Tomlinson, a computer programmer, created the first email. This helped solve some of the problems of sending messages to people far away from you, but then a new problem arose.  How do we let a computer send emails by itself? Luckily that is where EmailJs comes in and helps.&lt;/p&gt;

&lt;p&gt;EmailJs is a free emailing application that allows you to create some code that will let you send an email. Without having to create one, giving you more time to do other things.  Though it is free, there is a limit of 200 emails a month.  You can upgrade your account, but it may cost a bit of money. Besides that, EmailJs was created by a software developer by the name of Eugene Shvets. It was launched in the year of 2014 on January 15. It was also popular with frameworks like React, angular, and others.&lt;/p&gt;

&lt;p&gt;How do I use EmailJs?&lt;/p&gt;

&lt;p&gt;First, we need to create an EmailJs account. You also need a regular email account to use EmailJs. Once you create an account,  you need to create a service and an email template. The service is to tell what type of email service you're using, for example, Google Email. When you log in to Emailjs, go to the service tab then click the Add New Service. Once it is created it will show the service ID on its tab. It also shows it when you create it.&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%2Fwwr50pcynfk4r57901bg.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%2Fwwr50pcynfk4r57901bg.png" alt="Image description" width="800" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The email template is the same, just go to its tab on the left, then click Create New Template. Though it's different when creating it, when you click it it will give you a premade template. The template will look a bit weird but let me explain what those weird things are.&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%2F3cq99pdat9v2v7s76jh2.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%2F3cq99pdat9v2v7s76jh2.png" alt="Image description" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;. double currly brackets represent data that is passed to the template&lt;br&gt;
   . this is like from_name to use from_name that passes to it to tell &lt;br&gt;
        who sent it&lt;br&gt;
   .(Devto don't like double currly brackets, it gives me a liquid &lt;br&gt;
    variable error. reference the image used)&lt;/p&gt;

&lt;p&gt;. Cc or Carbon copy when set will send you a copy of an email that was &lt;br&gt;
  sent to someone&lt;br&gt;
  . good for testing purposes  &lt;/p&gt;

&lt;p&gt;. Bcc or Blind carbon copy is the same as Cc but instead of sending the &lt;br&gt;
  email copy to you it sent to another defined email account&lt;br&gt;
    . good for when working with multiple people &lt;/p&gt;

&lt;p&gt;Let's start coding&lt;/p&gt;

&lt;p&gt;To use EmailJs, you need to send a post request to an EmailJs link. The link will be provided in the EmailJs doc. Then provide an object with the service, template, public, and secret ID key for the request to work. The object will also take in a template_params which will hold information that the template will use, like the name of who sent the email and the message you are sending.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const object = {
service_id,
template_id,
user_id: emailjsPublicId,
token: emailjsSecretId,
tempate_params:{
from_name: 'me',
to_name: 'you',
message: 'hello'
}
}

axios.Post('https://api.emailjs.com/api/v1.0/send', object)
.then(()=&amp;gt;{console.log('send'))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Email is great for allowing users to quickly create and send emails quickly, saving some time for the user. It is also popular for automatically sending emails like sending emails with weekly/monthly information.  Another thing would be automatically sending an email to a user with a receipt for what they buy online. I recommend looking into Windows.setInterval() and Cron for code to run on a set time frame, like running once per day. Simply put, EmailJs is great for the automatic and quick sending of emails.  If a project you are working on will send emails, try EmailJs.&lt;/p&gt;

&lt;p&gt;Links used:&lt;br&gt;
&lt;a href="https://www.theguardian.com/technology/2016/mar/07/email-ray-tomlinson-history#:%7E:text=The%20very%20first%20version%20of,logging%20in%20from%20remote%20terminals" rel="noopener noreferrer"&gt;https://www.theguardian.com/technology/2016/mar/07/email-ray-tomlinson-history#:~:text=The%20very%20first%20version%20of,logging%20in%20from%20remote%20terminals&lt;/a&gt;.&lt;br&gt;
&lt;a href="https://www.emailjs.com/doc" rel="noopener noreferrer"&gt;https://www.emailjs.com/doc&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.emailjs.com" rel="noopener noreferrer"&gt;https://www.emailjs.com&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MINECRAFT-How does it work? (part 3)</title>
      <dc:creator>gagecantrelle</dc:creator>
      <pubDate>Sun, 04 Aug 2024 15:40:20 +0000</pubDate>
      <link>https://dev.to/gagecantrelle/minecraft-how-does-it-work-part-3-cm2</link>
      <guid>https://dev.to/gagecantrelle/minecraft-how-does-it-work-part-3-cm2</guid>
      <description>&lt;p&gt;If you haven’t seen Parts 1 and 2, I recommend you look at them before continuing to read this. If not, you may be confused about what is happening and why it is done like this. In part 2 we mentioned shaders, but never really talked about it due to it being able to be its own blog. Well, today let's talk about shaders and what they are.&lt;/p&gt;

&lt;p&gt;Shaders are functions that help render images/models with vertexes. If you remember Part 1 talked about the graphic pipeline, four of the steps involve shaders. Let's talk about the two most common steps vertex input and fragment shading. For vertex input, it is used to transform geometry from 3d world space to normalize coordinates.&lt;br&gt;
This uses a projection matrix, a view matrix, and a transformation matrix. When we model a 3d object we would model it around the center of origin, allowing us to apply a transformation. Transformation of the coordinates to world space.&lt;br&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%2Fzlerg74mu9kzfhk2a2pl.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%2Fzlerg74mu9kzfhk2a2pl.png" alt="Image description" width="800" height="407"&gt;&lt;/a&gt;&lt;br&gt;
It is helpful because let's say you are working with multiple game objects. You can think about the coordinates of a game object as if they existed in the world space.&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%2F46fj2e29oqpek3j731kh.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%2F46fj2e29oqpek3j731kh.png" alt="Image description" width="800" height="384"&gt;&lt;/a&gt;&lt;br&gt;
For example, let's say you are developing a 2d game using Pixels. You Can define your world space to work in pixels and units. Since you are the developer of this 2d world you don’t have to stick with pixels, let's say you want to use meters. Then use meters this is the world you are creating do what you want and feel comfortable with. Moving on, let's say the world is defined by a 1080px by 1920px. The camera will then see you in a 1080xp by 1920px view. This is useful because it allows you to see where they will appear and lets you think where they will appear on the screen. Since we are referencing Minecraft the unit will be using will be cubs, which will represent the width, height, and depth&lt;br&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%2Fcjscvudii6zqp9535xan.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%2Fcjscvudii6zqp9535xan.png" alt="Image description" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you decide on a unit to go by you want to then use three matrices, to transform our local coordinates to normalize coordinates&lt;/p&gt;

&lt;p&gt;1.Transformation Matrix&lt;br&gt;
 -has scale, rotation, and translation&lt;br&gt;
 -in order from top to bottom is the order on how you set up scale, &lt;br&gt;
  rotation, and translation&lt;br&gt;
 -if done in a different order it will end up in a different position than &lt;br&gt;
  the one you want it to be in&lt;br&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%2Fsdm7q49i5nhz2b1912i5.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%2Fsdm7q49i5nhz2b1912i5.png" alt="Image description" width="800" height="269"&gt;&lt;/a&gt;&lt;br&gt;
2.View Matrix&lt;br&gt;
  -the camera&lt;br&gt;
  -to set up the camera you need it position(eye), it direction it &lt;br&gt;
   pointing to(center), and a up value&lt;br&gt;
  -there are multiple positions for the camera to be at, so to limit its &lt;br&gt;
   options we set it to be only one position.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;up similar to rotation 
&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%2Fgcmek8thu6iaps76o4vz.png" alt="Image description" width="800" height="293"&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%2F21fjh1ks2zfd54zmaslx.png" alt="Image description" width="773" height="525"&gt;
3.Projection matrix
-importing for rending the game objects
-you want to use the perspective matrix for a 3d game, rendering fare 
game objects as a small game object
-a simpler way to look at it is like looking at a big object get smaller 
when you walk away from it
&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%2Ff43vsdtzce217eadbf0s.png" alt="Image description" width="800" height="269"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now let's take a look at how we transform the vertices sent to the vertex shaders, let write a simple program that looks like this. It will be written in GLSL, Graphics library shading language.&lt;br&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%2Fcoduxwn15habx36tpkis.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%2Fcoduxwn15habx36tpkis.png" alt="Image description" width="800" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;he first line of code will represent the version it will be using and must be the first line of the shader. Here's a link for all the versions &lt;a href="https://en.wikipedia.org/wiki/OpenGL_Shading_Language#Versions" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/OpenGL_Shading_Language#Versions&lt;/a&gt;, also the core at the end tells us to use the core version. The next line of code tells us the location of the vertex, it should seem familiar since we talked about it in part 2. We can also not tell the location and OpenGl can automatically determine the location, by removing layout (location = 0) from that line. You can even specify the location of other variables&lt;br&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%2F4vn7p28vb4p85mim471a.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%2F4vn7p28vb4p85mim471a.png" alt="Image description" width="800" height="369"&gt;&lt;/a&gt;&lt;br&gt;
But wait won’t this cause a problem with two vertices at the same location? No, thanks to the uniform which is GLSL, that tell will be read by the CPU and then passed to the GPU. This will create a variable with a different set of locations it can use. So we can reuse a location in attributes and uniform without both being in the same location in actual memory. The other three lines of code that use mat4 or matrix4 variable will be the code that is coming from the CPU&lt;/p&gt;

&lt;p&gt;Next, we get to the main function which needs to be declared in all the shaders. It will hold the function that will set the gl position to the combination of all the matrices. Gl_position is a special variable that is built into the language itself. Used by OpenGl to determine the final position of a vertex. Finally, we set the vertex position to the multiplication of the matrices.&lt;br&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%2Fxqn534mmr7run4gi9ga1.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%2Fxqn534mmr7run4gi9ga1.png" alt="Image description" width="800" height="105"&gt;&lt;/a&gt;&lt;br&gt;
 If you look at the end where a vec4 is being created that is a custom constructor for OpenGL. With these custom constructors, you can combine other vectors and scalars all these lines are equivalent in GLSL. Here is a link for those customs constructors &lt;a href="https://www.khronos.org/opengl/wiki/Data_Type_(GLSL)#Vector_constructors" rel="noopener noreferrer"&gt;https://www.khronos.org/opengl/wiki/Data_Type_(GLSL)#Vector_constructors&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ok, let's take a break Like I said in part 2 of Minecraft-how does it work this is a lot to take in and can be sometimes confusing. There is a lot more to go over, unfortunately, due to some problems I’m going to keep this blog short. If you are still interested here are one link used for this blog, Other links are in parts 1 and 2. &lt;a href="https://www.youtube.com/watch?v=yrFo1_Izlk0" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=yrFo1_Izlk0&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MINECRAFT-How does it work? (part 2)</title>
      <dc:creator>gagecantrelle</dc:creator>
      <pubDate>Sat, 20 Jul 2024 20:58:57 +0000</pubDate>
      <link>https://dev.to/gagecantrelle/minecraft-how-does-it-work-part-2-1i70</link>
      <guid>https://dev.to/gagecantrelle/minecraft-how-does-it-work-part-2-1i70</guid>
      <description>&lt;p&gt;Hello. If you haven't read part 1, I recommend you read that before you read this. To recap on what I talked about, it's about what the code of Minecraft looks like. Some of you might want to build a similar game to it or just want to try and change yourself. Whatever the reason, you are curious about it since this is a popular game we are talking about. So let's continue. I left off in part 1 of MINECRAFT-how does it work, also here is the link for part 1 &lt;a href="https://dev.to/gagecantrelle/minecraft-how-does-it-work-part-1-1i8l"&gt;https://dev.to/gagecantrelle/minecraft-how-does-it-work-part-1-1i8l&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Before starting let's refresh our knowledge of Minecraft&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;made by a Swedish game programmer Markus Notch&lt;/li&gt;
&lt;li&gt;made in 2009&lt;/li&gt;
&lt;li&gt;sold to Microsoft in 2014&lt;/li&gt;
&lt;li&gt;Became popular after being sold&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Buffers, what are they and why would we need them? If you remember, part 1 talked about Vertx data and the process, you need something to pass it to OpenGL. A Buffer is basically like a storage unit on the GPU, it can hold any data type.&lt;br&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%2Fna8qmva06u8il8of91ld.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%2Fna8qmva06u8il8of91ld.png" alt="Image description" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In OpenGL, there are different buffer types for different tasks. Here are some common buffers that are used GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER, GL_TEXTURE_BUFFER, GL_DRAW_INDIRECT_BUFFER, GL_SHADER_STORAGE_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER, and GL_UNIFORM_BUFFER.&lt;br&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%2Fr6p1mj0j9vi5g4mfcht1.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%2Fr6p1mj0j9vi5g4mfcht1.png" alt="Image description" width="800" height="395"&gt;&lt;/a&gt;&lt;br&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%2Ffn1xbj8h3m1mx0saom37.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%2Ffn1xbj8h3m1mx0saom37.png" alt="Image description" width="800" height="396"&gt;&lt;/a&gt;&lt;br&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%2F7o4a8k1eneqo2xz8uihm.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%2F7o4a8k1eneqo2xz8uihm.png" alt="Image description" width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's talk about GL_ARRAY_BUFFER and GL_ELEMENT_ARRAY_BUFFER first. So how do we use the two buffers? First, we need to create an array buffer&lt;br&gt;
with the glCreateBuffers function. Passing it a number and ID so we can target it later. Next, we need to tell it what type of buffer it is supposed to be with glNindBuffer(). The parameters that it will take are the buffer type and the buffer ID you created. Finally, we need to use the glBufferData function to pass in our data. It will take in four parameters: the buffer type, the size of the data, the data itself, and usage. The last parameter is used for telling what we intend to do with the data. Here is some links to the Doc that talk about all the usage types. &lt;a href="https://registry.khronos.org/OpenGL-Refpages/gl4/html/glBindBuffer.xhtml" rel="noopener noreferrer"&gt;https://registry.khronos.org/OpenGL-Refpages/gl4/html/glBindBuffer.xhtml&lt;/a&gt;&lt;br&gt;
&lt;a href="https://registry.khronos.org/OpenGL-Refpages/gl4/html/glBufferData.xhtml" rel="noopener noreferrer"&gt;https://registry.khronos.org/OpenGL-Refpages/gl4/html/glBufferData.xhtml&lt;/a&gt;&lt;br&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%2Fgd96i801uzeg97mfd5p9.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%2Fgd96i801uzeg97mfd5p9.png" alt="Image description" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating the buffer and giving it data to use, how can we use that data? By using a Vertex and Fragment shader.  Now let's say we want to send&lt;br&gt;
the position and color data. First, we need to use the layout function to set the position where the Vertex data is at.&lt;br&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%2Fvczv4mrosl79zn93p443.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%2Fvczv4mrosl79zn93p443.png" alt="Image description" width="800" height="342"&gt;&lt;/a&gt;&lt;br&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%2Fcjuj90xiwftmyh12ugv7.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%2Fcjuj90xiwftmyh12ugv7.png" alt="Image description" width="800" height="348"&gt;&lt;/a&gt;&lt;br&gt;
Now we need to use the glVertexAttribPointer function, to tell the GPU that the buffer holds vertex data. &lt;br&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%2Fhezd4xpy86kxzc38gkhz.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%2Fhezd4xpy86kxzc38gkhz.png" alt="Image description" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
It will take in six values GLuint, GLint, GLenum, GLboolean, GLsize, and offsetPointer&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GLuint - index/location data for where it at&lt;/li&gt;
&lt;li&gt;GLint - size / how many components this attribute has
      - Must be a size of 1, 2, 3, or 4 for basic data type
      - For a vertex 3 data type you use size 3&lt;/li&gt;
&lt;li&gt;GLenum - type / the type of data
       - If you use vertex 3 you use GL_FLOAT
&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%2Fyjlfawth2diq3jfrryuy.png" alt="Image description" width="800" height="455"&gt;
&lt;/li&gt;
&lt;li&gt;GLboolean - normalized / if you want data pass-in to be normalized
          - Integrate to float data type
          - Normalized: has many meanings depending on its use, but to 
           put in a general term for code. It's the Process of 
           organizing data in a database to eliminate redundancy and 
           inconsistencies
          - Depending on how you look it up on Google you will get 
            different types of Normalized. like the version to get 
            Unicode in javascript
          - Good for converting color data to normalized range data &lt;/li&gt;
&lt;li&gt;GLsize - stride / determine how many bites each vertex is
       - if the data is tightly pact meaning there is no gap between 
         vertices, then set the value to 0 to represent the tightly 
         pact 
         data
&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%2Fvc9flb60lf69kkb9zrot.png" alt="Image description" width="800" height="307"&gt;
&lt;/li&gt;
&lt;li&gt;const void* offsetPointer - ask for the offset of the data
&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%2Flqtzy3j59p0wvimra7bo.png" alt="Image description" width="800" height="381"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After you call that with the correct values, you need to run the function glEnableVertexAttribArry. This takes in the number that represents the layout location in the shader. That makes sure that OpenGL enables this vertex attribute as part of the state for the vertex array&lt;br&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%2F115h6q637omiilqjpc7v.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%2F115h6q637omiilqjpc7v.png" alt="Image description" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We know how to create a buffer and make data pass to the buffer, but how do we combine them with OpenGL? By using Vertex Array Objects Better known as VAOs. But what is it VAOs? Well, it's similar to an OpenGL buffer with its unique IDs, with only one difference, that instead of storing data, it stores how our data should work.&lt;br&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%2Fk6uuqq2g2xlc8v8wnedt.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%2Fk6uuqq2g2xlc8v8wnedt.png" alt="Image description" width="726" height="556"&gt;&lt;/a&gt;&lt;br&gt;
Next we create bind and create a vertex array by using the glCreateVertexArrays and glBindVertexArray functions. The reason why we have to bind it after creating it is because OpenGL is like a big state machine.&lt;br&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%2Fxvjtuasyeyf351t7oq16.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%2Fxvjtuasyeyf351t7oq16.png" alt="Image description" width="800" height="301"&gt;&lt;/a&gt;&lt;br&gt;
Then, let's say you don't want it to be bound anymore, rerun the same function again but pass in a 0. Now let's take a five-minute break to take a good look at an example to see how this would look.&lt;br&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%2F9vwo7ibtjz2qcvsvuujj.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%2F9vwo7ibtjz2qcvsvuujj.png" alt="Image description" width="800" height="455"&gt;&lt;/a&gt;&lt;br&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%2F2orw1iffrj35fivclez3.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%2F2orw1iffrj35fivclez3.png" alt="Image description" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ok, now that we just need to run it through the shader. Unfortunately, we won't talk about shaders due to them being at a point where they should be in their own blog. I explain more about them in part 3 of Minecraft-how does it work? Move on from that when we get the shader working we need OpenGL to draw the data from VAO. To do this we need to use two functions glUseProgram with the shader as a parameter, and glDrawArrays. The parameters for that are the Primitive first, then the start index, and finally vertex count as the last. Let's say we have twenty vertices, the starting point is fourteen and the court at six. The data will be drawn from vertices fourteen through nineteen. &lt;br&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%2Fn59uvy0166ph55m3xyqh.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%2Fn59uvy0166ph55m3xyqh.png" alt="Image description" width="800" height="387"&gt;&lt;/a&gt;   &lt;/p&gt;

&lt;p&gt;Now that we have all the functions and data set up, we can draw something. But wait, we have a problem that we need to fix first before moving on. The problem is the duplication of vertices when something is drawn since some vertices share the same data. Let's say we draw a star with ten vertices but we want to use 8 triangles, then we would need twenty-four Vertices.&lt;br&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%2F9zapu8cj23s2edw412al.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%2F9zapu8cj23s2edw412al.png" alt="Image description" width="800" height="367"&gt;&lt;/a&gt;&lt;br&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%2F2rskbwyoa7i8kvkmf2gs.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%2F2rskbwyoa7i8kvkmf2gs.png" alt="Image description" width="463" height="493"&gt;&lt;/a&gt;&lt;br&gt;
How would we fix this? Luckily OpenGl thought of a way to fix this with the Element array buffer/GL_ELEMENT_ARRAY_BUFFER. This buffer will tell OpenGL that we want to reuse some of the vertices.&lt;br&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%2F7ox5fpbmtka2fm4fdorb.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%2F7ox5fpbmtka2fm4fdorb.png" alt="Image description" width="800" height="374"&gt;&lt;/a&gt;&lt;br&gt;
The way to set up the element array buffer is pretty much the same as setting up the array buffer.&lt;br&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%2F4jsuhrbnof9gx3jrwvc1.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%2F4jsuhrbnof9gx3jrwvc1.png" alt="Image description" width="800" height="414"&gt;&lt;/a&gt;&lt;br&gt;
Now how do we set the elements? The doc states that it can only be assigned one of three values: unsigned bytes, unsigned shorts, and unsigned ints. The OpenGl doc doesn't explain where to declare the data type we're using. We can specify it when drawing the elements, then declare them as unsigned ints with unit32_t. When the data is uploaded with the functions in the last images with the buffer being created. While the VAO is bound, that buffer will be related to that VAO.&lt;br&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%2Fpwscbl5me2lfidudn2g5.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%2Fpwscbl5me2lfidudn2g5.png" alt="Image description" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While the VAO is bound to the buffer we can use a different OpenGL function to draw it. The VAO must also have an element buffer bound for this to work. The function we will use is called glDrawElements it takes in the Primitives, a number that will represent how many elements and how many to draw. Next, we need to assign them with a GL_UNSIGN_INT. Finally, we pass in an offset, if we set the offset to three it will start at the third index in the array. In the doc, it refers to this as a pointer because you can pass the element buffer directly to OpenGL here. Though you shouldn't do that because you need to upload the data every time the function is called. So instead think of this as an offset in the element array where you start drawing from.&lt;/p&gt;

&lt;p&gt;This is a lot to take in from buffers to elements, vertices, etc. But it is important for creating an engine for a game to run on even if it is a Minecraft copy or not. Though we did skip talking about shaders we will talk more about them in part 3. Also, all information used in the creation of this blog is in the part 1 blog. Like I said in Part 1 this will not teach you how to make Minecraft but show you the steps that you might need to do if you're making a Minecraft copy or something similar.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Basics of BABEL</title>
      <dc:creator>gagecantrelle</dc:creator>
      <pubDate>Mon, 17 Jun 2024 02:31:26 +0000</pubDate>
      <link>https://dev.to/gagecantrelle/the-basics-of-babel-2d8f</link>
      <guid>https://dev.to/gagecantrelle/the-basics-of-babel-2d8f</guid>
      <description>&lt;p&gt;Have you started a project for creating a website and got everything working? Your APIs, Requests, databases, and other codes not throwing an error. Great, now the only thing you have to do is bundle your code. You got webpack installed but what about the transcompiler, which&lt;br&gt;
one is used, and is it good? Well, I’ve got one we can use and it is free to use, Babel. It’s not hard to set up and will only take under a minute to put in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FunFacts&lt;/strong&gt;&lt;br&gt;
Babel is a free and open-source transcompiler for JavaScript. It was released to the world on September 28, 2014. The most stable version of it was released on January 8, 2014. Babel can also use plugins/libraries to help with certain syntax, mostly lines of code that use stuff like react code, CSS, SVG, and others. To use babel you need to have Node installed with npm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let start coding&lt;/strong&gt;&lt;br&gt;
First, let's start off by installing our dependencies for the package.json folder. If you don’t have one just run npm init.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Npm install @babel/core
Npm install @babel/cli
Npm install @babel/present-env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now Let's create a file and add some code to it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Let func = function(data){
return data + 255
}
//example code
Let hop test = false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's set up our Babel file to tell Babel what to do and use. Create a present key in an object and give present one of the dependencies we install, &lt;a class="mentioned-user" href="https://dev.to/babel"&gt;@babel&lt;/a&gt;/present-env. This helps tell Babel what environment it will be using. For example, it could be running on Firefox, Safari, or the Chrome browser.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
“present”: [
“@babel/present-env”
]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, to tell it which environment it will be working on we need to change the values in the present key a bit. First, we need to put “&lt;a class="mentioned-user" href="https://dev.to/babel"&gt;@babel&lt;/a&gt;/present-env” inside of an array. Then in the same array add an object with a target key. This key will hold what environment Babel will be working on, and what version.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
“present”: [
[“@babel/present-env”, {
“targets” :{
“fireFox”: “17”,
“Chrome”: “67”,
“Safari”: “11.1”
}
}]
]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, because we don’t have other codes to run Babel, we will have to run a command in the terminal to get it to work. This command will target a specific file and send it to a specific folder or file. If the specific output doesn't exist, the command will create the file/folder for use. After the command, go to the file you set to the output and see the result.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./node_modules/@babel/cli/bin/babel.js main.js –out-file main.dist.js
// use this command to check the current version
./node_modules/@babel/cli/bin/babel.js –version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s say that you are working on a react project and you're also using babel. Now like a talk about Babel can’t handle certain syntax. There are plugins and other libraries you can install to help, let take a look at an example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
“present”: [
“@babel/present-env”, 
“@babel/react”     // for react
],
“Plugins”:[
“@babel/plugin-syntax-dynamic-import”
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that you have seen Babel and how exactly it works, why not try it out in your next project? Babel has multiple plugins and libraries for whatever type of project you’re doing. If you're interested in webpack that uses babel or react, I have done blogs on these topics before so when you have some time why not take a look?&lt;br&gt;
&lt;a href="https://dev.to/gagecantrelle/the-basics-of-react-57a1"&gt;https://dev.to/gagecantrelle/the-basics-of-react-57a1&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/gagecantrelle/the-basics-of-webpack-2d71"&gt;https://dev.to/gagecantrelle/the-basics-of-webpack-2d71&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also if you are interested in what trans compiled code looks like, head to this site that will transcompile anything given to it. &lt;a href="https://babeljs.io/"&gt;https://babeljs.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Links:&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Babel_(transcompiler)"&gt;https://en.wikipedia.org/wiki/Babel_(transcompiler)&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=o9hmjdmJLMU"&gt;https://www.youtube.com/watch?v=o9hmjdmJLMU&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/age-of-awareness/setup-react-with-webpack-and-babel-5114a14a47e9#bb4c"&gt;https://medium.com/age-of-awareness/setup-react-with-webpack-and-babel-5114a14a47e9#bb4c&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Basics of WEBPACK</title>
      <dc:creator>gagecantrelle</dc:creator>
      <pubDate>Sun, 09 Jun 2024 19:07:41 +0000</pubDate>
      <link>https://dev.to/gagecantrelle/the-basics-of-webpack-2d71</link>
      <guid>https://dev.to/gagecantrelle/the-basics-of-webpack-2d71</guid>
      <description>&lt;p&gt;Have you ever run into a problem where you tried to email or send some data to someone and you got a warning that the data you are trying to send over is too big? What you're trying to send over could be as simple as a 1-minute cute dog/cat video. Well, you are not the only one. Websites can run into similar problems as well. When you open a website it will request everything from the server hosting that website. That site could be made with multiple files of code ranging from CSS, JPG, HTML, and more. Unfountly, most browsers can’t handle multiple files being requested. Normally, for sending data that is too big, you will zip/compact the data into smaller ones. This can not be done with a website since that data and what files connect to each other are too big. Luckily there’s an open-source module you can use to zip/bundle your data into a small single file, WEBPACK.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fun Facts&lt;/strong&gt;&lt;br&gt;
It was released on February 19, 2014, with the most stable version released on March 20, 2024. Webpack is a free and open-source module bundler, which as I said in the first paragraph, bundles code, making projects with multiple files much easier for the browser to receive when requested, and much faster to load. Most developers will use this blunder when they are making a website. Another reason developers like this blunder is because it is not too hard to set up and install.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let Start Coding&lt;/strong&gt;&lt;br&gt;
For starters, we will set the Webpack up using React so make sure you have React and React-dom installed. After that, we want to install a couple of other modules installed as dev dependencies, because what we are installing will be used for the developer to build his code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install webpack webpack-cli webpack-dev-server --save-dev
npm install html-webpack-plugin --save-dev
npm install @babel/core babel-loader --save-dev
npm install @babel/preset-env @babel/preset-react --save-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's create our file and call it webpack.config.js and start coding. First, we need to require ‘path’ a native NodeJs module that helps concatenate a file path, then we need to export an object with an entry and output path. This will tell it what file to bundle and where to send it after bundling it. Then inside the entry key, we need to give it a directory path, the path to where we want to bundle our code, and the file name itself. For output, it’s the same but the path for where to find the file will become where to put the file, and there is no need to give it a third parameter. In output, give it a filename key and it will create a file with the name given, and give it the bundle code. If no filename key is given, then that name will be given to the output path key as the third parameter. Instead of a file being created, it will create a folder with that name instead, containing our bundle code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Const path = require ('path')

Module.export{
Entry: path.join(__dirname, "src", "index.js"),
Output:{
Filename: "bundle.js"
path.join(__dirname, "dist", "bundle"),
}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we need to tell Webpack to use some plugins since normally it can only use Javascript by default. It is set up similarly to how we set up the entry key. This also allows webpack to interact with the script tag in the HTML file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Const path = require ('path')

Module.export{
Entry: path.join(__dirname, "src", "index.js"),
Output:{
Filename: "bundle.js"
path.join(__dirname, "dist", "bundle"),
},
plugins: [
   new HtmlWebpackPlugin({
     template: path.join(__dirname, "src", "index.html"),
   }),
 ],
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that we have our plugging we now set some rules for Webpack to follow when bundling our code. In this example, we will be using Bable and tell it to only use specific files like jsx.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Const path = require ('path)

Module.export{
Entry: path.join(__dirname, "src", "index.js"),
Output:{
Filename: "bundle.js"
path.join(__dirname, "dist", "bundle"),
},
module: {
   rules: [
     {
       test: /\.?jsx$/,
       exclude: /node_modules/,
       use: {
         loader: "babel-loader",
       }
     },
   ]
 },
plugins: [
   new HtmlWebpackPlugin({
     template: path.join(__dirname, "src", "index.html"),
   }),
 ],
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since Bable is a transpirer, we need to tell it what to transpile by giving it an options key with a present key holding some of the things we installed at the beginning.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Const path = require ('path)

Module.export{
Entry: path.join(__dirname, "src", "index.js"),
Output:{
Filename: "bundle.js"
path.join(__dirname, "dist", "bundle"),
},
module: {
   rules: [
     {
       test: /\.?jsx$/,
       exclude: /node_modules/,
       use: {
         loader: "babel-loader", options: {
           presets: ['@babel/preset-env', '@babel/preset-react']
         }
       }
     },
   ]
 },
plugins: [
   new HtmlWebpackPlugin({
     template: path.join(__dirname, "src", "index.html"),
   }),
 ],
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, in your package.json file make some script commands to run webpack server and bundle our code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
 "dev": "webpack serve",
 "build": "weback",
 ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also, if you are curious, bable can set rules in Webpack to be able to bundle SVG, images, and CSS files too. Now that you know what webpack is, you probably want to add it to your next web development project, seeing as how it is not too hard to set up and install, perfect for any size project from big to small. Give it a try if you're interested in trying webpack out.&lt;/p&gt;

&lt;p&gt;//links&lt;br&gt;
&lt;a href="https://medium.com/age-of-awareness/setup-react-with-webpack-and-babel-5114a14a47e9#bb4c"&gt;https://medium.com/age-of-awareness/setup-react-with-webpack-and-babel-5114a14a47e9#bb4c&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.digitalocean.com/community/tutorials/nodejs-how-to-use__dirname"&gt;https://www.digitalocean.com/community/tutorials/nodejs-how-to-use__dirname&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=5zeXFC_-gMQ&amp;amp;t=1s"&gt;https://www.youtube.com/watch?v=5zeXFC_-gMQ&amp;amp;t=1s&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=rI37HS-Vj8A&amp;amp;list=PLzAGFfNx"&gt;https://www.youtube.com/watch?v=rI37HS-Vj8A&amp;amp;list=PLzAGFfNx&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What is Google auth(Oauth 2.0)</title>
      <dc:creator>gagecantrelle</dc:creator>
      <pubDate>Mon, 03 Jun 2024 03:40:22 +0000</pubDate>
      <link>https://dev.to/gagecantrelle/what-is-google-authoauth-20-n5g</link>
      <guid>https://dev.to/gagecantrelle/what-is-google-authoauth-20-n5g</guid>
      <description>&lt;p&gt;Whenever you play a game or go to some site, 100% of the time you will have to log in to your account before moving on, handing out your account name and password to confirm your identity. Unaware that someone may be spying on you for your account information, this can lead to accounts being stolen with your personal information being deleted, sold online, or posted on social media, making you hesitate whenever you make an account. Luckly Google released an authentication application to calm your fear. Google Auth, or Oauth 2.0, will allow you to log in and create an account without having to put in your password or email account. This is done by having Google create an access token that will be sent to the account you’re trying to login to, and say, “Hey this this is the account created by this use so let her/him in”.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fun facts&lt;/strong&gt;&lt;br&gt;
Oauth began development in November 2006,  when later in 2007 a small group of implementers was created. The Group discussed ideas and proposed drafts for the Oauth application. Soon in July of the same year, google heard about Oauth and showed an interest in supporting the project. In April 2010 the Ouath 1.0 was released, with Oauth 2.0 being released two &lt;br&gt;
years later in October. This application is free to use, but you need to have a Google account to use it. So let’s look at where to get started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a Google Auth project&lt;/strong&gt;&lt;br&gt;
To use Oauth 2.0 you will need to create a project on Google Cloud.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to this site &lt;a href="https://console.cloud.google.com/"&gt;https://console.cloud.google.com/&lt;/a&gt; Then, if you don’t have any project created, you should see a new/create project. If not, then next to the Google Cloud symbol you should see a button with three circles. Click it and you should see a new/create project button.&lt;br&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%2Fermry7yhiklvjdwijm05.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%2Fermry7yhiklvjdwijm05.png" alt="Image description" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After you click it, it will ask for a project name and organization name. You can skip the organization name.&lt;br&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%2Fw2fjh8d1r5c6xlqvd9lc.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%2Fw2fjh8d1r5c6xlqvd9lc.png" alt="Image description" width="497" height="326"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When your project gets created, you should be sent to your project folder. Go to the search bar and search for Oauth consent screen. It should be under API and services.&lt;br&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%2Ffbytgtaa36wwwxymrbda.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%2Ffbytgtaa36wwwxymrbda.png" alt="Image description" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After clicking you should see a screen asking how you want to configure your app, elect external (allow you to use test user with any account), then click create it.&lt;br&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%2Fheewdi454hjtdlk83ii1.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%2Fheewdi454hjtdlk83ii1.png" alt="Image description" width="538" height="367"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You will then see another screen. It will ask you to name your app, user support email, and developer contact email. Then click save and continue.&lt;br&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%2Fbsibc6ln66s854gnujhq.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%2Fbsibc6ln66s854gnujhq.png" alt="Image description" width="505" height="520"&gt;&lt;/a&gt;&lt;br&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%2Ffmymvr0x39fevnbq9cj9.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%2Ffmymvr0x39fevnbq9cj9.png" alt="Image description" width="345" height="87"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next you will see a button called add or remove scopes. Click it and another screen will appear with checkboxes. Check the boxes that say auth/user/email and auth/user/profile. Press update then click save and continue.&lt;br&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%2Fcpwdoz1tdpnkns63l3he.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%2Fcpwdoz1tdpnkns63l3he.png" alt="Image description" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next it will ask you to add a test account. This could be any Google regular account. But if you don’t want your project to mess with something on one of your Google accounts, just create a new Google account for testing. But be careful because the account you added will be the only one able to log in. Then click save and continue.&lt;br&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%2F0tqjqy5clahr5whn2rn7.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%2F0tqjqy5clahr5whn2rn7.png" alt="Image description" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next you will see a summary screen which you can skip and then you just need to click back to dashboard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When you get to the dashboard screen, under API &amp;amp; service, click credential. Then click Create credentials. Finally, click Oauth client ID.&lt;br&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%2Fhwi8e5tburgxdibu571u.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%2Fhwi8e5tburgxdibu571u.png" alt="Image description" width="602" height="306"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It will then ask for a link to where your web application is being hosted (example:  &lt;a href="http://localhost:3000"&gt;http://localhost:3000&lt;/a&gt;). Pass it in the authorized JavaScript origins and authorized uris, then click Create.&lt;br&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%2Fd0ale73ep0g7huwiux38.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%2Fd0ale73ep0g7huwiux38.png" alt="Image description" width="793" height="912"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You should then get a client ID and secret. Save them somewhen like a Google Doc file or text file.&lt;br&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%2Fn54yqo6exgrlny2ur9tr.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%2Fn54yqo6exgrlny2ur9tr.png" alt="Image description" width="388" height="287"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Now it’s coding time.&lt;/strong&gt;&lt;br&gt;
If you’ve never used react before, here is a link to a blog I did that talks about the basics of react &lt;a href="https://dev.to/gagecantrelle/the-basics-of-react-57a1"&gt;https://dev.to/gagecantrelle/the-basics-of-react-57a1&lt;/a&gt; . If you don’t feel like making a react application from scratch, run this command in an empty folder in the terminal npx create-react-app. Then add the name of the file you will create npx create-react-app client.  Npx should be installed when you install node same as npm. If you’re not sure, run the command npx –v, this will show what version of npx you have. Then after all that cd into the folder you create (client) run npm install gapi-script then npm install react-google-login. Next, create a component folder that holds two js files login and logout. Then create a function for login and logout with a const holding your ClientID you got when making your Google project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//file name login
Import  { GoogleLogin } from ‘react-google-login’;

Const clientId = ‘your client id’;

Function login(){
Return();
};
Export default loging;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//file name logout
Import  { GoogleLogout } from ‘react-google-login’;

Const clientId = ‘your client id’;

Function logout(){
Return();
};
Export default logout;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next for your login and logout function pass these in return, this code will go and try to log in you Google account&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//for login
(
&amp;lt;div id=”signInButton&amp;gt;
&amp;lt;GoogleLogin
clientId={clientId}
buttonText=”login”
onSuccess={onSuccess}
onFailure={onFailure}
cookiePolicy={‘single_host_origin’}
isSignIn={true}
/&amp;gt;
&amp;lt;/div&amp;gt;
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// for logout
(
&amp;lt;div id=”signInButton&amp;gt;
&amp;lt;GoogleLogout
clientId={clientId}
buttonText=”login”
onSuccess={onSuccess}
/&amp;gt;
&amp;lt;/div&amp;gt;
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that we have that setup, we then need to create an onScuccess and onFailure function. These functions will take in a parameter, For onSuccess it takes in an object that holds a profileObj key. which like the name implies it an object that holds some information from your google account. for onFailure it takes in the same object as onSuccess.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;onSuccess(res){
console.log(‘hey it worked”, res.profileObj);
};
onFailure(res){
console.log(‘error: cant log in’, res);
};

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

&lt;/div&gt;



&lt;p&gt;Finally, let’s add our login and logout function to the app.js/app.jsx file or the main file you’re using for your React project. In your app file, you’ll import both login and logout functions, useEffect from react, and gapi from the gapi-script we installed. Along with your client ID. The useEffect hook allows you to fetch data, directly updating the dom, and used it as a timer for side effects in your component. Then inside of your app call the useEffect and pass it a function called start that runs gapi.clent.int function. That takes in an object that holds the clientId and scope, the scope is empty unless you're using some API’s alongside Google auth. Then run the start function with gapi.load function. After that, put the imported login and logout functions inside the return div.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// file app.js
Import login from ‘./components/Login’;
Import logout from ‘./components/Logout’;
Import { useEffect } from ‘react’;
Import { gapi } from ‘gapi-script’;
Const clientId = ‘your client id’;

Function App(){
useEffect(() =&amp;gt;{
function start(){
gapi.client.init({
clientId: clientId,
scope: “”
});
};
Gapi.loade(‘client:auth2’, start)
});

Return(&amp;lt;div className=”app”&amp;gt; 
&amp;lt;login /&amp;gt;
&amp;lt;logout /&amp;gt;
&amp;lt;/div&amp;gt;)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that run your react application and test it out. You should see a login and logout button. Click login then you should see a Google select account screen pop up. Select the test account you pick when setting up your project in Google Cloud, and that it’s. Click the inspect button to check your console log for the login function and you should see a console log with an object containing the information about that account minus the password. Then when you click the logout button you’ll be logged out.&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%2Fanapz297gewn1aomknal.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%2Fanapz297gewn1aomknal.png" alt="Image description" width="536" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, like I said in the beginning google auth creates an access token for other sites to use, instead giving them your password and email account. To get that generated token, use this command in the code block. Remember this token is not permanent, it has a time limit before it goes bad.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Var accessToken =gapi.auth.getToken().access_token;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So now that you know about Google auth and how to use it, you probably see how useful it is. Allowing you to create accounts connected to a Google account, without taking in personal information like a password. also Allowing users to see that the account they are trying to make, won’t ask for a password or email account. Making the user feel safe knowing that their personal information is safe. Another good thing about Google auths is that it is fast to log in with it, removing the time it takes to put in a password and account name. In conclusion, using Google auth will be a great start for making your website.&lt;/p&gt;

&lt;p&gt;links used for this blog:&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=bOd4eFqIg00&amp;amp;t=323s"&gt;https://www.youtube.com/watch?v=bOd4eFqIg00&amp;amp;t=323s&lt;/a&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/OAuth"&gt;https://en.wikipedia.org/wiki/OAuth&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developers.google.com/identity/protocols/oauth2"&gt;https://developers.google.com/identity/protocols/oauth2&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=ZDuRmhLSLOY"&gt;https://www.youtube.com/watch?v=ZDuRmhLSLOY&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=HtJKUQXmtok"&gt;https://www.youtube.com/watch?v=HtJKUQXmtok&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Basics of Try/Catch</title>
      <dc:creator>gagecantrelle</dc:creator>
      <pubDate>Mon, 15 Apr 2024 18:41:27 +0000</pubDate>
      <link>https://dev.to/gagecantrelle/the-basics-of-trycatch-12cb</link>
      <guid>https://dev.to/gagecantrelle/the-basics-of-trycatch-12cb</guid>
      <description>&lt;p&gt;Have you ever run into a problem when coding and just can’t find where that error is coming from? This error could be anything from a typo, missing line of code, or undefined data. Thanks to that error it could also stop your console.log from running, making it harder to see what some variables equal to, or where the error is coming from. Luckily, there is a code statement you can use to help avoid having that problem Try/Catch. Similar to the .Then and .Catch methods used in promise. If there is an error in the Try block the Catch block will catch it and then run the code in the Catch block. Even though .Then/.Catch and Try/Catch are similar, Try/Catch are statements that can be used anywhere while .then/.catch are methods that can only be used in asynchronous code. Here is a blog I wrote for promises that use .then and .catch methods in its code &lt;a href="https://dev.to/gagecantrelle/the-basic-of-promises-amf"&gt;https://dev.to/gagecantrelle/the-basic-of-promises-amf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try/Catch history&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During the early days of JavaScript when it was still somewhat new to the world, the developers were adding error-checking methods to it. By 1999 for javaScript version 1.4 the Try/Catch statement was added. It Was commonly used in code to check if it was running properly or not. Then at a later point in time, the Finally statement was added to the Try/Catch method. It works similarly to promises and is set similarly to an if statement. Making it easy to understand how it works and set up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How the Try, Catch, Finally statements work&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Try/Catch works best when working with data fetch from another 
server or asynchronous code, since you never know what you 
might get back. For the Try code block to work you must have a 
Catch or Finally code block at the end of Try. It does not take 
in any parameters or conditions. If a line of code in the Try 
block runs into an error it will stop running the rest of the 
code in that block, This will also happen if a variable is set 
to undined in the block. The Catch statement will take in an 
error parameter with an error argument, related to the error 
from the Try block. Catch can even work if not given any 
parameter, this will not affect how it will run.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const {url} = request(./urlExmple.js)
let data = fetch(url)
//"{num: 2}"
try{
let editData = JSON.parse(data);
let str = 1 + editData.num;
//the console should log a string of 3
console.log(str);
}catch (error){
console.log(error);
console.log('error on line 11');
};
//result will be '3'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;The Finally statement can be added to the end of the Catch 
method or can replace the Catch method, It will always run if 
there is an error or not. The order in which Finally is used 
dose not affect the code
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
try {
  let str = 1 + 2 + '';
  console.log(str);
} catch (error){
  console.log(error);
  console.log('error on line 6');
} finally {
  //will run after Catch even if there is an error or not
  console.log('hey your Try block on line 1 has run')
}
//result will be '3' and 'hey your Try method on line 1 has run'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Try/Catch examples&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;Import { highOrderAsyncFunction } from './HOF.js;
Import { data } from './examples.js' 

let result = null;

Try{
result = highOrderAsyncFunction(data).map();
for(let i = 0; i &amp;lt; result.length; i++){
let test = result[i].val
console.log(test)
}
}catch{
console.log('Error: the high order function on line 7 in HOFTEST.js, data given is not the correct data type')
result = ['default’];
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's say you have a high-order function that is also asynchronous, There are times when you might run into an error.&lt;br&gt;
this error could be anything from a type error to a value being&lt;br&gt;
undefined. Normally with Asynchronous code it usually the value&lt;br&gt;
being undefined, sometimes it's an array or object with undefined values. Since the Try statement will throw an error if something&lt;br&gt;
returns undefined or sets a variable to undefined value. you can use it to make sure that the code doesn't return any undefined&lt;br&gt;
values.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function getData (url){
  return fetch(url)
     .then((data)=&amp;gt;{
        try{
          let changeData = parse.JSON(data)

          return changeData.images[3]  

        }catch(error){
          console.log(error)
        }

     }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another good use for try/catch is in promises. Let's say you used the fetch method to send a request and you receive the data from the server. Although there are no errors here,  There is a chance that there is something wrong with the requested data or not. You can use try/catch to check if the data requested is fulfilled or rejected because of an error.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Basic of Promises</title>
      <dc:creator>gagecantrelle</dc:creator>
      <pubDate>Sun, 17 Mar 2024 19:50:06 +0000</pubDate>
      <link>https://dev.to/gagecantrelle/the-basic-of-promises-amf</link>
      <guid>https://dev.to/gagecantrelle/the-basic-of-promises-amf</guid>
      <description>&lt;p&gt;Most projects you work on may have a lot of asynchronous code, which is a code that will run at a different point in time. With a lot of callback functions,  that can lead to a long wait time before your code can run completely.  Promises can streamline your code and reduce the wait time. Promises will run at a later point in time allowing the rest of the code to run smoothly while reducing the use of callbacks used in your code. You might be wondering, why promises were&lt;br&gt;
created?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Promises History&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The term promise was proposed in 1976 by Daniel P Friedman and David Wise. It means ‘doing something at a later time’. It was implemented in the coding language allowing code to run at a later point in time. It already comes with JavaScript so there’s no need to download it. You might be wondering why promises were added to the coding language. Because some lines of code are asynchronous, like requesting data From YouTube for a specific video, it may take some time before you can get that data. Even if the line of code is not asynchronous, just having multiple callbacks can cause your code to run slower. Though callbacks are helpful, some functions are located in another file. Meaning that when that function runs it probably be called in a different file where that callback is located.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Promises return one of three states&lt;br&gt;
   1.Pending: neither fulfilled nor rejected&lt;br&gt;
   2.Fulfilled: the code ran perfectly&lt;br&gt;
   3.rejected: the code failed&lt;/p&gt;

&lt;p&gt;1.To make a promise you need to use the new keyword and then instantiate a promise. Then use a callback function as an argument that takes in two parameters resolve and reject.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let testP = new Promises((resolve, reject) =&amp;gt; {

});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2.Set some type of condition to run resolve or reject. Then pass a &lt;br&gt;
  value to the resolve/reject function calls&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let testP = new Promises((resolve, reject) =&amp;gt; {
   var bol = true;
   if(bol){
       resolve(‘success’);
    }else{
      reject(‘failed’);
    }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3.Call the promises then use the .then method to run some code if the promises were successful and .catch if there was an error. Never put ; on a .then call if you're using a .catch. Because it will cause an error&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;testP()
// .then() takes in a function that takes in a parameter that equal
//the result of the promise that ran successfuly
.then((string)=&amp;gt; console.log('it was a ' + string)
//same as .then but will only run when there is an error, the //parameter that is used is the error the code ran into
.catch((string)=&amp;gt; console.log('it was a ' + string);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Examples&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;youTubeSearch(url){
return fetch(url)
//.json is a function that turns any data into javascript data
.then((data)=&amp;gt; data.json())
.catch((error)=&amp;gt;console.log('ERROR: ' + error));
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A fetch request is like an asynchronous GET request. It will request data from YouTube and then turn that data into readable javascript data. The code will then return that data if there is no error. But if there is something wrong with the data, like being undefined, it will send an error message. If you want information on get requests, check out this blog &lt;a href="https://dev.to/gagecantrelle/the-basics-of-ajax-3m6"&gt;https://dev.to/gagecantrelle/the-basics-of-ajax-3m6&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//////callbacks
function getData (data, cb){
dataSearch(data, cb) //run a fetch request
}
function logData (data){
console.log(data)
recordData(data)
}
function recordData (data){
stoageFunction(data, 25, logData)
}

//////promises
p(data)
.then((data)=&amp;gt;console.log(data))
.catch((error)=&amp;gt;console.log('ERROR: ' + error))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Promises can lessen the amount of code you will need to write opposed to using callback functions to run asynchronous code. Depending on what the async function is doing, your code could take up a lot of space if it relies on multiple callback functions. It can also help with functions that can take some time to run, like a GET request. Since the data you're requesting could be from some website It might take some time before you get it. Another reason to use it is that a function might not have the time to wait for that data. This can lead to some errors or some data just becoming undefined.  &lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Basics of React</title>
      <dc:creator>gagecantrelle</dc:creator>
      <pubDate>Mon, 29 Jan 2024 18:39:29 +0000</pubDate>
      <link>https://dev.to/gagecantrelle/the-basics-of-react-57a1</link>
      <guid>https://dev.to/gagecantrelle/the-basics-of-react-57a1</guid>
      <description>&lt;p&gt;When making a website you have multiple options for extension to use. From JQuery,  Angular JS, and more to choose from. The best one I believe You should use is React JS. It’s a javascript library that helps build the user interface(UI). It’s used in the front end for updating UI when something in the code changes the HTML code. An example could be something like displaying the current time. For that to happen you have to use the createRoot Component to bind the HTML file to the JS file. Allowing the js file to hold all the functions to be used on the HTML file.&lt;/p&gt;

&lt;p&gt;In 2011 Facebook started to have some code maintenance problems. With ads starting to get some new features, it started to slow down FaceBook’s code maintenance. During that time a prototype of React was being made to fix the problem. Two years later it was released to the public free to use. To use it you will have to install Node js. Then run the command npm install -g create-react-app to install React Globally. The link to install node js will be down below. &lt;/p&gt;

&lt;p&gt;To use react you need to do 3 steps&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a basic HTML file with a div that has an id
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&amp;lt;html&amp;gt;
    &amp;lt;title&amp;gt;test&amp;lt;title&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;div id =”mainApp”&amp;gt;&amp;lt;div
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

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

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; 2. create an app.js file and import react 
       .to use React you need to import it the file
        that is using react
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
Import React from ‘react’;

Function App(){
//used to hold important data
this.state= {
This.string = ‘this is a example’
},

Log: function(){
console.log(this.state.example)

//return a div
return(
&amp;lt;div&amp;gt;
&amp;lt;div&amp;gt;hello&amp;lt;/div&amp;gt;
&amp;lt;button onCLick={log()}&amp;gt;
&amp;lt;/div&amp;gt;
)

}

Export default App;          

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To render app.js you will need to render it using ReactDOM.render() from an index.js file
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
Import React from ‘react’;
Import ReactDom from ‘react-dom’;
Import App from “app.js”
//App will be rendered in the div that holds the ID of mainApp
ReactDOM.render(&amp;lt;App /&amp;gt;, Document.getElementById(‘mainApp’));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One of my favorite components to use is componentdidmount. When &lt;br&gt;
you put this function in your code it will run when the page renders. One good example of this would be using it for AJAX requests. You Could use a GET request to get your account information when you log in To your Facebook account. Another good example would be if you try to Go to some sites like an alcohol site. It will ask you to confirm if you're the Appropriate age to use this site.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;componentdidmount(){
console.log(‘will run when page is rendered’)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Links used for bolg:&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=Tn6-PIqc4UM"&gt;https://www.youtube.com/watch?v=Tn6-PIqc4UM&lt;/a&gt;&lt;br&gt;
&lt;a href="https://blog.risingstack.com/the-history-of-react-js-on-a-timeline"&gt;https://blog.risingstack.com/the-history-of-react-js-on-a-timeline&lt;/a&gt;&lt;br&gt;
&lt;a href="https://react.dev/learn/installation"&gt;https://react.dev/learn/installation&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=hQAHSlTtcmY&amp;amp;t=158s"&gt;https://www.youtube.com/watch?v=hQAHSlTtcmY&amp;amp;t=158s&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;//download link &lt;br&gt;
&lt;a href="https://nodejs.org/en/download"&gt;https://nodejs.org/en/download&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.geeksforgeeks.org/how-to-install-reactjs-on-windows/"&gt;https://www.geeksforgeeks.org/how-to-install-reactjs-on-windows/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Basics of PostMan</title>
      <dc:creator>gagecantrelle</dc:creator>
      <pubDate>Thu, 07 Dec 2023 23:58:57 +0000</pubDate>
      <link>https://dev.to/gagecantrelle/the-basics-of-postman-n5j</link>
      <guid>https://dev.to/gagecantrelle/the-basics-of-postman-n5j</guid>
      <description>&lt;p&gt;When you are creating a website for whatever reason, from shopping, social media, or entertainment, You will need a server to hold all your information. Setting up a server can be a bit tricky. The server will be hosted from a different computer rather than the one you are working on, which makes testing if your code can send and receive data difficult. Luckily there is an application called PostMan that will help with test sending and receiving data.&lt;/p&gt;

&lt;p&gt;PostMan was created by a former intern at Yahoo called Abhinav Asthanan. He created PostMan as a side project due to API tests and development. It was first released in 2012 as a Browser extension then later became cross-platform. The application is free to download and easy to use. It will probably take an hour to download if I remember correctly. The link to download is at the bottom of the blog.&lt;/p&gt;

&lt;p&gt;Let's look at how you can use PostMan&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;To use PostMan you need to have a good understanding of how to &lt;br&gt;
use Ajax. I did a blog on the basics of Ajax but the blog &lt;br&gt;
doesn't have all the details of using some of the commands. The &lt;br&gt;
link to the Blog will be at the bottom of the blog.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When you start Postman it should create an empty file. If not,&lt;br&gt;
right-click the file box and click create/add file. Then select&lt;br&gt;
the request you want to do. There are seven to pick from but we &lt;br&gt;
will only look at 4 of them.&lt;br&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%2Fqaaocup6ju30y5ja5k5z.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%2Fqaaocup6ju30y5ja5k5z.png" alt="Image description" width="800" height="569"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GET, this request will ask the server it's targeting for data, &lt;br&gt;
then show the data in the response box. Also for each request,&lt;br&gt;
you will need a link to target the code sending the request. &lt;br&gt;
This link will act as an ID for your code.&lt;br&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%2Flutgkgsy88lvetre9lhe.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%2Flutgkgsy88lvetre9lhe.png" alt="Image description" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;POST, this request will add data to the server. the response &lt;br&gt;
box should show a number that represents if the data was &lt;br&gt;
successfully sent.&lt;br&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%2F43xxcky9yztnlgrfru85.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%2F43xxcky9yztnlgrfru85.png" alt="Image description" width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Patch, this request updates the targeted data with the given &lt;br&gt;
data&lt;br&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%2Fc809plo479p1ltq202o6.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%2Fc809plo479p1ltq202o6.png" alt="Image description" width="800" height="585"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DELETE, this request removes targeted data&lt;br&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%2F7v2bqn2f3w0pdlwtnsbj.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%2F7v2bqn2f3w0pdlwtnsbj.png" alt="Image description" width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A good example of this application being used is test code for updates. Facebook and YouTube send requests to their servers. PostMan will help them check and see if whatever update they're doing will work/ not break any other code.&lt;br&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%2Fw72z9qo88g6wv68n9jrv.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%2Fw72z9qo88g6wv68n9jrv.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;br&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%2Fzrsy79b3quvm66ozst1u.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%2Fzrsy79b3quvm66ozst1u.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;//link to AJAX blog&lt;br&gt;
&lt;a href="https://dev.to/gagecantrelle/the-basics-of-ajax-3m6"&gt;https://dev.to/gagecantrelle/the-basics-of-ajax-3m6&lt;/a&gt;&lt;br&gt;
//links&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Postman_(software)"&gt;https://en.wikipedia.org/wiki/Postman_(software)&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.postman.com/downloads/"&gt;https://www.postman.com/downloads/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://logo-studio.blogspot.com/2011/08/facebook-icon-vector.html"&gt;https://logo-studio.blogspot.com/2011/08/facebook-icon-vector.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pngpedia.blogspot.com/2019/11/youtube-subscribe-icon-logo.html"&gt;https://pngpedia.blogspot.com/2019/11/youtube-subscribe-icon-logo.html&lt;/a&gt;&lt;/p&gt;

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