Are we on? Okay. Super. We're going to wait another two minutes just to let people make their way into here. By the way, if you're going to be trying this at home, I recommend a blog post I wrote over the weekend. It kind of goes through step by step and has the prerequisites for what you'd be needing to do to replicate what we're going to do today. It's available at our blog. If you go to gridcentric.com slash blog. It's just the most recent entry. Also this is apparently an hour and a half long workshop, so we've got plenty of time. We're going to see if we make it the whole hour and a half, but probably try and wrap up before lunchtime. Since we have so much time, if anybody has any questions, you can just kind of shout them out or walk up to the microphone in the center of the room and ask them. Okay. We'll go ahead and get started. The subject of this talk is Windows on OpenStack, running Windows on OpenStack, and kind of one of the things that can go wrong and hopefully identify some ways that you can avoid some of the pitfalls and run Windows with ease and efficiency. First a bit about me. I'm Tim Smith. One of the co-founders and head of product at a company called Gridcentric. We just turned four this month and I've spent the last four years heading up product development there and engineering. I usually get tasked with doing our Windows deployments and POCs for customers, so I probably have the most experience in the company running Windows on OpenStack. We'll just get started. So the talk, again, is about running Windows on top of OpenStack. There are some folks that are specializing in running OpenStack on top of Hyper-V, running OpenStack on top of Windows. This talk is more about the other direction of running Windows desktops and Windows servers on top of an OpenStack environment. For this talk, we're going to assume that the OpenStack environment is based on KVM. So there are probably a lot of differences between running Windows on OpenStack on Windows. We're not going to cover those today. We're going to assume you're just working with a kind of bread and butter OpenStack distribution on top of Linux on top of KVM. We're going to go through a number of topics and as we're going through these, I'm going to kick off an actual Windows install, which will hopefully work and hopefully finish by the time the end of this talk is done. We're going to use that as kind of a framework to go through the different decisions and different things you need to think about as you're running Windows on OpenStack. At the end of the day, what we're looking at getting is that when you type Nova image list, you have your Windows image in glance ready to be booted up and ready to be run. So I'm going to kick off at the very beginning just the basics of bringing Windows into an OpenStack environment. The first thing you need to do is actually install Windows because there's no, there's really not publicly available glance ready images for Windows. I have been informed by the cloud-based folks who are experts on a lot of things, Windows related and cloud related, that they have just now released and given permission by Microsoft to release Windows image that you can import directly into glance, but assuming you're not using that, you have to go through this kind of install process where you start off with the Windows ISO and kind of move your way towards an actual disk image that you can then shove into glance. I'm going to go ahead and kick that off. Now I'm going to be in the background. I mentioned we have a blog post that goes through the step-by-step things we're going to do to create this, and I'm just going to go ahead and start running through these. One of the things that's important to kind of recognize is that you can't currently easily attach a CD, an ISO image to a Nova instance as you're booting it. I understand this is something that's being worked on, but in the meantime we actually have to have access to a physical compute node that's similar to whatever physical compute nodes we're going to be running Windows on, eventually specifically the CPUs need to be similar or the exact same. The first thing I'm going to do is just create a QCao 2 image, and this is a file that acts as kind of a virtual hard drive. I'm going to give it a lot of space, typically maybe your Linux instances you might typically be sizing in the 10 gigabyte, 15 gigabyte range, but for Windows and for Windows install you usually need significantly more. I'm going to make it 30 gigabytes large, and that operations really quickly because all it does is create a small little file that looks like a 30 gig hard drive. The next step I'm going to do is actually boot a virtual machine that is going to have that empty hard drive file as it's hard drive, as it's kind of C drive, and we're also going to plug in as CD ROMs, the Windows install CD ROM, and another CD, the Windows install CD, and another CD that holds what are called para-virtualized drivers, so I'm just going to kick that off. The importance of that para-virtualized driver bit is that when you boot a VM, Windows doesn't know that it's operating in a virtualized environment, and so if you just emulate your hard drive and your network cards, you're going to end up with really, really slow performance, so in order to make this boot process go faster and ultimately in order to make the runtime performance go faster, we're going to be using these para-virtualized drivers, because we want that at boot time, we need to actually plug in that second CD and use those drivers to boot. So what I'm going to do now is just VNC into that VM as it's coming up, and if you've installed Windows, you're kind of familiar with this screen. So what we're going to do for this workshop, I'm going to go through these first steps and then it's going to go into that phase where it's installing everything and that's going to take a while, so we'll just jump back to covering the concepts at that point. One of the first things that Windows is going to want to do when it's installing is ask you where you want to install to, and at this point in the install process, because we're using that para-virtualized storage device, Windows doesn't know how to talk to it quite. So one of the first things we're going to have to do is actually go into that CD and give it the appropriate drivers, and again, if there are any questions at any point, we're going to just shop it out. We're installing 64-bit Windows 7 for this workshop, and we're going to pick the scuzzy controller, which means the disk controller, and once that's loaded, Windows will be able to see that para-virtualized virtual hard drive that we created, and we can kind of kick off the rest of the process. Well, we're, okay, there we go, I'll just click Next. We begin this process of copying the files off the CD onto the hard drive and expanding them and so on. This is going to take a little while, so while that's going on, I'm going to switch back to these concepts. Before I begin that, can I just ask the audience how many of you are running, or how many of you have an OpenStack install right now, if you could just put your hands up, it looks like about half. How many have been able to run Windows or running Windows on OpenStack right now? And how many of that, I guess this will be two separate questions, which fraction of you are running Windows as a desktop? Okay, so a few, just a few, mostly server than I'm going to say. So one of the differences between running Windows in a cloud environment like OpenStack versus running it on just a kind of a bare hypervisor like ESX or KBM or Zen server is that the kind of provisioning model for VMs is different in a cloud environment. In a cloud environment, you kind of have this concept of a catalog of disk images that you can then spin up multiple virtual machines from. Whereas with a more traditional hypervisor, you typically have a kind of a one to one ratio between disk images and VMs. And where that complicates things is that unless you want to have your catalog full of every single of the disk image for every single VM you're going to want to be using, you kind of need to create these disk images in a way that they're kind of generalizable and when you actually boot them up that you can actually customize them. There's a bit of customization that can go in before you generalize them. Is anybody familiar with the sysprep tool and creating what they call answer files? So sysprep is this tool that'll take a Windows install and kind of roll back the out-of-box stuff that's been done to make it a kind of generalizable disk image that you can take and go and install on other machines. In our case, we're going to be taking it and installing it in other VMs. And one of the things that you can do with sysprep is kind of customize the startup experience when you boot those machines for the first time. And the way you would typically do that is using something called Microsoft System Image Manager, which I've got loaded up here. Just to kind of give you an idea of some things you can do. And you're probably not going to be able to see this from the screen, but you can open up firewall ports. You can start services running like remote desktop. You can set the system language. You can set the time zone. You can create accounts. So you can do things kind of at this general stage that are going to then happen as the machines booted for the first time or the VMs booted for the first time. So the significance of that is that there are two kind of use cases for running Windows on OpenStack. The one use case is as an operator, you want to create Windows images that your users can then boot up and customize and enter their own product keys perhaps. But they're not going to be able to have actual control over uploading their own images into Glance and then using those. And for those cases, you do want to actually run through this sysprep procedure so that the images that you're putting into Glance don't have your own customizations or don't have, they're not specific to your organization because other organizations or other groups in your organization are going to be using them. That's the approach that we're going to be going through today. We'll just check up how we're doing there. The second use case is where you as the user are kind of also the operator or you do have some control over what you're able to put into Glance.  And for that, there's a pretty handy tool called CloudBaseInit, which kind of mirrors the functionality of something called CloudInit that's typically installed in Linux virtual machines. So CloudBaseInit and CloudInit, they both take advantage of something called the metadata service, which is something that runs in Nova that when a VM comes up, it's able to go through HTTP to a kind of special address and fetch information out like the admin password and the host name and so on. And it can also fetch out custom boot time scripts that you want to give the VM to run. So this is typically, if you were running in that second case, you want to have it so that as you're booting your VMs, you want to be able to do some customization and you want them to get their own unique host names and you want them to be able to join domains, join your Active Directory domain and so on, you would use something like CloudBaseInit. Are there any questions so far? Check back on our Windows install. Okay, so probably getting to the point where we're actually going to do something there. So on that topic of these dual use cases for running Windows in the Cloud, I'll touch a bit on licensing and license keys. And I just want to clarify something ahead of time that the license and the key are actually two separate things. The license is this agreement you've made with Microsoft that in exchange for so many dollars you're able to run so many copies of Windows. The license key itself is this digital fragment, this string that you put into, that you enter into the wizard that convinces the software that you actually have that license agreement with Microsoft. And there are really three types of keys. One is the one that we're probably most familiar with if you're just a Windows user at home.  And that's kind of a one-to-one unique license key that says you're allowed to run one copy of Windows and this is that copy. There's also something called a multiple allocation key which is similar to that except Microsoft servers will accept that license key multiple times before rejecting it. And finally there's what's called a volume license key which is something that's kind of baked into a whole bunch of special builds of Windows whereby you say I've got an agreement to run some large number of Windows instances and there's infrastructure that you need to set up in your network to allow those instances to come up and authenticate and typically the first two types of keys are going to actually reach out to Microsoft's activation servers and do that activation. The third type of key is something that would be in-house. You'd have your own key management server. It's called that your VMs would be talking to you directly. Where licensing keys, license keys start to get a little bit messy in a virtualized environment is that if you're using one of the first two types of keys a lot of times as you're creating multiple VMs with that same key baked in you'll over time Windows will say okay the hardware has changed, the network devices have changed, things have changed and I need to reactivate and in the first case you may end up having that key not work. In the second case you may end up driving your allocation count up, your Mac count up. Just a quick question for the audience is anybody had success using Macs in a virtualized environment? We typically recommend that our customers use volume licensing keys just because even if the VM decides it's its own unique thing and it needs to reactivate it can just reach out to the key management server on your network and do that perform that activation. I've not, personally I've not heard of anybody wanting to run Macs on a virtualized environment because if you run your Mac count out, I mean Macs are expensive and if you run your count out you have to call Microsoft and explain to them what happened and nobody wants to do that more than once. So we'll just check on our install, okay, still going, are there any questions so far? Yes, the sound part, right, so that's a good question and that's, I want to speak to that in a little bit about remote access, were you using remote desktop or using, so using remote desktop from a Linux machine? That might be where you run into trouble, so I typically use either the free RDP or the Microsoft remote desktop client and the sound usually carries through, if you're using something like VNC there's no capability for sound so if you're logging into your machines via the Horizon dashboard, there's no capability to get that sound to you. It may be in your RDB client configuration that for some reason or another sound isn't available, typically you'll be able to see if it's a kind of client side problem or a VM side problem based on whether or not the sound icon is xed out and if that's the case that means something is signaled to the VM that sound cannot work right now. If you see that sound icon and you can change the volume and so on then it's probably something client side. Yes, I can, I certainly can. I don't have first hand experience with that, so the question was the assumption here is that we're starting off in a virtualized environment so I'm doing this install to a virtual machine and I'm going to take that image and import it into Nova. The question was can I speak to taking physical images and importing those into a virtual environment, P-to-V as it's called and what's available is something I think called WinPE which is a, there may be people in the room actually that have much more experience with this than I do but there is a Microsoft tool that you can kind of use as a pre-boot environment so you get your physical machine set up or maybe it's already been set up for years and years and you use this kind of pre-boot tool to boot into and it knows how to take what you have on your physical hard drive, your physical storage and pull that out as a disk image and I'm not sure what the intricacies would be in trying to take that image and then run it on completely different hardware. So the advice is to load your PV drive first and make sure that those are installed so that when you actually do boot it on the virtual host or as a virtual machine your devices will actually work. Specifically I would guess your hard drive is probably the most important thing that needs to work and would you happen to know if there are any complications from moving between different kinds of CPU and so on? It's a mess. Yeah, yeah. Okay. Right. Right. Right. So the advice from the audience is to, well, that it's a mess, it's hit or miss and you may have better luck instead of going straight from physical to virtual into Nova if you're running on say KBM to go through the VMware conversion tool and then from the VMware conversion tool possibly to a Nova image. Sorry. The newer Semantic backup tool does a better job is the advice there. So it removes your hardware and kind of knows how to, I guess, leave Windows in a state that it's going to, instead of assuming it's running on a bunch of stuff that's not there anymore, we'll go ahead and discover what it needs to do. So we've finished copying all our files to disk and we've rebooted and now we're at the point where we've got to make a decision and this decision is based on those, going back to those two use cases for what you're actually going to do with this image. If you're the operator and you want to make a generalized image that your users can boot up and then customize completely for their needs, you're going to go in one direction here. If you're the actual end user and you just want to, and then you're not going to be doing that, you just want to shove this thing into glance but you're comfortable creating local user accounts and doing these settings before you import it, you take another course and that course, that's the kind of course, and if you looked at the blog that's described there where we'd actually create a user account and we'd install the PV network drive, well I guess we're going to do that.  We're going to just go through the first approach now which is to create a more generalized image that we could then turn over to our end users and they can customize it how they want and because we're doing that we don't want to do stuff like create a local user account because that's going to be lingering in their image when they go and use it. So we're going to do what's called entering audit mode and to do that we need to enter a special key combination which is, oops did I do the wrong one? No that's not it. We need to enter a special key combination which I actually can't enter through VNC so I'm going to do it with the on-screen keyboard and that key combination I believe is control shift F3. That's right and thankfully it gets rid of the keyboard because we don't need that anymore. So what that's going to do instead of normally what would have happened there was we would have created a user and if this was a retail install of Windows we would have entered a license key, we would have set our time zones, set a number of other things and then gone and opened up remote desktop ports if we wanted to install the per-virtualized network driver and then shut the thing down and pushed it into glance. But instead we're going to enter what's called audit mode which means we kind of skip that user creation process and everything we do really any kind of customizations we make unless we're careful are going to get lost because at the very end of this experience, at the very end of this process we're going to tell Windows, generalize this image, remove the product key if it's a retail key, return it back to the kind of shrink wrap state. So when I kind of go back to this tool, this Windows system image manager, what this tool can let you do is again enable remote desktop, open up firewall ports and so on and the end result of that is what they call an answer file which is this XML file that has all these custom settings that you've given. And in order to use that file, actually first I'm going to go ahead and open up the device manager to enable to install the per-virtualized network driver. It's actually pretty snappy for a VM running in Toronto. We're going to need a browse, that CD is still plugged in there. I happen to know it's on the eDrive and then we found that right away. I was going to ask that nobody spams my machine but that's right, it's back in Toronto. So good luck. So now we have a network driver installed. One of the things that we can tell Sysprep to do in this generalization process is to persist the drivers and driver settings that we've installed. Incidentally one of the other things you can tell Sysprep to do through this answer file is set your IE home page to something other than MSN and not ask you to turn on suggested sites and so on. So that's kind of a bonus. You can get really creative, it's actually really complicated, really featureful tool. I'm just waiting for this to load up because I've gone and created an answer file that is not ideal but it'll at least work pretty well for the purpose of this demo.  So we've got our network driver installed, we've got our answer file pulled in and we're now ready to run Sysprep to generalize this image which means the next time that it boots up it's going to run through that whole out of box experience state again so that when somebody actually does a nova boot from this image what they're going to get is or normally would be that whole wizard. In my answer file I've changed it so it doesn't ask them 20 questions about time zones or anything like that but it's certainly possible or in general this Sysprep process is how you would do that. Get the help window up so we can see. So Sysprep if you remember when we first booted up this machine we're in audit mode and so Sysprep came up with that window asking us what sort of Sysprep we wanted to do because we're going to give it an answer file we need to run it from the command line. So we're going to generalize it. So this is typically one of the configuration settings in the answer files whether or not you want it to kind of rearm the system or wipe out the activation, any activation status that's been set. So I'm going to tell Sysprep to generalize the image to the next time we boot we want to go back to the out of box experience OOBE to shut down when it's done Syspreping and to use that answer file that I pulled down. So this will run through that answer file and then do all the Sysprepping and eventually this window will die. While we wait for that I'll just go back to the presentation. So I promised to talk a bit about storage. This is kind of one of the good bad and ugly parts. This is one of the ugly parts. This is actually a measurement I took this morning. I was curious to know how many Iops, how many input and output operations Windows 7 does when it's booting on a virtual environment. So this is actually a measurement taken from the compute host as Windows 7 is booting. So these are actual operations done to the storage device on the compute host between the time we set Nova boot and the time that we're actually able to log into the machine over remote desktop. It amounts to about 75,000 Iops which is, I mean just to give you kind of an example your typical enterprise class server hard drive spinny disk is probably capable of around 400 to 500 IO operations per second.  If you've booted Linux instances in Nova you kind of notice they come up really quickly and they don't take two and a half or three minutes, three minutes in this case and this is actually with an SSD. So that's what's known as the boot storm I guess. Actually the boot storm is commonly when you're booting up a number of these Windows VMs. So that 75,000 number goes to maybe 750,000 if you're booting 10 of them or 7.5 million IOps if you're booting 100 of them. There aren't too many mitigation strategies in the open stack realm for this. One is to, I guess there are really four, I've listed three. One is to just buy lots of very fast storage. The second is to boot your VMs very rarely or just don't boot so many, I guess would be option four. The third is to use something like live images. I don't want to make this a sales pitch for what we do. So I've just got one slide and I'll go through it real quick. What we do is we allow you to take a whole system state snapshot at the login screen or at whatever point the VM is ready to do work and then when you need new VMs you can spin those up from that snapshot from that live image and they just go ready direct to working. I can answer questions about that later or you can go buy a booth. I encourage that. So the idea behind live images or the snapshotting thing is that this is for more short-lived VMs and you typically be doing your Windows updates kind of before you create the snapshot and then maybe do that every Friday or every time you need to. No, not necessarily. A lot of that time. So it still takes, even on an SSD on our hardware which is pretty decent, it still takes about three minutes to boot that and our SSDs are capable of much more than 500 IOPS.  I guess it depends on how much time you have and how much money. But typically if you have SSDs they're not going to be saturated by a boot. The Windows will be using the SSD at times when it's booting but for the most part it will be pretty free. So I was going to talk a bit about integration with AD. I mean we don't, we just give the compute node SSDs and we just let it figure out what to schedule. So AD integration with, actually I guess we can go back to that VM, or actually that VM is now shut down and ready to be imported. So I'm going to go ahead and add it to glance. So this, we're at the point basically with that image where it's, I mean we're ready to put it into Nova and tell our users, hey you need Windows boot from this disk image. So that's pretty cool. Or we're waiting for that. I'll go into a little bit about Active Directory. So you can actually set up and you can set up unattended joins for Active Directory as part of your generalization, specialization process. You can do that with the unattended XML file. The problem there is that typically your Active Directory machines need to have unique machine names which means you actually need to bring them up, change the name and then, and do the domain join and then reboot them again. Because they should back up a bit. I mean kind of one of the, one of the things that's important to realize is that when we stuff this image in, in glance it either has no machine name, it has no computer name in the case of this generalized image that we've put in or it's got whatever computer, whatever name you've given it and if you've gone through that kind of more specialized approach. You can use stuff like cloud base init to actually use, use metadata boot time to tell the VM, hey this is going to be your unique machine name and here your, your Active Directory credentials. But the important thing to, the important thing is that you're probably looking at another reboot. The actual plumbing of the, of the Active Directory server stuff, you essentially just need to make it so that the VMs are able to resolve and, and contact your LDAP server. Yeah, right, right. I mean specifically, specifically, so in order to contact the DC, I mean there are two separate issues that can come up. One is that they won't actually be able to route to the, route to whatever port they need to on the DC. And the second is that they won't actually be able to resolve the DC because they're, and this, this issue is the same issue with key management servers as well that, that Windows has, has a special way of figuring out what are the addresses of the services that it needs to contact. And so it, it looks for these special DNS entries, they're called these serve records. We've had to, in, in some cases we've had to put the, the serve records, we've had to kind of replicate the serve records in our DNS mask configuration files in the cases where, in the cases where the VMs were using different kind of upstream DNS providers, or different upstream DNS servers. For the plumbing part, it, it does get tricky and it does depend on the, the configuration. I mean if you, yeah, in general you need to, you'll need to have some kind of tunneling or, or, you know, potentially use something like quantum to, to provide some kind of routable network so that the, you know, the VMs are able to do that, able to, to make those connections to the, the, the DC. We, we haven't actually had a use case for that, yeah, yeah. The question was have we, have we used, have we had success using floating, floating IPs with the system? Yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah. And we've had success using floating, floating IPs with the system. And we haven't, we haven't quite had a use case for that yet. So I think we can, okay, so we've got our image imported, and we can actually see it in glance now and I'll just bring this up for the first time. What it'll take, That will take about three minutes until all in all. I don't know. So on the topic of remote access, there's not really anything available. I mean, Citrix End Desktop doesn't really support, does not support OpenStack. VMware View doesn't support OpenStack. So you kind of love to more, I guess, less enterprise oriented solutions. The default solution is to just use the VNC console in Horizon, or to otherwise pipe a VNC session through to the Compute node and use VNC. VNC is kind of a, I don't know how to phrase this. There are probably better protocols out there. And I mean, even just the RDP server that comes with Windows is actually a much better protocol in terms of optimizing transmission and being able to route stuff like sound and so on. There are also some other kind of open access protocols out there that I would say that in most widespread uses is RDP. And especially when you're running Windows in a kind of a cloud environment, I'd say probably the niftiest solution is to run something like free RDPs, HTML5, RDP client. So you can set up your Windows instances, and then you can have another VM running this kind of RDP portal. And then all you need to do is point a web browser to it to actually log in. And it'll do the plumbing on the back end. This is, again, with reasonably fast hardware. But still, I've clocked it a few times, and it takes about 180 seconds. Are there any questions so far? Yeah. Right. It's widely regarded. So the question was, earlier when I installed the Paravirtualization drivers, why was it the Red Hat Paravirtualization driver? It's pretty widely regarded as being a stable PV driver, a stable Paravirtualized driver, or that pair, the storage and the network driver. We have to install it because we're giving the VM, we're not giving the VM emulated hardware. We're not kind of plugging in these devices that are acting like network cards or storage devices. We're kind of exposing a more raw Paravirtualized interface to them. So Paravirtualized means that the operating system kind of knows that it's a virtualized device, that it's not an actual real piece of hardware. So it's not going to do all the initialization and stuff that it would do. So it's not fake hardware. It's nothing that actually looks like hardware. It's just a kind of defined interface. And when we installed those drivers in the VM, what we were doing was giving the operating system a way of talking to that defined interface. That's right, that's right. All that part is abstracted out because that network driver that we gave it is just a piece of software. And on the other side, on the actual Nova KVM side of things, we also know it's just a piece of software. And the hypervisor is going to take care of making use of kind of taking whatever traffic comes out or whatever disk requests that come out of that and doing the appropriate thing with them. Absolutely, absolutely. For the most part, no. And in fact, you'd use those same Windows 7 drivers. Yeah, Windows 7 and 2008 are very similar in terms of operating in an open stack environment. So our VM is ostensibly up. And we'll just go ahead and log in. So the single dialogue that we still have to do is choose the network type. And we now have Windows instance running in open stack. I'm going to just open it up to questions. That's really all I had for this session. So if there are any questions from the crowd. So one of the things I plugged into that answer file was an administrative password. So you can do that. The alternative would have been if we wanted to let the user set that up that whoever can log into the VNC console would just go through that create user account process that would normally come up. So in this case, as I said, we wouldn't use the answer file that I used in production for reasons like that. But otherwise, this image, let me bring it back here. So this image, we can reboot it. Some of the things we can do, actually, through RDP, we can't reboot it. But if we went into the VNC console, we could reboot it. Or if we issued the appropriate PowerShell command. So if I make changes to this instance and then I reboot it, say, because I ran Windows update, would those changes be lost? The answer is no. You can make changes to this image. You can reboot it as many times as you want. The only thing is that if you Nova delete the image, then you will lose the changes. So if we go to Nova and say, delete this server, delete this VM, then we'll lose everything we've done. One of the things you can do that seems to work is create a disk image from this VM using the Nova image create command. And that'll attempt to create an image containing all the changes we made that we can then boot other machines off of later. Windows 8 and Windows 2012, yeah, in general, yeah, with forks, yeah. And the PV drivers are already available for those as well, so you can run through basically the same process. Sorry, I'll take your question. So at this point, if you'd set the machine up exactly as I have, the first thing I would probably do is change the administrator password or disable the administrator account and start creating users through that. There's a snap-in that you can go and create new users and so on from. So there is also, if you use the cloud base in it, you may have user creation functionality, but I believe it's only one user you can create. And I'm not sure if I guess you can actually choose which local group to put them in. So you can define an administrator user. And then when you boot the machine, so Nova creates an admin password for every VM, it'll plug that in. And the cloud base in it will be able to take that and insert that password as that user's password. I mean, everything else, you're probably looking at something like custom scripts to do that or right, right, right, right, exactly, exactly. I'll be putting those up. I think there's going to be a slide share for all the presentations here at the summit, at least there was last summit. And so those will be up, I would guess, later on this afternoon or tomorrow. And I'll definitely, and I have some references and links to some other. The question was how to get the slides. These will be uploaded, I think, to the summit-wide slide deck repository later. Absolutely. So if you don't want to type all this in, you can just go to gridcentric.com slash blog, and it's the first entry. Sorry, you had a question as well. I just want to see your contact info. Oh, sure. I'm Tim Smith. Whoops. And let me throw that up bigger. You can email me or tweet me. We've got a booth. I guess today's the last day of the summit. And I think the expo hall's going to close at two. But we do have a booth there. If you want to come by and ask us more, the cloud-based guys are right around the corner from us. So you can ask them about cloud-based init and many other things as well. Any more questions? Yes. So that was something I meant to ask the cloud-based init guys before the talk. And I just didn't have time. So the question was have I tried to use cloud-based init with sysprep? I'm going to guess that there is a way to construct an answer file such that at the very least it will install cloud-based init. I don't know if you just installed cloud. If we installed it during that audit mode step, would it actually persist? And would the appropriate keys persist to the next reboot? But I would imagine the answer is that there is definitely some way to do that. Exactly. So this is one of the issues with the generalize is that at some point you need to kind of bring it up and then change the name and then join the domain and go through another reboot and so on. Yeah. Sorry? At least three reboots? Yeah. Apparently there are ways to hack it so that you don't have to or so you can consolidate that into one reboot. Yeah. We haven't personally. But so the cloud-based guys, that's their specialty. If you're trying to run an OpenStack on Hyper-V, they know all the nuts and bolts of that. So there are no more questions. I think we'll pack up. Oh, yeah. If I have any thoughts about OpenStack and Windows HPC, absolutely. I mean, typically HPC users are very fond of virtualization in general. That's been my experience at least. I know that's kind of changing. If the use case is we want to use OpenStack to be able to spin up quickly Windows HPC instances, it's not going to be the quickest thing in the world, but I guess it would be faster than installing them on bare metal. So that would probably be a use case for this. And as far as I know, the kind of general installation process for HPC, the drivers, and so on and so forth would go about exactly the same. The one shortcoming right now is that it's hard to get kind of virtualization aware hardware plumbed up to the VM layer right now in OpenStack. And I don't know if that's something that's being actively worked on. But for example, a lot of times when you're running HPC applications on virtualization, you want to take advantage of the SRIOV stuff in your network card or your Infiniband card. And that's not really, as far as I know, that's not really a supported use case right now. OK, if there are no more questions, I'm going to pack up and head to lunch. Thanks for coming, guys.


