Hey welcome everybody, in this video I will guide you through the process of creating an AWS S3 bucket and applying public permissions so that the files are available to anybody on the internet. In the second half of the video, we will create a file upload form using Next.js and the official AWS S3 client SDK. This time as requested, we will use server actions to do the file uploads. Hey welcome everybody and let's get started. I've already logged into my AWS account and I'm currently here on the dashboard. Now let's create all S3 buckets. So search S3, find the service here, click on it. From here, let's click create bucket. Choose your region for me. This is going to be Europe London. The bucket name I'm going to put as my next js-website and leave everything else as it is. Then scroll down for the object ownership. I'm going to leave it as the recommended here, ACS disabled. Let's scroll down a little bit more. We have public access settings for this bucket. So as of now, I'm going to leave this the way it is. So this is going to be ticked. But later on, I'm going to show you how we can change this so all files are publicly available. And if you scroll down a little bit more from here, if you wish to, you can enable bucket versioning. I'm going to disable mine. If you wish, you can add some tag and put the default encryption. I'm going to leave mine as server site encryption with Amazon S3 managed keys. Bucket key is enabled and that's pretty much it. Let's click create bucket. Okay, now that our bucket is created, let's select it. And from here, let's upload a file. So I'm going to click upload, add files. I'm going to select an image that I downloaded from a splash and then scroll down and upload. And now we have the images here at the bottom. If I click on the name of the image here, this should lead you to the properties of this specific image. And from here, you can see the type, the size, when it was last modified. And here on the right side, we have the actual URL. If I was to click on the URL right now and open this in another browser, basically here, you will see that we are getting access denied. So if you wish to, you can make this file publicly available. And if I go back, what we need to do is go back to a bucket. So I'm going to click on destination here and then we're here under our bucket. As you can see my next JS website and we need to go to permissions from here. We need to go to your block public access and click on edit and block all public access. So basically everything here isn't ticked and we need to save changes. Confirm and then confirm. OK, now that our public access is enabled, we still won't be able to see the image just yet. If I refresh on the image, you'll see still access denied. And this is because we need to apply a bucket policy. So again, under permissions here under bucket permissions, scroll down and we have bucket policy. From here, if you click edit, you'll be able to see that they have a policy generator which you can use. It's quite complex, but if you know what you're after, you should be able to use this and make it work. Alternatively, obviously you can use AI to generate one for you and you can test it. Or you can go here under policy examples. And if you click on this on another tab here, you will see that if you scroll down a little bit, you will see that they have a lot of different policies here. So you can scroll down and find maybe you can find one that works for you. As you can see, you can allow access to only your organization. You can manage access based on specific IP, which can be quite useful and so on. So I've already created a policy, which I'm going to have in the description below and I'm going to close this. So let's go back to the policy here. So I'm going to copy my policy and paste it here. And essentially, this policy is going to allow the public read access. And one thing that you need to change from here is the resource. So we need to select which resource we want to use. And in order to find your resource is basically here. So copy this, don't replace the star here just before the slash, remove everything and paste. And that's it. So now if I save this policy, save changes here at the bottom. OK, successfully edited bucket policy. And now if I go back to the image and refresh. You should be able to see that the image is now loaded. And this is actually a fairly large image. And that's why I get a lot of scroll. Let's close this. And now basically, if you go to objects, you can literally select on an object. You'll be able to see that this is going to be the prefix of your bucket. And then you have the actual file name here at the end, which means that you can use this to save to your database and then maybe display images on your website if you wish to. OK, that's all cool. Now, in order to be able to upload images from our application, we need to do one more thing. We need to create a user and give that user access to a bucket. And that user is going to give us the API keys. But the first thing that we can do from here is make a note of our AWS region. So what I've done is I've already created a notepad file, which I'm going to zoom in here. I can copy this as well in the description below. But essentially, we're going to need a region access key, secret access key and a bucket name for the region. I can just copy it from here, EU dash West dash two, and I'm going to paste in here. And for the bucket name, we already know it from here. So my next JS website, I'm going to copy it here. And now we just need the access key and the secret key. So I'm going to move this and let's go back to our dashboard here. And from here, we need to search for identity and access manager for short. I am I am. And here it is. Select this. And now we can create a new user from here. You can either scroll down and select here. Users or here on the left side, you have also users under access management. So I'm going to click on users. And essentially, we need to create a new user from here. So I'm going to click create user. And let's give this user a name ready next year's server actions. And then let's click next. From here, I've already created a group which gives which I can select. But because you won't have this, let's create a new one and I'm going to search for this as well. So let's create a new group by clicking create group. And from here, we need to give it a name. Maybe I can do next JS tutorial and then Amazon S3 full access. And this is what we need to search for. So permission policies, we need to search for this permission policy, Amazon S3 full access and selected. So we're basically allowing this user to manage all S3 bucket. Create this user group. And of course, as you can see, I've applied this previous one to two users and you can do the same thing for the one that you just created. So from here, make sure that you select this. Don't forget it because you do need to add your user to this user group. I'm selecting it now and let's click next. Okay. Everything is looking good here. All I need to do is create the user and we should be good to go. Now let's click on or newly created user from here and here on the top right corner, you should have access key one. Click on create access key. From here, I don't think that matters which one you select abuse the command line interface before, and I've also used other. So I'm going to select it at this time and then click next. I'm going to skip the tag value here. I don't need this and let's click create access key. Okay. And now we have access key from here. Let's copy it and let's paste it into a notepad. So this is going to be my access key here and let's copy the secret access key. So I'm going to show and copy and let's paste it inside here. Whoops. Okay. That's all looking good. This file somewhere for now, just so you don't lose it. And that's it. I'm going to minimize this and now just click done. Okay. We are pretty much done with this. Let's just go back to a bucket. Let's select our bucket here and now we can start working on our next project. Let's start by creating a new project. I'm going to blast through this super quickly. So let's just right click open in terminal. I'm going to paste the command, which is npx create dash next dash up at latest presenter. I'm going to give my project a name. Yes, S3, server actions, my center, tab script now, ESLint now, terwin CSS now, source directory yes, uprouter yes, import alias no and that's it. I'm going to copy the name of the project and CD to it. So CD and paste the project name here and we are now inside the project folder and I'm going to open this with VGTD code. Here we have our newly created project. I've zoomed in quite a bit just so I can fit stuff on the screen really. And now I'm just going to run the project. So I'm going to do npm run def and it looks like the port of 3000 is already been taken, but I don't restart my PC. So 3001 is going to do the job. I'm going to copy this and then let's open it in the browser and our project is working. So I'm going to put the VGTD code here on the left side and the browser on the right side so we can see what's happening as we go along. All right, before we get one thing that I wanted to talk about is the approach that I'm going to be using today. If I go to server actions and mutations here and if you scroll down a little bit, you'll be able to see that the two main methods of doing this. You can either use server components and write their inline like they have an example here.  If you have a small form, you can even leave it in here. And the other way is by using the client component. And here you have to separate your files into three. So you can separate your file into actions, button and then form. I actually really like this approach now. So I'm going to use this second approach. But either way, if you'll follow along, you'll be able to potentially convert it into this method if you have a smaller form. And if that's something you want to do, close this and let's go to our project. The first thing I'm going to do is remove the style. So I'm going to go to source and then global CSS. Let's remove everything and save. This will break the front page, but it doesn't really matter. I'm just going to create a new page and create the form there from here. I'm going to copy and paste a little bit of CSS and it's super basic. I'll show you what it is. So I'm going to copy and paste it. If I zoom out a little bit, it just makes the form a little bit better. Basically, if you wish to, you can copy the CSS from the main repository. But essentially, I'm just creating a wrapper so we can give the form a max width. Some of the inputs have a little bit of spacing at the bottom here. We have a little bit of styles for the input and button. And then we have different states for the messages. So we have state message, which gives it a padding, centers the text in the middle. Then we have two states of state message success, which is green state message error, which is red. And then we have the submit button, which has just changed pretty much to a green color. And I've also used the native CSS nesting here, but you don't need to do that. So I'm sure that you'll come up with better styles. Save this, zoom in and close it. All right, let's open the explorer here. And the first thing that we need to do is to add all environment variables that we recorded earlier in the first part of the tutorial. So here they are. So I'm going to copy this and I'm going to create a new file here in the main directory called dot EMV dot local and that should do the job. And inside here is where I'm going to paste the environment variables. So paste them and we have the region, the access key, the secret key and the bucket name. That's it. Save this, close it. Let's go back to the explorer and then inside the app order here, let's create a new page. So you can call this page, whatever you like, it can be dashboard, upload, whatever. For me, I'm just going to stick to upload and press enter in order to create a basic page. To create a file called page dot JS and inside this page, we need to do the very standard export default function and call a page like so. And then we just need to return something. So in this case, I'm just going to open and close fragment here and then this is going to be an H1. Let me just change my spaces to two. I don't know why that keeps changing. Okay, that's much better. And now here I'm just going to say an H1, upload files to S3 bucket. And that's it. Our page is done. Let's visit in the browser by doing such upload and press enter. And as you can see, we have upload files to S3 bucket here. This is the name of the page. All right. So we need to split our form into multiple files and our form is basically going to be inserted in here. If I go to the explorer and then inside uploads, I'm actually going to group the actions. And this is really up to you how you organize your files. So because this upload action is only going to be used in this upload page, I'm going to group them by doing parentheses and then form like so. So we're just going to group the form, all the form files inside here. And as I said, feel free to organize your files however you like. Now from here, let's create our form. I'm going to create a new file and let's just call it form.js. Let's focus on the form and let's create something very basic to style it. I'm going to do export function and this is going to be called upload form like so. And then inside here, we can do return and then we can just return a form. I'm going to wrap this into a div with the class name of form wrapper. As this is what I added to my CSS and let's close the div here. Let's add our form. So form, we need to give it a action. So form doesn't break. I'm going to add the action in a second. Let me fix the spaces one more time. So I'm going to remove this move that. Okay. Inside of form, we need to create all input, which is going to take the file. So input type of file, and then you can give it an ID or file, if you wish, a name or file and then what do you want to accept? In this case, I'm just going to be using images, but you can use whatever you like. So I'm going to say I want to accept only images of all formats. Of course, you can specify them in here and I'm just going to close this. This is a safe closing tag. So that should be good to go. And the last thing that we need here is to create or button for the button. Let's create something basic to start with. So I'm going to create a button and close it. So this button is going to have the type of submit and I'm just going to write upload a file for now and save it. All right. Now that we have a very basic form, let's insert this into our page here. So at the top, because we're using the client method of server actions, we're going to have to add use client here at the top. Otherwise this form work and now we need to import our form. So let's do import curly brackets. We can do upload form, press enter. And we need to do add slash and then up slash upload slash form and then slash form. And now we should be able to insert a form into this file by copying the name from here and replacing it here. So open upload form and close it. Save it. And as you can see, we now have our form in here. All right. And Ossises is actually working, but I didn't add a class name to our button here. So if we add the class name of submit button, it should make it look a little bit more presentable and that's it. There is not much styling on this form. All right. We almost done with the skeleton of our form, but the last thing that we need to do is the action and then we'll build on every single file. If I go back to the form here, we need to create one more file and this is going to be called actions.js. And to start with, this needs to be use server. And the first thing that we need to import is revalidate path. So let's do import in curly brackets, revalidate path from next cache. So essentially when we submit a form, we want to clear the cache and revalidate the path. Basically it can be working kind of like a redirect to the same page without a refresh. It's pretty cool. And now we need to create our form. So let's do export async function and or function is going to be called upload file. And this function is going to have a previous state and form data. So if we go back to the documentation super quickly, basically we're going to be using use form state, which is a react hook that allows you to update state based on the result of a form action. And here we have bypassing the action from use form state. The actions function signature changes to receive a new previous state or initial state parameter as its first argument. It's a little bit confusing, but you'll see how this works in a second. Let's minimize this. And from here, let's open and close curly brackets, wrap everything into a try cache statement because this is going to be quite useful later. And from here, we can use the form data to grab the field and then use the file to upload to DS3 bucket. So in this case, if we do console.log and then form data in a second, you'll see how this works. And also we can use the revalidate path here. So when we submit you, we revalidate the same path like so, and we can return a message. So return. And then in this case, we're going to have a status message of success and we're going to have a message, which is going to be hard coded in this case. So has been uploaded like so. And I'm going to copy this and paste it for the error here, and I'm going to say error. And then the message is going to be failed to upload file. All right, let's have a look at how this is going to work now. Now that we have the actions here, go to form super quickly, and we need to insert this file at the top. So from here, we're going to do import, upload file, and then this is going to be close, but this is going to be at slash app slash upload slash form and then slash actions. And that's it. Now we also need to import the use form state, which I was talking about earlier. So I'm going to do this at the top here, import, use form state. And then this is coming from react DOM like so. And now you see how everything is going to start working together. So first of all, on the form, we want to set an initial state. So to do this, I'm going to do a const. Let's call a initial state, and this is going to be equals an object of message. And this message is going to be said to know as default. And now inside of form here, we can do const state form action. And then this is going to be using the use form state. And then we're going to be using the action here, which is the upload file. And then then we're going to set the initial state. It's a little bit confusing, but you'll see how it works in a second. And now essentially for form action, we can use this. So instead of double quotes, we just put curly brackets and then put form action. So as default, we have the form and the default message is no. I'm going to press upload files. You can see nothing is happening at the moment. And one thing that we can do straight away is from actions. If you remember, we put status of success and status of error, but you can also grab the error from the S3 buckets, which we'll look into later on. But inside form here, we can create some sort of like, for example, we can use state, question mark dot status, and basically we're checking if this is not empty. We want to display some. Let's display a div in this case. And I've already prepared a class name for this, only in the tutorial. Where is it? So global CSS, I've prepared a class name of state message, and then we can just put success or depending on what we get. So from here, in curly brackets, single slander quotes, and I'm going to put state message as or CSS. Depending on the status, we can put it in here with template liter, so I'm going to grab this state, question mark status dot status. So depending whether this is success or error, it's going to change green or red. And then we can close this div. And inside the div, we can put the actual state message dot state, question mark dot message, which comes from here, so message file has been uploaded to fail to upload file and then just close and save. So now that I saved it, as you can see, file has been uploaded. Obviously, file has not been uploaded because we haven't done any of the S3 stuff yet. But if I refresh, you will see that the current state of this is set to no. So the message is no. But if I click on upload file, file has been uploaded. And if I go here to the action dot js, and if I make an error, I don't really know how to error this, but let's just put a very bad error like so and save it. So now if I upload file, you will see that this block has errored. And now we have failed to upload file here in red. And of course, you can start this however you like. Okay, we're getting close. So let's remove this and let's now focus on one problem that we're going to have with the button. The problem that we're going to have with the button is that when I click on file upload from here, we won't be able to actually change the state from it. So what I mean by this is that when I click on the button, you might want to change this so you can't double press it, and maybe you want to change the text inside here. And unfortunately, in order for this to work, we're going to have to move this button into another file, otherwise we won't work, which is a little bit weird, but it's not so bad. Cut this, save this form, and let's create a new file here. So inside form, let's create a new file, and I'm going to call it submit button dot js. And let's create it. And this is going to be use client and then we're going to import the use form status from and then this is going to be react dumb. And this is going to allow us to do a pending button. So export function, let's call it submit button. So it's prettier. And then from here, we can set a const of pending and then this is going to be equals use form status like so. Now we just need to return and we return the actual button like so. And in order to use the pending, there are two things that we can do. First of all, the most important thing here, let me format my document because again for spaces, format doc, okay, much better. So the first thing that we can do is you don't want to double press the actual button and in order to stop that, we can use the pending from here and put it inside area disabled. So area dash disabled, like so, and we can just set the status here in curly brackets of pending, which is awesome. So that should stop you from double clicking the button. And the other thing that we can do is changing the message here. Let's leave as it is and we'll change in a second. So let's import this into a form as well. So I'm going to go back to the form here and let's import the button. To import the button, it's going to be very much the same as this. I'm going to all chip down and I'm going to put here submit button and this needs to be changed to submit button, like so. And now we can grab the button here and insert it into our form, like so. The same reason we are getting an error, let's have a look at it. So submit button and I have a spelling mistake here. So use instead of use form, I've misspelled it here. So it's use form, like so status, okay, my fault. And let's paste it in here. Save it. And as you can see, we have our button. Now, if I press the button here, you'll see that nothing is happening. File has been uploaded. All good. But if you wanted to change this, we can also do that now. Okay. So there are two ways of doing this. And the first one would be to just put file upload. And then inside here, we can use the pending. So I'm going to do pending and then and and and then in double quotes, I can just do three dots. So now if I press the file upload, if I zoom in super quickly, and if I press it, you'll be able to see that we are adding the dots here. As you can see, it changes. And you can also do something like file, file upload ink dot dot dot. And that will work if I save it. And that would probably work in English, but in other languages that might not work. So what I'm going to do is let's remove this. And let's just do pending. If it's pending, then we want to set uploading dot dot dot. And then if it's not, we just say file upload. And that would be the same thing, basically. So now we have file upload. And if I click on it, you will see that it changes really quick. But later on, we'll change the internet connection and you'll see that changes. OK, your form is finally complete. And finally, we can start using the AWS SDK for JavaScript v3. So the first thing we need to do is install it. You can use NPM, Yarn or PNPM. And I'm going to copy this one here with NPM. Let's stop the process of our application. Let me see if I can. Here we go. NPM is to add AWS dash SDK slash client dash S3. Press Enter. Let's run our project NPM run dev. Press Enter. And we should be good to go. OK, let's go back to the project. And by the way, the documentation that I just showed you has a lot of examples. So if you wish to, you can pause the video and have a look into it. All right, in this case, we've pretty much done everything. And now we can focus on the action of our form so we can upload a file. Let me refresh it just so we can see that our application is working. Yep, everything is working fine. So let's close everything except the actions. Close, close, close. And this is where we're going to do all S3 bucket logic. From here, let's import all S3 clients. So import S3 client. And this is coming from AWS dash SDK slash client dash S3. We also need to import put object command, which is going to allow us to insert a file. So put object command like so. And that's it. Now we need to set up all credentials. So all credentials are going to be inside EMV.local in this case. And I'm going to copy all of them. And super quickly, I'm going to paste them and just remove everything else. We don't want them. That's it. Let's see if I can comment them super quickly. Yep. Okay, I can comment them. So we need to set up all credentials using the S3 client. Now to start with, I'm going to do const and you can name this whatever you like. Just don't name it the same as this or what I'm going to do is put small S and then free client. And then this is going to be equals new. Now we can use the S3 client from here to create a new object and set up the credentials. So the first thing that we're going to have is the region. And then we're going to have the EMV file from here. So process, now EMV and then the region that we have in all EMV comma. And then from here, we need credentials. And for the credentials, we're going to have an object which contains the access key ID. Like so. And the access key ID is this variable here. So process.emv.access, yep, that's it, comma. And then we need the last one, which is secret access key. And this is going to be the secret access key. So process.emv.next-years-secret-access-key, like so. That's all looking good. We definitely don't want those first three in here because we just need to add the bucket name in the next step. Before we do that, let's focus on the form. So when we submit the form, we can grab all of the data from the form data here. That's why I'm actually console logging in. And what I'm going to do now is I'm going to choose a file here and I'm going to submit this cat and let's click file upload. Let's go to the console super quickly and you will see that we're getting all these messages. So we're actually getting here at the bottom, as you can see, name, file, and then we have value or file, which we can access. So it's actually picked up the image and this name file comes from our form, which is here. So here it is. So this is where it comes from. And in fact, if we do another input, just so I can show you input, let's give it a type of text and let's give it an ID of, let's say username and then name of username just for the example. All right. If I save this, and if I was to submit read and file upload, if you go back to the console, you should be able to see that here at the bottom, now we have another input, which we can access here, which is the name of username and the value of rat which comes from the input. This was just an example. I'm going to remove it just so you can see the difference here. So I'm going to remove this and let's save this. Let's go back to the actions here and let's set up the rest. So I'm going to remove the console lock here and let's just make sure that we select the file so we can upload it. In this case, I'm going to do const file and this is going to be equals the form data and we're going to get the file. And now what we can do is do a quick check to see whether we have selected the file and we can upload it. And if we don't, maybe we can just display a message. So what I'm going to do here is I'm going to do if the probably other ways of doing this, but the solution I came out here is that we can grab the file and each file actually has a size. So I'm going to size. In fact, I can console lock this in second view and if the size is equals equals equals zero, then can return the status from here. So I'm going to do the error. Like so. I know it's hard coded, but status is going to be error. Message failed to upload file. Now we need to change this to please select a file and what I can show you here is that if we console lock the file, if I do console.log file super quickly and if I do, let's select one. Let's select the cut here and I will upload. Okay. If I go back here, you will see that when I console log the file, we have the file and this file has a size, image type, name and last modified. So we can definitely use this to advantage to check whether the file is zero and then we can also use the name to insert into database. If we have one, we don't in this case, or we can use this name to insert into S3 bucket.  And now if we get a file, we also want to continue and we're going to do const buffer. This is for file and we're going to be using buffer.from and we're going to await file dot array buffer. And if we go super quickly to the developer dot Mozilla dot org, you will see that the array buffer object is used to represent a generic row binary data buffer. It's an array of bytes often referred to in other language as byte array. Let's close this. That's how we're going to be able to upload the file. And now we need to create or upload function. So I'm going to do await. And then this is going to be called upload file to S3 S3. And then we're going to grab the file from here, buffer. And then as I showed you earlier, when we console log the file, we can grab the name but then file dot name as well. So we can pass those two into the function that I'm going to create now. So let's create this function. I'm going to copy the name and we can create around here. So this needs to be an asynchronous function. And so a sync function and let's give it a name of upload file to S3.  We're going to grab the file and then we're going to grab the file name from here, file, file name that comes in this function. And then from here, from here, I'm going to do const and I'm going to create a variable called file, buffer. And this is going to be because the file, this can be quite useful. If you want to use a library like shout, for example, to crop your images or to optimize your images, that can be quite cool. And then from here, we're going to do const. And we need to set up the bucket parameters. So params equals. And then in an object, we're going to do bucket. And this is going to be the bucket name. So I'm going to grab a from or EMV file, remove this. So this is going to be process.emv.next, underscore AWS, underscore S3, underscore bucket name. Then we're going to have comma, we need the key and the key is essentially or file name. So inside here, we're going to grab the file name and I can put it in template rituals for now. I'm going to show you why in a second. So we're grabbing the file name, for example, cut.jpeg. And then the body is where we actually insert the file. So you can either use file from here, just but file, or you can use the file buffer and put it inside here like so. And that's going to upload the image. And then the last thing that we need to do is the content type. For me, I'm just going to be using images in this case. So I'm going to do image dash JPEG and then make sure that you see the content types available from the official documentation should be easy to find. And the last thing that we need to do is use this, put object command in order to insert the actual image or file. So in this case, this is going to be inside the same function here. And we're going to do const command equals new, put object command. And then we pass the parameters inside here. So you can pass it inside here, or you can copy the whole object and put it inside here, whatever you prefer. This seems a little bit cleaner.  Just in case the file doesn't get uploaded. So I'm going to do const response equals await. And then we're going to wait for the S3 from here, S3 client, with the small letter dot send. So we're sending and we're sending this command with all the parameters. And from here, you can console log your response if you wish to. And just pretend the file name, so return, file, name like so. And then for the error, you can just do throw an error or whatever you wish. And that's it. So now, after all this, let's right click and format this document. It's all looking good. Hopefully we won't have any errors. But now if I open my bucket here super quickly, let's put it to the left. Let's put on the left side super quickly. And as you can see, we only have the first file that I uploaded manually. But now if I click on choose file, and let's select the cut super quickly and press file upload. Uploading and it finished. File has been uploaded. If I refresh, hopefully we should see the cut. And here it is. So we have the cut inside here. We have the kilobytes. So if I click on them, we have everything about the image here. And if I click on the object, you will see that we're getting the kitty here. So let's do one more. And in this case, I'm going to open the inspector tool. And if I can undock this, I'm going to undock this super quickly. And what I want to do is mimic a slow connection. So let me remove the mobile. And if you go to network here, and if you can see, here we go. If you go to network here, you can do a slow internet connection. So no fraudulent. I can do it as potentially slow 3G. And maybe I can choose one of the large images. Let's see what happens now. I'm going to refresh the browser. And now, okay, everything is loading. It's taking a while. All right. This is slower than I expected. All right. This was a little bit slower than I expected. So now that our page has finished loading, let's select a bigger file like this one here. And let's do file upload. I'm going to click there. As you can see, we're getting uploading. Of course, you can change the color of this. You can change, you can add animation here or whatever, but we have uploading. And this, I think it's a fairly large image. So I'm assuming that this is going to take a while and I'll come back to it once it's done. All right. This is taking generally too long. So what I'm going to do is let's switch to, let's switch to 3G. All right. No fraudulent now. Let's refresh. And now let's set this to fast 3G. And now let's upload the cat one more time. I'm going to select it because those two files are too big. I'm going to select the cat and then file upload. As you can see, these changes to uploading. And as you can see, yep, you probably saw the request here. And then we have our has been uploaded. Yeah. And that's how it works. And the last thing I'm going to remove the fraudulent. Let's close this. So if we go back to here, as you can see, I uploaded the cat a couple of times now, but we only got it once. And the reason for this is because every time I upload a file with exactly the same name, it just replaces it instead of uploading a new file. And the reason for this is because of the name. So what you can do here in the params file name is you can set up unique name. You can use a third party library or you can do something like, I don't know, something like date now. Let's do in dollar sign curly bracket date now and see whether we can upload another cat. So I'm selecting the cat here, file upload, it's uploaded. And now if I go back to the files here and let's refresh, we should be able to see cat.jpeg with the random numbers now, which is the date now and the photo should still work. Here it is. All right. And if you wanted to upload this file into another folder, what you can do is let's remove the date for now. We don't need it. And literally we can just put the folder name here. So let's say images or whatever and then slash and then the file name in here. So if I save this and let's upload one of the big files. So I'm going to choose this one here. It's like, it's fairly large. So it's going to take about to upload. In fact, let's refresh everything. So everything is clean. I'm selecting new file. It's fairly large file upload, uploading. And now if you go to the file uploaded and if I go here for refresh, we should be able to see that we have another folder here called images. And if I click on images, we have the file that I just uploaded. Here it is. And yeah, it's one of the big files, which is pretty cool. Before we end the video, I wanted to show you a really cool library for image optimization and manipulation. So the library is called sharp and you can do quite a lot of things with it. You can resize images. You can optimize images. You can do some color manipulation, channel manipulation and so on. For example, if I click on resize image, you will see that you can do resize, extend, extract, trim and so on. And if I scroll down here, you will see from here some of the values that you can use. And I'm just gonna demonstrate super quickly how you can use this to optimize your images. So the first thing that we need to do is to install the library. So if you use an NPM, you can just do NPM install sharp and they have some other options in here. So let's copy this one. Let's go back to the terminal, right click to install this and then let's do NPM run dev. Okay, your application is back and running. And now let's see how we can optimize our file. Let's include it at the top of our project here. So let's do import sharp and then this is gonna be from sharp like so. So now to use sharp, we're gonna go here to the upload file to S3 and we can already grab the file. So this is just before we're uploading the file. And if you wish to, you can create another function for this but I'm just gonna do a inline here. And in order to do this, so I'm gonna do const file buffer equals and then we can do await because this is an asynchronous function. Then we can use sharp and then inside the sharp, we can put the file that we want to optimize. And now we can start chaining some of the options that we wanna do. So for example, if you do dot, we can do if you do dot jpeg. Inside the jpeg, there is an option for quality. So for example, I can do quality and choose the value. Let's say 90. And then we need to chain one more and do to buffer like so and close this. Okay, now let's try to upload another file. But in this case, let's just remove this folder we don't want that. And let's try to upload another file. So I'm gonna grab one of the big files here. I'm gonna grab this file here. And if I do properties, you'll see that this is 11.6 megabytes. So I'm gonna grab this, open it and then file upload. Okay, it's uploading. Okay, file has been uploaded. Now, if I go to the S3 bucket, if I click on it, let's refresh. Here we have our file, which is 12.1 megabytes. And if I click on it, we'll be able to see it in a new tab here. Here is the file. It is a very big file. Now let's do the same thing with let's say the quality of 50, for example. Save this and let's re-upload the same file. So I'm gonna do choose file, select this one again, file uploading. Okay. And now if you remember, this one was 12.1 megabytes. And if I refresh, because this is just gonna overwrite it, assume I came, yep. As you can see, now this file is 7.4 megabytes. And the quality should be more or less the same. So this was the old one. I'm not gonna refresh here. And let's open a new one. You probably wouldn't be able to tell the difference, but here it is. But yeah, it's gonna be hard to put aside by side. It's gonna be hard to put aside by side. But as you can see, there is barely any difference in quality, but in terms of size, it's quite a huge difference. And you can do a lot more stuff like this. I'm just gonna show you one more example. Let's put them on another line like so, just so they're easy to see. And we can chain more stuff, for example, resize. And inside here, we can put the width. So let's say 800. And let's put the height of 400. I'm not sure what's gonna happen, but let's save this and let's try it out one more time. So I'm gonna grab the file, file upload. So it's going to optimize it and resize if it is. And if we go back, let's see. So last time was 7.4 megabytes. Let's refresh. And now it's 36.9 kilobytes, which is insane. And now let's click on this. And as you can see, the quality of it is totally different now. And let me just save this super quickly. Gonna save it here and let's have a look. See if we put details. Yeah, it seems like it's resized as well. Dimension side 800 by 400, which didn't seem like in the browser, maybe it stretches it. But as you can see, the dimensions have changed and the file size has changed as well, which is pretty cool. And that's gonna be everything from this tutorial.


