It's Friday. Welcome to Friday. Two weeks left to finish assignment three. People seem to be doing pretty well. We have an exam a week from Monday, and just one more week of content. So what I'm going to do is today we're going to talk about virtualization. So we'll talk about virtualization today. On Monday, we have a paper on para-virtualization, which is an interesting twist on virtualization. And a very common way of actually doing virtualization, for reasons we'll discuss today. On Wednesday, we're going to look at James Vickin's paper, which is on, really, you can think of it as a way to virtualize execution environments inside web browsers. So that's something that's pretty somewhat orthogonal. But I think it's a fun paper, and it would be fun to read. And then on Friday, we'll do some sort of review session for the exam, and then the exam will be online. OK, so there are four new groups out of 100 Club, believe it or not. I'm going to butcher most of these names, Krishabu and Girish. I think I saw Krishabu here. Congratulations, guys. Akash and Sagar, are they here? They came to class today. I should just put everyone in the 100-100 Group every day. That way you guys would actually come to class. Kartik and Ananda, you guys here? Don't see them? They didn't come to class. Pranav and Viral, Pranav is usually here. Congratulations, guys. So yeah, eight new people who know how to do assignment three. So find them and get them to help you. What's conspicuously missing from this list so far are undergraduates. We are still waiting for the first undergraduate group. The undergraduates outnumber the graduate students in this class. So far, they have decided to take a more relaxed approach to completing assignment three. Fine, that's fine. Thank you, Jerry. OK, so clearly we're going to need more A grades this year based on how you guys are completing the assignments. I'm really excited about how far people are. I think there's some other groups that are knocking at the door, and you guys have two more weeks. So keep it up. OK, so today we're going to, you know, early in the semester, I used the matrix analogy when we were talking about how operating systems work. And to some degree, that's true. But today we're going to peel off another layer of the onion and blow your mind a little bit more and talk about how we can actually run operating systems on a hardware that's virtualized.  Now, this is a topic that really deserves large amount of time, maybe an entire semester. But I'm going to try to do a little bit of justice to it in just a couple of days. So what is virtualization? So up until now, we've been talking about operating systems running on and managing actual physical hardware resources. So running on what people in the server industry sometimes refer to as bare metal. And bare metal is real hardware resources. We assume that the operating system has exclusive access to these resources. It's managing an entire machine. And it uses these hardware interfaces directly to communicate with the other things of this machine. Now, this is still something that's a pretty common way for operating systems to work. Actually, it'd be a great thing to find out. I have no idea what the numbers would look like. I suspect that the percentage of operating systems that are running on real bare metal has been dropping. Maybe. Although with mobile devices like smartphones that are now running essentially mature operating systems, maybe that's helping tilt the balance. But there are certainly a lot more cases where this is not true today than there were 20 or 30 years ago. And that's because we can also run an operating system inside what's called a virtual machine. And we make a distinction here between a virtual machine which is something that looks like a machine. The analogy with virtual memory is not actually too bad here. And we'll come back to it later in the class. A virtual machine looks like a physical machine. And in fact, to perform full virtualization which we're gonna talk about today, it has to look and behave exactly like the physical machine. And, but we use a different term to refer to the piece of software that provides, that creates a virtual machine. That we refer to as the virtual machine monitor. So virtual box, VMWare, these are, this is software that falls under the category of a virtual machine monitor. It implements the virtual machine sort of abstraction. You could think of the virtual machine as another type of abstraction. So there's some additional terminology that we have to introduce in order to get this to work. And I don't have as many slides as usual today. We're gonna go slowly at the end to go through some of the examples. I wish I had more pictures, sorry. But this gets, it starts to get confusing. So just, if you have questions, please stop me and I'll try to go slowly and carefully. So the operating system that runs inside the virtual machine we refer to as the guest operating system. The operating system that runs the virtual machine monitor we refer to as the host operating system. There are now two operating systems running on the machine. For the type of virtualization we're gonna talk about today which is different than para virtualization which we'll talk about Monday. This is the type of virtualization you guys are probably used to as an end user. When you use something like virtual box you have your own operating system. Maybe it's Windows, sorry, or something else that runs the virtual machine monitor software, virtual box. That's an application that provides the virtual machine abstraction. This is even hard for me to talk about. Inside that virtual machine you have the guest operating system. So in your case, if you're using the OS 161 virtual box that we created for this class that guest operating system is some version of Linux. I think it's the Lubuntu packaged version of Linux. I don't remember exactly what version it is. We created it a few years ago so it's a little stale. So does that make sense? Does this make sense to everyone? And again, hopefully you guys are familiar with this because you've been using some of this software this semester. You used it at other times in other courses. So whatever it's running on your machine is the guest operating system. Virtual box is the virtual machine monitor, provides the virtual machine abstraction. Inside that virtual machine runs Linux. So there are now two operating systems that potentially more. You could probably start up several different virtual machines to run several different operating systems. This is something I used to do. I don't really do it anymore because my students don't let me program anymore. But when I used to program I used to do this just to sort of keep things separate so you had different development environments for different projects. But you can certainly run more than one guest operating system inside the host operating system but there is only ever one host operating system on a single physical machine. So obviously the virtual machine has to differ from the physical machine in a bunch of really crucial ways. So in order to do this safely, I cannot provide the guest operating system with the same level of access to the machine as I provide the host operating system. If I did that, then the guest operating system would be able to see things outside the virtual machine it wasn't supposed to see, it would be able to mess with other programs or whatever. Remember the operating system is this piece of software that seems to be really powerful. It seems to be fully in control. But in order to get this to work, I can't allow it to do that. So for example, your Linux that is running inside virtual box cannot change the page table entries or otherwise muck with the parts of the system that are being controlled by windows or whatever the host operating system is on your machine. So that's really important. We, the term I'm gonna use later in the lecture is this idea and you see this in other places of not allowing the guest operating system to pierce the virtual machine. I don't wanna let it get out. It shouldn't be able to see anything outside the virtual machine. So if I give virtual box a certain amount of memory to use to create a virtual machine, the guest operating system should be able to manage that memory and see that memory but not see anything else. And of course, these two things are related. I can't actually allow the guest operating system to run with the same privilege levels that it's normally used to. So this is, remember, we talked a long time ago, how did we bootstrap the privilege of the host operating system? You installed it on that machine and during boot, it starts running at a high privilege level and then lowers the privilege level before it runs other things. These operating systems are being run as applications and to prevent them from interfering with the host operating system, we have to make sure that they don't have the same level of privilege that they would normally have. Okay, so, and so the virtual machine monitor is, again, a piece of software, virtual boxes, just a program that runs inside the host operating system that can allow another operating system to be run as an application. And this is the point alongside other applications. Inside, and in order to do this, I have to create this illusion that the guest operating system has access to a virtual machine that behaves in a way that's analogous enough to how an actual physical machine would behave. And again, I mean, this is hopefully more proof, if you needed it, that the OS is just another program. I can run it inside this environment and it will behave properly, provided that I create the illusion of the virtual machine effectively. One of the reasons that I like to cover this at the end of this class is I think if you understand virtualization, if you understand what we're gonna talk about today and Monday, you understand operating systems. If you can understand virtualization and what goes on here, it really means you have some deep understanding of how operating systems work, because this sort of, in a way, ties a lot of things together. So yeah, so remember when Neo meets the architect and it's like, yeah, we've destroyed Zion like a gazillion other times, right? We thought we were special, right? Not anymore, right?  Okay, so we're gonna get to the how question. You guys are probably wondering, how do I do this? How do I take a piece of software that's used to having exclusive access to the machine and allow it to run as an application? But let's talk about why we even got to this point. Why does anyone want to do this? And we've been talking about operating systems all semester and I've been trying to convince you that they're fantastic, that these great, they provide all these nice abstractions, they're really good at managing the physical resources of the machine. So why would I want to go to what's gonna turn out to be a fair amount of trouble to take this, all the powers that these operating systems have and confine them to this little virtual machine? So let's talk about some of the problems with OS environments. So the first one is something that I would refer to as hardware coupling. What this means is, so the first thing this means, for example, is that you can't run multiple operating systems on the same machine. And on some level, this is something that maybe you only are going to do if you're a little bit geeky already and you're taking a class on operating systems so you're not a normal human being. But particularly when we start talking about para virtualization, this is a tool that's now used heavily to create what you guys know of as cloud computing, commodity computing. A lot of the load balancing and the elasticity and the other types of things that are provided by cloud computing providers are all based on this idea that I've broken the connection between a virtual machine and the physical hardware that it runs on. So when you purchase, for example, computing, how many people have used EC2? Okay, so let me give you guys a hint about how to get a job, okay? One of the things that you should do to get a job is use things that other people use. So EC2 is pretty prevalent and the best thing about EC2 is there's a free tier where you can play with it for a period of time and get a sense for how it operates. You guys should certainly know how some of these tools work and that they exist and what some of their capabilities are.  But the way systems like EC2 work is you pay for computing as a commodity and then Amazon intelligently tries to use as few machine resources as possible to run your virtual machines to some degree of quality. And one of the ways they do that of course is they take a bunch of machines that look different from potentially different clients and they actually run them on the same physical hardware.  And of course there's lots of fun things. There's lots of nice properties that provides.  So something else that virtual machines make possible which of course we've exploited to provide you guys the development environment that you get when you get our virtual box image is that they allow me to transfer setups between different machines much more seamlessly because to some degree the virtual machine monitor is providing a more consistent environment that the underlying hardware would. And it turns out if you read more about this and delve more into this, what's happened actually is that the needs and interfaces of virtual machine monitors have actually really started to change how hardware is built. So do you remember last time we talked a little bit about the fact that these networking cards now have a bunch of different ports to allow them to be used simultaneously by multiple cores? Features, some of these features like that started because of virtualization. They started because it made it easier for a bunch of different virtual machines running on the same physical machine to share an underlying piece of hardware like a network interface card. And again, so Massey do adjust hardware resources to system needs. And this essentially is cloud computing, right? So rather than having to buy a server and hope that that server can keep up with the demand of a particular application, I can buy a piece of a larger server and allow that piece to fluctuate and essentially be scheduled on a beefy hardware resource in a way that meets the needs of the applications that are running on it. And this is something that, you know, this makes much, much more efficient use of hardware. If I have 10 websites, for example, that are active at different times of the day, I don't need 10 different servers that are all underutilized most of the time. Now I can have one server that's heavily utilized all the time by taking those 10 setups and collapsing them onto one piece of physical hardware. And if one of those websites suddenly blows up, I can, and starts generating a lot more traffic, I can move it to a bigger machine where it has access to more resources. So this is another nice thing I can do. And these are kind of the same thing, right? So the hardware coupling, static up-prompt provision of machine resources that doesn't, it's hard to respond to demand. Okay, so another problem with operating systems, and this is something I've alluded to before, is application isolation. And so operating systems leak a great deal of information between different applications, and in many ways applications running on the operating system compete for the same underlying physical resources. So if my database server is hogging all the memory on the machine, it may mean that the file server slows down. And this caused, you know, okay, so I'll get to this minute, this caused software vendors to start to require that in order to certify a particular piece of software, enterprise-grade software, it had to be the only thing running on the machine. Because if you call me up and you say, I paid all this money for, I don't know, some sort of network file server, and it's so slow, and then I realize that you're running eight other applications next to it that are causing it to slow down, I don't really feel like it should be my problem. But the fact that people started to require that you have this one-to-one mapping between services and machines really drove a lot of the need for virtualization in the first place, because I don't want to have to buy a new machine for every piece of software I want to run. There's also issues with software setups. You know, I may want to install certain versions of packages. I mean, this is largely, I think, been, is now a solved problem. Package managers were pretty well, but in the past, this was a little bit more of a pain. And certain applications may have, may operate, but remember the whole exo-kernel argument, right? And to some degree, a lot of the exo-kernel arguments and design principles haven't necessarily made their way into the operating systems that you guys use and the operating systems that run the services that you use. So I can take Linux and I can tune it to the needs of the file server or I can tune it to the needs of the database server, but if those aren't the same, then I have to make a choice between those two applications. If I have two virtual machines that I can figure one to work very well with the file server and one to work very well with the database server, then I'm gold. And, okay, so I talked about this already. So virtualization allows me to package and distribute also an entire software environment. How many people have ever gone to the website of a tool or some sort of thing you were interested in experimenting with and actually asked you to download a whole virtual image to play with it? There are tools that will do that. It's kind of cool. You have some sort of server software that requires a couple of moving pieces and rather than giving you all these instructions and it might require that you have a particular machine that you can install Linux on and blah, blah, blah, they say forget it. Here's a virtual box image with all of our software installed. You download that, you fire it up and you can play with it.  So there's no need to have an entire spare machine line around in order to play with the new tool. We can dynamically, so I mentioned this before, we can take one big piece of set of hardware resources and dynamically divide it up. Certainly we can do static provisioning up front but we can also do dynamic provisioning at runtime and use that to run a bunch of different virtual machines with different operating systems, different operating system configurations, different access control policies that might belong to different customers. So again, this is all just what makes cloud computing possible more than anything else. And of course when EC2 has servers that they wanna replace, they can take your application, to them it's just a virtual machine. They can take it, they have to tell you about it. Of course they say, oh no, we're taking this machine down and they can migrate it. There's potentially some problems with quality of service during the migration, but they can migrate it to another physical machine. And so this allows them to continue to provide relatively seamless service even as they're adding machines to their data centers, decommissioning old machines, things break, stuff like that. So there's some nice properties of this for people who want to run server farms and other large computing resources. Okay. Any questions up to this point? Okay, so now let's talk about how we actually, what it requires to be a virtual machine. And these were actually outlined in 1974. Pretty impressive, right? That was a long time ago, a long time before this stuff took off. So the first thing is Fidelity. So if I run software on the virtual machine, it should run identically to how it would on real hardware. And that should say BM, not VMM. So, and modulo timing effects. So there are going to be timing effects. It's gonna run slower maybe the time, it's fundamentally now competing for lower level hardware resources with other virtual machines, but whatever, that's okay. I'm just saying correctness. I shouldn't see differences in how typical applications run between a virtualized environment and a normal bare, I shouldn't say normal, because it's not normal anymore, a bare metal environment. Performance. So, and this is, so up to this point, you guys may be thinking, you know, why, what's the difference between virtualization and simulation? So here's the difference. Virtualization relies on the, on a match between the instructions that are being executed inside the virtual machine monitor and the underlying hardware. And in order to achieve good performance, what I want to do is I wanna make sure that as many instructions as possible can be executed on the bare metal. That's the goal. The goal is to allow applications and the guest operated system to do as much work using the hardware directly. So most of the time, hopefully almost all the time, they are running, they're running hardware instructions and they're using the machine just like a normal application would. To write a simulator, so for example, Sys161, which you guys use, is a simulator. Sys161 takes MIPS instructions and modifies its own internal state in order to reflect how those instructions would have run on a piece of hardware that's been obsolete for decades. I remember asking David once, it would be fun if we could give students the opportunity to run their OS161 code on a real piece of hardware at the end of the semester. That was 10 years ago. At 10 years ago, he was like, I don't think we can find that hardware. Might have to go to some MIT garage sale or something like that. The MIPS R3000 hasn't been around for a while. So what we do is we simulate it. Now in a simulator, there's no need for the architecture, the instructions that are being run inside the simulator to have any relationship with the instructions that the simulator uses to run on the machine. It can be totally different. The price you pay, you remember me talking about gen five, which is the hardware simulator that we use, the price you pay is performance. Hardware simulators are incredibly slow because they're not able to use the actually underlined hardware to do work directly. So to get good performance, virtualization requires this match between the instruction set of what I'm executing and the instruction set that's provided by bare metal. So I can't, for example, take an operating system and compile it to run on ARM, like an ARM instruction set, and run it in a virtual machine running on top of x86 because the instructions that are being run inside the virtual machine now have nothing to do with the instructions that are being run on hardware. Does this make sense? This is an important distinction, yeah. Yeah, so essentially, here's another way to think about it. The virtual machine monitor can execute all of the instructions that are being executed inside the virtual machine on the real hardware. We're gonna talk in a minute about why it doesn't because doing so would cause some problems, but most of them, like add, subtract, jump, things like this, shift are totally safe to execute. Most of the instructions that apps execute that do most of the work they do are totally safe to execute. On a simulator, so for example, Sys161 gets this instruction that's like RFE, and of course it's actually a couple bites of binary data. If it tried to execute that instruction on your actual computer, just it would blow up or something bizarre would happen. The computer has no idea what that means. It's like they're speaking different languages. That's probably the best way to think about it. To virtualize, the virtual machine and the hardware have to speak the same language. In a simulator, I have a translator in between, that translator is slow. It's like you're at the UN, everyone has those helmets on. All right, and then finally, safety. The virtual machine monitor should manage all hardware resources inside the virtual machine. Okay, so there are two different ways to accomplish this. So today what we're gonna talk about is something called full virtualization. And the goal in full virtualization is pretty awesome. It's to take an unmodified operating system. So if I took the Linux or the Microsoft that's running on your laptop, literally the same binary bytes, I can move them inside the virtual machine and the virtual machine monitor can run that code. That is full virtualization. There is no change to the guest operating system required to use full virtualization. We're gonna talk about why this is hard. The other approach is something called para-virtualization. And this is a lot more common today. So what para-virtualization does is it says, let's make some small changes to the guest operating system so that it plays nicer with the virtual machine monitor and with the underlying operating system. So this is, things like EC2 and stuff like that, really what they're doing is para-virtualization. And Linux and other operating systems have long had support for this. Because as we'll talk about, there are these corner cases in the x86 instruction set that make full virtualization really painful, although it's possible. It's being done by tools like VMware. Okay, so our goal is to run the unmodified operating system and applications in the virtual machine next to other virtual machines. And VMware is the best known provider of these full virtualization software solutions. They invented a lot of these approaches in this technology. So fundamentally, why is this hard? What's hard about this? Again, I want to take an unmodified operating system.  So what makes this difficult? Yeah, that's, well, I mean, yeah, so this is an idea of privilege. Okay, and let me get to traps in a minute. So privilege, operating systems are used to having privilege. They're used to running with kernel privilege. Now I could run it with kernel privilege, but then it would be able to do anything and be able to manage any hardware resources. So in order to do, so if you go back to the requirements, in order to achieve safety, I cannot run it at the same privilege level. Now it turns out, and this is not something I'm gonna talk about today. That's kind of a fascinating topic, that the x86 instruction set for years had support for multiple privilege levels, not just two. The x86 has actually four privilege rings. I don't know why they're rings, but you can think of them as four privilege levels. Operating systems typically, operating systems and applications before we started thinking about virtualization typically only used the least privileged, which is where applications ran, and the most privileged, where the kernel ran. But then when virtualization came along, and I think this is something that's covered in the paper for Monday, people were like, oh wow, there are these other privilege levels. Can these potentially be useful? And it turns out they can't. And one of the things Paravirtualization allows is for the operating system, the guest operating system, to be run in the second most privileged state. So you can think applications run in what's called ring three, which is the least privileged state. The guest operating system in a Paravirtualization approach is modified to be able to run in ring one. And there's something called the hypervisor, which is something you may have heard about, that runs in ring zero. That is now sort of the host operating system, although it's not really a full-blown operating system. It exists entirely to support guest operating systems. That's another difference between sort of server virtualization environments and the virtualization you're used to. It's that there's not necessarily a full-blown operating system, fully usable operating system running on the machine. In many cases, the machine, the server has been configured only to run guest operating system. Okay. So let's talk about some of the mechanics of doing this. I mean, that's the high-level goal. How do we handle traps? So a trap by an application in the guest operating system, where, who needs to handle? Let's say you're running your shell inside VirtualBox. When the shell causes an exception or uses a system call, who needs to handle that system call? I heard both. Okay, so the guest operating system has to handle it. Remember, this is a Linux system call that I'm making. Windows has no idea what to do. Now, who's going to receive that system call? If I don't, if I'm running it normally, and so what's gonna happen is the host operating system is gonna be vectored is what's gonna start running when that exception occurs. But somehow I have to get the exception to the guest operating system to be handled. If I don't, it's not gonna be handled properly. The second problem is the guest OS is going to try to execute privileged instructions. How do I know this? It's unmodified. It thinks it's in charge. It thinks this is its universe. It thinks it's supposed to be able to modify any part of the machine. So I need to do something about this. I need to be able to handle cases where the guest operating system tries to do things that it's not allowed to do. So if we, as I pointed out before, if we run the guest operating system with kernel privileges, everything works as expected, except for the fact that the guest can access the entire machine. So we can't do this. This is wrong, this violates safety. If we run the guest operating system with user privileges, what's going to happen when it tries to run a privileged instruction? What's that? So what has to happen, right? So normally, if an application tries to execute a privileged instruction, what happens? The operating system gets to handle it and normally kills off the application. In this case, the application is an operating system, but it looks like an application to the host operating system. So when that application generates certain kinds of exceptions that would normally terminate it, those exceptions have to be forwarded to the virtual machine monitor. So for example, let's say that I'm, let's say that I'm trying to modify the page tables, that's going to generate an exception, but the host operating system has to say, aha, that's coming from a virtual machine monitor. I'm going to send that exception to the virtual machine monitor to handle because it's possible that the virtual machine monitor needs to see this exception to update its own state. There's something about the virtual machine that the virtual machine monitor is providing that's going to change. Okay, so now here's the goal. Ideally when privileged instructions are run at user privilege, the CPU traps the instruction, the trap is then handed to and handled by the virtual machine monitor. This is what we want to happen. And then, assuming the guest to us is doing something okay, the virtual machine monitor needs to check this because it's possible the guest to us is buggy and needs to be killed. Maybe the guest to us just crashed. Assuming the guest operating system is doing something legitimate, the virtual machine monitor is going to adjust the virtual machine state. And then it's going to continue the guest operating system. So most times that the guest operating system does things that require privilege, this is what needs to happen. Now we refer to instructions that have this property as classically virtualizable. And the approach is referred to as trap and emulate. You guys see why it has that name? I trap into the host operating system. I vector the exception to the virtual machine monitor and the virtual machine monitor emulates. It adjusts the virtual machine state to account for this instruction having been executed on physical hardware. One of the main places this takes place is memory. So adjusting page tables. Okay, so notice that, so now the question is what is the virtual machine monitor to do with traps that occur within the virtual machine? So here I have a branch point. If the trap is caused by an application, I have to allow the guest operating system to handle it. So this could be something like a system call. System call has to be handled to the guest operating system. And if the guest operating system caused the trap, the virtual machine, monitor has to handle it. Now notice that this requires the host operating system's cooperation. So when you install something like virtual box, there's these dialogues that pop up that essentially are asking you to install certain kernel drivers in the host operating system that are required for these tools to work. And that's because without that support, the traps that occur, like for example, the attempts to use privileged instructions are just going to look like a buggy app. So this is the difference between virtual box being killed because it tried to do something like modify the TLB and virtual box being allowed to do that because the operating system realizes, aha, there's another OS running in there. So this is something that's required. And in order to make sure that this works, all traps and exceptions originated inside the VM must be passed to the virtual machine monitor and handled. Or again, they may cause the virtual machine monitor, they cause the virtual machine to die. For example, I might reboot the machine, I might power it off, I might cause an instruction that would normally cause, so I might call an instruction that would normally cause the guest operating system to crash. I can have a blue screen of death inside my virtual machine monitor. A buggy guest operating system needs to behave in the same way that it would on bare model. Now, keep in mind, this is not the normal case because in order to achieve performance, most of the instructions that I execute need to run normal. And it turns out that most of the instructions that operating systems execute do not require kernel privilege. They're just normal processor instructions. And so even if I take away the privilege behind the kernel's back, most of the time it doesn't care and it doesn't cause any problems or any extra overhead. Now, of course, there is extra overhead to running things inside a virtual machine monitor. What is the extra overhead? What's one piece of extra overhead? Yeah. No, I'm just saying that things the host OS, this things the guest OS could do quickly on hardware take a lot longer in the virtual machine. Why? I mean, this is whole exception handling cycle that didn't occur before. Those privileged instructions, normally I'm just allowed to execute them and they just execute in a single cycle, right? Boom. I adjusted a co-processor register that's privileged for some reason. Done. On inside the virtual machine, there's this whole long path where that has to generate an exception. They've handled it initially by the host operating system that has to pass it to the virtual machine monitor and then the guest OS can be restarted. So there's a lot more overhead to doing things like this.  So that's a testament to the fact that most of what the kernel is doing does not require kernel privilege, only from time to time. Okay, so now let's talk about what happens when an application, this is a good way to make sure that everyone understands this stuff. This is, I think it has like seven bullet points or something. So let's say there's an application running inside the virtual machine and it makes a system call. What is the chain of events that takes place? What's the first thing that happens? Yeah, so the first thing is, I'm gonna trap into the host operating system. I have to. Remember, the guest operating system does not have kernel privilege. I'm not gonna allow it to install exception handlers. Probably not. So I trap into the host operating system and then the host operating system has to vector that trap into the virtual machine monitor. So what happens next? Yeah, that already happened. So now I've already got, I've already vector the trap to the virtual machine monitor software. But now what does it have to do? No, this is a system call, right? This is not a privileged instruction, yeah. Yeah, so now I have to inspect the trap. I have to see this as a system call. So this is an instruction that generates a trap. It's not a privileged instruction, but I trap into the host OS. The trap gets vectored, gets handed off to the virtual machine monitor. The virtual machine monitor looks at it and essentially has to get the guest operating system to react as if it had handled this trap directly. So it has to pass the arguments into the guest operating systems exception handling path. So now the guest operating system is going to handle, it's gonna actually do the work. So now the guest operating system starts to run and does whatever is required to handle the system call. Now, when the guest operating system is done, it's also going to generate a trap. I call something like return from exception and that's gonna do the same thing. So now I'm gonna go back to the host operating system, bounce back into the VMM, and the VMM is responsible for trap, passing, oh, sorry, passing arguments back to the process that actually made the system call, yeah. There'd be multiple VMMs. So I need to make sure that I pass, I need to be able to identify which VMM caused the trap. So I have to see, okay, VMM from, there's a great question. So system call from the VMM running Linux send it to that VMM, right? Or a system call from the VMM running Windows send it to them, right? So yeah, the host operating system has to be able to vector or hand off the exceptions problem. Okay, so actually I lied. That wasn't even the real complicated example. So here's a federal one. What about a TLB fault? What happens when there's a process inside the virtual machine that generates a TLB fault? What do I need to do? What's gonna happen, first of all? It's the first thing that happens. Trap to the host operating system. Remember, the host operating system is ultimately in control of the machine. This is a good thing to keep in mind. All of the stuff that's going on with the guest OS, that's all happening because the host OS is allowing it to happen. If the host OS says, no way, I'm not running virtual machine monitors, I could just kill things to try to do this. So if you tried to run virtual boxing machine that didn't have the right drivers or where the machine didn't want to do this, it wouldn't work. So this all relies on the cooperation on some level. And again, it's normally done with drivers rather than with direct changes to the host operating system. It all requires the cooperation of the host operating system. So I trap into the host, I hand the trap to the virtual machine monitor. The virtual machine monitor sees that it was generated by the application and passes control to the guest operating system because this is a fault. This is like the fault you guys are handling for assignment three. The guest operating system is gonna begin handling the TLB fault and it's gonna try to load it entering to the TLB and now what's going to happen? Is it allowed to do this? Oh, back to the host operating system I go because this is a privileged instruction and I don't have privilege. So now I have to hand the trap back to the virtual machine monitor and the virtual machine monitor has to inspect the trap, see that it was generated by the guest OS and adjust to say to the virtual machine appropriately. But what actually happened here, of course, is that the virtual machine monitor would have to load this entry into the actual hardware TLB. Remember, I want to allow the process and the operating system to use the hardware resources. So I'm certain and the TLB is critical, right? And without the TLB, without being able to map memory at runtime, there's no way I can run anything. It's just way too slow. So ultimately, I actually have to allow the guest operating system to modify the hardware, the hardware address translation, let me try this again, the address translation hardware, there we go, there's the right order. Now this gets even, if you want to, if you want to convince yourself that you have mastered this fully, go out and look up what are called shadow page staples. So on x86, this gets even more interesting because remember, on x86, the hardware handles TLB faults internally. And so x86 requires this whole extremely intricate approach to handling page faults inside the guest operating system and inside the virtual machine. Okay, and just to finish up, let's hope, and what's really interesting here and what I want to make sure you guys understand is what's being virtualized is the hardware interface. So most of the hardware interface will be virtualized by just letting it run because it's safe. But then there are parts of the hardware interface that we actually have to apply an approach that's very reminiscent of virtual memory. So the interface to virtual memory was load in store. We ensured safety by translating every access and we got good performance by caching translations. For hardware virtualization, the interface is all the instructions that the processor could use to modify the state of the underlying hardware and cases where the changes to the underlying hardware causes the processor to run. We ensure safety by intercepting or turns out rewriting unsafe instructions. I'll come back to this in a second. But if I can do trap and emulate, which I hope I can, then I just intercept all the instructions that would cause problems and check them. Normally I check them to make sure that they're okay. And then in many cases I actually allow them to execute. So going back to the TLB example, that modification to the TLB that is generated by the guest operating system, assuming the virtual machine monitor says it's okay, it's actually going to run. It's gonna take place. It will be run with the appropriate privilege. It's just not gonna, it's not, but the point is the guest operating system can't make changes to the TLB without the host operating system and the virtual machine monitor checking them to make sure that they're safe. Let me get good performance by allowing safe instructions to run directly on the physical hardware. So really the same thing that we did with virtual memory, most addresses don't need translation because they're cached. Here most instructions don't need to be virtualized because they're safe. Yeah, remember when I trapped in the host operating system, I ran in privileged mode and the drivers that I have to load to support the virtual machine monitor also require privilege because they have to be able to do things like. That's a great question. I'm not sure I would describe it that way, but I think it's effectively true. I think if your virtual machine monitor is buggy, it can do some bad stuff if that's what it boils up, yeah. Yeah, so on some level, but on some level it's really, you can just think of a virtual machine monitor as another application. Now the big difference about the virtual machine monitor, of course, is usually it has like a huge chunk of memory that it pre-allocates. So when you set up virtual box, you give it like a gigabyte of RAM. That's a lot more memory than a normal process would need. And so that's one significant difference, but in many ways, these compete for resources with other apps like in other apps. But they're just big memory hungry apps. Okay, so unfortunately, so you might think, oh, this sounds doable, right? The sad thing that sort of created the company called VMware to some degree is the fact that the x86 architecture is not classically virtualizable. So some instructions don't trap properly when you run them without kernel privilege. So they either fail silently, they do something different when you run them with privilege or without privilege. Some instructions have different side effects depending on which mode they're running. And so what VMware does to fix this to provide full virtualization. So the fact that these instructions exist essentially makes it impossible to apply the trap and emulate approach correctly to the x86 architecture. Sorry, doesn't work. So what do I do? So what VMware actually does is something called binary translation. So when the guest operating system is running, it's scanning it, looking for these types of problems, certain instructions on the x86 that have these issues, and it rewrites them to safe instruction sequences. And it sounds terrible, it is terrible. It's just really ugly and gross, but it works, they got it to work. And of course you can apply a very similar strategy as Java virtual machines do and cache translations to improve performance. So portions of the code that I've already rewritten in order to make these instruction sequences safe, I can just leave those there and the next time it executes the same block of code, I can reuse it. Okay, so here is again a short, non-exhaustive list of all the really cool stuff that is out there. I talked a little bit about privileged rings, but not enough, we'll come back to it on Monday. Shadow page tables. And one of the things that's very interesting about this is that virtualization is so powerful and so important to modern computing that it's actually made significant changes to hardware architecture. So new x86 instruction sets have all sorts of support and instructions that are designed to make them easier to virtualize. And we'll talk a little, I think we may talk about this on Monday. Okay, so on Monday read the pair of virtualization paper and we'll talk about it in class. I'll see you then, have a great weekend.


