So we're going to take a look at POPOS, a step forwarding user experience. I kind of like that slogan because, well, after using it for a week, I really feel that way about POPOS. And we're going to talk specifically about the 18.04 version. That's the latest version that's out right here in May of 2018. It comes in a couple flavors here. We got the Intel AMD and the Nvidia flavor. Now if you're not familiar with how this works, if you're not new to Linux and you're wanting to try this out and you're going, which one's for me? Well, do you have an Nvidia graphics card? Do you want all the full features that come with the proprietary and Linux, Nvidia driver on Linux? Well, you download the Nvidia version, which is what I actually downloaded from my desktop because I have an GTX 760 card. And out of the box, it supported all the features of the card. Do you want to load the driver separately or you're fine with whatever open source drivers you can get? You can download the Intel AMD one or, for example, for my laptop, which is a low powered I5 IBM X250. I'll download the Intel AMD distro, which doesn't have the Nvidia drivers set up by default and it works perfectly fine on my laptop. So those are the two spins that they have on there and I thought this was really convenient because a lot of times you have to do, if you're in my situation with my video card is you load Linux and then you deal with the less than great graphics driver it may have and then you load the extra driver and say yes a lot. Being able to do that right out of the box, really a great feature that they had here. Now, System76, who are they? They're a custom builder of really nice laptops, desktops and servers that were designed for Linux and they ship them directly with Linux on there.  When you get them, they come shipped with Linux and no Windows on them at all. Matter of fact, the question would be, will they even run Windows? I don't know. I don't even know if anyone's even tried. I don't know. It's not real relevant. Now, is it just a re-spin of Ubuntu? No, and we'll talk about that right here. I like what they had in this opening line. So we build PopOS with the philosophy of sticking to upstream decisions by default, but deviating when it provides a better experience for our customers and users. Our decisions around user experience are informed over a decade of selling Linux computers and listening to our customers feedback. Now, something I like about the way PopOS works, in case you're wondering, I'm not running a system by System76, but I am running PopOS and I've loaded PopOS on my IBM laptop. They're not saying you only can run this on their system. And I like that a lot that they're like really throwing it out there that they want to make a better Linux to show. And this is something really important because I didn't want it to be something you only get with theirs. I was worried when I first heard they were doing this, that they were going to do something like that. I mean, seemed unlikely, but you just want to clarify that. They are very open. It is all open source. It is all posted on GitHub. They're very open about the entire process, their design process. And everything that's included in here. So right here, there's the GitHub link. And you can see everything that System76 does. So anyone's wondering, all this stuff is on here. And of course, they do a lot of general contribution back to the open source community. It's been really nice running this operating system. So let's go ahead and walk you through the install real quick. I'm not going to run through the installer as a video because it's just too clean. And it doesn't really, it's so next. And yes, it's not worth the time to set this up. Just to do the demo. It literally is pop it in at a bootable USB, download the ISO. Next, yes, click install pop OS, erase the hard drive, choose the password to fully, to fully encrypt your hard drive because it does support drive encryption. If you choose a weak password, it'll give you a warning. You if you're going to bother encrypting a drive, at least don't make the password password. Then go ahead, extract files, something not in here. But I thought this is cool. If you click this little button right here, it shows you why the hard drive thrashing. It tells you everything that's being installed. I thought that's kind of cool. So you can either stare at this rocket while it goes across or click that. And done, restart device and you're in. Now, once you're in, let's get this out of the way and show you what you're presented with. I did customize the background, which you can change the background theme. It has a handful of pictures built in. So if you go to backgrounds, they have some of the system 76 ones. I think this is the one that comes by default.  So I changed that. So right here's what, you know, the first screen when you boot up, minus the background, you have your activities up here. You're standard. If you're used to the gnome environment, it's very standard gnome like they've done a few shortcuts and things like that to make things different. We'll cover the keyboard shortcuts in just a second because that's something I really like. And I think they did a great job on. So I have Firefox here file manager and we have the pop shop. I already added Chrome and shutter and a couple of things I pinned here. The pop shop is somewhere. If you're new to Linux, this is really nice. Now, I don't use a lot of these stores that are built in, but this is something that's really becoming more popular and windows people are getting more familiar with what an app store is. Now, this has been around for a long time in the Linux world where, especially in the, in the WN based distributions that use apt, you can apt get install whatever application you want. That is how I still do things, but I'm a long time seasoned veteran of Linux for new users that can be a little bit daunting. They're going, I'm not used to opening up the command line. I don't know what to type when I get there. Well, if you're not sure what to do, just pop this open and you can go, I want to find an audio application and they have a list of them here. They have internet applications. So if you want to load things, they have science and engineering, graphics, games. A lot of people want to play some of the games in here. And what this is, is this is the pop shop as a curated list of things that are on, that you can load into the system with just a quick click. So if we go here systems and you find the thing you're looking for, you just click it and away you go. And I'll give you an example of that. So like here's G Smart Control, the hard drive in tool. And we're going to click install. You're prompted for authentication. Authenticate downloads, installs. Now we can launch this application. Now this application requires higher privileges. So when you open it and launch it, it's still prompting for privileges. And I can see that great, my hard drive is good here. And this hard drive is good too. So this is just a tool to look at the smart status on things. If I didn't want this utility, I click on install and it goes away. Now you're probably wondering, where did that show up at? So if we go here and we go out activities and we type in G Smart, there it is. I can launch it again from here. So they made this pretty easy to do. Now something else that is a little bit trickier for people when you go through and you install these applications because you're new to Linux, you want to put all the things, you put everything with the kitchen sink in there. This becomes really easy because you go to the installed list and then you can remove anything. So if you didn't want that tool, whoops, go back to the install list, there's G Smart Control. I can just uninstall it just as easily and get it off of my system. So I like the PopShop. It's definitely pretty cool. They got a great list of curated apps in here. Most of them are really good. They're things that I use. So I was kind of cool to see when I went through this and I'm not gonna bore you with every detail in there but there's a lot of great stuff in here and including something nice. They put some of the common business use apps like Slack in here. Some people like Telegram, Steam. I didn't try Steam, Spotify. So a couple of those are things in here and there's also a virtual box. I thought was cool that they had. So you can actually just go right in there and install virtual box. Oops, I got to spell that right. There we go, virtual box. And I have that installed in here. So one of the nice things too if you're not familiar with Linux, once you've installed any of these, they become part of the updates. So all these applications will get updated while the OS gets updated as well. Now to do any of the updates, I don't have any here to show you but they pop up over here and they let you know that there's system updates. You can customize how and when the updates are loaded. Unlike other operating systems that make this kind of a pain to do, they make this really easy to do. So when your updates, where to get the updates from, extra sources and things like that. So I won't get real in depth in that. Maybe later video I'll talk about how you can customize more of the updates. But they made it pretty straightforward and simple. So that's the application store. Like I said, that's pretty handy. And let's walk through the settings in here. Now this is something I really like the way they did this. You go to activities and let's say I wanted to do about the system. The search can find things and land you right where you want to end. So here's the about showing that I have PopOS 1804, 64 bit version, 16 gigs of RAM, Core i7-4770K, and a GeForce TX-Sense 50. What if I want to fix my display settings? Where's that at? Well, if I just type in display, I can open up the settings or I can go directly to the display. This from a usability standpoint, especially new users, this is great because people just don't know where things are. And of course being that they did things a little bit different is still handy for me. Switching from a KDE based distribution to this Nome based desktop was really easy to find things. And like I said, with the NVIDIA driver, it supported my triple monitors right out of the box. So you can choose my primary display, I can move them around. You notice it's displaying the numbers here, so when you go back to a three screen view, it will display all the numbers of them. So there you can rearrange and drag your monitors around and make them the way you want.  Any of the settings you can apply, so if you're changing resolutions or everything else, pretty straightforward. There's no save button on things. It does have an apply for here, but if you're changing things over in some of the other areas, I'm gonna go back over here to notifications. If you want notifications not to pop up, it just sliders on and off, so it's very foam-like. So let's talk about the settings in general. So if you wanna get to the settings, just to bring you to the settings themselves, SATT or activities and all your stuff is right here under applications and you can just scroll through everything that's in here. And I think they're kind of merging. I'm used to seeing this a lot on a phone experience and they've kind of brought these things together and I actually find it very easy to use. So if you open up the settings, there's no Wi-Fi adapter in here or Bluetooth, but they're there on my laptop and pretty easy to, pretty easy and straightforward. Like I said, I'll maybe do more in depth review later, but I just wanna give you kind of an overview of things. Notifications are a little different. Now, the notifications here and here's the different things that I have on here and turned on and they all show up here at the top. And once again, kind of reminds me of a phone-like experience. We have a do not disturb here. You may have noticed that some of these calendar options are blue. Well, the reason why is because we're gonna go over here to online accounts. It lets you integrate some of your online accounts right into the operating system. So my notifications from my Google Calendar and I don't know what all the integrates of Microsoft, I don't have a Microsoft account to test that. I don't know why you'd wanna integrate Facebook into your known desktop, but that's an option. They have these in there. But with you using Google Calendar both on my business and my personal, I'm able to easily see notices and things like that or when I don't wanna see them, go here. So my calendar notifications show up. Once again, changing the background's easy. Controlling what apps are allowed to put notices up there. Very handy to do. Also, if you notice at the top of your network settings, so here's my wire connection and you can jump right to the network settings. And you notice even though I opened it from here, it brings you in this window that's already open. If I were to close this window, the same thing would bring me as a workflow right over there and let you customize the network setup. Overall, they've done a great job of just keeping everything very, very clean and easy to read and easy to change your network settings. So here's the network settings, my computer's IP address and everything else. IBP4 settings, DNS automatic, automatic or set manual, I can type in my IP address. So easy enough to do this or disable the network card if you have multiple ones on here. Pretty straightforward setup. Maybe I'll do another video separate, but on my laptop, the VPN setup was really easy to do. Had no problem. Matter of fact, it imported my VPN settings that I exported to a file right in and just worked. So hats off to making that really nice. Sound, I did have to change this out of the default because for some reason it thought the Yeti was my default sound card. But of course, most people may not have this issue because you probably don't have a blue Yeti attached to your system in multiple outputs, including HDMI and everything, but it does support multiple sound card outputs that I have, and I have a few different options on my system from digital to standard line out, which I have studio monitors inside. Works perfectly fine for that. Not much in a power options, but on my laptop, it's got a whole list of things that show up here, including like battery options. So very laptop friendly and you can choose things like what happens when the power button is pressed and also what happens when you close the lid, whether or not it's in a docking station. Those options all show up on my laptop. Of course, this is a desktop, so it's smart enough not to have those. Here's the network settings that you got to from clicking here, and then back to the details and devices. So it's all pretty straightforward for your usage and getting started with it, but I will cover the keyboard shortcuts because this is really clever the way they have the desktop layout. So it's a combination of desktop usability with keyboard shortcuts. Now being able to manipulate your operating system from the keyboard, the graphics of it is really handy. And I'm a power user, so I'm sitting from my computer a lot, moving between things, getting a lot of work done, and not having to slide something over with a mouse all the time to find it is really nice. Now the first thing you may notice is they went with the kind of less is more concept of not having a bunch of buttons up here. Out of the box by default, they're nothing here. You don't have a minimize, you just have a close button so you can close it, drag it around by the title bar, double click the title bar for max, and not maximize and just go to the corners and resize it. I'm fine with that.  Now gnome tweaks allows you to customize and start fixing things that you save. You know what, I gotta have a minimize button. I need to have that because my workflow requires me to minimize things. This is gnome tweaks and it's in the pop shop and it's easy to start messing around and changing everything around if you want. The only thing I really did with gnome tweaks though was this, workspace on primary display, workspaces span displays. And I'll show you how the workspaces work, but by default it only wants it on the primary display and what that ends up doing is, let me show you what workspaces are. This is the one thing I did customize from being stock. So this is my three monitors set up and these are the workspaces which are these two spots over here. And if you don't have it spanning the displays, it only spans the primary display back and forth. So when I wanna use up and down to different workspaces, which are essentially different desktops, it would only do the primary display so I did customize that. Other than that, I've left this at default. Go back to single screen set up. So let's talk about the shortcuts and how they work and how the workspaces work and kind of how these things work together and get you an idea of how I'm using it. So I'm gonna open up a terminal here. And to make this easier to use, I'm using a little tool called screen key and this allows you to see what buttons I'm pressing. I just learned about this the other day. It's pretty cool and I'm easy enough to set up in here. Do a separate video on that sometime. So right here we have two separate windows and I'm on the main workspace. So if you wanna switch workspaces, we can press the super key, which you may call the Windows key and we can switch to another workspace right here. So now I'm on a separate workspace. Now if we use super key up, brings me to the top workspace, super key down brings me to the bottom workspace. And the reason you're only seeing two workspaces is because it creates them dynamically. So let's say we have something we wanna put on another workspace. So this workspace is the primary one I'm using and let's move something over to the other one. We're gonna drag this to the other workspace and automatically it created another workspace under it. So it always leaves you one more. And this is one of the reasons from a workflow standpoint, I don't really need a minimize button or a show desktop button. It does have those abilities but we can just do this. I arrow down until I get to a new workspace. So super key down and I'm on a clean workspace and let's launch something like a calculator. And now this is on this workspace but by populating this workspace, now we have a fourth workspace. So you can see how these will clean up. Now, other thing to notice when you press the super key and this is just general workflow and this has made it really easy. You press the super key on a clean workspace and let's open up Caden live. You just type, start typing the letters you want and away you go, you can launch the application. Now I can do this obviously by going to activities and clicking with the mouse and doing this and finding the application I want or saving the application to a shortcut as a favorite which by the way, if you wanna save something as a favorite, you right click on the app and say add to favorites but I hardly find myself using the favorites part over here. It's mostly I know the things I wanna run and I can just go ahead and run them simply by hitting super P press enter. I'm right at the application I want, super key up. I'm going back to another desktop, super key up. I'm at another desktop and away you go. So you can see from a workflow it's pretty slick. Now let's get into some of the other shortcuts and how you view them. So the other option too is of course the usual that we're used to is we're gonna clean up all these different desktops that I have and once you go up, they all disappear. So now we're back to just having one and one clean one and this is obviously just floating. It's not maximized. I can double click to maximize it or if we press control super up that maximizes it, control super down that's gonna make it here. So it's easy to move and it's not maximized anymore. Control super left brings it over here control super right over here. So let's go ahead and open up another tab. So open up Google and do that. Now you can see pretty quickly we've side by side something. What if we want to side by side something else? Well, let's open up Kelk and same thing I can make it full screen but let's say I wanted to copy some data. I can just do that or I can swap it back over back and forth by moving and let's say I want to get between these things. I can alt tab just like normal. Now alt tab and super tabs seem to do exactly the same thing in here. But you can use either which is nice. Couple of other things on there. So you can just close the window with this. So let's open up the calc again and we can just hit super key w and now we close that window. So they have a whole list of them here and I'll leave a link below so you can get to them but this works really nice. One other thing I'll cover is when you are dealing with it and let's just open up another site like Google again and you're doing the alt tab alt tab and down arrow. Once you're over that device you can see each thing running. Now let's show you what happens with like a terminal. So you open up a terminal window and we have let's say a new terminal window over here. We alt tab. There's our Firefox showing both of them. There's our terminal showing both of them and then you can go down arrow and slip them if you have more terminals and more terminals then we'll go back to the alt tab. Whoop, too many things opened up. Alt tab. Here's all the different terminals and they show up down here. Now the other thing to note is dragging things around as I've made a cluttered mess of desktops. Let's drag a couple terminals over here another one over here and we'll go to this one. When you alt tab and it's been spread across different workspaces we alt tab for the terminal. It slides you over to the workspace that has that terminal on there. So like I said from a usability standpoint it seems confusing because I'm typing a lot of keys at once but this has made it really handy in order to get things done. Do that, exit on this one. And now I've got too many things showing up here. We're gonna close that too. And same thing, super key. There, I just closed it right away. Super W. It really hasn't taken me long to learn all these keyboard shortcuts. It's fairly intuitive. You just get used to keeping your finger on the super key and moving around. And like I said, it's made my workflow very efficient very fast and be able to do things. So last thing I want to talk about though is file management. Now the file manager in here is based on Nautilus. Let me close, clean up. Open this up, drag it over here. It's clean, nice. Same with all the design philosophy that they've had and pretty intuitive to use as well. So let's talk about a couple features though that I really think is interesting. First, if you want to bookmark something I've got a couple things bookmarked here. So I've got my three TB storage drive in here. Video main, this is where all my YouTube videos go. But let's say I wanted to take something wherever you find it, like my LTS folder where we keep our business documents. You can just right click on it. Open a new tab, open another application. Some of the usual options, compress it, open in a terminal here, which I do like that you can just grab a terminal window right in there because sometimes, and I'm gonna show you something in the videos here, if we open a terminal here, you notice the long string that is this? Because this is on an encrypted volume, it shows the mountain name of the volume there. So it's nice being able to do that without having to try and jump into something, a CD into some long file name. So that's rather clever. But the bookmarking is pretty straightforward so we can just go ahead and open up this, a similar. And once you're in there, you go over here and we can just go ahead and hit the little bookmark tab to bookmark this location. So if you have somewhere that you frequently visit like my video file or the SML file here, you can just add them to your shortcuts and away you go. So wherever you're at, you just go here and you can bookmark it. I'll get my face out of the way here. A couple other options. You can also show hidden files, reload visible columns, and choose other things that you may want to have in there. Last one, ask any recency. It's got a couple of things or just reset to default or rearrange these on here. Owners, group, permissions, et cetera. Now if you're copying files, I like the way they keep this all together. So let's go over here so we can find a big file and here's that Starrack video. So we'll go here and we're gonna open up the folder here. So control L if you're wondering, it's MB. So type in SMB to open up a SambaShare and we'll go over here to this one. And it prompts you for whatever the username is. You can save something. This is actually an open connection. I'm just gonna dump it to this folder and we're gonna paste. Now what you get is you're like, where's those files? Where are they moving? Where's the little box? Keeping with the simplicity of things, it's here. So this allows you to expand out and see what's being transferred, the speed at which is being transferred at like 75 megs a second as it copies over here. So they keep it all nice, clean and consolidated so there's nothing really bothering you while files are transferring and being moved but you get the little percentages up here so you can keep going on and keep working with whatever you're doing. I do like this as a feature to be able to unclutter, so to speak. And that's I think a lot of the concept that Papa West tries to keep on there. And once you're done, it lets you know a little pop up here that the files are copied and I can just click on it and go right back to that folder. Double click it and now I'm here. And anytime you mount an external storage device they show up here. So I'm gonna go ahead and delete this because I don't really need it, delete permanently, delete folders empty. And this right here will let me unmount that. Now another thing, if you're not familiar with SSH configs, in your SSH folder, you can set up a config file and what this config does is build out the names and IP addresses of different servers and parameters so you connect to them. So instead of just typing in SSH username and IP address, you can save them all in this config file. So for example, here's my mail server, hostname, user, root, port, the identity file that I wanna use if I wanna use a different one on here. That being said, that allows me to do this so I can SSH right into my mail server. Easy enough. But with their Nautilus integration, it does this as well. So if I hit control L again and I SFDP, so that's the secure file transfer protocol and I type in mail server. Same thing. I can actually get right to the file manager and it mounted into the mail server, which is right here. So then I can also unmount it. Great integration there. It makes it convenient when you have to manipulate files because I use SFDP and my SSH keys often to work on websites and this allows me to quickly go in there via the file manager and open it up because once you've opened up things in the file manager, let's open it back up again and show you all your usual suspects. Whoops. I hit super key L and locked myself out. I meant to hit control L to get back to this. Open up the mail server again. Your usual search is to start finding things. Actually work in will index the file system. Then I can right click, open with other application, choose an application to work with this for all applications. And now I can work inside of a file that opened up. And if you look at how it's run over here, it's the GNOME Virtual File System. That's what stands for GNOME Virtual File System. So it disallows you to take something that was mounted, then edit it with an application running on your desktop to go back and save in here. So this level of integration is fully supported in 1804 PopOS. So that's really nice. Like overall, I'm really happy with PopOS. I've only used it for a week. The keyboard shortcuts seem very natural. We're very easy for me to manipulate and learn how to use, being able to shuffle around everything through this interface and the multiple desktops feels really intuitive and well thought out. The polish they put on here with the better fonts and everything else. I'm really happy with this. I'm wondering where they're going to take it next. Like they've done such a good job and I feel comfortable with it even after a week completely changing from a different desktop environment which was the KDE desktop environment back to a GNOME desktop environment. Like I said, I'm really happy with it and go ahead and head over to Popo System76 slash Popo. Leave links below and download it and give it a spin. Try it in demo mode and if you like it as much as I do go ahead and wipe your systems and reload it. Make sure you're back up first. All right, thanks. Thanks for watching. If you like this video, go ahead and click the thumbs up. Leave us some feedback below to let us know any details, what you like and didn't like as well because we love hearing the feedback or if you just want to say thanks, leave a comment. If you wanted to be notified of new videos as they come out, go ahead and subscribe and the bell icon that lets YouTube know that you're interested in notifications. Hopefully they send them as we've learned with YouTube. Anyways, if you want to contract us for consulting services, you go ahead and hit launch systems.com and you can reach out to us for all the projects that we can do and help you. We work with a lot of small businesses, IT companies, even some large companies and you can farm different work out to us or just hire us as a consultant to help design your network. Also, if you want to help the channel in other ways, we have a Patreon, we have affiliate links, you'll find them in the description and you'll also find recommendations to other affiliate links and things you can sign up for on LawrenceSystems.com. Once again, thanks for watching and I'll see you in the next video.