We need to be very much aware of the ethics of all these treatments, not just IVF. I mean, I think we understand very well that we've got to be very cautious about making sure that people don't get the wrong sperm or eggs, or not being treated when they're ridiculously old or too young. But I think a much bigger ethical responsibility is the commercial process. And of course, that we can't control. And of course, we're a non-commercial organisation. So the IVF that goes on here is, in fact, as far as we're concerned, is entirely free. So the research we do is not charged to the patient. And we, I think as a group, would argue the research we do should be charged to the charity. And that, I think, is an important principle. But I don't think we need a code of ethics for that. I think that's just common sense. And sadly, what has happened with IVF, seeing as you mentioned it, has become very big business. But you know, there are ethical issues in every aspect. I mean, the big ethical issues about caring for a newborn child that may not survive, and may, if it does survive, be brain damaged. Do you switch the nice support off, or do you hope that it might get better when you can't predict exactly what's going to happen? So those are problems that our people, our clinicians, deal with every day. And they're very difficult problems to deal with.


Hi, I'm Tossus with RF elements. Thank you for joining our webinar today. Today We'll be discussing our symmetrical horn antennas with twist port technology and all the unique benefits from these types of antennas First of all, I'd like to introduce RF elements. Our company was established in 2010 in Slovakia We currently have 73 people working at RF elements mainly in developing new products We have two offices in Slovakia one in Bratislava and one in Humene We also have an office in Austin, Texas to support the Americas our main focus is innovation and innovative products Our products are different. They work better and look better than their competitors We manufacture products for building wireless networks. Our customers are ISPs internet service providers in 2014 we introduced a brand new concept based on our quick locking wave guide connector twist port We have to find a new reference design for radios and antennas without RF connectors or RF cables We named radios with our twist port connector simper And we introduced a completely new series of antennas and twist port adapters for the integration of other vendors radios Today, I'm going to speak about symmetrical horn antennas with twist port connectors Which are part of our twist port ecosystem the first thing that you will notice on this antenna is its unusual shape Symmetrical horn antennas are a scowler horn type of antenna The next thing that you will notice on this antenna is its unique connector It is called a twist port connector our proprietary patent-pending waveguide connector It brings many benefits from which we will talk about the two main ones no loss and simplicity Twist port allows the connection of radios to the antenna virtually without loss We use the term virtually because there is a very small loss But if we compare it to traditional coaxial connectors, the loss is almost unmeasurable Twist port also offers a very simple installation of the radio to twist port adapters You just twist and lock the radio. It is very easy and can be done with one hand As I already mentioned symmetrical horn antennas are a scowler horn type of antenna The shape of the beam is different than traditional sector antennas The beam of a traditional sector antenna is usually very wide in azimuth, but too narrow in elevation On the other hand the beam of a symmetrical horn antenna is symmetrical with precise width It is similar to the beam of light that is created in a flashlight when you turn it on The beam of these antennas are very unique. The main beam is circular Radiation angles are the same in azimuth as well as elevation This feature brings many benefits in real-life deployments The first benefit that a symmetrical horn antenna brings is the coverage area without a null zone Thanks to the fact that the radiation angle in elevation is wide By using these antennas you can provide connectivity to customers that are close into the tower This is not possible with traditional sector antennas that have very narrow radiation angles in the elevation plane Symmetrical horn antennas have a frequency constant beam when changing frequencies The beam does not significantly change its shape and it stays constant as you can see in this animation With traditional sector antennas the beam is strongly frequency dependent So when you change channels you can lose connectivity with previously connected clients You don't have to worry about that with symmetrical horn antennas This simulation shows how the beam of a traditional sector antenna changes with frequency It is becoming narrower in azimuth and wider in elevation plane With symmetrical horn antennas the delta is really small the shape of the beam is still the same Not only does the shape of the beam not change with frequency But also gain of symmetrical horn antennas is frequency stable and does not change as much as with traditional sectors The gain shown on these graphs is of our 30 degrees symmetrical horn antenna in horizontal and vertical polarizations As you can see the antenna has a gain of around 18 dbi across the whole frequency range And moreover the gain is completely the same for both polarizations. This is very important for performance of MIMO links And now the best thing Symmetrical horn antennas do not have any side lobes really no side lobes at all on the left side There is a very popular antenna from a competitor which operates in the 5 gigahertz band has 19 dbi of gain and expect at 120 degree radiation angle the simulation clearly shows side lobes on the side and back of the antenna These side lobes are a huge source of interference for all other antennas in the second simulation on the right You can see that symmetrical horn antennas radiate in the main beam and do not have any side lobes Other clients and antennas on the side will not interfere with symmetrical horns It's important to realize the fact that symmetrical horn antennas do not have side lobes benefits you in two ways It means that the antenna does not create interference But also it does not receive any interference outside of the main lobe on the other hand the antenna on the left Just creates a lot of interference and also receives lots of noise from the back and sides thanks to its massive side lobes Side lobes are not just a problem of cheap antennas as an example of expensive antennas The simulation in the left shows a more recent AC antenna from a competitor with a 45 degree radiation angle The MSRP price of this antenna is about $200 as you can see there are less side lobes and with the previous antenna But they still exist what's more important to note is the main lobe in this polarization is aiming slightly to the left Which affects the overall performance of the sector in real-world deployments on the right side You can see how well our symmetrical horn antennas work It does not have any side lobes and the main lobe is aiming directly forward in both polarizations Currently we offer seven models of symmetrical horn antennas with radiation angles from 30 to 90 with 10 degree steps As you can see the radiation angle is very precise Precise radiation angles without side lobes allow you to scale your network as you need it You don't have to choose from just a few options such as 120 degree 90 degree or even 45 degrees to design your network accordingly With symmetrical horn antennas you can finally plan your network as it should be done This means using the right antennas with reasonable gain to cover only the area where you really have customers and do not Pollute precious spectrum by propagating signal elsewhere and thus creating noise It is important to realize that by choosing the correct antenna with suitable radiation patterns and proper gain You will reduce the noise level in your environment and increase the throughput of your network from multiple real-world deployments We know the distances that our customers were able to achieve for example A customer in Mexico was able to achieve a 25 kilometer link with a 30 degree symmetrical horn antenna and a 31 dbi Rocket dish as a client in Guatemala another customer achieved a 24 kilometer link with a 60 degree symmetrical horn antenna and a 30 dbi rocket dish as a client all in point to multi-point This is just an interesting fact because using sectors for long distances is something that you should definitely try to avoid But is possible if needed another benefit of symmetrical horn antennas is their compact size The size is one fourth that of a traditional sector antenna This allows you to deploy symmetrical horn antennas where you are limited on space or you need to reduce the wind loading on your tower Symmetrical horn antennas are made from high quality and durable materials All the metal parts are made out of aluminum plastic parts are made of UV resistant plastics and hardware is from stainless steel There are no surface-treated materials that can corrode So symmetrical horn antennas can be used in very demanding weather conditions and harsh environments Our customers are using these antennas in different conditions from Alaska to Subtropic areas to deserts without a problem Let's summarize when you should use a symmetrical horn antenna. First reason is a problem with interference Symmetrical horn antennas do not have any side lobes So they do not receive signal outside the main lobe, which means they do not receive noise Also symmetrical horns are perfect if you need to use a narrow sector either due to Geographical topology or location of your clients when they are not distributed over a wide area Narrow sectors are necessary when you have a huge number of customers concentrated in an area Splitting such an overcrowded sector into a few narrow sectors will allow you to cover the same amount of customers But with more ap's so you will be able to achieve higher throughputs Another scenario where you could use symmetrical horns are in hills mountains and valleys in this case You require good vertical performance Symmetrical horns have the same horizontal and vertical performance So you can cover even clients that are on the same elevation level These antennas solve the null issue and they can cover areas that are close to your tower No electrical or mechanical down tilt is needed and thanks to their compact size You can use them when space on your tower is limited or you can't put more equipment on the tower due to win-load issues Here is just a brief overview of some symmetrical horn technical parameters The rest of the parameters you can find in data sheets that can be downloaded from our web page www.RFElements.com We are glad to see so many positive feedbacks from our customers AU wireless a provider from the US replaced antennas from a competitor with our symmetrical horn twist port antennas As you can see they perform very well No problems with side lobes improved SNR and perfect coverage in an elevation complex install Excellent feedback from a customer in Nigeria Nurdeen was previously not able to provide even two megs per client even when the signal level was good After he replaced a competitor's antenna with our 40 degree symmetrical horn antenna The problems were gone and he was able to operate and maintain an 80 megahertz channel Starnet is a wireless service provider in Albania after they replaced their previous antennas with symmetrical horn twist port antennas They achieved significant improvements in signal level as well as throughput So they decided to use these antennas also on their future installations You can find a case study from Starnet on our website in the testimonial section We have many positive feedbacks from our customers. You can find them on our YouTube channel as well We would appreciate it if you can leave your feedback on our community portal www.RFELab.com share your feedback with other ISPs Ask us questions and share your ideas with us. If you'd like to learn more about our products You can go to our website www.RFELab.com Also, we are present on many different social networks such as Facebook, Google Plus, LinkedIn and Twitter where you can follow us On our YouTube channel, you can find many interesting videos for example interviews with customers That are using our symmetrical horn twist port antennas and speaking about their experiences with these antennas What they achieved and how they like it Thanks again for taking the time out of your day to watch our webinar I hope you learned a lot of new information about our products and how they can benefit you Have a good day and stay tuned for our next webinar. Bye