So, this is exciting. Since my last video, the public has been piling pressure on the Mayor and Commission for criminal justice reform across multiple fronts. The Athens Anti-Discrimination Movement came out in force to the April 2nd voting session. I've got their comments coming up. But there's more. The 2020 Splost Citizens Advisory Committee is in a tug of war right now with the Commission over the proposed New Judicial Center. For background on the 2020 Splost and the $81 million Judicial Center idea, check out that link that just popped up. Okay, assuming everyone's caught up, let's listen to two members of the Advisory Committee describe why they did not recommend the Judicial Center for funding. Opposition to this project went very deep and touched on systemic issues in our justice system. As a member of the black community here, I can tell you that as a youth, we've seen the system prey on our people day in and day out. So what we're asking is that, you know, we see a clear change in direction from leadership, which is you guys, Mayor and Commission. Before the Commission could debate the Judicial Center at the April 2nd voting session, they heard a barrage of comments from the public about criminal justice reform. I am here in support of Athens Anti-Discrimination Movement's request for a Community Police Accountability Board. People from communities who are most impacted by policing and incarceration should have more of a say about what policing and incarceration looks like. It would help to balance the power to ensure fair policing because the voices of these victims and their families are not being heard. Community Police Accountability Board must have subpoena power, disciplinary authority and power to evaluate the patterns, practices and procedures and to make recommendations to the police department. Community Police Accountability Boards are present in many places across the country, including in Fairfax, Virginia, where ACCPD Police Chief Sprule is from, so he's very familiar with how they work. That fact, together with his focus on community policing and the community pressure, makes it seem likely to me that we'll see one of these boards created in Athens soon. AADM also spoke at length on the need for ending cash bail. First, you can find out why cash bail is a problem here. I urge you to pass a local ordinance that would reduce the number of people arrested and second, completely eliminate cash bail for any arrests or violations of the Athens-Clarke County Code. The research shows people who spend even a short period of time in jail, as opposed to being released pre-trial or more likely to commit a future crime. Washington, D.C. moved away from cash bail system nearly three decades ago, and yet the overwhelming majority of defendants have shown up for their appointed court dates. Will you pledge tonight to put on the agenda an ordinance that will abolish cash bail as broadly as is possible? We'll find out how the commission responded, but let's put a pin in that for now and move on with their regularly scheduled meeting. So the commission sets their goals and objectives every year, which is the primary document that informs budget discussions, which are currently ongoing. This year's goals and objectives include a number of ambitious components. For example, there's a commitment to the 100% Athens plan for 100% renewable energy by 2035, moving towards fair free transit, a municipal wireless network for broadband across Athens, and a number of criminal justice reforms showing a focus on rehabilitation instead of incarceration. In response to the community's concerns and comments, Commissioner Parker inserted ending cash bail into the commission's goals and objectives. I would like to add in the second sentence, eliminating cash bail, phasing out, it made labor for free program, et cetera. I would like to just, in short, include that particular community concern brought to the podium tonight. Her motion was briefly in danger of being delayed by Commissioner Niesmith, who wanted to reword the part about fair free transit. But in the end, it was passed unanimously. Then came the discussion and vote on the proposed new judicial center and other SPOS projects. I want to know if we could separate the judicial system from the housing piece. And so I would like to make a motion to divide the question. The projects involving affordable housing, support for Bogart and Winterville and debt service weren't controversial and passed easily. The same can't be said about the proposed new judicial center. I'm not supporting the judicial center tonight because I think these citizens gave their time and their energy. And when they tried to get information to help them make their decision, they did not get what they needed. I've talked to some of the CAC folk and presenters stated that the issues of Athens-Clarke County disproportionately incarcerating African-Americans, that to me is not progressive. As a strong proponent of criminal justice reform, come to think about the ways interacting within that space. When you come in for trial, feeling safe and feeling like you have dignity by having space to meet with your attorney privately. If you're an inmate having space to wait without being out in public where people see you shackled or in your jumpsuit, things like that are really important and so I've kind of come around on the idea of figuring out some place to put this judicial center perhaps in a revised form. We have outgrown our courthouse. We need more room to create a place where the dignity of all humans, no matter the reason they're in the courthouse, is respected. Our courthouse was built when we had one superior court judge, now we have four. The only problem I have, I cannot support it at this price. When it comes to the judicial center, I think we need to get out on the front end with these criminal justice reforms and assure the public that we are serious about changing the system. Well before this ends up on a ballot, we need to make those commitments and make it clear that we're committed to them. We can do an awesome building which is definitely, definitely needed. But if we have these attitudes, it doesn't matter what kind of building we have. This same commission had actually overturned the decision to designate funds for the judicial center in January and had pressed the manager for other options. Are you saying that you can or you cannot give us another plan or idea, something creative? Let me huddle with staff and with the courts folks as well and we'll take another hard look at what we've got so far and see if there's any alternatives. Did he ever deliver those other options? Yes. According to Commissioner Denson, there are a number of options currently being discussed. Commissioner Wright and Edwards crafted their motion to be very broad, including a lot of room for these different options, such as renovating an existing structure instead of building new, which would be significantly less expensive. Whatever is eventually decided upon, commissioners are convinced that something will have to happen with our courthouse within Splost's nine to ten year time frame. So they chose to take action and to go ahead and designate the new judicial center as part of Splost 2020. This proposal passed eight to two with commissioners Davenport and Thornton voting no. Now it goes back to the advisory committee and the public. There's an open house meeting for public input on Wednesday, April 10th at 5.30 PM at the Dowerty Street Government Building. As we've seen, the community's voice is very powerful when we speak out. Hopefully, before the Splost is finalized and voted on, we'll see real and substantial commitments from the mayor and commission to finally reform our criminal justice system. Then we can vote with trust that the new judicial center will truly be a center for justice and restoration. I know we'll all be watching carefully to see what happens over the next few months. Thanks for watching, and if you're not subscribed to my channel, definitely go ahead and hit that red button so you'll be informed of my future videos. Bye for now. $50,000 was given to a police officer who hit a man with his car. And so what would have happened if we had a community police accountability board who could have said, you know what? We still feel uncomfortable with this person being in our police department.