Welcome everybody. My name is Mark Nesbitt. We've had a schedule issue where we've lost our next speaker So I was asked to come up here and give a talk that I I've happened to have ready So I'm going to explain to you my take on the question. What is Bitcoin? Before I begin I'm going to tell you a little bit about myself again. My name is Mark Nesbitt I'm an application security engineer at Coinbase The application security team is focused on securing our code base. So we provide engineering support and My specific role supports the crypto engineering teams So that supports our wallet infrastructure our node infrastructure, and I also spend a lot of time and effort reviewing and providing risk mitigations for different new cryptocurrencies that we're going to support on our platform This talk is geared towards non-technical audiences about how to think about Bitcoin and we'll introduce fundamental concepts about Bitcoin and how it works and by extension other Cryptocurrencies, but I'll focus on Bitcoin. I'm happy to take any questions at the end. So the question. What is Bitcoin? I'm going to provide a definition up front and we'll spend the rest of the time unpacking that definition and making sure we understand the parts of it Bitcoin is a protocol for producing a unique permissionless transaction history So we're going to break it down Bitcoin. It's a protocol. There's one one component It produces a transaction history We'll talk about what that means and the characteristics of this transaction history are that it's unique and permissionless I like to diagram sentences. It helps me understand them. So we'll start here Bitcoin is a protocol What is a protocol protocols exist everywhere a protocol is nothing more than a procedure When it comes to computers a protocol can be thought of as a language spoken by computers participating in the protocol But you can think about protocols as existing outside of computers as well when you drive on the roads You're following the US laws of driving. That's a protocol you yield if you're turning left to oncoming traffic those sorts of Rules are all part of the driving protocol in the United States Bitcoin is an open protocol. That means everyone knows the protocol. It's not hidden The code is open source Multiple implementations of this protocol exist So many people have written code that conforms with this protocol and anyone can create their own implementation because of that Okay, so Bitcoin is a protocol simple enough set of rules. It's a system. What does the protocol do? It produces a transaction history We'll talk about what that means Transaction histories also exists everywhere. You're also familiar with this concept Your bank account has a personal transaction history the transactions you individually have done PayPal maintains a transaction history for all of its customers. You can think of your own It's just a filtered version of this master transaction history a Payment systems transaction history will define all the account balances on that system It's also worth noting there's an infinite number of possible transaction histories in any particular system There's also a need to enforce the validity rule So there you can think about there being two classes of Possible transaction history is one that is valid and that's within a much larger set That's invalid but think about the the need to distinguish between validity and then the think about the need to distinguish between Sorry, let me correct what I said think about the need to distinguish between a valid and an invalid transaction history And then also the need to distinguish between valid histories So an example of an invalid transaction history will be someone sends a transaction where they don't have the funds That's clearly invalid But within valid transaction histories There's an infinite number of possible histories that could have been the history That we have of transactions, but aren't so there's there has to be one But there's an infinite number of possibilities and we're going to talk more about that So just think about a transaction history history of people sending a to be this much value Now we're going to talk about the fact that this is a unique and permissionless transaction history This is where things get interesting It's worth noting though these two characteristics neither of them are very special on their own Remember I said there's an infinite number of transaction histories within any system and within any system Therefore uniqueness is a requirement for anyone that's going to function For instance PayPal has a unique transaction history. They've defined it. They're the arbiters If you didn't have a uniqueness this uniqueness characteristic double spends would be possible because I could present one Transaction history to you where I paid you and another to someone else where I paid them with the same funds And I was able to get two things for the same money So uniqueness isn't all that special on its own Permissionless is a little more interesting permissionless transaction histories exist any time that a transaction system doesn't have a controlling authority Certain physical transaction systems such as gold or precious items actually fit this description Uniqueness if it's physical It only exists in one place at any given time. You can't Create multiple transaction histories when you're dealing with passing around physical objects Permissionless if you physically possess an item, it's difficult to prevent you from transferring it Perhaps it could be made illegal, but there is no central authority that controls the system Bitcoin accomplishes this digitally many people call Bitcoin digital gold and this is why We're gonna talk about how this is possible. This is the part that introduces Few technical concepts so you can understand Why? Bitcoin is able to accomplish this system of being a unique permissionless transaction history The uniqueness is accomplished through a system of proof of work also called mining The permissionless nature is derived from Bitcoin's use of public key cryptography We're gonna start with the permissionless nature and cover public key cryptography first public key cryptography Revolves around having two secret numbers called a key pair one is a private key and one is a public key You derive the public key from the private key and you cannot derive the private key from the public key You can think about an account number in Bitcoin is when bitcoins are assigned to a public key The corresponding private key to that account will allow you to authorize sends from it Remember the private key is derived first From randomness and then you take that number and you can derive a public key And once you have the public key you cannot redrive the private key So you can take this public key and spread it everywhere and use it as your account number and say hey Send bitcoins here if you want to pay me and as many people as as there are who want to pay you can do that And then you can use that private key as many times as you want to send those payments along to wherever you want to without compromising anything about that private key So This this slide this slide summarizes what I just said the transaction is assignment of bitcoins to a new public key And you have to authorize that with the use of the private key of the previously assigned address This authorizations called a digital signature and it doesn't reveal the value of the private key so you can do it repeatedly Let's imagine a visualization of a transaction here suppose There are some bitcoins that are assigned to Alice's public key That's a just a more complicated way of saying Alice has bitcoins But let's think about it this way as them being assigned to her public key She wants to pay Bob for something what she's going to do is form a transaction where she says here's my public key Here's how many bitcoins I want to send to Bob and here's Bob's public key And then what she'll do is she will sign it with the private key associated with the orange box The public key that she has and that you can we can think of that as the transaction as the authorization of payment transfer Bob could do the same he could pass it along to Carol He has a public key that has a private key Carol provides her public key to Bob And he'll do the same thing sign it with his private key and that's authorizing a transaction To to map it a little bit more to exactly how it works with Bitcoin suppose Alice has 50 Bitcoin at a public key She'll create outputs in a transaction Maybe one Bitcoin to Bob and 49 has changed to another public key to her own public key to the original public key wherever she wants And she will sign it with her private key and Likewise, she can spend that 49 change as one to Carol and 48 back change to herself And Bob can split his up 50 50 back to Carol back to himself And you notice as they sign the balances on the right We can consider those to change for the time being when they authorize it with their digital signatures And the Bitcoin ledger is the result of all the transactions now remember The point of this segment here is about the permissionless nature of this transaction history Bitcoin it's a protocol for producing a unique permit permissionless transaction history Why is it permissionless because of public key cryptography? No one can stop you from creating and using your keys Your private key is nothing more than a long number that you created on your own Randomly and the public key derives from it. You don't need to go get an account number You don't need to sign up anywhere. This is the permissionless nature of Bitcoin Remember I said that the transaction history created by the Bitcoin protocol is unique and permissionless So now let's turn to the unique nature that comes from proof of work. That's the system that secures the network It's called mining in order for this transaction history to be functional. Everyone must agree on a single history The validity rules of that history like I talked about before sending money that doesn't exist can be defined as part of the protocol as Computers that are talking along this protocol communicating with each other They won't accept transactions that don't that don't meet these validity rules But the complicated thing is that they're an infinite number of valid histories I could send you money. You could send it back to me We could do that for as many times as we want I could have sent it to another person over here and both of those would have been valid They couldn't have been valid together, but on their own they might have been so that's why we need to achieve this uniqueness property This history can't come from a central authority without the loss of the permissionless component in the system when it comes to PayPal It's unique because PayPal says it's unique same with your bank How can we do something permissionless? The way this is done is by bundling transactions into batches called blocks The transactions contained in the series of blocks, which is known as the blockchain Defines the canonical history so we could think of this data structure down here where there's a transaction that we recognized from before Authorized by Alice's private key which is stored in this block and we chain these blocks together in batches But we still kind of have the same problem many different blocks are possible How do we agree on the unique transaction history for instance? What if someone came in and modified the history I'll Dan Dan says he wants this Bitcoin How are we supposed to distinguish between the transaction history where this where this was sent to Dan versus the transaction where it was sent to Bob? The way we're going to be able to do this is with proof of work and that means we're going to make valid blocks difficult to produce It seems like it doesn't really solve the problem But it does if valid blocks are difficult to produce We can introduce a new rule that says the longest series of blocks is the transaction history the unique transaction history now we have a length we have a Something that can be well ordered and we pick the longest one That is going to make a unique history that is very difficult to change We're going to talk about what makes blocks difficult to produce This is because Bitcoin uses a cryptographic function known as a hash function A hash function. This is just an example here for illustrative purposes But it has these characteristics listed at the bottom. The output does not resemble the input notice how the first two are Very similar. There's just a one instead of a zero in that final digits place and the output of the first two are entirely different Second characteristic the output is deterministic every time you run the hash function on the same input you always get the same output The smallest input change completely changes the output the first two illustrate that point as well It can't ingest any amount of data and any kind of data So it can ingest a string anything that you can represent the hash function Will operate on and it cannot be reversed once you have the numbers on the right You're never going to know which numbers on the left produce them So imagine we had a situation Where are you looking to get a specific type of output from the hash function and we had our data And then we use this wild cards where we iterate through different numbers multiple times and we hash it each time We're going to get completely different results every time because the outputs are completely unpredictable It's essentially like a random number generator and eventually we're going to get an output that for instance might have a large number of leading zeros If you see something like that and someone provides you a data and wild card 5 and You can do the hash function the hash function is open source It's deterministic so you will get the same output with all those leading number of zeros The only logical thing to conclude is they must have tried a large number of wild cards before they could get this leading number of zeros If someone wants to prove that they worked hard to find the wild card, that's easy to do It's easy for me to verify that. I don't have to check all of the wild cards that they did I only have to check the one that they claim is the solution It's proof that they did a lot of work You can also chain hash functions together by using the output of one in the input of another So in this case we hash data one and we get some output And if we concatenate it with another set of data, we'll get a different output and we can continue this in a chain and These we call this a chain because the links are bound in extricably Inextricably to one another because of the properties of the hash function if we change data one It will change the output of data one Which means it'll change the input to the second hash function It'll change the output and all of the chain is broken when just a little bit of data gets changed Now let's combine these two concepts of proof of work and finding a wild card with chaining together hash functions In the case of data one we have a large number of leading zeros on the output So we can be confident that someone did a lot of work to create that if we use that as the input to the second hash function We can still create this chain, but in this case We know that a lot of work was put into creating this chain It means that it's hard to change a block that maybe is only one or two away from the most recent And it makes it nearly impossible to change a block once it gets buried deep enough in this repeated iteration of work and hash chaining So the way it works with Bitcoin is you bundle transactions remember transactions are someone authorizing a payment from one public key To another with their digital signature. We bundle those into a data structure called a block and then we iterate through a wild card and then eventually We're going to discover a wild card where the hash of all the block information along with the wild card is Underneath a certain difficulty threshold It's only going to be a valid block if it is underneath this threshold and then We can say that we have mined that block and the miner can share it with the rest of the network The rest of the network has all the other blocks already They can verify that this chains to the most recent block They can verify that it's underneath the required difficulty which is a which is a parameter that's calculated from the other blocks and thereby the network can accept that this block extends the chain and adds to the canonical transaction history, so We're trying to get uniqueness How can we get uniqueness we do it by making valid blocks difficult to produce and then adding a rule that the longest series of blocks Is this transaction history the unique one and because of the proof-of-work mechanism that makes it very difficult to change this history of Transactions, so anyone transacting in this system can be confident that if they receive the transaction That is in the canonical history and it will be there when they look again So to recap the two key characteristics that I want to leave you with about the Bitcoin network is the uniqueness and permissionless nature of It's transaction history, so again Bitcoin it's a protocol for producing a unique and permissionless transaction history You're gonna leave with a little bit of why I think this is interesting Sounds kind of boring when I put it this way. I Like to think of Bitcoin is kind of like a virus Maybe a strange way to describe it. It sounds like a criticism or an insult, but it's not It means that it is a system that has escaped the lab and is continuing to move Under the incentive structure that it's creating the same way a virus can propagate This transaction history is valuable to people people find it desirable to be able to Interact with a unique permissionless transaction history and the incentives of the system cause people to mine more blocks and cause that transaction history to continue to extend itself I Like to think about Bitcoin as being similar to the printing press in the same way that ideas Were controlled by the halls of power of the people who are educated before the printing press came along and the printing press democratized the ability to access literature and writing Hopefully Bitcoin will do the same for money because you don't need to go through intermediaries You don't have to sign up for account the permissionless unique transaction history Will democratize finance for many people in the future Thank you that concludes my talk does anyone have any questions anyone Is that one? Yeah, go ahead. No worries. Yeah Yeah, yeah, they don't teach sentence diagramming in school anymore, so I kind of made that one up. It works for me. Yeah Okay Well, I'll be around if anyone wants to come talk to me any other anyone else with a question. I mentioned proof of work. Yes What's that? Yeah, so Other consensus mechanisms work differently, so the The part here about this longest series of blocks being the transaction history is sort of it's this rule That was added once we decided we're going to make valid blocks difficult to produce and that's sort of how the consensus mechanism works but there can be other ways of achieving consensus and a lot of more recent crypto currencies are experimenting with ways to do this When I say blocks are difficult to produce they're very difficult to produce Mining is very energy intensive. That's something a lot of people have been able to read about in the media It's something that gets covered a lot So there are downsides to this and a lot of people are working on on potential alternatives to to this type of situation and The hope that is that they can produce a unique permissionless transaction history in a different way right now This is the one that's operational and working and it's been working very well for Bitcoin All right, well, I'll be around if anyone wants to ask any other questions. Thank you for your attention