Colin, congratulations on your performance today. But you're not here a long time, but how does it feel to have your first win of the season? Well, that's what we've been working on from being in here. So that has happened today. You missed a chance earlier in the game and you bent over head-in-hand. Were you worried that it would come back to haunt you today if you hadn't won? Well, as a striker, eventually when you miss one, you feel it will be haunt you in the end. The wait for the penalty was a long one. I mean, how nerve-wracking was it for you? Well, it's 12 yards, so I'm very confident for me to reach a penalty spot. All right, it's your first win of the season.  All the best going forward. Thank you. Yeah, there you have it, Marlon. Player of the game. And he said there was never a doubt that he was going to score another and as a striker, that's the attributes you want when you miss a chance. You're up for it. It did miss, you did miss a lot. Well, two really good chances today. Come back to haunt you. I mean, it must be very disappointing in terms of that regards, but in terms of chances created in open play, probably didn't create a lot. No, no, not a lot, but I think the first... Yeah, the second clear-code chance of the day we get it today. And you know, unfortunately, I don't know what to say, but as I tell her earlier, before a win, I will be here, lose. So this is my last game official for Treasure Beach. I was going to go there, but you said it. That seems to have been the ultimate. There's 12 losses in a row.  Is it that you are walking or Treasure Beach had given you the ultimatum? Well, they can put it as a combination, you know.  Well, I think today, you know, I think somebody should really take up this. And the club, she already seems sentiment as meat, you know. So as I said, it's a combination. It's a mutual party. So that's it. Any parting words for Treasure Beach? You'd want to leave with them in terms of what they probably need to do that you probably couldn't get done? No, yeah. Big and serious, no. It's what it is. OK, all right, then. Anything else for you in the league, or it's just back to schoolboy football thinking? Oh, God, that's all right. Me and I have a clash early in the summer. But let's see, you know, what definitely do I think I need some time to do some reflection? Honestly, you know, I don't think I'm going to miss any football until I'm the schoolboy season. I was going to say season. So I'm going to get my mental space back up and running, you know, and things like that and focus on the future. Well, all the best. They say you learn from these difficult moments. All the best to you. Yes, yes. Well, listen, let her listen, you know, let her listen. Because obviously, it's the biggest league in the country and you have to be in it to know about it. So nice experience for me because it was my dream to be a coach in the Premier League. And, you know, I really live it. So here's what it is. All right, coach, all the best. Jerry Beagle. So, coach Weatherburn, they're officially stating mutual by mutual consent. They have decided to part ways themselves and Treasure Beach. You feel by mutual consent. Lime Hall is going to say to this man, stay on board. This is your first win. How does it feel? It feels good. Feels good to finally get one across the line. We've since I've been at the club, we've come close. We've had some good games. We've had some games where we battled. And then there were one or two that weren't up to par. So it's good to come out and actually come out on the right side of the result today. Yeah, at this stage, it's not really about performance, it's result. It wasn't the most silky smooth performance from you. But what is it that you like most about your team's performance today? You're right. We normally prefer to see it a little bit more aesthetically pleasing, but it was about the result today. So we like the intensity. We like the desire. We really wanted to be brave. I still think we have a lot of work to do in terms of getting braver. But I thought today that we were a lot more positive. We had a little bit more depth coming off the bench, a few more options that we could work with. And I felt that today we could have mixed it up a little bit more and our approach could have been a little bit different. And being able to play that a little bit more dynamic for us was some of the more aspects that we are pleased with the most. Well, good result by you, coach. First win, go on and soak it in because the next assignment will be tougher. All the best. Well, you know, it's not about soaking this one up. I believe the work has just started. We've added to the coaching staff as well. And so for us, you know, it's important that we keep growing both on and off the pitch. All the best, coach. Yeah.