What's up everybody? Jason here for jazby's case breaks dot com wax party promo break just sold out 2021 bowman's best baseball Eight bucks case break ran in teams number eight me and guys 28 total spots all cart ship You have a combo teams of Cleveland Guardians and Houston Astros with the Royals and Mets and here we go guys. Good luck So dice roller here the customer names that bought in straight up we had one filler and Then I guess said let's do the break first. They were randomized original list and number one gets a wax party promo break roll it Five and a two seven times. Good luck one two three four five six and seven Jeremy down to Jacob All right, so we have 28 There's the combos there one two three four five six seven Seven times seven times Milwaukee down to the dodges. Hi, so here we go guys seven seven Jeremy with the Brewers Steve of the Braves Tom with the Carnals Michael with the Mariners and Rangers Lonnie with the Giants Chris with the Angels David with the Orioles Tyler with the Padres Kevin with the D-backs Jeremy with the Rockies David with the Reds David O Jeremy are with the Yankees Oliver with the Rays Tyler with the Cubs Kevin with the combo teams Guardians and Astros and Steve Birch with the Royals and Mets combo team Peter with the Nationals Robert with the Marlins Chris Walker with the twins Steve M with the Marlins or sorry Phillies I should say Lonnie with the Red Sox Steve Birch of the Tigers Chris brother with the A's Peter with the Pirates Chris brother with the White Sox Justin Snyder with the Blue Jays and Jacob with the Dodgers So if anybody wants to trade I'll give you guys a quick minute in the meantime I'm gonna start ripping open this case and start pack stacking a couple boxes So don't worry.  I'm just gonna you know pack stack these cards here Start opening up to give us a little head start. So we're not too too delayed Just remember I'm just gonna open up the case so we can start rockin through it pack stacking these cards I'll probably rip this box. And if I don't see any trade chatter then Almost likely just close it. Hi TJ. I guess nobody wants to trade man TWC trade when the closed Alright, I guess I just ripped the first box the seven boxes are still there sealed Of course, let me show you the list right there. Good luck. That's Here we go. Here we go. Cardinals actually not too bad though, man, you know, I don't know Walker prospects here So wander Frank on remember at one point. These were like a hundred bucks a base Julio Pache and Luis Rodriguez go For sure, man, and you got Dylan Carlson. I believe rookie's in your right 17 and a 75 for the Dodgers. Who has the Dodgers Jacob F with that one? Very nice, man Luis Rodriguez Joe Adele Jonathan India goal to 50. That's pretty nice And his teammate Jay Allen autograph Cincinnati David Oh Tommy Logan Gilbert, not a Julio Rod, but something to start off for you, buddy. They go Michael Jared Kellenick Joy Gallo and Shalem Palanco Pirates that is going to Peterang blue That's a blue number to 150. I really like these cards are here I remember correctly. I think if you collect the whole set you can see the whole like outer space like moon Earth Someone showed me one time Speaking tonight. Oh, that's my next box. It was so weird yesterday I was trying to find the Dodger again, but I totally forgot that the MLB had a part has a contract now Partnership with like Apple TV, so I was like, oh Now I got a download Apple TV to my TV my TV apps Obviously I already have it on my phone, but it's just so funny though. We got Brant Rooker Minnesota Keeper we used to 250 and another Logan Gilbert this time. It's a refractor India German Mercedes Rookie Andrew Vaughn out of 199 Jose of Bray you and Kyle is well That's for Kansas City Royals. Good. Brian Hayes refractor rookie. I just wander a little atomic I probably saw it pretty well actually actually really goes. I got it quickly Give me one second granny's deli sandwiches here. All right, you ready some number there Well, hey dog. What's going on, man? Enjoy this beautiful Saturday today, man. I wish I wish I didn't work on Saturday Today would have been a beautiful day outside. Hopefully tomorrow Easter Sunday is the same way as today One 30 points as well wander atomics over 250. Yeah, that's it. That's a pretty big one right there actually I Remember people on I think Beckett is the one that started this but Beckett started saying that technically these are Wander's first rookie parts Although doesn't say rookie so when they put that out there like base wonders in here We're going for like a hundred bucks Tom is a little more. I thought it would have died down, but I guess not. I mean, I guess Wander is still killing it, right? So I don't know about today. Nice. That's good man. Enjoy your Sunday man or Saturday. I should say Ramirez Ancholess angels trout blue more Luciano to 150 and Ezekiel Tovar Refracted there for Colorado JDom Austin Hendrick and to 99 and Reginald Preciado that's for the Chicago Cubs and Tyler Koch Taffy judge Francisco and door and Henry Davis Henry Davis To 50 for the Pittsburgh Pirates. Is it really Rex? Yeah, I'm the lock myself up and turn to war wolf very nice Pirates Peter ain't You work in tomorrow Rex to or you have the Sunday off Easter Sunday I mean, I know that everybody obviously Imagine very excited look to my mom's house spend some time with her my wife my sisters My wife's making a one of my favorite like foods from my dad's side that's kind of Kind of big historic kind of kind of big deal in the sense that like she learned from my My aunts and my grandma's recipe and she kind of perfected her pretty good to be honest and she's making some Gorgitas tomorrow So I'm pretty excited for that I haven't had something like over a year. It's a lot of work. So that's why I don't really do them too much We do that for Easter Going to work right now and afterwards one. I got you Oh, can you log in? Oh, no, I mean you can or I could just pay about five bucks to just The same thing Okay, then I'll send the people here Brian Hayes and Garrett Whitlock My girls like damn. He's dealing right now, man. I'm just getting all these loading Gilberts. Wait. Oh my Joey Bart gold 75 And a blue Alex Kierloch Minnesota Going to Chris Walker Christian Santana Austin Kim Oh, what's a ten on red? Red out of ten Madrigal Then we have a redemption Try to block this redemption. I'm looking at it perfect Remember show Hill Tani is a redemption in this But red Madrigal and that's cubs edition red Madrigal. Look at that Six out of ten. All right, let's see what this is guys. Good luck Best of refractor parallel. Okay, so maybe not Tyler black for the Brewers Milwaukee Brewers going to Jeremy Are we having an oven next on the next filler guys? So for the Bowman baseball break, so I'm thinking that Think by the time I get back to my dinner break this should be done So I should be taking a dinner break right on schedule. I think like around 725 or so It should be perfectly right on time How about five minutes each box? Right on schedule. And then of course like I said Take a dinner break see what we got going on And then hopefully we're busy for the next two hours or so. Maybe keep me late Not then We're off around 10 All right, so that was the first four boxes or halfway through to gain 10 years based 11k's point a jury Next with and one and oh Guys good luck next one And Armando Cruz Nationals going to Peter aim Marcello Meyer number to 50 and we got Gunnar Hoglund For the blue jays, there's Logan Gilbert right there, too Blue jays that is Justin a roll Vera gold Number 28 out of 75 for the unkilless Sick though trout to 150 and a Dylan Carlson Try to trade couldn't trade mojo At a 100 100 of 100 going to st. Louis and TJ Mike trout Yeah, I know this has been a good parallel case. Usually there's not too many. I Love bones, but so I think it's such a great product. You get four autographs obviously there's a mix of prospects and rookies, but Prospect rookies and veterans, but at the same time in four autographs It's usually like 300 bucks or so. I mean the price does go up after a while But I kind of like the configuration with this and you get a lot of nice inserts a lot of you know refractors It's a very well-done product, that's for sure. I remember I think either it was 2019 I think one was really really good. It was like pink boxes. You know bladding tattoos, too Very nice on there for the Astros Combo team going to Kevin a Randy Rosarania green to 99 With a Alex Kierloch refractor Trout self-relief Nick my tongue Billy's Steve Casey my than another redemption.  Kellenek All right, I think this autograph should be pretty nice, too So you got the wrong and Daniel Lynch All right guys last box Last box mojo, so I gave you I still want to stick to some Bowman products and some baseball That Bowman baseball filler is down to like 11 left. I believe Sure, we'll get that done tonight. I don't lock a four box break of Bowman baseball hobby We'll do that get that off the website And then like I said still have no time to do contenders clearly dawn runs Thinking at least those two breaks for sure tonight Maybe throwing a little go into there to make it for Like I said, we just will be relatively busy Clearly dawners will be like a quick 15-minute break You know, obviously Bowman will probably take a little bit like 30 maybe 40 minutes But there's no other breaks and that's more than like 30 minutes besides that Bowman baseball break Contenders should take me like 25 30 minutes as well. So Should be fairly relatively fast Like boom another redemption and Logan Gilbert. I feel like we haven't hit a good veteran yet So I'm thinking that might be a veteran. I still didn't Logan Gilbert numbered. Jadon Carlos just chiseled Julio and yo Hendrick, bignaga For the cubs All right, good luck guys last hit of the break redemption best of 2021 autograph of Aaron Zavala for the Rangers Michael there you go, man. Alrighty guys, so I got a top load all of these autographs here But I'll do a quick little autograph recap kind of go through the cards But all of these here will be penny-steep to be top-loaded. Obviously, they're like numbered carts inserts Dicats Ruggies, etc. So a bunch of that stuff there And like I say, we got Zavala Polanco Gilbert Allen Rodriguez Henry Davis Haas Young Kim redemption Dylan Carlson Vera Tyler black Madrigal to 10 and that atomic Wanda Franco and of course you have these with Isabel Mercedes Gilbert Rooker, Paniago Ramos Lewis Daniel Lynch culmen areas blue a Hoglin yeti cap make my tongue Ready was right now. That's just a number of our Kierloff Leon Hoglin Armando Cruz color Santana Kierloff blue Prusciato Tovar and Alexander Ramirez So I appreciate you guys. So now let's switch scenes and we'll do the giveaway now. This is a wax party promo break So customer number one is gonna win that guys. Good luck roll Six in the two eight times. Good luck one two three four five six seven and eight eight times six to eight 27 sad people one happy person Just missing out Michael, sorry, buddy Jeremy congratulations, boom Six in the two eight times So there you go, man, congrats, let's put you in here and this was 2021 MLB a box RT number So there you go guys another book another breakdown in the books appreciate guys Jaspi's case breaks calm


