We touched on the basis of infrastructure as a service and I said it's a sort of bottom layer. On top of that, there's layers of abstraction. We build all sorts of interesting systems. So what enables us to do that? And it's this approach to abstraction that we've developed over the years and a key technology. That key technology is called virtualization. We now know how to take computing resources, virtualize them and build them into new resources, new facilities, new services. And those services indeed may be combined and used to build other services, again, perhaps even using virtualization. So we spend some time discussing how virtualization works, what sort of virtualizations we can get, and we talk about all of the things that we can virtualize. So let's just quickly review that. So we buy machines, we put machines into a cluster, and we build a cloud from the cluster. You can buy those hardware services just, if you like, the metal, the compute cycles, you can buy that as a service. I can sell to you, say, five machines running at 3 GHz each or 4 GHz each with so much memory, 2 or 3 TB perhaps, lots of disk. I can sell you that as a service that you can use. When you're finished using them, they get returned to me, I use them for somebody else. While you're using them, they're yours. You just just get to see just those machines. And you can build anything you like on top of them. You are the controller. You can decide what sort of systems you want to put on them. What sort of operating systems, what sort of a software applications. If you want to do the hard work, you can construct your whole business right up from, if you like, the bits on the metal up to very abstract layers. Like if you're wanting a taxi service, you can build all those layers up to providing the HTML and so on enabling the taxi service all by yourself. But that would incur costs, that would be sort of really sort of extravagant in the terms of getting started. It's not the lightweight start that you think you would benefit most from forgetting fast businesses organized and setup. So we have other virtualizations on top of that and we will talk about platform and software as a service later. Moving horizontally, if you like, from virtualization of the CPU and giving you well hardware and then building virtual machines on top of that hardware. What I want to talk about is another direction that you can go, which is virtualizing the network. So you can think of, I've got this data center, but then I give you, say five machines, but I want you to think that they're just five machines. And you can't see any of the other data structure, any of the other data center, and the other parts of the data center can't see you. You can get out to the web and you can process. You can attach storage. In another sort of virtualization you may have your own storage attached that you can expand and contract. That is another asset that clouds can provide. So we have virtualizing the network, we have virtualizing storage as a separate chapter in what we're describing in our presentation. Once you understand this sort of notion of building modules and building hierarchies and abstractions, then we're going to start discussing some of the ways that this can be done. We're going to discuss the virtual machines, how to building virtual machines on top of hardware or operating systems, how we can build lightweight virtual machines using container technology. Very exciting lightweight threads that give you a protected environment that allow you to building very very switching, very very first systems to assist your web or database. We're going to look at software protocols that allow you to build such containers very quickly. So Docker is a sort of software engineering technique that has allowed people to build containers for the cloud very simply, very fast. And Docker itself has its own scheduling, its own decision-making apparatus. If you want run a thousand threads over your five or ten machines, allows you to do that. So we have levels of this abstraction. You can have a whole machine, you could have a core on the machine, you could have a process on a core on a machine. Or you could have a thread and this thread can exist on multiple different calls, whichever one's free and it can move around. And we can have a scheduler for those. So, lots of different variety and we'll cover that. We're going to look at some more sophisticated, well containerization, abstract, virtualization you might say. I'm going to mention Java virtual machines and there, what you're going to do is choose, say a particular favorite language Java in this case. What we'll do is to provide you an environment that's just Java. And no matter how many processes and threads and storage and whatever you want for your Java, we can provide that by duplicating the JVMs. And getting them to connect together through distributed computing and running to support what you want on the cloud.