I'm Charmaine Venne and I'm a hatching egg producer from Chillowack. Today I was with the Minister of Agriculture and the Premier where they declared today as BC Agriculture Day through the Royal Proclamation and essentially we are just celebrating agriculture here in BC and all the hard work of our farmers. I grew up on the hatching egg farm that I currently operate with my parents. I live on there with my two boys and I love it and I can't see me doing anything else. What I feel is so great about BC is we have so much choice and it doesn't matter which grocery store you shop at whether it's a farmers market or a chain grocery store we have local produce and products everywhere. I find it really awesome that my son can already recognize labels. He reads the signs and he's like oh look mom it's from Delta. That's what I want to pass down to him and to everyone around is that yes we're so blessed to be able to choose you know any kind of product we want if we focus on buying right here in BC and as a farmer I am just very excited to see how important farming is for our government today and for the sustainability of it long-term in our province.


Achieve the Water Framework Directives' goals of ensuring the sustainability of all activities that impact water, thereby contributing towards securing the availability of good quality water for sustainable and equitable water use and nature. The Cyprus presidency fully supported the Commission's initiative to prepare and present the blueprint and spares no effort to prepare the ground for placing before the December Environment Council a proposal for relevant Council conclusions. This, despite the very tight time limits we are faced with, RALIA, the blueprint's policy options were discussed during the informal meeting of ministers for the environment and climate change held by the Cyprus presidency in Nicosia on the 7th and 8th of July earlier this year. The topics to be discussed at the conference are also vital for Cyprus, where water scarcity is a very serious problem. Throughout its history, the island has suffered from long and severe droughts. Furthermore, as illustrated by the recent 2008 water emergency in Cyprus, climate change and in particular water scarcity and droughts are expected to make matters worse, rendering the water availability issue even more critical. There is therefore a need to intensify our efforts and prepare for and manage such water-related threats. Our principal national objective on this issue is to secure enough quantities of potable water to cover at least the basic needs of the population and to eliminate dependency on weather conditions by inter-RALIA installing seawater desalination plants. Despite the construction of many surface water reservoirs since the establishment of the Republic of Cyprus in 1960, the long and frequent periods of droughts have proved that storing rainwater into reservoirs only allows short-term planning is not a sustainable long-term solution. In parallel, UNTELSHO has also been focused on another non-conventional water resource, recycled water. More and more quantities of tertiary-treated recycled water are used for the irrigation of agricultural crops and the recharge of aquifers, thus freeing for domestic use an equal amount of good-quality water. On the other hand, a fundamental condition for the exercise and application of a sustainable water policy is the management of the demand of water. In Cyprus, water demand management has always been an integral part of our water policy. Measures such as awareness raising, metering of water consumption and water charges on a volumetric basis, programs to reduce distribution losses, improved on-farm irrigation systems, measures to promote a water-saving culture and efficiency of water use, water rationing during periods of drought, and many more, have been a tradition for the water authorities in Cyprus. I would like to conclude by thanking all those who have helped to make this conference possible, especially the European Commission as co-organizers as well as the conference supporters and speakers. I would also like to thank all the participants. I have no doubt that you will positively contribute to the discussions on the blueprint's proposal. We are looking forward to your deliberations and conclusions. I wish you all a fruitful and constructive meeting and a pleasant stay in Cyprus. Thank you very much.