No, we never picked the ground in the first round. I've done it before I just feel like if he could pitch one whole game Like if starters had like crazy stamina like save a diamond starter had really good stamina It'd be worth it. The fact you only pitch like one game like Pablo's actually kind of crack boys like Pablo Lopez But that dude kept this picture in Well, not he's kept the starting pitcher in way too long, bro. He was a pitcher. I'll be honest He was good at bad. He was good at being patient and not swinging.   What's up? What's up? What's up? Come on Xander? God man Kids and her staring at the ball is insane to me mind to see I just cannot believe it.  I don't know why I start these bronze starters, bro I don't know why I do it, bro I don't know why they're awful dude, and I keep starting them Logan web It's costing me but both my games cost me because I'm throwing these pitchers, man And I swear Cole Hamels delivery is like crazy My god, I'm so today man He's out. You're doing a lot of good here left fielder a lot of good left fielder Come on base runner man. Come on. I Mean god Base hit let's go man Let's go Let's go man. How the game up then Baha Let's go man Rosario. We had better now Rob Baha, hey baby, let's go man. Am I that late? Yeah, your Brandon Lowe is an absolute animal take Deekman Beats out the game, bro God, I just topped it That's why Lowe's I'll tell you if you're early though. That's well gone Whoa, that's what I mean for the PCI. How was that not launched? What get these mother out out here, bro. I missed that pitch So yeah, but that's what I mean burning them two others like bro that Riley Jones should have been launched Let's go. Good game man. Let's go man. Try to tell you Rob.


