Hey, guys, can you hear me? Can you hear me, Seeli? Just checking audio and video and connecting my cable. So, you can hear me properly. Give me a second. Oh, there we go. Yeah, so we have one, two, three, four, five people, who else is missing? Okay, I think we should start. So by the way, today we have a new person join our team. Her name is Marjorie, and it'll be a good idea just to, you know, quickly introduce just my name. Don't have to go detail, but over time, you know, we'll just say hi to Marjorie. Marjorie, are you online? And am I pronouncing your name correctly? I think I hear you. Help me correct my pronunciation. If I'm saying your name wrong, please correct me. Looks like you are muted, Marjorie. Yeah, you have to unmute yourself. Then we can hear you. Otherwise, the left bottom of the screen, there is a mute button. I can unmute her. Hold on. Let's see if I can find a way to unmute everybody. I think everybody's already unmuted from my side. You should unmute yourself. I cannot do anything. You just did. By the way, it looks like you just unmuted yourself for a brief moment. Your mic is not working. So I'm sorry. But yeah. Hey, this is Marjorie. And just say hi to her and we'll continue. If your mic doesn't work, you have another way to contact me. I'd like to tell you that method. And that method, I'll just share my screen so you know, I think you know already. And that method is the Slack chat method. That method is always running all the time. And this is how you can contact us. You see it on my screen right now popping up. And this is the Slack chat interface. We have a method of chatting with this group. So this group chats here. And if you want to do a one-on-one chat, of course, you know how to do that. You have done it already with me. So the one-on-one methods are available on the other side here. And group chats are this one. So first question for you is this question about this work that I think some of you may have done already, which is like a homework assignment that I assigned to you. And I think one is turned in. That is good. And so we have David Rivera. Did his Hawaii trip, oh, nice. Hey, David. Good to see you again in Maui. So this is David's favorite place. And that is Maui, I guess. And what you saw is this representation of the picture. Let me clarify a couple of things here. What you're looking at, what David just showed you. Hey, one of you is causing noise. So if you can please mute yourself, that would be awesome. And let me just set some background for us to discuss as to what exactly we are doing with that homework that we had for all of us. The work that we looked at the other day, the other session, which is the previous day, what we are really trying to accomplish in that session, which we did, by the way, is to get a bucket and then put an item in the bucket. This item can be something like a picture or some other elements that construct a website like HTML, CSS, JavaScript, or other objects you can put alongside in a site structure. And that site is the client side component, which makes it a static site. And that is what you can put these elements inside a bucket and convert that bucket into a site configuration. And that results into a static site that does not need a server. That's the beauty. No need of a server. And that is really, really powerful. If you think about it, there is no need to manage anything because there is nothing to manage. Like there is no such thing that we have to worry about and manage. That gives power, amazing in terms of how much power that you can imagine, is that you don't have to worry about maintenance, administration, because there is nothing to do, literally nothing to do. And I gave you an example of a site that I will open up for long. I think you probably know it already. So I'm going to open up that site in one of the browsers. You probably saw it already. I'm going to open it again here, which is this site called blog.fungibleclouds.com, which is a website I've run for so many years. This website that you're looking at is exactly like what I'm describing right now. And I will start dissecting components of this to give you a clear perspective of what goes on under the hood. And then we will implement this ourselves, like for real in our own examples, in our own cases, our own computers using this workstation that we have, which is the Genius Workstation. All of us will do this. First of all, before we begin digging into hands-on work, we would like to just dissect this website completely in great detail and help you understand how it is constructed. And that might be helpful. It is actually pretty interesting and pretty simple to understand from that perspective. So let me begin. Taking a sheet of paper, which in my example would be something like a, let's put it here actually. So I am opening up this virtual workstation that you already know of. In there you have this thing called terminal, which I'm going to put on one side and open up atom editor on the other side. And somebody is still causing noise. I think there is some noise coming from one of your machines. I can tell whose machine is causing that noise. So give me a second. Yeah, all of you are muted. So no noise now. That's good. So let's keep going. So what I'm describing to you is this concept that I'm going to talk about, which is I'm going to write that down in a sheet of paper. So here it is opening up. In this sheet, I'm putting a URL, basically a new page on this new page and putting that URL right there. And this is the fungibleclouds website blog. As you can see here, this portion is a domain name that I own. And this blog portion is a subdomain constructed underneath. Now let us go start digging where this actually is hosted. So let's go copy that. So I'm going to copy this and go dig, dig the details underneath. So I'll make this a little bit bigger and say dig followed by the domain name and say where are you? And it tells us something very clearly. It's quite a lot of information here. So I would like to just simplify this and tell you that I will now actually point this to a C name. This is actually a C name, by the way, canonical name. As you probably know this, if you do not know what a C name is, I can take a minute and explain to you. But if you read that output here clearly, it actually tells you that this name is actually a canonical name corresponding to this location. That's the first answer you get in the answer section when you dig something like this. So this happens to be a canonical name. So it tells you that this is a canonical name for this name. This name is an easier name, let's call it in a simpler way, easier name. Let me just explain that concept. I think it makes it easy. So like here, we have a gentleman on our program. His name is, let me say his full name is Jayashree Ramamurthy. So that becomes very difficult to actually remember and pronounce and spell correctly. So what he has done or what he has decided to do is that he calls himself Ram. And this is the canonical name for this long name that he has. That's our friend Ram right here in the group. And so that's what he's done. So that's the C name alias. And many of you know these other names like Bob for Robert and things like that. I can come up with many, many such names that are common, at least in this country, where people have simplified the name Bob, the actual name Robert, which doesn't sound complex to me, but whatever. So this name is the simplification. So this is exactly what is going on here in CNAMES, where you have this longish name that is very hard to remember. Like this part is issued to us by somebody, a service provider typically, and it's very hard to remember. This is D287. I don't know what. How do I remember? And that's why we have put in a canonical name to make it friendly. So it is a mapping of some sorts there. What we are really doing is associating that name here, this longish name, which we cannot even say properly. So I'm going to copy that, bring it to my notepad here, and tell you that this actually is a canonical name that simplifies this complex sounding name, which I cannot even remember. I don't even worry and don't even bother about that. But the idea is that line number one is a canonical name representation, just like line number three and four are. That's the idea. Now, having understood this part, this site that you look at is actually this site, which is given to us by a service provider. So we'll open that link now in a web browser. So we'll go there, and I'm opening the web browser, and I'm pasting that link that I just got. And what do you see here? You see exactly what you expect in the site. It is basically the same thing represented. So when you say hi to Ram, the idea that Sri Ramamurthy responds is the same idea when you say hi to this site. This thing responds, because they're the same thing. Just happen to have a simpler name here. Like number one, this portion is the simpler name. Like Ram is simple name for Sri Ramamurthy, like that. So with that understood, that part understood, let's go further in understanding what these other things are. And so the other detail that you see kind of sort of sounds like a really, really detailed numbers corresponding to these IP addresses, like this IP address and that IP address and that IP address. So why there are so many of them is the next logical question that pops up. And so what is going on under the hood is that we are using this location that is provided to us by a service provider. And we are actually using a new type of storage service that we did not discuss before. But some of you may know this as, what is it called? Content delivery network. So I'm going to write that down in that sheet of paper, which is here. So what we are talking about next is to discuss this concept of a content delivery network. That is what we are really looking at right now. And so we have this bucket that I said that I have somewhere that I will get to that in just a moment. And what I'm really trying to accomplish is with the help of a content delivery network, make this bucket globally accessible and available worldwide to a multiple locations and multiple presence points, points of presence worldwide. So that people in say Bangladesh or Singapore or India or those parts where this people are far away from us, this bucket happens to be in Seattle, say for example. So it is hard for these people, for them to traverse and then get the content from the bucket. So what I'm really doing is using a content delivery network. For example, here, let me draw that picture for you easier. And so here is what I'm suggesting is that we have the actual bucket sitting in the S3 location, which actually is the bucket here, and then using a cover of CloudFront to create these edge locations, like you look at this edge location here. And so this edge location here or that location or that location, these edge locations worldwide are created by CloudFront are useful for people who are say in Singapore or Australia or far away from the actual bucket geographical location. CloudFront basically replicate these things. CloudFront is a type of cloud content delivery network. So the service name we have a bucket is called provided by the service from Amazon called AWS S3. This content delivery network is provided to us by Amazon Web Services CloudFront. That's the name of the service that we seem to be using in this scenario. Now let us take a step back and understand how do we build this for ourselves and what's the point of doing all this? The real point that comes down to is that if you have a global audience and you have people, let's imagine this is the fictitious world map of people worldwide living wherever they are, and we happen to have our bucket sitting here, it becomes easy for people who live here for them to just access this bucket because it is close in geographical proximity to them, but people who are here may not have the same amount of bandwidth or the same amount of latency in traversing all the way across the internet from one part of the world to the other, and then accessing the same object and going back, they may suffer what is known as sluggishness. They may find that the site performance is sluggish, slow, and it sucks. And to improve that situation, what we are really doing is creating multiple points of edge presence, edge locations, and these edge locations are made available to us through some kind of a content delivery network. And that when you have such a thing available to you, for example, as shown in this picture, it improves the performance of these endpoints that people in remote areas, away from the actual origin location of the bucket where it belongs, they may be far, far away from us. However, content delivery networks like this will make it easy for them to reach and they will access their local edge copy. For example, I include this picture of mine and I update that in this bucket. What will happen as a consequence is that person who is sitting in, say, this location will first time try to identify, do I have the new picture that shows up on the site? And that is represented by one of these IP addresses that you're looking at. So these IP addresses, especially this block that you're looking at, is a global representation of multiple IP addresses, which are available and are replicating this original location, which is in form of a bucket sitting in the Seattle area. And the same content is replicated through a content delivery network worldwide through use of the service called CloudFront. And that is what is going on. Now let us check what CloudFront is actually doing and where is the original bucket. So let's go to the Amazon console that I have in my account, a CloudFront distribution. This CloudFront distribution, as you see, is that I have many distributions, by the way. I just picked the one that I want to actually talk about today, which is this one. So the very first distribution, which has a origin name, I think I sorted it wrong. So let me sort it again. So this one, which I'm going to expand a little bit like this. And so this, if you look at, is the original location where the bucket is. So let's go copy that location and put that in the piece of paper that we have here. For example, this. And so if you now look at this line number four, and let's open that line number four in a browser window like that, and it will open up the same exact site again. So what we are really doing is that whether you open line number one or line number three or line number five, they show you the exact same content. Line number five is the actual bucket representation. Line number three is a content delivery network representation. And line number one is a canonical name. It is just an easy name for number three. Now, this is the actual bucket name. Let's go check that out. And this bucket happens to be in S3 website in US East one. So you can see that it is sitting in US East one, which is in Virginia, not Seattle. But it is a S3 website representation of a bucket called this. That yellow highlight is the name of the bucket. So let's go see what we have in the actual example. Go back here and look at the buckets in S3. And there you will find that there is a bucket. And it is called this one. And you will see that this bucket that I have called blog.whatever.com has all these things sitting in the bucket. So these things basically are the representation of that website that you see. They were last uploaded in 2013. Since then, I have not touched it. And they just sit there in that bucket. And this bucket itself, if you look carefully at the properties of that bucket, you can see that it is configured like a static site with the enable posting, enable an index document showing as the index HTML. So somewhere in here, there is a file called index HTML, which is actually this file. And so that file, you can open and it will show you the HTML portion of the site, which looks like Craigslist, like ugly. But because there is no CSS and no JavaScript to make it look good. And so that part is what we will add once we get to the exercise part. Now let us recap what we just discussed. What we did was, in effect, have a bucket, convert that into a S3 website configuration. And this gives us a endpoint like line number five I mentioned in this sheet of paper here. That is what you get from a bucket. You get a website representation of that bucket. Now you take that five and say, you know what? I want to go global audience and this bucket alone is not good enough for me. So wrap this around through a content delivery network. And that gives me multiple endpoints located at various edge locations globally. And this is another service. It is useful to distribute content worldwide. And so you get these multi locations with multiple IP addresses geographically distributed, but represented by one name. And that name happens to be line number three here. And that distribution endpoint is what you see when you go to the service provider, which in our example happens to be Amazon CloudFront. And when you go, let me clear this up and I will dig again, dig this time line number three. And so if you just dig line number three, you will find that there is no canonical name references. There is no CNAME reference here. The answer section goes straight to some IP address like this or like this or like this or four, five, six, seven and eight locations worldwide that this current distribution of CloudFront, which is a content delivery network, provides us access to these eight endpoints globally distributed that helps us in basically reaching our audience. So our audience wherever they may be globally distributed. So we have one, two, three, four, five, six, seven, eight. These eight IP address locations we have geographically distributed worldwide will be able to receive the same content sitting in this bucket, but at a point closer to them. So the latency is reduced. Latency is dropped and access becomes easy, access becomes feasible and the experience of the user becomes smooth. So in practice, if you have a person sitting in let's say Java, the country Java or something like Indonesia, if those people want to access, they will want to go to the same site, which is the line number one here. They will want to visit the site. This line number one turns out that the DNS will communicate back that this is a canonical name representing the line number three. And so they will, the DNS will automatically resolve this name instead. And then it turns out that this dig query will again communicate back that, you know, you should go to one of these IP addresses that has the lowest ping times or lowest latency for you to access. And the browser will automatically redirect to one of these IP addresses to get to the content. Now that is in the example where you have a person in this country, he or she will happen to land in the Singapore location of cloud front distribution and they will grab the content right from there and feel happy about it. However, when it is a new site and the content itself in the bucket is new, in that case, when the person wants to access this first time, somebody in Indonesia, for example, they will like to access this content and they will be directed towards Singapore and they will find that the content is missing. This concept is called a miss, literally it's called a miss. And so this, when a miss happens, then content delivery network will reach out to the origin, which is the origin location and grab and replicate it to Singapore. So that person number two who is going to come this time from say Sumatra, for example, or any other location for that matter, they will find that this person number two who happens to visit from Sumatra will have a hit as opposed to a miss because this content is not a miss anymore because the first person who tried to access person number one ran into a miss and the second person who is accessing will get a hit. So he or she will be happy that the response time for them to access the object is actually very low and the Sumatra second person will be happy. First person will have to practically wait for the item to go from origin location down to Singapore and then from Singapore to that person's computer. So that first experience may be a little bit slow and it is not really noticeable too much, but let me be honest, it is going to be slow because it is a miss situation. You're missing the item in the content delivery network does not have it. So CDN has to go to the origin, grab it from the origin and replicate worldwide. And that is what will happen to all these multiple endpoints worldwide whenever there is a request. So say for example, this Australian guy here, Australia, this person comes online, wants to visit the website, he or she may find another miss. So the local location in CDN in Australia will want to go to the origin location, the S3 bucket in our example, grab that, put that in the Australian geography. And then the next people in that New Zealand area or other parts of that region will find hit. And a hit improves performance because they're locally accessing content from Australia as opposed to going all the way to this original bucket where we store stuff. And that is the usage scenario of this combination tool that I described, which is a combination of some kind of an origin to store stuff and a layer of content delivery network around it. So it is all around it, not just one location, but it's all over. So you can multiple endpoints you receive from the service providers. And there are multiple CDNs that gets used. We are just using one such example right now as we talk about this site. And so this is the line number five is the origin, line number three is the CDN representation, and line number one is just for me to remember and talk about. That's it. It's a friendly name. So having understood these three concepts, now let us understand how do we build it. So the building part, the actual construction, that piece, there are a couple of things to remember. First one, when you are using a content delivery network, it can provide a wrapper around anything. It does not need to be a bucket. No bucket required. No bucket required. Let's put it that way. So it might confuse, since I am describing all of this in the context of a bucket in a storage service, bucket is not really necessary. Any origin works, any origin. It can be your machine in the cloud. It can be your web service that you run from your garage. Any of that works. So it depends on what you want to distribute worldwide is what is the origin that the CDN needs to know. What is that origin? And in practice, you can run a computer running your sites and services and put that in the garage, in your garage, and it will actually be able to successfully serve a global audience because you're wrapping around a content delivery network all around your garage server. And it will work just fine. And yes, you will get decent performance in remote locations. And I have tested it myself. And it works. And CDNs are beautiful and they're very, very inexpensive. You can see how much money they charge you. So CDN pricing is a CloudFront. CloudFront pricing is pretty darn cheap. Let's go see CloudFront. Amazon CloudFront pricing is first 10 terabytes every month is 0.85. It is nothing. I mean, literally nothing. So you see that you can transmit first 10 terabytes of content worldwide just in the United States, the US pricing. Other countries' pricing is a little bit different, like $0.14, or in South America, $0.25. So if there is a South America bandwidth distribution of 10 terabytes every month, you are going to spend this amount of money, $0.25. That's the kind of pricing that you're looking at. And so this is on-demand pricing, this is a cheaper pricing also available. We'll talk about pricing later. But right now, the concept that I think is clear that you don't have to have a bucket. You can put a content delivery network around any endpoint and make it globally available. That's the beauty. Now, CDN that we are looking at is CloudFront, which is an Amazon service. There are tons and tons of services available. My personal current favorite is CloudFlare. This is my favorite right now. It might change tomorrow, but there are many more. You can see on Wikipedia, there's a long list of people who provide these services, and Amazon has their own, Microsoft has their own, Akamai is a well-known one, Google provides their own. So every major service provider will have their own content delivery network, and they all function broadly the same. And this is my current favorite. I'm just saying it because I'm using it. So we'll show you those things also. Now a couple other things that I want to make sure that I address, and then we will go into hands-on exercise to make sure that we get those points clear. So this representation that you saw in line number five is a site representation. An example of that that you look at in what our friend David has given us in, where is that site? Let me submit that, I think somewhere. In the classroom. Yeah, in the classroom. So I need to go to the classroom. So MMS classroom, and this should pop up where he has given us. So two people have turned in. It seems, let's see, David and Jaishree Ram also did. So here we have a startup plan. Okay, there we go. So that's another example to look at. So he has created, oh, beautiful. So he has created some pictures and some HTML and all that, log in and sign up and all that is also, at least the HTML part is placed nicely. So this is what Ram did. And so he put a picture and some HTML around and he put all of this in a bucket. You can see that the bucket name is right there. Let me open up this in a notepad. Here we have a notepad and make it big a little bit. So you can see from a distance, making it big. And so here you look at, he has this random clicks name, bucket name, random clicks. He has chosen a US West two in the Amazon regions, US West two is Oregon. And this is the name of the bucket that he has created. And in that bucket, he has put this file called startupland.html. And along with that, he may have put a picture or something. We can see what he has done. So we can just examine that content that he has put by looking at the, let me grab that thing down. So I'll bring it down right here in the terminal. And let's examine what he has done, what he has done with the. Maybe if you could refresh the page, now the CSS, everything. Okay. Okay. Okay. Okay. Okay. Okay. You did that. Oh, nice. So let me then refresh. So I will open up, refresh CSS. Oh, there we go. Nice. Nice job. Okay. So he's done quite a bit of work already there because he, you know, contact about and random clicks and sign up and log in and all that. So he's using Bootstrap, looks like, let's go see. So yeah, he's using Bootstrap. Yeah. Just before I refresh, I asked you to refresh. I had a static CSS. I just put a CD in there. Nice. Nice. Nice. So yeah, you have this Bootstrap is a framework to make your sites look good. And that's what he's using. So that's what you're looking at in this picture in this browser site. Now let's go understand what he has done. So I'm going to grab the source code for the site again. I'm going to kill what I had and then download it again because you just refreshed it. And then we'll open it up to understand the code. So here's the code. Here's the index HTML file he's written, a very short one. You will see that at the bottom, there are some JavaScript elements, lines number 57 and 58. At the top, you have some CSS references here. And in the body is what you see in terms of the random clicks title, capturing the best moments of your life. And so he's basically written some basic structure of HTML that makes it look good right here. In addition to that, there is this picture that you can see. The picture itself is showing up in... It's actually in CSS. I see. Yeah. I uploaded my picture. Okay, fair enough. So the concept that we are talking about really essentially is that there's a chat request here. Oh, Marjorie says, nice website. Yes, indeed. Nice. Very nicely done. And it's very simply done without having to manage or worry about servers. So the thing that Ram has done is taken a bucket, put in some CSS, put in some JavaScript and some index HTML, and maybe a picture, or maybe a couple more pictures, and maybe some more systematic methods of dealing with pictures. And he's also using some remote JavaScripts. Some remote elements that you see are referenced from this HTML. And these items are placed in that bucket. And then he's converted all of this into a site structure. And that's what you're looking at in this URL, which is this one that I broke apart for you. Line number six is the bucket name. This happens to be in us-west-2 based on his decision in Amazon. And this is the name of the file that you open up, that opens up. Now doing this is trivially simple, except writing that HTML is not so simple. It is not. So we will offload that work of writing that HTML and CSS for us and give it to some tool like I have done here. I did not write all this HTML because it is work. And so those who write HTML, they don't think it is work, but I don't write HTML. So what I do is I use a tool that I said I will. Last time I said I will use the tool Octopress is the tool that I have in our example exercise, which is also written down in, let me go to that site, so you can also follow along. I think it will be easy for you to follow along. It is not a difficult exercise to do. And let us go to this page, where is that? It should be in Safari browser and here. So this location is what I want to begin. And so this is, let me get to the beginning point. I can paste it in Slack chat for you, so you can begin from there. And so I am going to module number 9, which is this one and click. And so that is where we want to begin at that point. And the idea is I am going to paste that link in Slack chat for you in the group, so you have it right there. And you can begin along and follow along. It is very, very easy to actually accomplish and let us do this. So what I am doing is on one half of the screen, put this site and on the other half of the screen, I will put that workstation, which is what I have here. So other half, workstation, and come on, adjust the screen, please. I would like to, no, there we go. So we now have our desktop showing on one half of the screen, showing you this notepad, which I am going to over with, clean it up, and show you the terminal window on right side, website on the left side. And let us follow along quickly. It is very, very simple. Just understanding concepts is the critical part, which I think we did. So let's go put this in practice. So what I am going to do is build a site without servers. And this site should show up right in our workstation itself. So no need of a server. To begin with, we will actually use our own laptop, this machine itself, as our own server, which means we will have to create some HTML like this, like we did already in the last time. This I think we did, the last time we did a sample HTML and put that in a bucket. And it showed up as a site that shows you logo. I think you did that in the last session. We did that. Now we are going to use a static generator. So this generator tool is available in that location on GitHub, which is called Octopress, as you know already. This is the software website for that. And the source code is available right here in GitHub location. So we will grab that source right into our terminal, which means we are going to paste this command, which is going to clone the source code and put that in a folder called Octopress. So this code from this location, which is what you see here, you can also click on the same. Click on the clone link from there and clone it down locally. And it will come down as a new folder that sits in that folder called Octopress. So currently there is no such folder. If you see, there is no Octopress folder. But as soon as we run this command, you will have a new folder created here called Octopress. And so let us run it, bring it down. So whole code is coming down and it did. Now we have that folder called Octopress showing up in our computer right there. Now having understood that part, let us go into that folder. So this folder is where we'll go inside. So we'll go CD Octopress. And by the way, I use a ton of keyboard shortcuts to type so fast. It is not magic. It is just using tab. So say CD and CD Octo, OTAB. OTAB will automatically expand OC tab and automatically expand to the available folder name that you might have and just makes it easy. Couple of the keyboard shortcuts are go up arrow, down arrow like this. And we'll go more into shortcuts later. But for right now, just make sure that you are CD Octopress. And now you can show that you are in the Octopress folder. It tells you right there that you are in the Octopress folder. So in that folder, we have the source code that we can now see. And this is the code that is available to us from that site that Octopress website has GitHub has given us that source code. So this is a generator tool. What this will help us do is create a site that looks like this and automatically allow us to write that in English, but it will create HTML, CSS, JavaScript for us. We'll see that in just a minute. So we have it included in our folder right there. So we need to install a bunch of dependencies to make that software work. If you look at that software itself, it has a set of dependencies that we need to understand and install. These dependencies are defined in a file called gem file. So there is this file here sitting right there. And that file contains all the things needed for this software to work correctly. This gem file has a list. So if you cat that gem file, you will see that long list of things needed to make the software work. So this is the list of things we need. And these things are Ruby things. And in Ruby, those things are called gems. So we have a rake gem, Jekyll gem, Octopress hooks gem, all these gems with specific version numbers written down that we need. And these are the gems that we need to grab automatically from this site, rubygems.org. And so these are ready-made packages written in Ruby known as gems. All these gems are what we need to have in our computer. We don't have it yet. So we need to bundle them and bring them down. This bundle command that you have here actually does that for us. So when you say bundle, install, it will go to that site that I mentioned here, this site, rubygems site. It will go to that site, bundle install will install it. Bring those gems down to our computer. And you can see it happening as we go along. It is going to go to that site, rubygems site. By the way, it's a very well-known site, rubygems, where gems are published by people who write code in Ruby and they just distribute in open source. And that is where you will find rubygems by hand one by one. If you go there, then you can find the rake gem, for example, so just search for it, rake. You can find it. This rake gem is available. There are 119 million downloads of that rake gem by now. And so it's a very popular gem. And like that, there are tons and tons of gems available in here. In open source, we are installing only a few of them like needed. And so we have successfully completed installing the gems we need. And that's awesome. Now what we need to do is install default Octopress theme. The look and feel that you see here is a default look. And we have to install that theme, which is available as a part of a rake install. So here, if you say rake install, by the way, you see the listing doesn't actually expand, except this gem file dot lock shows that you now have installed all these gems in that file, in the gem file. And so the gems are now available. You can see them. They're installed on the computer in a separate location, not in this folder. However, they are available for us to use. So we need to now use rake install method to install a default template that looks, make the site looks like this. So we're going to do that rake install easily, and it will do certain things for, I made a typing mistake. I need to type two Ls. Apparently, there are two Ls in install. Now I'll run it again. And here it says, copying the classic theme into this folder dot source. And by the way, dot source is where we will write whatever we want to write in the blog like this, the content. That's where it goes, this source folder. And SAS is the CSS, or SASE CSS, which is where it automatically copied the look and feel into. So it created a folder called source. It copied some themes into the source. It created a folder called SAS. It copied the classic theme into the SAS folder. It also created a directory for source underscore posts, which is where we will create our web posts on the blog, on the Octopress blog, and also created a folder for public. So this public folder is where the resulting output will get created and available for us to consume once we run the site generator. So this step we have done. We go to the next page. And that's where you will find that we need to now create a couple of posts. So we have to use the rake tool again and create a couple of posts. So let's see if there looks like there is. Let me just quickly check. There may be a typing mistake, as I can see here, but I just want to confirm that. So probably not, but just checking. Yeah, no typo. So what we just did was created a new post called My First Octopress Post. So basically, it's a new blog post entry created as a file in the source folder, in the post subfolder, by that date and time and the name. So now you can see that content in the listing in the sources. This is a new folder, by the way. And you can see that in that source folder, we have a folder called underscore posts. So this folder will have that content. So let's go see underscore post. And that's where you will find a new file created right there. It is just a plain text file. That does, basically, it's practically empty, not actually empty, but practically empty. Let us go examine what do we have in that atom editor. We'll open up what do we have right now in our source code. So we'll go and examine that. It is going to open up in a browser, in the atom browser. And we see that in the green items here, like this green colored SAS folder is newly created, copied over by the template creation, the look and feel copy that created that folder. The source file, the source folder was created with the template itself. And this folder called posts is where we write stuff. Apart from these green items, everything else came down from the GitHub location. So this is the ready-made software we are using. Two new folders we added on, which was the SAS folder for look and feel. And the theme for classic look and feel is in the source folder. And inside there, that posts folder is where we will write our blog post. So this is my first Octopress post. And as I said, it is practically empty. So you can edit the title right there, or the date and time. And here I can say, here I write my blog post for the very first time. And that's it. That's what I wrote in English language. And save the file and close it out by pressing Control-W, Control-S for save, Control-W for quit. I quit that window. Only that window, not the whole thing. So that's what I just did back in the terminal. What we did was modified the blog itself with a little bit of content. Let's keep going. On the other side, we have a couple more posts we'll create. But let us see what the blog looks like right now, even without creating the other posts. We have these other second posts and third posts. We can keep creating posts like that. And for right now, I want to just make sure that I go to the next step and see how the blog looks like right now. How does it look? So currently, we are looking at that public folder, which happens to be empty, by the way, right now. So let's go the Atom Editor one more time. You will also find that this public folder exists, but it is empty because the source code generation has not run yet. So this is where the actual output will come. But it is empty right now because we haven't run the code yet. We will run it now, very simply, by running rake and generate my site code, rake-generate. And when I run this, you will see that the public content here gets populated in that folder. You will see that new content shows up as soon as I run rake-generate. And it did. And it has created tons of things, like right there, lots of things came along. This, by the way, is the actual site that we want to use. You saw that it now has the content that we need to show in our bucket. So it looks like a website. That's it. We practically created the website, by the way, by now. Now, we need to see how it actually looks like to us from a browser's perspective. So we will open up and run rake-preview. Show me the site. And it says, I'm going to show you your site. Just go to your browser and open up the port number 4,000 on localhost. So starting that rake, starting rack on port 4,000, that server is running on port 4,000. That's what it's telling you. So we should go to the browser and say, by the way, this will work only inside the virtual machine, not outside. I just want to make sure that you understand this part, which is this tool will run the rake-preview, will show you the site, your own site, inside the browser in Firefox, only within the virtual machine, not outside. It is local testing tool, so it will work only in here. So localhost, and then go to port number 4,000 to see your own site. And this is where you see, here I write my first blog post for the very first time, it shows up. It was written 20th September at 5.48 PM as my first post. And you'll see archives of one post right there. And the site seems functional. It does actually seem functional. You can tweet the site if you like, but that's not the point. It is going to show and post a tweet if you click the tweet button. So the functionality is there already. Let's go further, develop the site. So I'm going to minimize this browser and break, literally break this server. The server is running something. I'm going to break it by pressing Control-C and then press Control-L to refresh to get a new screen on the terminal. If you go all the way down, you can bring it back up and clean it up. So what we want to do next is keep adding a couple more content stuff. Like, you know, we have only one thing that we added as a one post. You're going to go back to this lesson here that we have written down and create a couple more posts like the break new post and other one and another one. So a couple of second and third posts, I'm going to create them one at a time. So here we have one, here we go to second. So created two posts right there. And now I can see the site, but I need to generate the code behind the site, right? So I will generate, break, generate, to regenerate the code that we have. And this time it did. And so it generated, regenerated code for three blog posts, like we wrote here. We're going to make that atom editor and examine the public and the public, no, not the public, the sources. It'll go to the source and post. And that's where you will find the first blog post, second blog post and third blog post. And in there, what I would like to now do is make some edits. So here in my first post, I wrote this, right? I write my first, very first time. That's great. In the second post, I will write something, write something here as my second post and save it. And then go to the third post and say, this is the third one. And save it. Just for the sake of writing something, I'm just saving some content. And those content elements are basically web posts that I'm writing in plain text file right here, like this one, two, and three, very, very simply. And I'm going to close out those windows and then go back here and generate again. So my site generates again. Now I need to preview the site on my local computer. I'll say rake preview, show me the site please, and it says, okay, I'm showing it to you. Go ahead and open your browser. Go to port number 4,000 and hit it. And you will see that you have third post, second post and first post showing up. These posts are showing up automatically because the browser is looking at the server that you're running locally. This thing is surveying the content and it is running all inside the virtual machine. You have the first post here. You can go to the second post. You can go to the third post and read whatever we wrote. This is the third one. Or go to the second one, like that. So it's a very easy way for constructing a quick blog through the software called Octopress. That's what we looked at and the server is still running. So we want to break it. And we did. That's what we just created, a three post blog out of not much effort, literally not much effort. So after having created those three posts, what I would like to now do is find a way of systematically sending this to some bucket somewhere, some other location away from my computer. I have it here and it is running on that local host that you see on the browser inside that virtual machine. But I want to run it not in the VM, but instead I want to run it in the real world outside, which means I need to get some kind of a cloud service to host it for me. Now we know that there are several cloud services that already host these things. For example, you know this service called S3 will do it for you. There's a service from Google called Posting a Static Site and Cloud Storage. So Google Cloud Storage, you can configure basically the same idea. So you have Google Cloud Storage, you go to the console and create a bucket and basically follow along the same thing. So I'll show it to you right here. Create a bucket, click, create a bucket name, call it whatever and create. And that bucket name is already used, oh, somebody wants SDF, SDF, SDF, it seems okay. So I'll go to QWV, QWV, how about that? And that is not taken. So again, create a bucket and it creates a bucket. I can convert that bucket into a static site and I'm done. Same thing again, this time from Microsoft. You have the same tool. Basically create a Blob Storage account, Blob Store endpoint in Azure and configure a static site representation of the same thing and you can even define a custom domain for it. Now you will notice a couple of things. First one, in Azure, they do not support the HTTPS with custom domains. It says that and it is a fairly recent article like September 7th and this is Tamra Myers. Okay. Does Mark know her? I don't know, but this does not support HTTPS, that's HTTPS secure is not available for use custom domains. You have to use the Azure domain names like this one, but you cannot use customized domain names like that. That's a problem if you need HTTPS, don't go here. That's a problem you need to understand. Similarly, in Google Cloud, same problem, you don't seem to have HTTPS support. Here, caution, you can use CNAME redirect with HTTP, not with HTTPS because SSL support is currently not supported by the cloud storage web servers, blah, blah, blah, whatever. Bottom line is we are not using them, but just be aware that these services might look and very, very similar to you, but there may be some gotchas and you don't want to deal with that gotcha. If you're doing it in production, you want HTTPS, you better go and examine every service component that you want to see and then select carefully. In case of Amazon, I know they do and they do support HTTPS with custom domains and I use it already and that's how I know. That's why we are sticking to this example and using a Amazon bucket as opposed to a Google bucket or a Blob store from here, from Azure. We can choose depending on what limitations we can work with, we can choose either one of those sort of storage solutions, but let us for right now use Amazon. Having understood that part, you want to somehow send a bucket over to Amazon Cloud in the bucket and the content that we have that we intend to send over are this public folder. Whatever is stored in that folder is where the site representation is and so we want to send contents of this folder to a bucket. It is difficult if you want to do it manually, so you can open the public folder, we can actually go in the browser and go to your Octopress folder right there and then look at public and these are the items that I want to send to the bucket, like Octopress public. That's the thing I want to send and these are the items. It's very boring to actually do this manually, literally. You can take these items one at a time and put them in the right location, then you make a mistake by doing it by hand. So it's better not to do it by hand, instead use a tool and that's what we intend to do. So at this moment, I want to make sure that you are up to speed with me and you are actually successful in generating a static site on at least runs on your own computer. And then once you tell me that you did, we will move on to sending this content, this public content, we'll send them to our own bucket. So I'm waiting to hear from you, if you tell me that you succeeded up until this point in generating your own static site that looks like a rake preview and it shows you your site in a browser, I am happy and we can move ahead. So please tell me that you are able to see localhost 4000 in the machine and see your posts that you create like one, two, three, any number of you can create this or limit. But you should be able to see that yourself and you can customize these things very, very easily. This is just one theme. There are many themes that you can use and even make custom themes on your own. It's fairly easy once you know what you're doing. But my question to you is, hey, did you succeed? That's the question. Anybody? Hey, Niles, David. Hey, sorry, go ahead, David. Oh, sorry. No. Yeah. So my site won't come up for some reason. All I have in public is stylesheets, it seems. Or did you send the whole thing over or did you send only through manually or did you send it through automation? How did you send? I followed each of your commands and I can share what I have. Okay, go ahead, share it. Hey, Nilesh, this is Ram. Hi. So I was just following your steps, but I didn't actually do those things. I was following and making notes. Okay, no worries. No worries. So yeah, totally. Okay. What I would suggest is that if you want to share your screen, go ahead and otherwise I will demonstrate those steps on my side and make it happen. David, do you want to share something? Probably not. So I will continue my sharing and here we go. So what I will do now is this next. Oh, you have started sharing. Okay, go ahead and share it. David? Yeah. So you are looking at Octopress, let's go. Okay. And let us see what we have here in this site. And so you have public created, let's say they generate to generate the static content that gets written and you have an error going on somewhere. I think this is an error screen. So you are running into some error somewhere. It says could not find a JavaScript runtime. Did you bundle install or did you miss this step or it did, it did succeed in installing. So rake installed is already done, rake generate is failing on your machine for some reason. This generation step is failing. The error that we saw is for some reason failing on your computer. We will find out this element is missing your exact JSRB, this element could not detect a JavaScript runtime. That's what's going on. So we'll diagnose this later after the session, but we can fix it. Right now I am taking the screen away and sharing my screen and David, I'll fix this later. So I will keep going with what I was showing you so people are able to follow along. So the debugging diagnosis we'll do after the session finishes. Now what I want to be able to talk to you about is that we will want to have a location where this content that we want to share, this public folder that we have, this content needs to go to some bucket. To create a bucket through automation is what we want to do next. So we don't want to go to that browser and create a bucket here by clicking the button. That's not what I want to do. So instead I will use a credential from Amazon's cloud and that I will incorporate that into my code and include that and use a tool called S3CMD. And this tool is another open source tool that helps me manage AWS S3 from the command line in Linux and Mac. And so we will like to include this tool set into our machine and use this tool to create a bucket to send content and to convert that into a static site and all of that. We don't have to do through a web browser by clicking the S3 and create and all that manual steps. I want to cut. I can do it manually, but I don't want to do it manually because I want to do it automatically through use of tools like this S3CMD. And so that is what we intend to do in this exercise is that first thing, first we have to get the API credentials. And these credentials are made available to everybody who has a credit card with Amazon and they are available in this location. You can get the credentials in multiple places. The simplest one, which is right here, go to your name and go to security credentials. Click. That's where you will find very, very easy to get a credential. And here you can say continue the security credentials. And here you can create a key, new access key. And by the way, it is important for us to talk about this key discussion, which is kind of different from the key discussion we have had up until now. We talked about this IDRSA key and another key called IDRSA.pub, if you remember. And so that is what I'm going to talk about next, which is, give me a second, my mouse behaves a little bit differently. So the other key was IDRSA.pub. And this is the public private key pair that we created using a command locally on our computer. And this helped us connect to a remote computer. However, we are going to talk about a different type of key this time, not these, but this type. And this type is an API key. It comes also in a pair. So there is this item and then there's other item. These two items are called access key and secret key. These are provided to us by the API provider. So this API provider in this hour example is going to be Amazon Web Services. They will give us these two elements because they are letting us use their services through API. And so we need to have those credentials. So this is one and this is two. Those two elements we need to have, they are called access key and secret key. You need to know these tools from the provider so that we can make use of these things through some automation. And then programmatically accomplish the same thing that we want to do that we were about to do by hand, but I don't want to do by hand. So I'm going to get these two things. The way to get these two things are to go to the site and say create access key. So it has created access key and a combination for us. You can see them if you click this blue button or instead you don't want to see them. You can download the key file, which I'm going to download right now. So click and download. This file comes down. I'll put that on my desktop somewhere like documents maybe or Dropbox desktop somewhere and save. So this is a key that I have downloaded. I will now make sure that I open that file and examine its content. So you look at the file itself, which is available in this location and in there you will find that this file is coming down as a CSV file. So you will see that they have given us an access key, which is the line number one and a secret key, which is line number nine, so six and nine, there's two elements. This is the access key ID and this is the secret key. So these things you should never ever share with anybody. I just shared with you, which is I understand what I'm doing, but please do not share these things with anybody. This is a thing that if you share out in the internet, you are guaranteed to get hit with a bill of about $2,000 per hour. I'm not kidding, not kidding. Guarantee 2,000 roughly, give or take, per hour is the rate at which you will accumulate an Amazon bill if you manage to lose these things. I'm just giving you a cautionary note again, please, please, please do not share these things, especially the secret key with anybody and I hope you get that. I hope you clearly understand that. Please again, I have seen people in the program leak this by mistake on the internet. Please don't do that. I will have to call Amazon myself and explain to them what's going on. So please don't make me call them and you will also have to call them because you will get the bill and it is roughly about $2,000 per hour. So be very careful with these keys. Do not share them. I am not joking. So access key and secret key, we now have them and by the way, at the end of the session, I'm going to delete these keys so that they don't get out. My videos go on the internet many, many times. They go on YouTube. So even I don't share these keys, but I'm just doing it to you because I have to show it to you. Otherwise you will never understand. So we got the credentials part. Find your credentials. Now these are the credentials I want to use in our workstation somewhere here that I will now do. So click next. And I will install this S3CMD tool, which I probably do not have. So there is a step missing in here in the write up, which is this step that I'm doing right now. So do I have to get it installed? S3CMD. The tool is not installed apparently in the machine. So the password is CloudGenius. The tool gets installed or it is there already installed. So it was already the newest version. So it was installed. So sorry about that. No, it was already there, which means S3CMD should exist. And that is nice. It does. However, it tells me that it has not been configured, no configuration file found, which we understand. There is a caution mentioned here to make sure to uninstall Python magic. And let us see if that is needed. Probably it is already uninstalled for you. So remove Python magic is not installed. So nothing was removed because it was not installed to begin with. No worry about that command either. So these are some of the commands that I think I have updated the machine, but I have not updated the write ups. So removing them doesn't hurt because that doesn't even exist. It's like removing the file that doesn't exist. So it doesn't bother anybody. This command is going to be harmless. Uninstall S3CMD, we have it already installed, like there, which is already installed. And then we have to configure S3CMD. So this S3CMD configuration is very easy. Just run this command, S3CMD configure. And it will ask you a series of simple questions that you will have to answer. And the questions are like this, give me the access key, because now this tool S3CMD is going to operate on the Amazon cloud for us. So we have to give them this key to the tool. So copy this key, access key, and give it to the software. The way to copy and paste is a kind of a trick in terminal. The way to paste is either right click like this and then paste, or alternatively, you can press Control Shift V. That also works, Control Shift V. And I'm going to give the access key. Then it's asking me for a secret key. So here is the secret key. I'm going to copy that and then bring it here and paste. So I've given it the access key and secret key and great. Now it says, encryption password is used to protect your files from getting publicly accessed. So yeah, I'm not worried about encryption right now. So while transfer in flight, as data flows from my computer to the bucket, I don't have to worry about encryption because there's not much secret I'm actually sending. It's just a CD static site. That becomes publicly visible either way. So there's no need for encryption right now. So I'm skipping that encryption password right now, Enter. And no, I don't want to go particular privacy. So I'm skipping that piece also, GPG is a privacy protocol. Do I want to use HTTPS for transmission? And I'll say no, just go like that. Is there a proxy server I'm using to connect to the internet right now? No, I don't have either. So these are the credentials that you gave. So this is the private, the access key, the secret key, no encryption password, no PGP. This GPG program is for particular privacy. You can use that for encryption, but we are not using it. HTTPS protocol for sending, we are not using that. They're just going to say, you know what, please test my Amazon connection. So just go say yes, please test. And it's going to say, yeah, I succeeded. It looks like your keys and secret key worked fine. So verifying that encryption works, nevermind, not configured. So do I want to save the settings? And I'll say yes. When I say yes, it actually saves this setting in a file locally on the laptop. In that location, home, which is the home location, and a file called.s3cfg, that configuration file, you can actually go and expand on it,.s3cfg. So this file is a long one, but it contains your secret key and Amazon bucket and point references and bucket names and lots of things. So it has the things that you need, and it's in the configuration. Now you can say.s3cmd, enter, and it says, OK, I don't know what you want to do. So it is basically asking you, what do you want me to do? That's the question. And so we haven't told.s3cmd what to do. So we are now going to use it. We are going to make use of these things as we go along. And in that site that you're looking at, I'm going to make it side by side with the browser browser. And so here is the web browser. And here is the terminal with my.s3cfg running. And here I'm going to successfully save the configuration already and then move on to the next step. And in there, back people using your key exactly. And I can tell you how they get to it, but you have to be very careful. And so the next step that we are going to do is create a bucket. And you can use.s3cmd command to create a bucket. So here I'm going to choose the name. The name will be your bucket name here. That's my preferred name. So let's see that my name is available. So here.s3cmd make bucket mb. It's going to create a bucket for me in that location by that name. So s3 colon slash slash is the s3 protocol. And here's the name of the bucket I'm going to create. Let's see if that bucket name is available. And it was. So I took it. Nice. And so I will now go to that Octopress folder, which I am already there. And then synchronize all the contents of public folder into my bucket. That's what essentially I'm doing is basically taking my content. Give me a second, break it, and paste the command. So the command is, let's go see it carefully. So we are going to use s3cmd to synchronize all the content in our public folder, so public slash star, and send it to the bucket. The bucket name is your bucket name here. That's my bucket name. This. So anything in the public folder is going to go copy over in this location just like that. And if I delete something from the public folder, it will be removed from the bucket also. So delete, delete, remove. And access control should be made available to public so anybody can read. The public can read my bucket. That's what I want. So I'm setting access control to public, deleting anything that I removed from the public folder, also delete from the bucket, and basically synchronize. This synchronized method will synchronize whatever I have currently in my bucket into my public folder, send it to the bucket. So all these content elements are going right now from my computer, from the public folder. Is that a one time then or is that going to now stay synced? It is not going to stay synced unless you run this command again. You run this command automatically every time you make a change. And so you go make edits and this command will basically take the new public content and send it over to your bucket. So now we have our S3 location, S3, and you go there and you find that there is a new bucket there called your bucket name here. So click on that. And in there, inside the bucket, you have all these things that were sent over there through the automation that we just ran. Now that is what we did, sending our site to the bucket. It goes. Now if you delete something and you run the command again, it will synchronize again. And you can test it out very, very simply by deleting something, adding something, or maybe something like that. We can do that later. But right now it's synchronized. Next we want to go, next step, and that next step is simply to treat my bucket as a site. Please treat my bucket as a site. This is the command for that. Very simple. Again, let's go clear some screen and run the command S3CMD. Please convert my bucket into a site, website create, wscreate. And this bucket name here, name becomes a website. Off it goes. And it did. And so the bucket has been constructed into a website. You can just open this link right there. In any browser this time, it doesn't have to be your machine. It can be any browser. And you can see the first post, second post, third post show up just like that. And so that's what you see is a decent looking site available in your bucket, exposed as a site with the URL that you're looking at right there in the website. And I can paste it for you to see. And this is the blog post that the third one shows on top, but that's the site. And by the way, this is just a bucket exposed as a website. It does not yet have CloudFront. What does that do? So what did we do today? What did we do? We took some software called Octopress. This tool is one of the popular ones to generate static websites. And so you input your text files, basically text file number one, two, three. I did three blog posts. And it will take your content. This is where you input the content. You generate your static site. It becomes available in a public folder inside your code. So this code you download from open source. You generate this thing. If you want to view locally before you send, you can view that called rake preview. Rake preview command will preview the site locally if you like. It's a good thing to do. Check it out locally before you send. And then when you are ready, you assign this tool S3CMD with your password, access key, secret key, and you configure it. And then you say, create a bucket. And then you say, synchronize this public content with the bucket. And then you say, make my bucket into a, convert my website create, basically WS create. So convert my bucket into a website. That's all we did. That's all we did. So it was very easy. And we have a site running. We can go take that logical next step, which is to assign a friendly name. A friendly name can be assigned very, very simply to this same site. We can call it something like octopress.cloudgenie.us. And that becomes a CNAME to the bucket endpoint, which is what we are looking at. So we can very quickly do that by associating like this. That is giving a friendly name like this to our site, if you like. However, there is a better way to deal with this, which that better way is to include a content delivery network. So our site becomes globally accessible. Not just actually still accessible globally, it's just a little slow, only a little tiny little slow for my taste. So this bucket that becomes a site becomes kind of sort of slow for people in India or Singapore or other parts of the world. I want to make my site experience nice to them. So I will put a wrapper of content delivery network around it. So my website create that I have, which is basically my endpoint for the bucket. This becomes my origin, which is where I give content out to the CDN endpoints. And that's where CDN can come in and help me reach a global audience. And this is very easily and economically possible, because I can afford, you know, earlier days like just a few years ago, it was not super economic to run such a thing on, you know, on like less than three cents per month. That's what I spend right now. I think I'll go check my bill. You will find that my bill is like literally two or three cents. I'm getting bill information and you can see Cost Explorer and you can find that my cloud front usage is very low. That's why the bill is very low. And here, my cost usage, total cost is what, no, not easy to, but by service. And so, yeah, what, no, zero dollar bill, oh, there is no bill, it seems. But the amount of expenditure is very, very low, ridiculously low, because there's nobody visiting the site. That's one reason. But more importantly, it is actually affordable to run your own CDN on top of your own site and make it globally available. And so that is the next logical thing that I would like you to experiment with as you do it on your own, which is to create a site in a bucket, define it as a website, get a name from this bucket to call it an origin, then put a layer of CDN on top. And then CDN will give you another complex sounding name that makes it very difficult to remember, like something, something.cloudfront.net. It is very hard to remember for your customers. And so you want to simplify this name by giving it a canonical name, such as Bob or Ram, things like that. And so you make it a simple name, such as ram.alwakonda.com, like that. You could construct your own simpler name like this. Can you say, sorry, Nilesh, how's the CDN different from the domain name service or the name service that you were talking about earlier for making your website accessible globally? Yeah, yeah, I will. So I will describe that. So a domain name service, DNS, is simply a post office. It converts the White House, the name White House, into an IP address of, say, 1,600 Pennsylvania Avenue. This name to number translation is what DNS does. This concept is called an A record or address record. The other concept that we discussed today was this mapping of Ram to the longer name or Bob to the longer name. This name is a name to name relationship, not a name to IP address relationship, but a name to name relationship. You need both, obviously. This name to name relationship is what a canonical name is, and this is called a CNAME record. Now these records are kept by the DNS service. That's the primary thing DNS does. It does not take your content and push it out globally. Does not. To push content globally out to the edge locations, you need a content delivery network. For example, we are looking at CloudFront. For that to work correctly and make it globally available worldwide, you need a service that you will be using, and you need to provide it an origin. The origin in our example was a bucket, but it doesn't have to be a bucket. It can be anything that sends or shows something on a browser. Anything that is publicly accessible can become an origin. It doesn't have to be a bucket. Now once you have this, you can have this origin and have it make itself available to edge locations worldwide. I think another example is in order. So I'll show you a real example to give you a clear idea as to what is going on. So I will show you one thing. I think that will clarify. So I will make a little bit of change into my computer so I can actually show you. What I'm going to change right now is edit my host file so I can really go to the real computer which you can access, but I cannot because I am developing something. So that's what I'm hiding myself from the real cloud genius computer that you see, but I don't. Now I will. So I just removed access to an internal reference that I have, and I'm going to close it out, which means my pings to the cloud genius site should actually go to the real site now. Yes, good. What I just did was I was toying around with an internal server that we have inside the firewall and that is not what I wanted to show you because that doesn't make sense. You cannot see it. So this site that you were looking at up until now was actually the internal site. I forgot about it, but it's the same site almost. There are some subtle differences you will see, but let's talk about that difference later. I'm going to go back to the public facing site, which is what you see right now, and there you should see a place to log in. So there should be a place to log in right there, and here I will type my password and I will log in. So now what I'm going to demonstrate to this concept that I'm talking about, which is CDN is this story, which is the origin. And as I said, it doesn't have to be a bucket. So I'm going to use a box that I have in this cloud called Vulture, vulture.com. And that box runs a bunch of Docker containers, which is what represents this site you're looking at, the cloud genius site that you probably are using it right now. So that is what is running as my origin. So it is not a bucket, by the way, as you know. So some cloud somewhere, not Amazon, it's running Docker containers, and that is where cloud genius site is actually running. Now this is located in Seattle. And I will use that as my origin location and show you how I make use of this origin and CloudFront distribution, CloudFront from Amazon to make my pictures stored here in the origin go global, literally go eight different locations worldwide. So I'll show you with a real live example. I will take a picture, upload it into the origin right here, somewhere in Seattle area, and we will see how that picture automatically goes worldwide. So a real example right there. So here is my site. Yeah, and I'll go to the media section where I have my pictures, bunch of pictures stored in there. So you will see some of them. You probably recognize some of them. In here, I will begin adding a new picture. These are the pictures that show on the site. These are, you see them from outside view. I am looking at it from the inside view. So tons and tons of pictures there, for example. So I'll just select a picture for right now and say, identify a good one that I can send. So I'm going to just pick a good picture without causing too much trouble. And let us see, there must be good pictures here. Yeah, this one is a good one. This is my niece. I'm going to take her picture and choose. And so this picture that I have that I'm going to send, I'm going to select that and say you know what, take my niece's picture, that one, and say choose. It doesn't want to select the file apparently. It is adding three times. It doesn't show me, but it is adding the third time now. So what you're looking at is three pictures of my niece showing up. So I added that content right there. You look at it. And so this is the picture that you see. It is a motion GIF picture. And I loaded it up on this site. You see that the cloud site is called BA Cloud Genius. So let's go see in the notepad, what you're looking at is this site is where I loaded it up. Right? Exactly that site. Now, let us see where the picture actually went. Let's go examine where it went. So in our browser, if you go look at the URL location, you will see that the picture went to a different site, it seems. So let's go see where it went. So it went to this site. What is that thing? Let us understand. It is not this site, but a different site. It automatically went to a bucket and then from that bucket to a CDN and all that. This automation is already written as a user. I'm sending a picture to my site. It automatically does these things for me. And let us go examine and understand what's going on. What I'm doing is I uploaded my picture to this site called B.A.CloudGenius and it automatically went to this location, which is CDN. Not B.A. but CDN. And in there, there are folders and folders and then the picture. That's what you should see. Let's go see what's going on. This is a different site compared to this. Totally two different things, two different names. Now let us understand what is this thing. So let's go dig. So I'm going to go clear my screen and say dig CDN. And this will tell you that this is also a canonical name. It is a canonical name to a different CloudFront distribution, which is represented by these eight different IP addresses. So it automatically went and configures itself like a CloudFront distributed picture just by me uploading it to my site. I uploaded it in line number three, but it went all the way to CDN and distributed itself. Now what is going on under the hood? Let's go see that. Under the hood, when I upload something in line number three in that site that we have, what it does is it goes ahead and puts this picture that I upload into a bucket called CloudGenius and a folder called WPContent, where is that, WPContent. And uploads. And in there somewhere along the way, this picture called nl200818175499motion.jif. That file name should be there in the bucket somewhere, or there are tons and tons of copies of that. So here is the picture that you see right there. So that is the item. Not that. This one. This is the picture that you see is one megabyte. It was uploaded September 20 at 1837-36, meaning almost right now. This one megabyte object that you see here has a property that shows like this. And I can click and you should see the motion animated GIF right there. So it automatically goes from the site to a bucket to a CDN and becomes available. So if you go look at the item itself right there. And if you examine its properties, it is actually an item in S3, in this bucket called CloudGenius, in a folder called WPContent, underneath the upload, underneath there is this picture. So it goes there. That's what you saw me do it. All I did was upload it here. And this is a WordPress site. It has code written that takes these items from that I upload. And it sends to a bucket like this, this bucket. And that in turn goes and configures itself in form of a cloud front distribution and is available for public to see behind the CDN endpoint, behind this endpoint. You should see the same result. So if I open the same link behind a CDN endpoint. So something like this link followed by WPContent followed by uploads. And then this picture, you should see the same picture again. Let's go open it up, browser, click paste. And here it comes. The same item becomes available in multiple names. But they are actually sitting in a bucket called line number 10. Underneath there is a folder called WPContent and uploads. And that's where the picture originally goes. It gets represented in form of a distribution from cloud front that looks like this, which gets a canonical name mapping of CDN.cloudgini.us, which makes it easy for me to remember. So what that translates to is something like this, line number five. And I don't even worry about five and down. I just go to my site, which is a different IP address, by the way, and let's go dig that one also. If you go dig the BA Cloud Genius site, you will find dig is just an error card pointing to a vulture machine. So this is a vulture cloud machine. And that makes it easy and affordable for me to serve global audience from our site worldwide without spending a ton of money. I still use a small enough machine. It's not a gigantic setup that we have. We don't have to waste money, but still being able to service global audience by optimizing how we are doing stuff, like in this example that I showed you. So let's recap what I just showed you in terms of example. What we have is a vulture cloud, which is a separate IP address. This represents the BA Cloud Genius site that you look at. Now I go here, upload a picture, P, and this software that we have running automatically takes that picture and pushes it outside. And you remember this discussion I think I had the other day, which is to never ever store stuff here, but instead offload it somewhere else. You remember I mentioned this is to take your picture that these people upload and they might upload it here, they might go here, P2, P1. So make sure that these pictures get offloaded and sent out to some bucket so that both these pictures become available to both these machines as you scale out or even add more, no problem because your bucket contains them. So you can keep scaling more machines and they will all be able to access the same P1 and P2 and more as you go along because they are all sitting in the bucket. And you can, in our example, put a cloud front distribution on top of your bucket. So what we did actually is something like this. Something very simple like this, I'll illustrate that point. So what I'm showing you is this machine, I'm simplifying it even further. So this is the only box that I have right now in the example and this cloud front distribution and this storage and there is a database by the way that I have. So let's go, database, yeah here. So I have a database server running and a bunch of Docker containers running here. And this is what you see in the BA Cloud Genius site. This representation is the content delivery network. And that is what you see in the cdn.cloudgenie.us site. This gives a cover, a CDN cover to the bucket that I have my store, my pictures here, P1, P2, like that. These containers run the site. These people look here and the site says, you know what, my pictures are stored here. So get the picture from here instead and get the picture from CDN. So in practice, what happens is when you have a picture that you upload into your central location, it automatically goes to a bucket and that bucket gets covered with a CDN layer and then it becomes available. So if you go back to the site and examine what that site is doing is even though the site URL is BA Cloud Genius, the picture URL is different and it does that through a piece of software that we have in the site, which is exactly what we discussed the last time. Like as soon as a user upload something to the site, that item should be moved away from these machines because you want these machines to go and come to life as and when you want to grow or shrink your cloud. So you want this machine to get replicated as you have more people, no, not this, as you have more people showing up, you want these machines to also grow like this out and become big. And if these pictures are stored in here, that becomes confusing and it doesn't actually work out. So it's better to offload your work to some other service that runs separate from your infrastructure. And so this is the storage as a service, storage as a service. This is content delivery network as a service. And that is what we are making use of in our examples. So storage as a service and CDN as a service. And this is your Docker containers running to serve your customers and pictures or other heavy objects that you saw, pictures, JavaScript, anything that doesn't change, like the picture is going to be a picture, it's going to be a picture, it's not going to change so often. This picture is going to stay like this unless I decide to modify. So picture doesn't change by itself. And that's why those static objects should actually go out into some storage services, like Azure Rob Store, Google Cloud Store, S3, things like that nature, things of that nature. Now you will notice one key difference that I would like to point out, which I think I already did, but I would like to highlight that, which is this blob, this HTTPS link that you get from here, which is natural for an Amazon service. But you saw in here in Google that they tell you that CNAME with HTTPS does not work. And same complaint here from HTTPS custom domains, CNAMES do not work. So these guys are still lagging behind both of them, Google and Microsoft, whereas Amazon has a CNAME HTTPS support. As you can see right there, it is HTTPS. The entire site is HTTPS, this whole site. You can see the entire, every single component that we have in there is secured. And you can see that the certificate is from this open source authority called Let's Encrypt, which I think you should know, it's a fairly new authority. Let's Encrypt, it's an open source automated authority to issue SSL certificates, pre-automated and open. Meaning you don't have to worry about, you know, my certificate is going to expire, let me go pay some money in Russia and renew it. Nothing of that nature, it just does. That's what it's a recent thing, recent release, recent available as a service in the open source domain as a new certificate authority that beats the crap out of everybody else because it is free and not only free, it is automated, so you don't even have to worry about it in the future. Once you have a name, you get this software loaded up, this is open source, and it works. I mean, I've used it in the past, ever since it came out and I'm using it in production, it seems to work okay. And that is the beauty, it's not only free, but it lets you automate the whole thing. So you can get your certificate renewals also automated every three months. It just does that by itself. And so we'll talk about this specific thing later on at another exercise. But to close in on this discussion before we take a short break is this core idea is you can have your items stored, doesn't have to be a bucket, but you can have a content delivery network, provide a layer around you, you can provide a layer around your buckets and still serve content globally without breaking the bank, that's the core idea. Okay, we'll take a short break and answer your questions and do some of these things as we go along. So right now, 6.53, we'll resume at 7pm, which is a short seven minute break, so 6.53, 7pm. Questions are welcome. Hey, Nilesh, this is Ram. So I think I missed, maybe missed a step, I can't seem to get HTTPS link for the site that I started saying that I just. Go ahead, share your screen. Let me just check. Share your screen. I can see that, yeah. Did you click on random clicks, please, and then create a static site out of it? Yeah. Can you click static site button? I had these two buckets that I added. Right, right, these two are items, right, although the two buckets, okay. So yeah. Okay. So let's go random click first. So random click there, and then you have properties, then you have the static site permissions enabled, startup land up, okay. And then you have your, it is, no, so it is not actually. I was playing around with it, probably. If you. I think your DNA, can check your DNS, please. Sure. Yeah, your DNS must have chosen a wrong name, apparently. You put a DNS alias for something else, it seems. Okay. Now where is your DNS, who's running your DNS? I didn't add DNS. I was just toying around with this, trying to redirect, you know, when I have this one added, I was trying to. I see. I see. I see. I see. So this alwakonda.com, do you own it? Yeah. Okay. But let me. Who's your DNS? GoDaddy. Okay. GoDaddy. So the way you don't experiment with redirects, it is not going to work. Okay. So what you need to do is go to your GoDaddy and there you have to, you have to point that name reference to this site. So this site that you have alwakonda properties, this bucket is empty. You create your site here and put your index here, like this. And then you go to GoDaddy and give them this name. Okay. And that redirects it. That will redirect. So go tell GoDaddy I am here. Okay. Got it. And delete the other bucket. Okay. Then I need to move my files into this. Yeah. Yes. Okay. Yeah, exactly. So that, that random clicks by bucket, you should get rid of. What I was trying to do is I wanted it to, you know, have the CD random clicks.alwakonda.com. So that's what I wanted it to end up. You can redirect, but I would not recommend redirecting. So don't, don't mess with that method. Just go clean. Okay. Put a clean index here in this bucket and have your GoDaddy go to this endpoint. Okay. All right. And use, don't use naked Alwakonda. Use ram.something or something else dot something or www. That's what I was trying to do. Random clicks.alwakonda.com. Yeah, you can, you can do that. So you assign a CNAME for random clicks.alwakonda.com and map it to this endpoint and delete this stuff. Okay. Okay. Yeah. All right. Yeah. Thanks. Yeah. And I, I will actually walk away for a few minutes and come back in just a minute. So thank you. Bye. All right. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Hey guys, I'm back. Microphone cable and let's continue. Okay. So let me share my screen. So on this question of the topic of using a content delivery network or using a bucket or assigning a origin, do you have any questions on this topic as such? Before we do a couple more variations to this discussion that we have in terms of understanding storage-related services in its all variations that are available from variety of cloud services providers. So there are a couple more things to discuss also in the storage as a service aspect, which we will do that. But before we jump into the other aspects, I want to understand and make sure that all of us, at least the questions are answered before we go further in the storage-related topics. There are a bunch of them, different ones, and we want to cover all of them. Hope today. And at least from a conceptual perspective and then do some more exercises in the S3 CloudFront scenario. So any questions on what we just discussed up until now? Anybody? No? Okay. So we have covered these ideas. So S3 is basically give you storage. CDN makes it globally available. There is this concept of a hit and a miss that I think you understand. Sometimes if it is a hit, then CDN endpoint will give you local content available to you. If it is a miss, the content is going to go back to the origin and then come down from the origin and then given to you. So that's a miss scenario. It's a little bit slow the first time, but then hits makes it really nice and fast. That's what CDN does globally. Now apart from these two, there are many more, at least a few more iterations of a variety of different types of services that generally fall in the storage space. And that's what I would like to talk briefly next. So we have S3 discussed, CloudFront discussed. We briefly mentioned Elastic File System the last time we talked about, which was in the context of the same idea, which is basically here, is to avoid the problem where a user who is going to make use of, let's have a couple more machines here. So one, two, three, four, like that. And these users will occasionally post some content here, and you find that this user posts this content P3. This user wants to go and read. They want to read P1, but they want to read it from here. And this guy wants to read P3, but from this box. So these boxes need to be synchronized among themselves. And that becomes possible only if you use some kind of a synchronization method, like we discussed the last time, Elastic File System. We also discussed this thing called, what is it called? So Elastic File System is one such tool. There is a GlusterFS tool available in open source called Storage for Your Cloud. And this does pretty much the same thing like I described, GlusterFS, G-L-U-S-T-E-R file system. If you have to run this GlusterFS on each of these nodes, one, two, three, like that, and they will automatically synchronize the content. P1, everybody will have a copy of P1. P3, everybody will have a copy of P3. And it synchronizes. That's the purpose of this Elastic File System. And this file system itself is not on these boxes. It is outside. And that is a service available to us from Amazon. So you go to Elastic File System. It is advertised as a storage for use with your EC2 instances. So it's a separate service. It does not need those boxes. But you create a file system that is going to be associated with one of your VPCs. And then we'll select a VPC and create a next step. Give a key value pair name if you want. You can choose general purpose performance or maximum IO performance, depending on your need of performance on the storage. General purpose is good enough to begin with. Unless you have tens of hundreds of thousands of EC2 instances all accessing the same file system, in that case, max.io is good, where you have more than hundreds of machines in our layout here. If you have these machines that you have, or hundreds of them, it's better to have max.io selected. If you have just a few, three or four, five, maybe ten, not needed. So general purpose is good enough for most cases. You go next step, and then you create the file system. As soon as you create this file system, you will get hit with a bill. So just remember that don't click the button randomly without understanding. You might get hit with a bill. And so don't hit that. Unless you really intend to make use of it, in that case, it's a great thing. Absolutely do that. So I'm basically not running an exercise on Elastic File System right now, but communicating this idea that there are many ways for us to accomplish this idea that keeping these boxes disposable. In other words, keeping them stateless, keeping these boxes stateless will lead you to the idea of scalability. And that can be accomplished in many ways. One way, which is the way I demonstrated, which is to use an external service like CDN and offload your state like picture number one, picture number two, like that. You offload it out here, P1, P2, and keep it separate, thereby keeping these units stateless. That is one method. The second method, this was offload. First method is offload. Second method is to use Elastic File System, is to let Amazon provide you with an EFS. This is a separate external file system that leads you to the same benefit of remaining stateless and allows you scalability. So that's the second method. The third method involves you installing Gluster File System yourself, which is easy. It just needs to be done. So you need to read this site, Gluster site, and install. That's how you go. And it's built into 1.2 PPA, so you can just use this PPA and say sudo apt-get install GlusterFS, and that should do it. Not that complex. And a fourth method is also possible, which is to use btsync, that most of us are using right now. That also is a possibility. You can use BitTorrent sync to synchronize content in here, in here, in here, in here. And as new machines pop up, you will have growth. So you will have this machine copy itself to multiple machines. No worries, BitTorrent sync will allow you to synchronize your files across all these number of machines. It's super easy, super efficient. And there are production examples of this also being used. This is a very well-known open source product, GlusterFS. And I think EFS is based on derived out of this software. And this is a service. This is a software. It's basically similar in nature. They're doing it for you in EFS. Here, at GlusterFS, you have to install it yourself. And my preferred method for my use case is actually just to not worry about any of these things, just offload, upload outside. And that's what I do in our examples that I showed you. Fourth method, btsync method, is also possible, which is to run BitTorrent sync in Docker containers and have that synchronize. BitTorrent sync also runs inside Docker. By the way, there is an update to this software available that you can probably download yourself. This new update is actually nicer. It allows you to schedule when synchronization may happen. So if you have bandwidth constraint, you can make use of those features. But sticking to the point, that tool lets you also enable statelessness that helps you in scalability. So these are the four methods that I think I know. There may be more that can help you in accomplishing scalability by making sure that your machines are stateless, because that's a key to scalability, scaling out, scaling back in. And to serve your customers efficiently. That's the core idea. Now, there are more services available in the domain of storage. And let's go look at those. So here, storage, S3, CloudFront, and Elastic File System we discussed. Now let us discuss these three things, Glacier, Snowball, and Storage Gateway. They're kind of sort of useful. I'll show you where it becomes useful. So let me go draw this sheet of paper and talk about this next idea called Glacier. By the sound of it, it makes you sound like it is a slow but big something. Glaciers are big and slow. And that is exactly the use case. When you don't have too much of input-output, you just want to archive something for long-term. You can do that totally. And you can accomplish that by... Hold on. Do not disturb. Let me do not disturb that. I was getting a phone call. So if you have a case of usage where you want to archive something for long-term, this solution is a great way to archive stuff for long-term retention. Now let's go read about Glacier. So Glacier is known as Nearline Storage. It is not literally online storage, but it is almost online. That's how I would describe it. Nearline. It's not instantly available online all the time. What does that translate to? A practical example that you probably already know is this. Anybody know what this thing is? This is a tape library. Old people know what this thing is. Most of you guys may not know or may not have seen or used it, but some of us know these things. These things are called tape. You put them in some kind of a mechanical robotic tool where you can retrieve a reader tape, put it back, and store it for long-term retention. There are companies apparently even today that use this kind of a method for storing stuff because they don't want to change. But this stuff that is stored inside a tape is not available instantly online. You have to actually take the tape out, mount it, read from the tape drive in order for you to access the data stored on that tape. That's the problem that some people do not like this, but it actually is a very affordable long-term storage solution. That is the idea behind this Glacier toolkit that you have, because what Amazon does is provide you very, very, very cheap storage, extremely cheap, cheaper than S3. It's like 10 times cheaper, roughly, than S3. S3 itself is cheap. This Glacier is a near-line storage for very, very low price, for tens of terabytes per month. You pay only nine cents per GB. The challenge with Amazon's Glacier is something like this, that I actually don't like that service, and I'll tell you why I don't like. It is something of this nature where you have a place like an island that you want to go, and this island is actually the Glacier storage. Storing there is relatively cheap, but when it comes down to retrieval, so this is the storage part, it is cheap, and you can store it here for tens of years, no problem, it will stay there. When it comes down to retrieval, that costs you money, and that is the part that I do not like. So they charge on I.O. versus just the storage? Yeah, so this is the crazy part that I do not like. This is like going to an island is free in a boat, but coming back from the island, no, not really. So that's the part that I do not like about Glacier pricing. You call Moneros. I know. So you can see more about these things. So an alternative solution that I see, and by the way, not only that, this retrieval is not instantaneous. It will take three to four hours. You have to wait for that data to become available. I like how they make you do the math on gigabyte to terabyte translation there for nine cents. That's another trick. Did you notice that? Here, here's a terabyte. Here is 10 terabytes at nine cents per GB. That's ridiculous. Yeah. So that's the craziness. So this is Amazon's Glacier Cloud. But let's go look at this. Google Nearline Storage. That's a beautiful solution out there. So here, Nearline Storage is kind of sort of like Google, kind of like your Glacier, except there is no three-hour wait time. In fact, that wait time is one second. And that is just beautiful. In fact, like I mentioned here, three hours of wait time is needed. Not in Google Nearline. Just one second of wait time, and it becomes available. So instead of three hours, one second. Let's go look at what they claim. So the claim here is in online storage, the storage is accessible in less than 0.1 seconds. It's almost immediately available online all the time. Whereas in Nearline Storage, the data is available after a second. The time to first byte of retrieval. And they're basically not calling out here. They're calling it offline. But this is basically the three hours that these guys take. One of those guys. Glacier guys. So Glacier. Three hours. No. Glacier retrieval. Glacier might be spelled wrong there. So here, FAQ from Amazon. And it says, data retrieval policy. It says that complete retrieval jobs typically complete within three to five hours. They're saying it on their own FAQ. Most jobs will take between three to five hours to complete. And that is boring. I mean, yeah, today nobody would use that. But I don't know why people use it. There may be a use case that I do not understand. But I would use this service instead if I want to store long term, high available cold storage. Highly available cold storage. It's very decently available. It is Nearline. It is not online. Takes a second for you to actually receive. But the pricing is very affordable. And they want to compete basically with Google, with Amazon. So they're doing it like this. So this is a similar solution from Google that competes with these guys, the Glacier guys, which I find not useful for my case. So I don't want to use it for a simple reason. The retrieval is slow and the pricing is kind of skewed for a variety of reasons. So I think Amazon may be using what is known as optical disk. So optical storage that they may have from older years and years of older CD drives, they may use that. Or maybe just old computers that they have accumulated over the years, just use that as Glacier on the back end and provide that as a service. That may be going on. I have no idea. I have no idea how they have implemented it. But all I know is from usage perspective, the retrieval kills it. I don't want to use that service, as simple as that. You may want to use it. It's available. It's actually useful in a sense that you want to just dump the stuff there. It may be a little bit cheaper. But if you just want to dump stuff, why not dump here in Google's solution instead? And you can mix and match both clouds. There is no need to stick to one cloud for all the services. You can mix and match and use what service that you like with one cloud and use the other service from another cloud and use both sometimes. That is also possible as long as it is technically viable. It makes business sense to use multiple clouds. Like I have shown you an example. I use a combination of five different cloud services to construct the cloud genius services that we have. So it's totally okay and actually encouraged to find the best of breed solution from whichever service provider that you can find and make use of that from that perspective. So this is about Glacier. And now, the funniest of these things all is this Snowballs local large-scale data transport. That sounds fancy, high-tech, right? Snowball, large-scale data transport. You know what this thing is, anybody? Do you know what this thing is? Or let me ask you a question in a different fashion. So the question I want to ask you is, if I have 10 terabytes of data sitting here in my office and I want to send this to an S3 bucket, what is the fastest way to send it? I'm in New York, by the way. Let's say, for example, and this happens to be in Seattle. Actually, it is not in Seattle. It's in Oregon. So what is the fastest way available, fastest? For me to send 10 terabytes of disk, I have basically 10 disks of 1 TB each. And I want to send the data the fastest and also cheapest, both ways. So you can look at it both perspectives. So I want to put that in the bucket. What do you think you will do? FedEx. FedEx, yes, exactly. So this service is FedEx. It has a fancy name, FedEx. Yes. I didn't hear the pronunciation until your second attempt. That cracked me up. That was good. FedEx. Yeah, UPS. UPS, better way to say that. So this really technologically sounds fancy, large-scale data transport. But what they're really doing is you read that carefully. Import and export snowball accelerates moving large amount of data into and out of AWS using Amazon-provided secure appliances for transport. It's a disk cartridge. So import into AWS, you create a job, and you go next. And you give it a shipping address. See that? So you have to give a shipping address, one-day shipping, two-day shipping. They put it on a disk for you? No, they give you a place where you can, they give you a container that you can mount a disk or, I think, let me read a quick search. They may have changed it. In older days, I remember, you can actually wrap your disk in a package that they provide and ship it off to them, the hard disk itself. And they will load it locally and destroy the hard disk for you. So load it up in the S3 bucket and destroy the hard disk so that there is no worry about your disk data getting lost. And the items will be in the bucket, and then you're done. Today, this snowball, what is a snowball? Let's go find out what is a snowball. AWS and a snowball. What is a snowball? So here's the documentation. Snowball features. 80 terabyte model available in all regions and a 50 terabyte model available in the US regions. Encryption, you don't have to buy or maintain your hardware. You can manage your jobs, perform local data transfer between your on-premises data center and a snowball using a snowball client. It's a basically hard disk and a downloadable client. And so transferring data with a snowball. Snowball is its own shipping container, and it uses E Ink display to changes to show your shipping level when the snowball is ready to ship. So it's basically a hard disk, some fancy hard disk that you can mount and load data locally at a very high speed and send the disk back. It is basically its own shipping container, meaning, let's see, AWS snowball. And do some picture searches, so that's where you will find a picture of what it looks like. So this is a good snowball. And this is what a snowball essentially is, meaning it's a disk, practically. And so here is the disk. So you get the disk, you fill it up with data, 50 terabytes of data, and you ship it back. And then they will offload that data locally into a bucket and have it there. So the disk has a really good I.O. Yeah, the disk has good I.O. Plus it has some mechanical protection for it from dropping or things of that nature. And so it's a ruggedized disk for transportation. That's what it is, basically. And some connectivity for you to dump data into it. You will receive this unit, and then you will load up data and then send it back. It goes. At the other end, they will basically take the data out, put it on your bucket, and then you're done. So that is a snowball, which is like a fancy way of branding an old technology called UPS. But it has a fancy name, large-scale data transport. Actually, it's called SneakerWeb, right? Yeah, you can call it SneakerWeb. I remember the older name for this was AWS Import-Export. In fact, you can still see the name Import-Export in here as well as in the URL up on top, Import-Export. It still has the same name. And so that was the older name for this service, which is now fancied up a little bit, which is nice. So that was AWS Import-Export. It's a technology, I mean, a cloud-based solution. It's a UPS-based solution or some other service-based solution. So that's that. But I think it is the fastest way, even today with the highest possible internet speeds you can get away with, it is still the fastest to just being able to send. Okay, there is a picture of large-scale data transport, end-to-end custody of UPS, and that's a snowball. And this is exactly what Ram pointed out is what is going on. This is, I think, who is this guy? Oh, I lost it. But yeah, you see the picture there as Ram has pasted. So that's exactly what's going on in AWS Snowball. Not interesting to some, but it is very interesting to some other people. And this use case of that actually is like this. When do you want to use AWS Snowball? When you decide that you want to move your data to the cloud. And so you want a large-scale data for Hadoop cluster with HDFS, or you have petabytes of data in your data warehouse that you want to use Amazon's Redshift. What's it called, Redshift? I think it's called Redshift. Let's see, databases, it is called Redshift. If you want to use this data warehouse service called Redshift, which is basically your own data warehouse, but in the Amazon cloud, if you want to use that service called Redshift, you will use this transportation method of shipping your data out to Redshift. If you have Hadoop file systems locally and you want to get rid of your local Hadoop system and want to use the Amazon's Hadoop, you will ship your entire HDFS system out to use Elastic Map Reduce service from Amazon services. And that is another scenario where you want to use big data crunching, number crunching you want to be able to do in the Amazon cloud. You will use that scenario and you will basically get rid of your machines locally in your data center, but instead just migrate to using cloud-based solutions for data warehouse as well as for data analysis. And that is a very good use case for transportation. That is Snowball. The next one is Storage Gateway. And this is basically a way for you to continue using your local storage, but have a method of systematically backing up to the backend in the cloud storage from Amazon. So this is a service that connects your on-premises solution that you have with cloud-based storage. So it will basically appear to you that you are storing your data in the cloud. It will be backed up in the cloud, but you will continue using your local hard disks that you might have for your applications. So from a backend perspective, it is basically integrating your local disks that you may have in your data center and pushing and synchronizing that with these cloud services that we talked about. It's a gateway implementation that basically uses S3 on the back and lets you store and operate your disks that you have locally, but your local disks will make themselves appear as if they are caching between the cloud and your computers. So what does that translate to in a simple example? What is going on is that you might have a bunch of machines that run some applications, and these applications will run on some machines, and these machines will need some disks. And imagine all of this is in your data center. So by adding a storage gateway, what you're doing is basically using these things, the disk portion of your, the storage portion of your data center, you are using a storage gateway to replicate this out in S3 or some other AWS-based storage. So that's the gateway solution that they have provided. It basically gives you a method of systematically backing up. So this effectively becomes a cache where it appears that you are using the local disk, but in effect, you're actually backed up by the cloud. And that's the user scenario for your applications to use your machines which use your disks and is actually protected from a backup perspective from the cloud. And you will need high bandwidth connection here between your gateway and the cloud. And that's where your storage gateway gets mounted. It is very difficult to demonstrate this without actually having the unit here. So I cannot show you these things, but maybe I'll find out a way to demonstrate these ideas in a different fashion. But you need to get that thing, cache volumes, store volumes, or virtual tape library. So you can basically use a virtual tape library scenario, meaning you can use the Glacier toolset that Amazon provides as if it is your tape library. And you can configure it that way. So all your backups will then go off to Glacier and will get protected and kept safe for long-term retention unless you want to bring them down, in which case you will have to pay and you have to wait, and that will work so that retention of long-term archival works. In other scenarios, your stored volumes, you schedule offsite backups to Amazon S3 for your on-premises data. Here what you're doing is scheduling at a periodic frequency whatever snapshots of your disks that you have in your on-premises, you're basically backing them up offsite to S3. So that's the second usage scenario. And in the first one, you are using a cached volume, meaning your disks will maintain local access to the data that is frequently accessed, most recently accessed, with a low latency access directly to the disk, while most of your data is locally available, but your entirety of your data you are storing in S3. So all of the data is basically stored in S3, but whatever you are accessing immediately, that portion is cached locally, and that's the first usage scenario. So in these three scenarios, basically what you have is an application example. So this app runs on a machine that needs a disk, and this disk is acting as a cache. The actual storage of your disk is in Amazon S3, but you have a storage gateway in between, and that gateway, which is this one, storage gateway, it will act in a cached configuration. So most of the recently used data, most recently used data, MRU data, that you frequently use from this machine, this frequently used data will be available locally in the cache in your hard disk, whereas this storage gateway will act and connect itself with an S3 bucket, and that is where your data really belongs. So it gets safe, and as you remember and recall from the last time we discussed, this has an availability of 11 nines. It's a very highly available solution right there. Your disk may fail, and you know it will, but this one is very less likely to actually fail because of its very high durability. And so if you want a very highly durable solution for your storage, this using a storage gateway and using your local disk as a cache is a good solution. So Nilesh's question, Mukesh here. So the key to here is the bandwidth between that and the… Yes, this bandwidth needs to be nice. You cannot implement in your Comcast connection. It's very hard because your upload is limited. Upload is needed. So your upload bandwidth, I think my upload is like 9 or 10, and that's very low. I'm going to get fiber with 100 soon. I'm waiting for that to happen. But until that time, I cannot actually make use of this. If this happens, it's a very good use case of a data backup durability scenario for your real applications that you have locally stored, which you know will fail at some point because this is only… everything fails. So this will also fail at some point, but you want to protect it, you can, provided you have a decent enough bandwidth. Otherwise, this caching might… your performance might suffer at least initially quite a bit until the whole synchronization happens and then your MRU will be here. But the key, as you said, Mukesh, this bandwidth is absolutely a critical thing. And corporations can accomplish. No doubt big companies can totally have this implemented, and they actually use it like this. So that's the one usage scenario. This is the cached usage scenario. Cached disk. Local disk is acting like a cache. The second usage scenario is periodic backups. Periodic backup. So every so often, your disk that you have goes to S3. Snapshot. In here also, you need good upload speeds. Otherwise, your backups will take forever. And so you take hourly backups here, for example, one every hour, then your backup snapshot has to finish uploading and go to the bucket and sit there before the next one comes, so that has to finish faster. Again, the upload problem comes along, and this is the second usage scenario. And the third usage scenario was tape library emulation. Tape. So you want to basically keep this… emulate that you have a tape library. Imagine that you have a tape library where there is no such thing, so you have your applications, your machines, and your disks, and you want to keep this thing backed up on a tape. But there is no real tape in real life, so you have a storage gateway configured like a scenario 3 tape library, and this thing goes to Glacier. That's the third usage scenario. These three. And so you can implement that, either one you choose, and then you… let's click and find out what you're using. From a machine perspective, you can use Hyper-V or VMware or Amazon EC2 or any of those tools. And set it up, basically follow along and step by step, and finish it off. Now, I cannot demonstrate this to you because it's very hard. I need the bandwidth, which I don't have. So it's not a good demo case from that perspective. And that finishes the list of storage solutions that we have in this cloud. In other clouds, we have similar solutions, a little bit less comprehensive, but they exist. For example, here in the storage-related aspects, we have this bucket like I showed you created. So I'm going to delete that bucket because it's of no use right now. But you saw that in Google Cloud, you can actually create a bucket if you like. You can establish other methods of creating a transfer. So transfer of your cloud storage buckets from Amazon Simple Storage Service over to the Google Cloud. So this is like a competitive offer, as you can see. Transfer your cloud storage buckets from Amazon or HTTP servers or other buckets you may have. And you can schedule a one-time or a daily transfer, and you can filter files based on a name prefix. So basically, this is like siphon your data away from Amazon and take it to Google scenario. They're trying to build those capabilities, and that's what you're looking at in the transfer case. And now they also have the Nearline storage like I mentioned before, which is available somewhere here. I don't have bookmarks identified, but they should exist. Nearline. I don't use this cloud much. But there is Nearline storage, as I know. In case of Microsoft, you don't have the Nearline storage as these guys have, but they're developing. Let's leave it at that. I know your Microsoft employees are in the group, so you know more than I do about what you're doing. So you should ask these guys, both of them, Mark and Diego. They'll tell you more about what I can than what I can from my study and my usage of Azure. But both these clouds are a little bit behind Amazon's capabilities in subtle ways, very, very simple subtle ways, like HTTP support missing, this and that missing. They're working to fill the gaps, and eventually they'll catch up. So that's storage services, as you saw and discussed. So in the examples that we did today, what I would like you to do is a couple of things that I think you should understand, which I can actually foresee that at least a few of you want to run your own sites on a bucket and a static site. You want to do that. A couple of things that you should make use of, and that is a policy, it's called a bucket policy that you should actually apply. And I did not describe that to you, but I think that is something that's worthy of discussion because you want to actually go ahead with, say, your own name, alwakonda.com, or something like that. And to enable a scenario like xyz.alwakonda.com, you need to have this name associate in a DNS. So GoDaddy will do it for you. And in that DNS, you have to create this CNAME alias. And this name alias needs to go to some kind of a CloudFront endpoint. In that CloudFront endpoint, you need to tell that, you know what, you should get your content from the bucket. So go get from here, and the DNS from GoDaddy should actually be a CNAME to CloudFront, not to the bucket, not to the bucket. No, but here. And bucket policy, like I mentioned. So I'm going to bring up a link for you that will be useful. And in that writeup, you will have a reference. I'm just picking up that quick one right now. Should have a reference to bucket policy. And so in this example, you will see that I am using a bucket policy. And this gist that you have here, which I'm going to paste, you should read that if you want to implement it properly. And that bucket policy allows future reads. So let's go read this policy. So if you go read this, you will find that it says allow public read. Allow AWS with an asterisk meaning everything in the bucket. And the action is to S3 get object. And the resource that you want to get is this bucket. So this bucket policy basically says allow everybody to have read access. Basically, you want to indicate that this bucket should be read-only by all. Look at the asterisk at the end. This bucket policy, you need to include against your bucket. So any future upload that you want to add or remove something, it doesn't cause access denied problems. That's something you should do that on your bucket if you want to really go live in production and all that good stuff. So that's one thing I want to bring to your attention. The second thing I want to bring to your attention is to make use of HTTPS. How do you do that? It is like this. You go to CloudFront, and that is where you need to include your HTTPS scenario. So you will create a new distribution, and you'll say I want to create a web distribution, so get started. You want to give it an origin name, and here your bucket names will pop up. So for example, my bucket name such as your bucket name here, click. And so that becomes my origin. You want to use your origin ID. So this is your bucket name here, if you remember. I just created it through automation. I created that through S3CFG automation. That bucket now shows up in my origin. I can see that that is my origin. If I want to use some other location, not any of these buckets, I will then type that out, like use my server.com. Use this server.com. That becomes my origin. So I can choose to make whatever I like as my origin. It doesn't have to be a bucket. You can use a bucket or you can use another endpoint. So I'm going to illustrate this with the example that I have today. And in here, I do not want to restrict any access. I'll say no. Do I want custom header names? Probably not, but you can assign. And next, you want to set your protocol policy, and you can strictly enforce it to be HTTPS if you like. And you can use forwarding headers or not. It's up to you as to how you want to deal with headers on HTTP or HTTPS. Similarly, you can also go ahead and say that I want to use my edge locations in only certain parts of the world or I want to go edge locations worldwide or just restrict myself to only US, Canada, Europe, things of that nature. They have these choices for price class. But I think all is good enough. Just go global. Unless you don't have customers in other parts, you don't have to go global. And then the next one, which is the critical ones, start now. And those are to be able to use your own canonical name. And in here, you define alternate domain names. So here you will say something like xyz.alwakonda.com. For example, xyz, you have to define your alternate name here. And for SSL, you can choose to use the default crowd front certificate, which is a bad idea. Instead, you should use your own custom SSL certificate for your own domain. And if you have already uploaded your certificates, you can just drag it down and it will pop up right there. So all your certificates that you have loaded up already will just show up. If you don't have a certificate available, Amazon gives you a free certificate by clicking Request an ACM Certificate. This certificate, I have uploaded it a long time ago. It's there for my account, for my use in my domain. So this domain should not be alwakonda, but should be cloudgenie.us. Then it will work because the domain corresponds to that main domain. So this will work now. This certificate will actually be functional. If you don't have that certificate already, there is no need to buy one. You just put your name here and request ACM Certificate. This is AWS Certificate Manager software available that gives you a certificate for free. And just click on it, it will pop up and becomes active. Now, at this moment, you are ready to create a distribution. When you create the distribution, you will receive something like this. You will create something like these endpoints. These domain names will show up. One new name will pop up for you. So a new name will pop up right there and a corresponding origin will map here. That maps to either your bucket or your own site. So see this bucket? It's not a bucket. This is an origin, which is not a bucket. All of these guys are buckets, but this one is not. And this actually gives me a content distribution network for my site. And you will see this in just a moment. I think I should demonstrate this also. So the origin here is not a bucket. And here is the name for the distribution that I have created without using a bucket. And I have used a specific CNAME for it. The CNAME I have chosen is a.cloudgenie.us. Now, this a. is different from the CDN. That's a different name that I actually associate with this bucket, whereas this a. is not a bucket. This is not a bucket. And this is an alias name, canonical name, which is representing this non-bucket origin for this CDN distribution. What does that do for me? Let's go see. So in here, what I'm going to do now is go to the website. And let's go carefully observe some very subtle things, very difficult to find them, but I will identify and look it up. So let's go to this page. And here, let's go look at this picture. You look at this picture here. And if you right click on this picture and say copy image address, and now take it to an editor and paste it. It says CDN.cloudgenie.us. So this picture of Srinivas is actually behind the CDN. It's in a bucket, apparently. Let's go look at some other things. So I will right click here and say inspect my source or see my page source. Here in some places, you will see references to this thing, which is what I use to use a content delivery network for JavaScript, which doesn't change on my server. It is a static element. And you will see in the highlighted line here all the lines below that are references to this name called a.something.something. So let's go look at an example. I'm going to grab something here. Okay, that one. And this one is a good one. So I'll copy that. And grab it over and take that to a notepad. So let's go compare this. This script tag is for a JavaScript element. Let's go identify what the source is. And all the way to the back, this is what the source is. Where is the source sitting? Let's go study that part. It's sitting in a site called a.cloudgenius, not b.a. but just a. And it is going to render this JavaScript file line number 17. Where does it get from? It obtains it from the original location, which is b.a. And it renders it through content delivery network like line number 11. The actual location is this. Let me prove it to you now. So this is the CDN representation. And line number 9, which I'm going to create very slightly different and very difficult to notice unless I point it out, which is this representation. Line number 9 is the actual origin representation. Line number 8 is a content delivery network representation. Now I will prove this thing to you. I just said something. I'll prove it to you how. Now this line is line number 9 is the site, which is the actual site. Let's go dig it. Dig and site. It shows you that it goes to this IP address, which is that Vulture machine that I have running. Now let us at this moment dig another site, a. And you will find that this is not going to the same location as this. But instead it is a CDN. This a. is different from b.a.a. Kind of very difficult to identify, but remember that this is different from this. Two different web addresses. The first one goes to this IP address. The second one goes to a CDN called DZTUD, blah, blah, blah, whatever. That in turn goes to these eight different endpoints globally available. What does that translate to? It says line number 8 is globally available. Line number 9 is the origin. Let us open line number 9 in a browser. So I'm going to open it up. It's very kludgy to read because it is JavaScript minified, but that's what it looks like. This is line number 9. This is the origin location where the JavaScript is coming from. Let's go the same thing except this time I will open line number 8. And I will remove the b.a. from the beginning like that here and open it up. It will show you the exact same JavaScript except that this is coming from a content delivery network, whereas the other one is not. Let's go see that one also. So here and that one side by side and this. So on the right half of the screen, what you're looking at is the b.a.cloudgenius website showing you the same file, which is coming straight from the origin. And you can see the details of this. And the certificate issued is through Let's Encrypt Authority. On the right side, if you see that the link is the same, I think I did not delete the b.apparently. Oh, it goes, it jumps. So that's what is happening. This b. is actually jumping back to the origin location where it's coming from because this link is actually a CDN representation. As you see here, this name is a CDN and it comes from the origin. This is the origin. How do I prove this idea again? I want to go look at this CDN, which I claim it's a CDN. It shows as a CDN from CloudFront. So I should go and look at DZTUD in the Amazon console. And let's go identify that piece in the Amazon console in the CloudFront distribution where I have my DZTUD, that same distribution that I'm looking at, is actually mapped to the origin named bacloudgenius. And its canonical name happens to be a.cloudgenius.us. It is deployed, enabled since 2015. And so this distribution uses this as the origin and is actually caching all the JavaScript, all the CSS that you don't easily find that it is doing, but that is the reason why a machine that is not as big as you would expect it to be, this VULTR Cloud machine that I have, is actually a very small machine that runs five or seven Docker containers. And what I am doing is using picture storage in a bucket that goes through a CDN called cdn.cloudgenius.us and my JavaScript, my CSS, and all other static components from this box are cached under another CDN called a.cloudgenius.us, a separate CDN, which is basically using this as the origin. And this CDN is wrapping around the bucket that I use to store my pictures and represent this as cdn.cloudgenius.us. And so this way I'm basically offloading as much work that I have to do on the box to other services outside so that my machine does not get taxed, taxed as in burdened, when people hit it. And so people hit it all the time, worldwide. People from all over the world hit this machine. And let me show you that this machine is not big, it is actually tiny. Let's go see the actual machine, how big it is. I'm going to type the code and get in to show you for real what that machine is and how big it is. So here is Vulture Cloud. I'm going to copy the token and go in. And you will see that this machine is actually running in Seattle. It is a 2048 MB server with this IP address, the same IP address that you saw in the dig queries, this one. And that is not a big computer. It costs me $20 every month to run this and I'm getting a decent performance out of it because I'm offloading most of the work to things outside, things completely outside, like you saw me describe. So this is the machine that you have here. I offload my JavaScript, CSS, and other static components off to this CloudFront distribution. I offload my pictures to a bucket that goes to another Cloud distribution. I offload my videos to another bucket, which is not this bucket, but a separate bucket. That's where I store my videos and they go out to people who want to consume that video. I store my audio files, very rare, but I do have some audio files that I store that I actually put in a separate bucket that goes out to iTunes and Stitcher, Podcast, a bunch of other podcasting tools. There is a podcast available that we have in the site that you may or may not have seen, but yeah, it's there. So that podcast distribution also happens through, I think this is the podcast. So yeah, you can see podcast videos, you can see that radio show, the audio and video. These things go out from the site, but they are not literally sitting on, there's a play button. So you can play that audio, but this audio is not coming from the box. It is coming from somewhere else and I've just put things together in a fashion that is the most efficient way of running large scale services without breaking the bank and without bothering your customers. Your customers should not hate you for low performance. So that's another critical thing. You need to make sure that your machines operate nicely and that you are able to use services outside and supplement what you have and keep things operational. So most of my heavy items like audio and video and pictures sit in buckets. Light items like JavaScript and CSS, they are sitting in the origin here in the Vulture machine and they are covered through a CloudFront layer. And on top of all this, I am also thinking of another CloudFront, another CloudFront-like solution, but I haven't implemented it. I'm exploring how I will make use of CloudFlare CDN. So it's a better CDN with more geographical endpoints called CloudFlare, better than the Amazon CloudFront distribution. And I have taken some steps already to go in that direction. By first thing, first move my DNS there. So my DNS is right there. This is where I maintain and manage my DNS records like you manage it in GoDaddy or other places. I manage it here. I'm slowly migrating towards using this content delivery network. They also have a CDN. That's what got my attention towards these guys, by the way. And so they happen to have a DNS system also, which is also nice. I use this currently. And that's the discussion around storage. It doesn't sound much, and actually it's very convenient to use storage services outside from a variety of cloud providers like you saw here. And these are the examples that we did. We will switch over into other topics next time. And those topics will involve creating a virtual private cloud by scratch, by hand. So basically by clicks, we'll identify every single component that goes around in enabling a scenario where we will use VPC, for which you will need to follow along in this discussion that I have here identified for you. Let me go there. Let me go to that location right now. So I am going to go there and point out. I think it is module number 10, if I remember right. But let me just make sure that I get to the right spot. That spot is 11. So this is where I want to do the next time. And there is a short one-minute long video sequence, I think 11 or 12 of them, that I think you should watch. And that begins at this point. At Slack chat, I've mentioned a link, I've pasted a link for you. You should review that and we will meet again on, when do we meet? 22. And at that time, 5 o'clock, we'll discuss and understand components and build out a virtual private cloud for ourselves in terms of what it takes to put things together to make a secure, robust, disaster-proof to the extent practically possible and high-performing cloud setup for our own applications to be placed inside securely. And we continue to access it, but not other people. We will not let other people go in there, except customers can access it from the outside, like a website exposed or some other endpoint exposed. That's the design consideration we will take into account, understand what does it take to build things out. And I would like you to finish out that creation of that static site that some of you have attempted, some of you have attempted on the site. I have also found that this Microsoft tool works nicely, where this classroom tool that you've seen, we can assign homework. I am not sure how much you are excited to do homework or not, but I think if you want to really learn, it's a great thing to actually follow along and do it. And that's the suggestion I have for you. And I will see you guys. The only thing with that is, so when you created the assignment, I wish there is a way that people in the group get an alert that a new assignment has been added. I think it does. If you go to the, if you connect this email with your email client, it will receive a notification. For example, if you log in the inbox for that account. Yeah, you have an inbox and you also have an inbox, you have a calendar and everything is available. But what I do is just to simplify, I'm not sure how much are you excited about reading with one more email. So I just paste it here. Yeah, that works too. That's what I did the last time when I did, I said, you know what, it is a homework for you. I think, where did I do that? Let me see if I did it right or not. Somewhere here, I think I mentioned homework. Yeah. I wrote down the homework assignment in this new tool. Let me know if you can access it and see this. So I wrote that, but I'm not sure if it was clear. Maybe I'll write more clearly. Homework comes here. Yeah. But yeah, don't worry too much about it. So the goal of this program is to not make you do grant work. Let me be very clear. It is not about grant work. It is about us trying to do something interesting. If it is boring to you, you should tell me that Nilesh, you are a bore and don't do it as simple as that. But I want to make it interesting. And therefore my work assignments are actually, I hope, interesting. But if they're not interesting, you should tell me that your homework is boring and we will not do it. That's okay. Because I remember, I did three degrees and I understand how boring professors can be. And I don't want to be one of them. And so, no, I'm not going to bore you to death. Not at all. So this is just a tool. But the goal is to learn. So if you want to learn, go ahead. And I will help you. I'm here on Slack chat all the time, literally all the time. So you can always come here and talk with me one-on-one or group, whatever works. Cool. Thank you very much. And I will see you again on 22nd at 5 o'clock. Thanks, everyone. Thanks. Thanks, Nilesh. Bye, guys.