So, I am Venus Zihora, noble and my mother always starts with something that she told me when I was so young I can't start anything without saying it. She said, trust in the Lord with all your heart and lean not to your own understanding with all your ways acknowledge him and he will direct your path. Shiz, my path was directed to you today and amongst all these wonderful writers today. This morning I called Oscar Grant's mother who couldn't be here and we all know the infamous story of what happened to Oscar Grant at the Foodvale Station in Oakland. I told her this morning I said it will honor you this morning and I want you to know it. I want you to tell Geneva, Sandra Bland's mother whom I met three weeks ago.  So I'm going to read this poem that I wrote, O to the enduring woman. Is there a befitting sonnet that can capture all her strength, doubtful for the heroine thrives. Her patience and compassion will stretch at any length. Her beauty transcends definitions from all lexicon's or picture of any model. She is sustained by an obscured superior powerful love often unrecognized. She withstands continual battles. Her name is Wanda, the one who merged as an activist when the cop couldn't tell the difference between a taser and a gun. His self-righteous, indignation, unbelievable after he shot Oscar, her son. Her name is Lucy, her name is Samaria. When young Jordan and young Tamir were snatched away by rogue racists, she stood stern and resolute staring at their faces. Don't forget Sandra Bland who they called depressed and found hanging in her cell. Her blood cries defiantly asking, who me? Suicide?  She had to accept, I'm sorry, Alan's, Alan is Geraldine, Geraldine is Alan's mama. We all know her right. She had to accept his diploma after he was killed. It ignited her vigilant fight. Her name is Sabrina. Trayvon was a real danger you see for wearing a hoodie and carrying skittles. His killer then was set free. A lapse of logic prevailed when Valerie contested. Citing a system that hunts black men, Philando died on camera with no justice. Erica and Eric should not have died. Gwen and Gloria lamented as their murderers tried to hide. The cowardly deeds so vicious and contrived these women came from obscurity, forming a justice league, starting a movement for all to see demanding lasting peace. I am Venus Zahora Noble. I'm a black mama who lost her son and almost his brother and her nephew. I have enduring values. Thank you.