Hey guys, it's Missy. Thank you for watching. Today's tutorial is from a picture I posted on Instagram and so many of you asked for a tutorial so I thought I would go ahead and share that with you today. Make sure to subscribe to my channel if you haven't already and let's get started! With my part on the right side I'm going to start by dividing out a section of hair on the left side from my part line down to my left ear and clipping the forward hair out of the way. Now I'm going to do the same thing on the right side dividing off a section above the ear and clipping the forward hair out of the way. Now I'm going to divide out a section at my crown, twist this section together and then just pin it against my head with a few bobby pins. Now I'm going to let down the left section of hair, pick up a small piece near the part and divide it into two sections and to begin my braid I'm going to start by crossing the left strand over the right strand. Then I'm going to pick up a new section of hair and add it into both sides. Then I'm just going to cross the left strand over the right strand again. Now I'm going to twist the two sections towards my face, add a new section into both sides again, then I'm just going to cross the left strand over the right strand again. So I'm just going to repeat those steps adding in new sections of hair to each side crossing the left strand over the right strand again until the twist reaches my left temple. Now I'm just going to continue twisting the two strands together until reaching the end of the section. Then I'm going to slide a bobby pin over the bottom so it doesn't unravel. Now I'm going to repeat those same steps with the hair on the right side. So I'm picking up a section near the part dividing it into two smaller pieces and I'm going to start by crossing the right strand over the left strand. Then I'm going to add a new section of hair into both sides and cross the right strand over the left strand again. So I'm just going to repeat those steps continuing to twist the two strands together while adding new sections of hair into both sides until I've brought in hair at my right ear. Now I'm going to stop adding new pieces into the braid and just continue twisting the two sections together. Then once the twist reaches around the back of my head I'm going to pin it underneath the crown section with a few bobby pins. Now I'm going to take the twist on the left side that I made previously and I'm going to go back over it pulling on the edges to make it wider and more full. Then I'm just going to bring it around the back of my head and pin it underneath the other twist with bobby pins. Now with the remaining hair I'm going to create a poultry braid. So I'm going to divide it into two sections a top portion and a bottom portion and with the top section I'm going to split this into two sections wrap them around the bottom section of hair combining them back together underneath and then tie them back together with an elastic band. Now with the new top section of hair I'm going to split this into two sections wrap them around the bottom section of hair combining them back together underneath and then tie them together with with another elastic band. Now with the new top section of hair, I'm going to split this into two sections, wrap them around the bottom section of hair, combining them back together underneath, and then tie them together with another elastic band. And I'm going to go back over it, pulling on the edges to make it wider and more full. And I'm just going to repeat those steps once more, creating three sections of the braid. You can create more sections or less, it all just depends on the length of your hair. Thank you so much for watching. I really hope you enjoyed today's video. Be sure to click the thumbs up if you did, and make sure to subscribe to my channel if you're new. That way you won't miss out on any future videos, and I will see you next time.