All right, so I was told I could start anytime I'm ready and this being a talk on startup. Let's get going so JVM startup Why it matters to the new world order Again, I work for a company with lawyers. And so don't trust the things that I say Who am I I'm Dan Hidinga. I work for IBM. I worked for IBM for about 10 years now All that time doing virtual machine development. I've been involved in a bunch of different JSRs And the big thing for me right now is that I'm pleased to say I'm one of the project leads for Eclipse open J9 So open J9 was created September of 2017, but of course the code goes back much further than that Being IBM's production JVM. So if you're interested, you know, while we're talking, I know the Wi-Fi is not great here But check out the website Check out the the github and take a look at the code One of the nice things about this particular set of code is the license for it. It's EPL v2 with the secondary licenses clause Which means that it's compatible with open JDK And that Apache 2 as well Being an Eclipse project. We're really open and interested in anybody who wants to join in and contribute So now I'm going to jump into talking a little bit about the old world order And then we'll talk a little bit about the new world order and some of the changes that we've seen And how that relates to JVM startup So in the old world, you typically wrote your code Tested it checked it into your version control and then it sat there for a while Eventually you deploy it maybe to a nice server farm that looked like this Maybe it looked more like that But those deployments they didn't happen very often Deployments used to be kind of a scary thing for a lot of people and so they were commonly only done maybe every six months Maybe a couple of times a year And they were scary because they were done infrequently So there was a lot of code changes in there a lot of development had been done between Deployments and so people were scared of them which meant they did them infrequently which meant that they were scary to do But it also meant that startup was a very very small fraction of your actual run time Right if your application runs for six months before you start it again Who cares how long startup takes?  It starts to affect how quickly You can turn the crank and innovate and then once you've done the magic thing of getting CI running You know you want to get into continuous deployment, right? You've checked out you've compiled you've tested And now your system can automatically deploy for you, which means you go from deploying Maybe a couple of times a year to possibly several times a day Even if this isn't automated We're still seeing people deploying much more frequently And so that startup time suddenly becomes a much bigger factor in your runtime and then what talk is complete without mentioning the cloud and With cloud you get a lot of horizontal scaling right instead of buying a bigger machine You start to run more instances of your application the more instances you run the more JVM startups you have And actually the length of time it takes for the JVM to start up for your application to start up and to be ready Effects how early you have to scale the earlier you have to scale the more money it costs you This is cloud economics You're paying for your memory the more you have to pay the more instances you're running the more memory you're paying for and Then you know to continue to be buzzword compliant We have microservices which takes your scaling problem and multiplies it across multiple Microservices so instead of having one monolith that you're starting up multiple times when you scale you've now got Dozens or hundreds of microservices each one of those paying startup costs and then the next major Change we're starting to see is serverless computing. So I've pulled this picture from open whisk or Apache open whisk and the model here for those who aren't familiar with serverless is You know you have some set of events that occur and you have rules that listen for those events when they happen They fire some action and typically the way those actions get fired is they run a A docker container right the model is often your action comes in your docker container spins up It services your action and then the docker container goes away So that means your startup now is not just the startup of your application It's also the startup of the docker container start up of the JVM startup of your application So there's a long latency. So if you look into serverless computing, they often complain about cold starts right the problem is so bad that the serverless providers actually cheat a little bit here and they claim that Your container will be shut down or conceptually is there for one request But they actually keep them around a small number of them So that second requests don't always pay that same hot start or that same cold start problem Right ideally though the JVM should be able to start fast enough that none of this is Needed that the serverless providers can go back to the very simple start a container on every request The other interesting piece of this is that we start to see a Loss of the ability for the JVM to learn from previous runs So in a serverless model where you're starting a new container for every request Everything is treated as a first run the JVM can't easily cash things away To be able to use them for later runs So what is our new world look like deployments are frequent Often multiple times a day Startup even if it's exactly the same time as it length of time as it used to be In the old world has now become a much larger fraction of your uptime and we've lost The ability to learn from previous runs Because now we're seeing lots and lots of first runs and never really seeing what would be considered a second run so even in the old world though there were times where the JVM Still cared about other metrics than pure throughput So historically the JVM didn't have to be a good neighbor. It was able to say I'm running on this machine I'm going to grab all the resources. I'm going to assume. I'm the only one here and You know, it gave you really good throughput for that But there were still times where that wasn't good enough you know the classic XK CD about Developers slacking off while they're compliant compiling their code This also applies to the length of time it takes to deploy your code Right if the JVM takes a long time to start up to get your application up and running It means you can only do so many startups in a given day and so we the JVM needed to come up with ways to make that better and Debugging is even worse because there's often a higher performance hit when you enter debug mode compared to regular mode So the JVMs gave us options to work around some of this right? There's X quick start for open J9 I think the equivalent of that would have been dash client for hotspot And what this did is it traded your peak throughput for a faster startup so you might wonder why is there a trade here and The answer is the interpreter One of the really good sources of profiling data for a JVM is the interpreter because it's okay for the interpreter to take a Little bit more time to do things to be able to get that profiling data for you And so the sooner you compile the less of that really rich profiling data you get And so you make this trade-off between your peak throughput, which is going to rely on some of that that interpreter profiling data and You know your faster startup, you know you can get into JIT code faster, but you're not going to have as much data So the other place even in the old world that people cared about Other metrics was actually footprint And that drove us to create something we call the shared classes cache, right? This is where maybe I'm running multiple JVMs on the same system. I really don't want to pay The footprint for all of the data all the time so I've given other talks where I've talked about why the class file format is a horrible format for the the JVM to interpret And what J9 has done is it takes that class file and it creates a new piece of metadata it calls the J9 ROM class So this is all the symbolic information from the class file But it's put in a better format to be able to walk for the interpreter to be able to find the the data It needs at runtime and it's typically much smaller than a class file because we throw away the bits you don't need and Then in addition to that we also have a J9 RAM class This acts like a cache for any of the live pointers So when you've resolved a string Using when you're doing a load constant for example, you need to put that string on Pointer somewhere and so that ends up in the J9 RAM class So if I'm running three JVMs on the same system, and I've loaded basically the same classes I've got You know ROM classes and RAM classes for the same things in each of them Now if we look to the world of something like C or C++ if I'm running the same application three times The code there is in shared libraries a lot of times And so I'm only paying for one copy of that code in memory Each process is able to share that executable code. And so you know I get a footprint savings so we said our ROM classes are true ROM once they're created nobody writes to them and They're position independent so I can load them in to memory anywhere I want and so really what I want to do is take those three copies and make them one And so we created a shared memory area that all JVMs on the machine that have access to Can share that and so you only pay for one copy of the ROM class, right? So we've taken the executable code Java's byte code The constant pool that kind of data and we've said look you only really need one copy of this in memory all the JVMs That are currently running can share that So the major thing this gives you is a footprint win usually about 20% But it also gives you a startup win because you don't have to take those class files anymore and parse them and convert them That's already done. You can just load the existing one out of the shared classes cache So I know I show three JVMs running at the same time you get the same kind of benefits if you're running JVMs one after each other because once you don't get the footprint win in that case because you're still paying for one copy but you do get The startup win because you don't the second JVM can reuse the ROM classes that have already been created Right, so we've been talking about startup. What actually happens at startup? I'm going to give a really high level overview of some of the things that occur So we can see you know areas that the JVM needs to change in You know, here's my command line, you know Java dash X share classes Maybe you've got a bunch of other options there You know if we're being truly honest most people's command lines are pages long worth of options Usually copied from stack overflow But what happens when you hit enter well The invocation API comes along this is defined in a specification You can go look up exactly what it is, but it basically is a call that creates the Java VM for you So the Java launcher is just a piece of C code Anybody can write their own launcher using the invocation API and it'll go off and create you a Java VM and so what what happens in this process is There's a lot of string parsing to parse your command line options Some allocation to create your data structures and out of this you get back a Java VM structure that you can use And you get a bunch of threads usually, right? There are GC helper threads that have to be created. There are jit compilation threads There are other random threads that the runtime needs So there's a lot of allocation happening at startup. This isn't different than what you would see out of any other managed runtime and Then the GC has to allocate the heap and the reason I call out the heap is there's often a hidden startup cost in the heap and that's due to the fact that you've Reserved a large chunk of memory and now you have to page it in and we often see this in GC logs when you've you know Been running a scavenge and the first time you touch the evacuate space It's actually a slower scavenge than any other scavenge So there's a little bit of a cost there as well and Then the classes that have to be loaded at startup right we have a bunch of class files They have to be loaded so you've got disk access. They've got to be right into memory. They have to be parsed They have to be verified and then you create your ROM and your RAM classes out of these things And so running hello world on a Java 8 you're talking probably about 400 classes to get loaded And by the time you add a larger application in that pulls in more and more classes And then all the while that this is happening your interpreters running. It's profiling the data And your jit compiler is running in the background jitting and so there's this fight between Getting your application up and running and getting it up and running fast So if we look at that process, there's a lot of things in there that we could do that could really change the JVM So we need to look at how do we do that and with open J9? We've been doing a lot of investigation into these areas So the things I'm going to talk about some are areas. We're interested in working in some are areas. We've already started So the first one is how many people are aware of Jlink in Java 9? What if I told you it was good the more for more than footprint? Jlink is usually pushed for footprint we say you know modularize your application run Jlink And you'll get a smaller custom runtime you can deploy All of that's true. The really cool opportunity though is it gets people used to running a tool before they do deployment Once you're running a tool the JVM can do all kinds of other things You know these are things we could have done in the past But getting people to run those tools has been difficult and so now you know if we can if Jlink gets a lot of buy-in There's a lot of opportunity here. We could pre-create share classes caches we could pre-do the The ROM class creation, maybe we could create ahead-of-time compiled code for you There's all kinds of opportunities for optimization once people get used to running an extra tool So I've mentioned AOT and J9's head AOT for a long time now I'm not sure I can't remember exactly when we introduced it, but Back in the days of web sphere web sphere real-time. We put a lot of effort into making sure that That we head AOT capabilities And so we looked at our shared classes cache and said this is great for storing ROM classes But the other thing I want to store there is the other kind of executable code I want to store my jiddic code in there and so on startup the JVM generates AOT code and Stores that away into the shared classes cache along with some metadata to make sure that you know It's valid to reuse that code And it stores some interpreter profiling data We've seen start-up improvements between 10 and 30 percent when you use the shared classes cache That won't be the first run that'll be the second run So this is what we call dynamic AOT You don't run a tool and have it generate your ahead-of-time code You actually just run your Java application and so the first run creates your AOT code and saves it away and later runs can then reload that and reuse that and And so as we look at the new world we have to look at ways of increasing the ability to use this especially in the face of that First run problem. I mentioned earlier So one of the other areas I've talked about has been interpreter profiling getting rich data out of that and so in open j9 we've Introduced what we're calling J profiling which is a way of putting counters into compiled code But being very careful in how you place them so that there's minimal counters on hot pads The obvious algorithm when you're working on something like this is to put a counter on every basic block And then you can just you know walk whatever path you want and see which one's the hottest But then you're paying for a lot of a lot of counter updates on your hot pads Which you don't want to do So there's a document in the open j9 repo that describes Some of the details of how this works, but it's it's an algorithm that very carefully places those counters and then patches them in and out The cool thing about this is it means that you don't have to stay in the interpreter as long It means that you can go to jitted code earlier because you can still get that high fidelity profiling data out of that jitted code Because you can just turn your counters on or off and strobe them to the level that you want to get the data you need Part of this is in there's still more development work on this going on at the project And then the next one is an area. We've been looking at What if you know we talked about microservices earlier What if you wanted to deploy an application, you know hundreds of copies of the same application in containers Each container has a copy of your application a copy of the VM and a copy of the jet We've already got the shared classes cache that helps you save on startup time But what if we were able to make it so you could save on all your Compilations right instead of having each of these applications compile String and object and whatever else over and over and over again What if we made this into some kind of service? All right, this is the next evolution of our shared classes cache Technology and that's to be able to take the jits out of the application Right right off the bat. You're going to get a fairly significant footprint savings Probably about a hundred meg for the jits scratch space maybe eight meg for the compiled code or sorry the The jits DLL But you're also going to probably get startup wins out of this right if you're running the same application over and over and over again When you go to request to compile, there's no reason that service can't give you back something. It's already compiled Right that you don't have to wait for the compile You might not even have to wait for lower tiered compiles. You could jump straighter straight into higher tiers So this is an area that we're actively investigating at the project and just to To throw this up because we're pretty proud of this I know what said in the old world. We talked and looked mostly at Throughput, but that's not the whole story with open J9 We've always worked on trying to trade off throughput start-up and footprint and I think we've done a pretty good job So if you check out the Eclipse open J9 builds and you run with X shared classes We have you know some descriptions of running day trader which showed that we started 35 percent quicker Then a vanilla open JDK and we used about half the memory Even after a lot of load. So if you're interested in this You know check out the link there that talks about the description of this or Go to the adopt open JDK project Download it yourself So has anybody heard of the adopt open JDK project? Okay, so some people this is sort of the best place to get your open JDK builds They build vanilla open JDK and they build Open JDK with Eclipse open J9 They're building the same code that you get out of open JDK They're doing their best to run JCKs on it to run testing on it to make sure that you're getting a valid build That's not mystery meat So, you know check this out. It's a great place to get builds and then of course working for open J9 Check out open J9, you know download the builds from adopt run your application. Let us know, you know We want to hear about your successes We also want to hear about your failures and your amazing results with it We're gonna keep hacking on it to improve it So, you know join us meet us at the community on github or you can join our slack Gaging from the room earlier this morning slack is not well loved but And at this point, I think I've finished with about a minute to spare so maybe one question Yep, so we're still early days on the JIT as a service. We're still prototyping that We've seen you know with our experience with our shared classes cache technology that the AOT code being able to store that plus the The profiling data and some hints to the JIT has been pretty good I expect that experience to continue to hold across most applications and as with anything there's probably There's probably a balancing point some applications might be very Sensitive to the data they're running But most are going to you know benefit from this kind of approach. Thanks everybody