Okay, so today, actually it's been several years I haven't talked in this conference. This time I'm going to introduce a scheme that's to our online solution. It's not developed by me, but I'm interested by the developer to demo this to you. So the story starts from here. The story starts from here. In 2015, Taiwan's government started to migrate to ODF. This is the first time I come to the divorce conference. Okay, this is the... I'll just clip it now, yeah, but I think... Okay, so we generate, we customize a national version called NDC ODF application tools. That's customized from LibreOffice. This one is our local developer. They also customize, okay? And then in last year, we have a new developer, a new development in government called the MODA Ministry of Digital Affairs. It's what we call the MODA. MODA in Taiwanese means engine. They wish to be the push the Taiwan to go through this way. So the newest version this year is customized from LibreOffice 7.5 and the source code is here. Everything they customize, the source code is open, okay? Besides this type of version, there's also online version. This is these three or four years, especially after the pandemic starts, this request is a lot more. So we also have a MODA version online, okay? It is basically customized from the developer OX Office online and it is also customized from LibreOffice online. And the source is still here. When you got my slides, you can connect to there to see. And besides online solution, this part, ODF web, this part is the next cloud part. Of course, we have also some customization for next cloud. So since we have ODF, there are a lot of new features, new requests. For example, this one, this one is a talk I gave in Boston. That is because in our government, we have many systems and they will generate reports, but they are mostly in Microsoft format and sometimes in weird Microsoft format. For example, the extension is XLS, but actually HTML, something like that. But then the government asked them to generate ODF format reports. But the system is there. The system does not provide that. So our long development is kind of API server. And for the service for the server part, they don't need to change the code. They just need to call the API server and give him a template. They will generate the ODF report they need. This is where they don't need to change their own solution, but still can generate ODF reports. So in 2019, I gave a demo in Boston. But that's just one. Another is like this. This is a preview, the document preview. Actually, this request is not from government, it's from one of their business customer. Okay, later I will demo something like that for you. Yeah, okay, this is for review. And actually, it is not used on the online instance. It is used for, for example, other service like WebMail, where WebMail has an attachment of ODF file. They can directly call the online instance to give a review to that. So that is also a new request. Anyway, they have quite a few feature requests. But then they found a serious problem that when they try to implement those requests, they have to sometimes to change some part of the core. And also if the upstream changes something in the core, that might break the implemented feature. So that's the problem they are facing. So they are thinking about if there is a way to easily develop new features without breaking the core. So that is what it comes out of. Okay, the module scheme. So first is you just use a module maker to generate an empty module and then we can implement our features. Right now, I'm giving you a lifetime. Okay, this is why I have already run a testing instance here. And now I just need to do this. This is the command I need to use. I just give him some argument. Give him some argument. So I directed wrong that it will generate a git repository of this module. So now what I'm doing is just to implement that. We just borrow the draw.io from end code. So I already downloaded that. This is the code from the GitHub. So I directly borrowed that. I just copy it from end code into our module. And then I simply change the request because so far in the demo code, the request is directly sending you an HTTP OK. So I simply use to handle by the base class. Now it's comparing time. The code is pretty simple, so it won't take too long. And then I just run it on the instance. Okay. Finally, ta-da. I'm calling the instance its module and the file is here. That's all. Okay, that's all. But this is, of course, this is the final part. We also need to handle the backend part. That's to send the SVG file into the audio file. That's another part, but generating a simple module is pretty simple, just like that. Okay. So we have already developed a few useful modules. For example, this one much ODF is what I said, a server-side solution to generate ODF reports. They originally implemented it directly on the online source code, but then they used the module scheme to develop a module. So the code is pretty clean. Just call the module that you can do. And the list table, let's see this is from the request from our educational department. That is, they will have some table on the HTML and they can directly build it into a spreadsheet. Oh, this one preview is pretty interesting. This is the backend admin. And here, I can give it... Here we can try this module. For example, I put the date here. This is for watermark. Day and time. And I select file. And this is the effect. And this means when you preview that, you cannot download it. You cannot print it. You cannot copy that anywhere like that. So I just send it out. And this is a review. This preview is used to... For example, I just said one of the big customers, they have their own cloud solution. And they use... Have their own web mail or mail service. So this one is used when they... When the mail has the ODF attachment in it, they can directly call that to preview. And you can see... I don't know if it's not very clear or rather the preview... The watermark is not very clear here, but it is there. So this is some of the useful modules we already have. So right now the source code is open. For this case, it's open. And so far the problem we have is... We actually don't know because maybe because it hasn't been used for large scale. We have a few modules but we need more. Also for one single module, maybe we need more users online concurrently to test that. So anyway, we need more people. If you are interested in that, we need more one to join us. And one thing we are talking about is to dynamically load the module. Right now, if we develop a module or install a module, we need to restart the online instance. But we are thinking about a way to dynamically load that without restarting the instance. Okay? So for the future, maybe... Right now, we can develop a module using C++ and HTML, but we are also thinking about if we can put PHP interpreter or Python interpreter inside that so that we can develop a module using PHP or Python. That's what we are thinking about. So if you are interested, of course, welcome to join us. And this one is that the online part is not only the office part, but also the next cloud, right? So what they are doing now is... I've found several customers, they are doing now is to integrate other online services, online... other online services into the solution, into a solution. So maybe there will be more ideas to generate a module or anywhere in the integration. So that's the future. So that's it. We have now... We have some simple document, but of course, we have a mailing list running by mailman. So you can join us... That's the code, sorry. What I want to say is this. We have a mailing list, so you can join the mailing list and start to discuss with us. And the code is here, so you can try to contribute to that if you are interested. So since we have already wasted many time just to install that, so I think that's it.