What's up everybody, Jayce here for jackspicecasebrakes.com 1819 chronicles hanger one box break Random teams number 28 just sold out and again. This is too weird a tiered this is to win a tiered round team spot in NT basketball You can also chase the look of rookies in this hanger But the way this works guys and randomized customer names and teams Distribute the hits out of this hanger box And at the end of the break or randomizer 30 customer names again in a separate dice for a randomizer and customer name at number One will win the $1,700 spot in tiered random teams basketball Full case break So let's do the break guys Let's roll it and we got a five and a four nine times You go one two three four five six seven eight nine times Steven Dunner Brandon nine times here on the teams six seven eight Jets down to the Minnesota Vikings Steven with the Jets Robert the Lions and Titans Eric with the Bangles Browns Robert with the bills the Eagles Hey, whoa, what am I doing? Hold on. Why did I copy them? Why did I copy this? Well, I'm sorry about that. I copied the wrong list. I guess we'll do nine again. I Was zoning out and he realized it. All right, let's do nine here one two three four six seven eight nine times Wizards done the magic That's funny Stevie other with the robber the wars as well as the heat Eric with the pastures nuggets Robert the pelicans hornets Eric with the T-wills Josh with the Raptors Eric with the Lakers Joshua with the Suns Brandon with the Bulls Josh with the Knicks Robert with the Grizzlies Shawn the Hawks Josh with the jazz Robert the Nets Pistons Mavericks Brandon with the Cavs Robert with the 76ers Shawn with the Clippers Eric with the Thunder Robert the Rockets Bucks Josh with the Kings Blazers Robert with the Celtics Josh with the Spurs and Brandon with the Magic So again, we'll close the trade window open up the hanger and Then we'll see who gets that spot and cheer grinding teams Mitchell Robinson she'll just play Thompson Sexton from Robinson Mark the Porter, Jr. Aten Carter preview Yeah, who's The Melanger and Jackson Jr. A little Trey Young Now let's switch scenes and let's see who gets a spot in three round teams top person top customer number one gets it And it's also a nine good luck five and a four nine times one two four five six seven nine times Five and a four. Wow Steven. Look at that Five and a four nine times. Congratulations Did you one spot module this? I think you did there you go After nine times five and a four Congratulations, you're now in the break. Appreciate you guys. Jasper's case breaks calm