Welcome to this special CUBE Conversation. I'm John Furrier, your host of the CUBE here in Palo Alto, California. We've got two great remote guests here having a conversation around security, security convergence with platforms around networking and security, with cybersecurity at an all-time high, the need for understanding how to manage the breaches, how to understand them, prevent them, everything in between, cybersecurity and data is the number one conversation happening in the world today. We've got two great guests, got Nirav Shah, VP of products at Fortinet and Peter Newton, senior director of products at Fortinet. The product leaders in the hottest cybersecurity company. Guys, thanks for coming on this CUBE Conversation. Thanks for having us. Thank you, John. So last month or so, I talked to John Madison about the Fortinet new release, FortiOS 7.0, as well as highlighting the convergence that's going on between the platforms around companies trying to consolidate and or manage or grow and build converting networking. And security together, you're seeing that happening in real time. Still doesn't change the underpinnings of how the internet works and how these companies are structured. But the need for security is at an all-time high. Talk about the impact to the customer. Do you guys have the keys to the kingdom here? Product group, what is the killer product? What are customers doing? Give us the overview of why there's such a big need for the security platforms right now. Yeah, absolutely, John. So if you see today's environment, we have seen working from anywhere has become normal. And as part of that, we have seen so many different network edges. At the same time, they have different devices that they're using from anywhere. So what's important is, as users have different devices, different users and applications that they're consuming from cloud, we have to make sure that we provide security across the endpoint, across all network edges, and go into the cloud compute. And for that kind of approach, you cannot have point products, provide the visibility control and management. You need to have a comprehensive cybersecurity platform which gives you security from that endpoint to the edge to the user, so that you have a simple, but effective management and have a solid security in place to get that working from anywhere in a much more better user experience way. And that's exactly what Fortinet described as a security fabric platform. You know, it's interesting, not to kind of go on a tangent here, but to illustrate the point is, if you look at all the cyber security challenges that we're facing globally, especially here in the United States, the public-private partnerships are increasing. We're seeing more public sector, commercial integration, the role of data. We've covered this on SiliconANGLE and many other CUBE interviews, especially with you guys. And there's all this kind of new approaches. Everyone's trying everything. They're buying every product that's out there. But now there's like overload. There's too much product. And the obvious thing that's becoming clear is cloud scale, the evolution of this new edge environment. And so with that becomes the importance of two trends that you guys are participating in. I want to get your thoughts on this because that's called SASE and SD-WAN. We know SD-WAN, but SASE stands for Secure Access Service Edge. That's, I think Gartner made that term up or someone made that term up, but that's a new technology. And you got SD-WAN. These are traditionally have been like edge for like branch offices now evolve now as pure network edges and then distribute a computing environment. What's so important about these two topics, Nirav? Take us through the changes that are happening and why it's important for enterprises to get a handle on this. Yeah, John. So as you said, SASE, Secure Access Service Edge, really the foundation of that topic is the convergence of networking and security. And as you mentioned, Fortinet has been doing a lot of innovation in this area, right? Six years back, we pioneered the convergence of security and networking with Secure SD-WAN. But what's happening now with the SASE is as that working from anywhere continues to remain the dominant trend, users are looking for a cloud-delivered security. And that's what Fortinet recently announced where we can provide the most comprehensive cloud-delivered security for remote users, for thin edges. You can still have any time access from any device. To give you an example, now are remote users. They are still at home or they can be branch of one user, but still have that always on threat protection with the consistent security given in a cloud. So they don't have to go any more from the branch or data center but have a direct connectivity to the cloud security before they access SASE application. That's what one of the SASE trend is. Second thing, John, we are observing is users are now, as they are going back to the hybrid workforce, they are looking for a thin edge, right? To your point of an edge, edge is still intelligent and very important, but there is an interesting architecture shift of, can I just use an intelligent networking there, move my capex to OPEX and have security in cloud? That unified security, unified policy is again becoming important. That's what SASE- Okay, so I like this cloud-delivered security. This is a hybrid workforce you're addressing with this marketplace, that's clear. Hybrid is everywhere, hybrid cloud, hybrid workforce, hybrid events are coming. I mean, we love covering events physically, but also now virtual. Everything's impacted by the word hybrid and cloud. But talk about this thin edge. What do you mean by that? I mean, I hear, I think thin edge, I think thin clients, the old trend. What is thin edge mean? Yeah, so there are different organizations are looking at the architecture in a different way. Some organizations are thinking about having a very simple branch where it is used for modern networking technologies while security has been shifted to the cloud-delivered. What happens with this model is now they are relying more into technologies like SD-RAN on edge to provide that intelligence steering while everything in the security has been done in a cloud-compute way for both remote users and thin edge environment. Now the good news here is they don't have to worry about the security patching or any of those security capabilities. It is all done by Fortinet as they go and use the SaaS applications performance. I want to come back and drill down on that, but I want to get Peter in here in the zero trust equation because one of the things that comes up all the time with this edge discussion is network access. When you go back to the old days of computing, you had Edge log in, you'd come in, radio servers, all these things were happening for a simple paradigm. It's gotten so complicated now, Peter. So zero trust is a hot area. It's not, it's only one of the things, but it's super important. What is zero trust these days? Zero trust is indeed a very hot term because I think part of it is just it sounds great from a security standpoint. Zero trust, you don't trust anyone, but it really comes down to a philosophical approach of how do you address the user's data applications that you want to protect? And the idea of zero trust and really what's driving it is the fact that as we've been talking, people are working remotely, the perimeter of the organization has dissolved. And so you no longer can afford to have a trusted internal zone and an untrusted external zone. Everything has to be quote, unquote, zero trust. So this means that you need to be authenticating and verifying users and devices on a repeat and regular basis. And you want to, when you're bringing them on and giving them access to assets and applications, you want to do that with as granular of control as possible. So if they, the users and devices have access to what they need, but no more. And that's kind of the basic tenants of zero trust. And that's what, it's really about prioritizing the applications and data as opposed to just looking at, in my spring, someone into my network. God, the concept of zero trust is obviously hot. What's the difference between zero trust access and zero trust network access? Or as people say, ZTA versus ZTNA. I mean, is there a nuance there? I mean, what's the difference between the two? That's actually a really good question because they both have the zero trust in the name. ZTNA is actually a specific term that Gartner created or rather analysts, I should say, created 10 years ago. And it's referred specifically to controlling application to controlling access to applications. Whereas zero trust, overall zero trust access deals with both users and devices coming onto networks. How are you connecting them on? What kind of access are you giving them on the network? ZTNA is specifically how are you bringing users and connecting them to applications? Whether those applications are on premise or in the cloud. So what the NA is more like the traditional old VPN model connecting users from home or whatever. Just connecting across the network with user to app. Is that right? That's actually a really good insight. But ironically, the VPN, quote unquote, benefits of this are actually an outgrowth of the ZTNA model. Because ZTNA doesn't differentiate between when you're on network or off network, it creates a secure tunnel automatically no matter where the user is. But VPN is all just about creating a secure tunnel when you're remote, ZTNA just does that automatically. So it's a lot easier, a lot simpler. You get a hundred percent compliance. And then you also have that same secure tunnel even when you're, quote unquote, on a safe network because with zero trust, you don't trust anything. So yes, it really is leading to the evolution of VPN connectivity. So Nir, I want to get back to you on Ty that circle back to what we were talking about around hybrid. So everything's moving to the cloud. That's what people think. And cloud ops is essentially what hybrid is. So connect the dots here between the zero trust, zero trust, A and NA with the move to the hybrid cloud model. How does that, what's the difference between the two? Where's the connection point? What's the relevance for your customers and the marketplace? Yeah, I think that again goes back to that Sassy framework where ZTNA plays a huge role. Because John, we talked about when users are working from anywhere in this hybrid workforce, one of the important thing is to not give them this implicit trust, right? To the applications. Enabling that explicit trust is very important. And that is what ZTNA does. And the interesting thing about Fortinet is we provide all of this part of our 40 OS and users can deploy anywhere. So as they're going through the cloud delivered security they can enable ZTNA there so that we make sure this user at what time, which application they are accessing and should we give them that access or not. So great way to have ZTNA, Sassy, everything in one unified policy and provide that anytime access for any device with the trust in place. Okay, real quick question to you is what's the difference between Sassy, secure access service edge and SD-WAN real quick? Yeah, so SD-WAN is one of the core foundation element of Sassy, right? So far we talked about the cloud delivered security which is all important part of a security of the service. Sassy has another element which is a networking as a service where SD-WAN plays a foundation role. And John, that's where I was saying earlier that the intelligent edge modern technology that SD-WAN provides is absolutely necessary for a successful Sassy deployment, right? If users who are sitting anywhere if they can't get the right application steering before they provide the cloud delivered security then they are not going to get that user experience. So having the right SD-WAN foundation in that edge working in a tandem with the cloud delivered security makes a win-win situation for both networking and security team. So Peter, I want to talk to you last night I was on a chat on the clubhouse app with some cybersecurity folks and, you know they don't talk in terms of, I got ZTNA and I got some Sassy and SD-WAN. They're talking mostly about just holistically their environment. So can you just clarify the difference? Was this completely confusing between ZT, Zero Trust network access, ZTNA versus Sassy because it's kind of the same thing but as I know it's nuanced but is there a difference there? People get confused by this when I hear people talking because like they just throw jargon around and they say, oh, we Zero Trust, we're good. What does that even mean? Yeah, we get a lot of that when talking with customers because the two technologies are so complementary and similar they're both dealing with security for remote workers. However, Sassy is really dealing with that kind of firewall in the cloud type service where that remote user gets the experience and protection of being behind a firewall. ZTNA is about controlling the application and giving them that secure tunnel to the application. So they're different things. One's kind of that firewall in a service, securing a service, even networking in a service. But, and ZTNA is really about how do I have the policies no matter where a user is to give them access to specific applications and then give them a secure tunnel to that application. So very complimentary, but again, they are separate things. What's the landscape out there with competitive because is there products, I mean, you guys are product folks will get the product question. Is it all kind of in one thing? Do people, is this bundled in? Do you guys have a unique solution? Some people have it, they don't. What's the marketplace look like from a product standpoint? So John, that starts back to the platform that we talked about, right? Fortinet always believes in not to develop a point product, but to do an organic development which is part of a broader platform. So when we look at the thing like SASE, which required a really enterprise-grade networking and security stack, Fortinet has organically developed them. SDVAN, we are a leading vendor with a Gartner Magic Fund and leader there. Network Firewall, including whether they deploy it on cloud, on-prem or a segmentation, we are a leader there. So when you combine both of them and ZTNA, which is part of it, there is only handful of vendor you will see in the industry who can provide that consistent security, networking and security together and have that better user experience from a single management. So clearly there's a lot of buzz John about a lot of vendors talk about it, but when you go to the details and see this kind of unified policy of networking and security, Fortinet is emerging as a leader. Well, I always like talking to the experts, like you guys on this topic and we get into the conversations around the importance under the hood. You know, SASE, SDVAN, we've been covering that for a long time and now with Zero Trust becoming such a prominent architectural feature in cloud and hybrid, super important under the hood. At the end of the day though, I got to ask the customer's question, which is, you know, what's in it for me? I care about breaches. I don't want to be breached. The government's not helping me over the top. I got to defend myself. I have to put resources in place. It's expensive and nevermind. If I get breached, the criticality of that alone is a risk management discussion. These are huge table. These are huge stakes. The stakes are high. So what I care about is, are you going to stop the breaches? I need the best security in town. What do you say to that? Yeah, this goes back to, in the beginning we talked about consistent certified security, right John? So yes, a sassy model is interesting. Customers are going to move to cloud, but it's going to be a journey. Customers are not going cloud first day one. They are going to take a hybrid approach where security is required in a segment, in an edge and on the cloud. And that's where having a solid security in place is a number one requirement. And when you look at the history of Fortinet over the last 20 years, how we have done with our Fortiga labs, our threat intelligence, and ability for us to protect over 450,000 customers, that's a big achievement. And for us to continue to provide that security, but more importantly, continue to go out and do a third party certification with many organization to make sure no matter where customers are deploying security, it is that same enterprise grade security deployment. And that's very important that we talk up to our users to make sure they validate that. Peter, weigh in on this, customers don't want any breaches. How do you help them with the best security? What's your take on that? Well, to reiterate what Naral said earlier, we really believe that security is a team sport and you do need best in class products at each individual element, but more importantly, you need those products to be talking together. So the fact that we have industry leading firewalls, the fact that we have industry leading SD-WAN, we've got industry leading products to cover the entire gamut of the endpoint hallway, email application, cloud, all these products, while it's important that they're third party validated, as Naral was mentioning, it's more important that they actually talk together. They're integrated and provide automated actions. Today's cybersecurity moves so fast, you need that team approach to be able to protect and stop those breaches. You guys have a great enterprise grade solution. I got to say, I've been covering you guys for many years now and you guys have been upfront, on the data aspect of it with four to guards. And I think people are starting to realize now that data is the key value proposition. It's not a secret anymore. Used to be kind of known to people inside the ropes. So congratulations. I do know that there's a lot of action happening. I want to give you guys a chance to at the end of this conversation now, to just do a, put a plug in for four to net because there's more people coming into the workforce now, post pandemic, young people with computer science degrees and other degrees that want to go into career with cybersecurity. Could you guys share both your perspective on for the young people watching or people re-skilling what opportunities there are from a coding standpoint and or from say an analyst perspective. What are some of the hot openings? Cause there are thousands and thousands of jobs. Give a quick plug for four to net and what openings you guys might have. Well, certainly in the cyber industry, one of the major trends we have is a workplace shortage. There are not enough trained professionals who know about cybersecurity. So for those who are interested in retooling or starting their career, cybersecurity is an ongoing field that's going to be around for a long time. I highly encourage those interested, come take a look at four net. We offer free training. So you can start from knowing nothing to getting becoming certified up to a security architect level and all that training is now available for free. So it's a great time to start, great time to come into the industry. The industry needs you. Any particular errors Peter, you see that's like really, really jumping off the page. Well, as it's hybrid, so knowing cloud, knowing the on-prem, knowing the traffic, knowing the data on the applications, there's just so much to do. Nirav, you're the head of product, you got all probably a ton of openings, but seriously, of young people trying to figure out where to jump in, what are the hot areas, where can people dig in and get retrained and or find their career? Yeah, no, I think to reiterate what Peter said, the program that Portugut has built, NSC123, which is free available is a great foundation because that actually goes into the detail of many topics we touched upon. Even though we are talking about SDVAN, SAS, ZTNA, fundamentally, these are the networking and security technologies to make sure users are able to do the right work and with the user experience. And that will be really helpful to the young people who are looking to learn more and go into this area. So highly encouraged to take those training, reach out to us, we are there to provide any mentorship, anything that is required to help them in that journey. Anything, jump off the page in terms of areas that you think are super hot that are in need? Certainly, this convergence of networking and security. There is a growing need of how and what the Zero Trust is and how the security is applied everywhere. Definitely, that's a topic of mind for a lot of our customers. And that's an area, it's a good thing to gain more knowledge and utilize it. Neeraj and Peter, thank you for coming on. You guys are both experts and the leaders at Fortinet, the product team, the need for security platform is an all-time high, consolidating tools into a platform. More tools are needed, new tools coming. So I'm expecting to have more great conversations as the world evolves. Certainly the edge is super important. Thanks for coming on, appreciate it. Thanks for having us. Okay, keep conversation on security here in the Palo Alto Studios, I'm John Furrier. Thanks for watching.