What's up, everybody? I'm the Mangus. You are awesome, and I'll have some Lea gameplay for you today. Lea is the flying jungler of ethereal. She could be played solo lane as well, but I prefer to jungle with her. Before we get into the gameplay, I'll explain Lea's abilities. First off, yes, she can fly. You do have a stamina bar so you can't fly infinitely, and you also can't fly when in combat. Her passive works a bit like Crunch's passive from Paragon. Every fifth ability you cast will be empowered and add some bonus effects. I don't really make great use of it during this game. I think they need to lower that count. Usually by the time you cast like five abilities, either you or the target is dead. Her first ability is Galebound Thrust. This is a simple straight-line melee thrust with the Trident. When it's empowered, it hits twice. Next is Sacred Plumage.  If it's empowered, they will heal you and any allies around you. Her bread-and-butter ability is Crashing Dive. I think it's called Graceful Glide Crashing Dive, but I'm just going to call it Crashing Dive. This works like Sarath's Asin.  This is the only ability you can, well, no, you can use her risk-reward ability, but this is the only like effective ability you can use while you're flying. When you're empowered, you move faster and get a shield for everyone hit by it. Her ultimate, Windstorm, sends out a tornado that boomerangs back to you. The first hit knocks people up, the second knocks them forward. It also does a surprising amount of damage. Her risk-reward ability is a pretty simple speed boost, but you take double damage while it's active. If you're interested in trying a theory for yourself, they'll be having an open weekend on the 21st through the 23rd. All you have to do is create an account on undyinggames.com during the test and you can play. Fair warning though, this game is still pre-alpha, so expect some bugs and glitches. Like the video if you enjoy it, subscribe for more third-person MOBA content, but for now, let's get into the gameplay. I got two people on me in my lane because they're like, oh yeah, let's uh... Hey look, share your screen instead so it's less laggy. Yeah, I'm sharing it. What, mine's lagging? It's a little bit of frame drop, it's not bad, it's enough. Oh yeah, thank you for reminding me. Right, full screen. It's off, I'm looking for it. Ah, okay. Alright. Right. Oh that's all, I'm at 150 FPS. Share your screen instead of the game, I rather have FPS than audio. Okay. Yeah, it's actually a lot better. Bam, that does a lot of damage, the freaking meatball, it's not as bad as Vulcan meatball. But it does some damage. It hurts, it hurts. I'm not too sure about the rotation on this game, if you just swing your mouse around, the character looks a bit weird. Alright, it took ice. Is there elastic counter anywhere on my screen so I know? Uh, I think that's the number above your icon in the lower left, like where mine says 91. Oh yeah. Oh yeah, oh yeah, and you count it. Oh my god, the Russian. Save him. Just held her in place. Thank you. That was so mean. That was a little mean. I like, I like this character, I think I found my character, I think I found my main. I, that's it. Yeah, I thought that was like, it's a ball or something. Yeah, no, no, that should just be like a season. Yeah, I see it's like doing extra damage to the tower. That's neat. By the way, if you like cider, Newton's folly. I'm drinking one right now, it's actually pretty good. Oh, I've got two AFKs in my game. Oh, no. Oh, what? I wanted to play Dante, he's one of the AFK people. You got 2,000 gold. Okay, now you're good. I just, I just spent it. Yeah, give it a bit. Yep, there we go. So now I got the start of my cloak that gives me some magic resistance and magic power. I wouldn't mess with that. Back up, back up. I've been fine. I have enough tank. Like I have enough sustain. Where is she going? She just went off into the jungle. Yeah, she's. They give up, they give up. Fucking, yeah. This is what happens when you leave.  And he got some kills. I got them both. I just two people went and stole away. You should go mid lane and kill him. And then you should win the game after that. You don't even know what I'm doing. Oh, it doesn't show me their names. No, it shows you the levels though. Oh, wait, Malaya. Well, no, no. I mean the player names. Oh, okay. I'm going to take ice. I wanted to see if I was fighting maybe. I don't think anybody from UG is in this match. Hey, one of you's come to my screen. I want to see if this UI is supposed to be like that. Let me see. All right, let me see. So on top of my abilities, I've got massive icon. That's a bit small. I can't spend it before I go to right. Okay, that's your ultra-wide look messing it up. Oh my God. Look, I did all that damage already. I took a picture of that one. I can tell what I'm telling that ultra-wide. We need to sort it out. Now she's in priority, but. Kill her again. Did you see that? Oh my goodness. I'm just bullying this poor girl. I'm so sorry. I am so sorry.  I have $2,800. But I'm just going to back literally in lane.  All right. Um, yeah, this thing. Mage Slayer's cloak. Oh yeah. Yeah, yeah, I want that. Give me that. Eventually get the dragon, Samuel. That thing. Dragonheart. It's called Dragonheart. Telos is in here with us, right? Whoever's playing Telos? No. No, it's just, I'm running another game. Yeah. Oh yeah, no, no. I'm the R on this chick so hard. I have six kills and zero deaths. F2L is a very weird button for an ultimate. Dude, I changed all my keys and I took the dude's advice and put all the level ups on just like F1 through 5. Yeah, mages can teleport, right? But they have to set it up first. Is that right? Oh yeah. Yeah, it's kind of like... The past two, the past two of the claws, just like I was standing on and she just TPed away. Got her. Nice, nice, nice. Oh, so there's three towers before you get to the inhibitor. Yeah, yeah. That's a weird choice. All right. All right, Ruby Necklace. Let me take that. So let's just keep sieging left or do you guys need help in mid? I'm kind of like... I'm almost at the inhibitor. Like this Marina... Yeah, she's level 11. I'm level 16. I've been bullying her hard 8-0 and 1-4-0. Yeah, yeah, we're... I've been kind of chilling too, like not even ganking that much. All right, I'm on fire. Probably need to. I can... Can you solo it? Oh god, yeah. Music does not seem fitting right now because it's like so calm and relaxing. Yeah, I know, right? Do they have the day-night cycle up yet? No, they're not yet. I thought they were going to have the map changes in by now too, but... What's wrong with the map? Hey, look, I just broke through a rock. I saw that. You want the buff? Uh, no, no, no. I'm going to head over to Ice Wyvern. All right, all right, I'll take it then. All five enemies are just on my lane. Staying in a region here. What? Oh yeah, they're trying to death ball. Does that work? I know in some games it works, like death ball and like... Usually it... Usually turns into a mid lane death ball after a while on this one. All their towers in fire are gone. Now we just got to get the in-hit. Oh, he got the ice though. This might be my first death. Coming hard mid. Okay, I think I managed to get away. I managed to get away. My fear came up at like a very good time. All right, I'm just going to walk back to base to get my items. I have like 4,000 gold. We have like one ASK. Oh, Jesus. I'm winning. Yeah, did you notice that? Oh my god.  Oh, we got everybody in mid. We should rotate to a truck.   Unfortunately, I cannot communicate my intentions to the team. And I don't know if I can solo a tropus or not. I guess we'll find out. She was smart. She climbed up a wall that I couldn't get to and then backed on top of it. She almost died.  What gives you more gold is the melee or the range minions? The, um, um... Usually long-gives you armor, I'm not sure. The big, fat siege minion gives the most. Yeah, but usually... The range and melee just give the same. Oh. I don't know. Oh, I'd have to check. But usually they give the same, at least. I don't know. Smite, they give... I think it's the archer minions give you more. No, no, league archer minions give you more. And, uh, smite, the melee minions give you more. Okay. And I think in Paragon, the melee minions give you more on that one as well. Hey, I just got the fireweaver and buff for us permanently. Cool. And I've got the, um, atropos buff, so we should be able to just push for the win. Yep. I already got your inhibitor on fire, so... Is there not a surrender button in this game? Oh. No, not either. Um, um, the keybinds are there, but I don't think it's working. Oh, yeah. This area gives me, like, 45 fps, but it's still manageable. Oh. I died to the, uh, inhibitor damage. Yeah, don't mind me. I'm just, uh, taking middle inhibitor. 4,200 gold. I won't get a chance to send it. Hey! They just ignored me. I don't know why they ignored me. Oh, man, I got a P. I'll be right back. Yeah, yeah, go for it. Mangooos!