Nanoparticles, in-piece, have been widely used in various applications such as biology, medicine, and electronics. However, their use has been limited due to the difficulty of maintaining them in solution in high ionic strength environments. To address this issue, several strategies have been developed to stabilize in-piece in these conditions. These include the addition of surfactants or polymers, the use of organic solvents, and the application of antifouling agents. Additionally, methods have been developed to prevent the adsorption of proteins onto the in-piece, thus preserving their functionality. This article was authored by Luca Garini, Ramon A. Alvarez-Puebla, and Nicholas Pozosparis.


So, thank you for being here, and I'm Alex Fiestas, I'm a first-over hacker from Barcelona, and for the last eight years now, or something like that, I've been working in this community you might have heard of called KD, and specifically, yeah, seven to eight, something like that, and specifically I have been working in all things related to the desktop, right, creating a desktop itself to desktop applications, which is quite the contrast because in the last two years, I've been working in the completely opposite side of the spectrum. I've been working in this company called IOS, that, for example, KD is owned by the community, right, KD is owned by us. IOS is owned by Telefonica, which is not quite the same. In KD, I used to do most league desktop applications. IOS is a kind of company where everything is web, everything is cloud, and everything is trendy. And finally, in KD, we only do free software, and at IOS, at least until seven months ago, we only did proprietary, almost only did proprietary software. So that actually, that huge range of things have given me a special perspective when it comes to desktop and web applications. So let's start with defining what desktop applications are. And this one actually is quite easy, right? So a desktop is a form factor for a computer. Usually, you have a screen, a keyboard, and a high definition pointing device, like a mouse or a Wacom tablet or whatever. And that, for example, is shown if you're trying, if you have tried to use a desktop application in a touch interface, it kind of doesn't work. Because, well, you don't have that precision, for example. Or at the other way around, a touch application for the desktop, some of times you are missing shortcuts, which is one of the most important things in the desktop. So this one is easy enough. Let's go to the web. Let's try to define the web. That's actually a bit of a harder challenge, because the web seems to engulf so many things, like websites and video games and whatnot, that people think it's hard to grasp what the web is. But in reality, it's actually quite easy. The web is just any application or content that you can use in your web browser. And the web browser is actually super important. For example, if there is anybody in the room is still using Internet Explorer or Internet Explorer 6, your web experience is going to suck. Your web experience is going to be years behind the one that people using modern browsers will have. You are not going to have SVGs. You are not going to have videos. Or, well, videos without making your fun go at 100% revolutions. And 3D and many other things that you can do with modern web. Desktop applications, now that we know what they are, let's dig a little bit deeper. And just a warning, this is all my point of view. So, of course, it's really opinionated. If you don't agree, well, raise your hand maybe at the end, and we can talk about it, or grab me somewhere. So desktop applications. They have been with us since the desktop was invented, right? So many, many years ago. I probably wasn't born or still was a little baby. They are really, really robust, either because they are using technologies that have been with us for as many years as the desktop, or because lots of QA has been done into that. Lots of users have used these applications, and now they are really, really polished. Applications like this, for example, you have Microsoft Office, you have Visual Studio, which just mentioned a few proprietary ones. In the open source realm, we have many as well. We have Firefox, we have, which is a web browser, we have LibreOffice, and many others. And that's really, really good. It's not that easy to find super complex feature-rich applications that are as robust as desktop applications. They are really fast. And when I say fast, I mean that in the abstraction layer they work on, as in they are really, really close to the computer. And that allows them to be really fast. You can find desktop applications in really, really tiny computers. It's not that easy to find other kind of applications in there. And it's actually a feature, right? Depending on what you want to do with your application or where you want to deploy it, you need to do it using desktop technologies. Then there are a huge variety of them. It's enormous. You have from the series of games like Minesweeper or something like that to really complex video games with virtual reality and whatnot. And basically whatever is trending, whatever, like the cutting-edge technologies are usually in the desktop first. For instance, virtual reality, right? You don't have virtual reality in other places right now. And that goes for everything, right? You have text editors. You have text editors that are just plain text. And you can do anything with them to Microsoft Office, which is in the other side, which you can do even programming in there, I think, with macros and whatnot. So, you know, you have a good offer. And you have access to everything, right? You have access to almost every part, any tiny part of your computer. You have access to Bluetooth devices. You have access to the GPU. You have access direct access to the network, so you can do cool things like discovering and things like that. And that's really, really powerful as well. And when it comes to tiny pieces, like the Internet of Things right now or something like that, it's really important to have access to all those buses and interfaces provided by the computer. But, well, there are also a list of bad things, right? For example, it's really difficult to reproduce the same application that you are developing everywhere. One of the reasons behind this is that the desktop started in different places at the same time, each or they copy each other. But, basically, you have Windows and you have Mac and you have Linux, which are the biggest players, and they don't like to talk with each other. So, when you create an application, if you want to make that application exactly the same everywhere, you have to do a lot of things. And, of course, we have Qt, and this is QtCon, and Qt is basically an engineering approach to this problem, right? And they have tried to lower the cost of developing the same application everywhere, but still desktop application sucks in this regard. Then you have distribution, which is one of the biggest flaws in desktop applications. If you want to distribute your desktop application, you are distributing it to a really complex system, like, well, Windows, Linux, or Mac, and so many things can go wrong. And I think that you might have seen bugs of the kind like, yeah, application is not working. And then you do some checking, and it turns out that the configuration folder is read only.  But these things can happen, right? Because the whole operating systems are so stateful, are full of things that can change and that can break you. And it's really difficult. And not only that, but the medium where you have or that you use to distribute your applications is not the friendliest of them. For example, for normal Windows application, you would go, arrive to some website usually, download an installer, then you will install it and go through a wizard that is going to ask you all sort of complicated questions, and then you will finally execute it. And this is super complicated compared with other workflows that I'm going to explain afterwards. Updates, updates suck, and that's it. Each application is going to implement their own way of updating, especially for Windows. It's the case. So each application is going to have a different policy to distribute updates. And not only that, but most of the times you relay on the user to click the update button. And that actually makes life difficult. For example, to do A, B testing and things like that. You cannot control which users are using what version. It just sort of happens. It's anarchy out there. You might have users using a version that you released four years ago, and you cannot do anything with it. In the Linux ecosystem is even worse because as a developer, you don't even control the distribution system. And yeah, I'm sorry, distribution guys. Don't look at me with those faces. But that's reality, right? I mean, and this has happened to me personally that I use and invest my time to fix a bug that was really complicated. I'm so proud, finally fix it. And then it takes me 1.5 years until it reaches the user. And that's just not acceptable. And this is actually a case not only in Linux. This happens everywhere. In OS X, you have to go through the Apple Big Brother eye, right? And they have to put the stamp off. I want this in my store. So the same thing happens. You have a critical bug. You want to release it. You want to distribute it. And you can't. And finally, the desktop is clearly behind in some trends and some things that are really needed for modern software development. For example, analytics. There is no unified way of having analytics of your app. And as well, you have applications that have developed their own system. But the cost of doing such a thing is huge. And actually, I cannot think of a straightforward way of having analytics in Qt.  The user has been here. From here, it has jumped to here. Then most, move the most sponsored this way. And this kind of information. And since you cannot have that, then your further development are basically blind. You're trying to ask questions rather than to see data. And ask is wrong. I mean, if you ask a user what do you want, you're probably doing it wrong. You shouldn't ask that question. Anyway, let's go to the web. So if when I say web, you are thinking on my blog or you are thinking of a simple website, then you are doing it all wrong. The web has evolved since then. And you can do many, many, many things. And there are key features that are the features that are making the web so well, the de facto standard is to develop anything. One of them is that it was designed to be reproduced. It was designed to be a standard. And yes, when there is a standard, there are people that are not going to follow the standard. That's how life is. And there are people that for whatever reason, they will try not to follow the standard and to make life harder to you. But the success of the web has made it so you have so many solutions for this that you are not even going to notice. Nobody is fighting these days with these works in Internet Explorer. It doesn't work in Chrome or something like that. You have libraries. You have tools that help you for this. And we have to keep in mind that there are at least 3.5 billion webs.  And basically, this money goes directly to engineers. And what's what we do, right? We try to solve problems lowering the cost even more and even more. So that's de facto. The web is reproducible. And you grab the web. And that web is going to be exactly the same everywhere almost. The web is stateless. When you load the web, that web most of the time starts with zero state. And it was designed this way. Later on, some state has been added. You have cookies and whatnot. But the design principle was stateless. And this basically makes it so if you have any problem with the web, in the worst case scenario, you just click refresh. It reloads everything. Reloads the state from a scratch. Boom. Fix. And yeah, because it's a stateless and because it was designed to be reproducible, then the distribution is perfect. And even more, it was designed with a server client in mind. So basically, if you have an application, you have three billion people already connected to the internet or something like that, four billion. So basically, if you have a web, whatever, and you have 3.5 billion users that will be able to access it and execute it exactly the same way you design it. So not everything is not the web is not the land of unicorns and rainbows and shiny things, right? There are also bad things. One of the bad things is that the web is sandbox. And this is good for security, but it's also really, really bad and inconvenient. For example, since it's sandbox, since the web can only see whatever the browser allows the web to, you don't have access to Bluetooth. And you have to wait until some big companies such as Google implement some kind of bridge between the web and Bluetooth, it's actually happening by the way. And until two years ago or something like that, you did not have access to the webcam or to the microphone and to many other things. And not only that, but you have a resource limit. You have a, I think in Chrome, it's a gigabyte of RAM and 200 megabytes of local storage. So you are really limited by this sandbox. And depending what you want to do, you simply can do it with a web. For that, by the way, there are these hybrid monsters, which are becoming quite popular. But let's not talk about them. They are slow. The abstraction layer where the web is, is way higher than desktop applications usually. So basically, to draw the same thing, let's say to draw a straight line, way more CPU instructions are required, way more work needs to be to happen in comparison with a desktop application usually again. And what happened with my slides? And well, and that's, that's actually inconvenient, right? If you have, for example, an embedded, a small computer or internet of things, the web is really, really slow for that. And your small computer is probably not going to be able to, to handle it. And then this is actually a hidden gem with most people, I don't think they usually think of this. And it's that when it comes to free software applications, the web is really, really far behind. For example, in the desktop, we have LibreOffice, right?  You don't have a free software web that can compete with Google Docs. Not yet. We are working on it. There are, for example, web ODF and other things, but still we are not there. And this is actually a problem. It's a problem because users don't find good alternatives. And while there is this trade-off, right? Of freedom and privacy versus features. And that's always the trade-off users are going to find. And if we don't offer good, featureful web applications, then those users are going to remain using Google Docs or whatever. And well, so to that, this is what we say. If we are lacking feature-rich complex applications into the web, we don't use the desktop applications, which I said they are really robust and lots of millions of euros and whatever currency have been put into them, like LibreOffice. And so we can compete with developed web alternatives. And this is what we have done at Open365. We've done this with email. We wanted to compete with Outlook and with Gmail. And we couldn't find any good web alternatives. So we ended up using K-mail, actually. We grabbed K-mail as we used it on Kiddie and put it on a web. And we did the same with LibreOffice, basically. We have presenter, spreadsheet, and writer on the web. So there are a few ways of doing this. I'm going to go quickly. You have Nackle, which is a Chromium-only solution, which basically executes the application and it sandboxes it in the same sandbox as the web, right? So you have that added limitation. But, well, they are really fast because they are almost as fast as if you would execute them outside. And they are killing it. And actually, they are killing it because this thing is happening. ASM.js, which is the predicated world, and WebAssembly, which is the new feature thingy. And WebAssembly is actually kind of cool. Basically, you compile your application to a subset of JavaScript. And they are optimizing that subset of JavaScript for it to be as fast as possible. And they are also adding missing primitives that JavaScript is basically not able to, for example, when it comes to do parallel tasks, JavaScript sucks. And it was not designed for that. And they are adding something. Because, well, your video game or key develop there or your IDE, they are going to use threads and you need those. And then you have the solution we went on, which is execute these applications in the server and grab just the interface and bring the interface to the browser. And just do that. So the heavy lifting is done by the server. And then you have, like, something that gets the interface and puts it on the web. We chose this solution because either of the above are actually possible right now. I mean, if you optimize your application, maybe you can get it to work. But they are not generic enough solutions. So how we've done it quickly, we are using containers. That's what makes sense. We are going to have hundreds, hopefully thousands of users using these apps and we don't want these apps messing with each other. So we are using containers. That's really nice. And they don't add an overload. And they are really, really convenient. Then for bringing the interface to the web, we are using this protocol called Spice that is created by an ice wheel company and then bought by Red Hat, which basically is a protocol that supports primitives. For example, draw rectangle, draw straight line, merge these two big maps, draw big maps and these sorts of operations. And it also supports actually sending video, which is question. There is a component called Spice X server, which translates X to Spice. Yes. So basically the applications are executed in a container. The applications connect to an X server via socket. And this X server offers the Spice. And that's the conversion. And, well, the missing link, which is what we developed, is a Spice web client, right? So we said that web is whatever can be executed in a browser and this is what we were missing, some way of putting this into the web browser. So you do what we do with the virtual guests in the computer, but instead of using Spice, you put it in the web? Yeah. And that's actually the point is because if you had to distribute a Spice client, that would be really inconvenient, right? Because the user will have to add some kind of plugin, next, next, next, install it, then you run into all the problems they mentioned. So by doing it web, you just forget about all of this. Everything is open source. Pure JavaScript. Well, JavaScript, HTML and whatnot. And everything is open source. You can go to this GitHub URL, download whatever you want. We also open source, like the entire open 365. So you will see a bit of noise, like microservices, plugins for rabbit, MQ, which is an implementation detail. We are using each other for chat and whatnot. But, well, if you want only the Spice component, then look for Spice and you will find it. And finally, let's do a demo. Which is always the most interesting part, isn't it? Let's see. So let's start by LibreOffice. Well, this is another presentation I did in last academy. And this is basically LibreOffice. This is running offline. And as you can see, you can see the picture, like the huge image loading because, well, it's really huge. I'm running this in high DPI on. Well, that's what happens. And, well, you can see all the widgets, more or less, how it responds. Oops, I clicked in a link or something. So this is LibreOffice. And this one is KeyDevelop. This is actually the first time I do it to check how it works. And because we are at QtCon, I thought that we should have a KeyGasKeyDe on Qt application, right? And, well, this is KeyDevelop. I don't know if you can appreciate that there is no lag. And when you put this on a server, the lag doesn't change almost. The Spice was actually designed to work well when there are high latencies. And it automatically, well, implementation details. Ask me later if you are interested. So this question, since you're using Spice, would be able to emulate even the virtual machines that you export using the virtual plans, like you use Spice as the protocol to look for the virtual machines? No, we have a few pieces written in Node.js that orchestrate all of this. So you have a small microservice and you say, hey, I'm Alex, give me KML. And then it prepares everything. What's a full Spice client? So the Spice basically defines how to draw things, define some things like Clipboard, which we support. You have shared Clipboard. And some things we don't, for example, USB, because the sandbox in the browser doesn't allow you to escape that. Two questions were, what happens when I say for open files? And the other question is, what about sound? Let's start by the letter one. Sound, yes. Right now, I don't have any application, but yeah, we do support sound. And Spice offers two codecs. We offer, we support one, which is what the desktop supports. And actually, what's kind of annoying, because I would start, like, when we started, you would get the KDE sounds around and, well, KDE sounds are not the best. And save, that you have to do it, depending on how you do it. For example, since we are using containers for everything, what we do is we open a small door to the user file system. So it's a user network platform, has a file system. And through WebDAF, in this case, we mount the file system inside. And that's how you have access to your files. And in Open 365, we are using C file, which is kind of a non-cloud thing, but, well, we found it to be better. Let's not talk about that. And basically, in C file, you have an application for your phone, an application for your desktop, you install, you can synchronize files and all that. So you have your files in the cloud. So that's mostly it. Something I would love to see, and I will completely help, and I'm looking at users, KDE store and all that, would be lovely to have demo.kde.org. And you can click on there and get your application for five minutes so the user can measure around with or whatever. Yeah. I mean, that would be really, really nice. Well, since you're a KDE store guy, some numbers, actually, we have 200,000 users. We have had up to, I don't know, a few thousands K-mail opens at the same time. And the bill is less than 300 euros a month. So, yeah. Yeah, yeah. Maybe. Yeah. I mean, the K-mail, the biggest problem it has is RAM memory. And when it comes to servers, RAM is really cheap. And you buy a cheese and they give you RAM for free. That's how cheap it is. So, since RAM is cheap, then it doesn't use that much, CPU. Any other question? No. No. I noticed the people, like the deal with spies, they are working on this. And, but so far, they can't. Any other questions? Okay. So, if you have any questions you want to ask now for some reason, I will be around. Just speak to me. Thank you.