Welcome to JSA TV and JSA podcast. The newsroom for telecom and data center professionals. I'm Jamie Scott-Ukataya of JSA. Joining me here today, we are delighted to have Dark Point's top executives. We have Scott Willis, the president and CEO, Brad Alexander, CTO, and Lauren Long, Chief Development Officer. Gentlemen, welcome to JSA TV. Scott, I'm gonna start with you first. Dark Point's recently acquired a Medion, bringing Dark Point's unique internet connectivity ecosystem model to South Carolina marketplace. And very important to do this for South Carolina. Tell us a little bit about the acquisition and what this means for the state. Thank you, Jamie. So, yes, correct. We're so excited about the acquisition of our Medion recently. So when we were really out looking at, organizations that were meaningful to the Dark Point's model, we identified early on a Medion as a candidate, and we're excited about our opportunity to move particularly into the state of South Carolina. A Medion is a business that has really grown with South Carolina. It started about 15 years ago. Today, they've got four locations, one in Greenville, one in Spartanburg, one in Columbia, and one in Charleston. So they're really invested in the state of South Carolina. Today, they represent about 275 customers in the state of South Carolina. And what that means from a revenue is they also represent just under about 60 billion in revenue. So when you think about a Medion and now Dark Point's from that perspective, we are really, really excited about South Carolina. We want to remain invested and continue our investment. And that's really what the acquisition's all about. We are at Dark Point's really looking to leverage what a Medion has built over the last 15 years and introduce new ecosystems that are gonna lay the foundation for not only today's growth for the state of South Carolina, but where the leadership within South Carolina wants to take the state from a digital infrastructure perspective. Well said, well said. And Lauren, bringing you into this, I was surprised actually when I read that South Carolina is ranked 31st when it comes to state broadband access with only 344,000 people that are without reliable internet in the state. 344,000, that's a lot of people to not have any reliable internet. How is Dark Point's doing its part to really close this digital divide that we're seeing there? Well, thanks for having me, Jamie. Dark Point's is gonna play a crucial role. There's two parts to solving the broadband issues or what's called bridging the divide. Across the United States, South Carolina is not unique in the challenges they face, very similar to other states in which we operate like Iowa. They have several vibrant cities and a lot of great towns and agricultural rural areas, but they're not in close proximity to a major tier one metro like a New York City or Chicago. Therefore, they haven't seen the investment from a lot of the big providers that these cities have. So you see a lot of great federal programs, state programs, trying to invest in fiber in these communities. But what Dark Point is gonna do is change the economic landscape of how the telecom industry works by creating a nexus of interconnection that's going to encourage not only outside investment into these communities, but bringing content and applications natively. So now they don't have to come from far away. They're gonna live within the state of South Carolina, and that's what's gonna make all the broadband investment matter. So Lauren, as one of the co-founders of Dark Points, could you give us a bit more of the backstory why the company started and what your mission is today? Well, the great news is the mission today is the same mission that it's always been. We were, you know, in 2011 and 12 when we were looking at the data center industry, you know, the founders all came out of the mobile industry and we had lived through the introduction of mobile data and then the advancements through 3G and 4G, et cetera. And when you watch that industry, it was all about distribution. And instead of having, you know, one antenna for an area, it would, you would have many because as the data speeds increased, you needed to do that. You needed to distribute the assets. At the same time, back in 2012 in the data center industry, they were talking about how do we build a 500 megawatt data center in Northern Canada where it's cold. And that's absolutely ridiculous when you look at the history of technology. And so our vision was to create a distributed network of interconnection data centers across the country and beyond that would allow content and applications to flow near the people who use it most. That's exactly what we're doing today. And that's the excitement of working with a company like a median that already has a vibrant ecosystem in South Carolina where we can bring those two models together. You know, the other thing that we focused on the last 10 years, as opposed to being pulled upward to create large hyper scale data centers which is a typical gravity. We wanted to stay focused on how do we do this at the exact location required for our customers and our constituents. Sometimes that's a green field, sometimes that's through acquisition and sometimes it's in a piece of property that you wouldn't think to put a data center. But we spent a lot of years and a lot of experience perfecting that. So now when we're doing this, whether it's in South Carolina or Iowa, we can take on any challenge and put those interconnection assets exactly where they need to be. I love that. And Scott, getting back to South Carolina, you guys operate four South Carolina data centers offering Polo, Cloud, managed services to these local businesses.  Can you tell us a little bit more about Bridge IX? Jamie, listen, we are so excited about Bridge IX. I referenced earlier about Dart points' interest and commitment to further invest in the state of South Carolina. Amidion has done a wonderful job building a business over the last 15 years and Bridge IX is part of our strategy of overlaying the Dart points model on top of Amidion's model and really introducing a vibrant ecosystem in the state of South Carolina that's really gonna position the state for not only today's growth and today's demand from a digital infrastructure perspective, but also position it for the future and create an environment where not only today's businesses can grow and scale and take advantage of the digital infrastructure opportunities that exist through this combined acquisition, but also create a model from an economic development perspective where other companies that are looking to come into the state of South Carolina and the state of South Carolina is looking to attract those companies, digital infrastructure is an important piece of that strategy. And that's really what Dart points is all about. We want to be the state of South Carolina's partner. We want to invest and we want to create that environment where not only today's companies can have the same capabilities that organizations can get in Dallas or Chicago or Northern Virginia, New York, LA which was referenced earlier by Lauren, but we can deliver that locally within the state at the same performance level and at the same cost point that organizations experience in those cities. And that's what the Dart points model is all about. We're excited about that opportunity and we want to be that partner for the state to really bring that digital infrastructure strategy to the state of South Carolina. So exciting. And Brad, as a South Carolina resident, former and medium CTO we should mention as well as now of course the CTO for all of Dart points, do you want to add a little bit something regarding your local perspective? Yeah, absolutely. So a median is always believed in a customer first approach and how we operate our data centers and all of our cloud services. I see the same dedication in how Dart points operates. So we share very similar cultures and it's great to see how quickly the teams have integrated. The executive team at Dart points has experience on a national and a global level. And I would like to use that experience to help bridge the divide for cities and towns across the US that don't have access to the same speeds and services available in other large major cities. It's exciting to be part of a company with a national vision. It's going to be a huge impact on improving issues that are decades old now. Dart points interconnection services will have a profound effect on the way our cities can more quickly adopt the cutting edge technologies that we need. And we're going to be able to enable faster and more cost effective access to the content and applications for our communities, our schools, agriculture, even local businesses in each of our markets. I love that, the national vision but that local interconnectivity. Really exciting stuff Scott, for our viewers who want to learn more, where can they go? Yeah, listen, the best place is our website dartpoints.com. We have fully populated the website with both the Dart Points capability as well as the Median capability. So I would encourage you visit our website and it will provide additional information beyond what we've discussed here today. Dot points.com. Scott, Brad, Lauren, thank you so much for joining us and thank you viewers for tuning in to JSA TV and JSA Podcasts. Happy networking. Thank you.