Dear students, let me present to you an interesting theorem followed by its proof. The theorem is as follows, if the variance of a random variable X exists, then the expected value of X square is greater than or equal to the square of the expected value of X. As you can see on the screen, E of X square is greater than or equal to E of X whole square. So, how do we prove this one? Let us start from the variance. What is the basic definition of the variance? The variance of X is given by the expected value of X minus mu whole square. Because mu is the same thing as E of X. So, a square minus 2ab plus b square, we open it in the same way. So, therefore, this expression will be equal to the expected value of X square minus 2x into E of X plus E of X whole square. So, what will we have? It will be equal to the expected value of the first term minus the expected value of the second term plus the expected value of the third term. So, what is it? The expected value of the X square, that is the first term, minus 2 times expected value of X into expected value of X plus the expected value of X whole square. Therefore, expected value of a constant is equal to that constant. All right, what do we get? Expected value of X square minus 2 times expected value of X whole square plus one time expected value of X whole square. And what do you get finally? E of X square minus E of X whole square. That is equal to what we have just now achieved, E of X square minus E of X whole square. So, now this equation, you note that the E of X minus E of X whole square, so square of any quantity that can never be negative. The square of any quantity either would be positive and if that quantity itself is zero, then the square will also be zero. So, because the thing that is equal to our E of X square minus E of X whole square, that thing itself is expected value of an X square, so that cannot be negative. So, therefore, the final conclusion is that we have arrived at the point where we are saying that E of X square minus E of X whole square is greater than or equal to zero. And you get what you wanted to prove that E of X square is greater than or equal to E of X whole square. So, this is a basic property and it's quite simple.