 I'm going to do a demo, and hopefully it'll be just fine. So what I'm hoping to show here is an app, a front end and a back end app. You might have seen this Fortune Teller demo before. It's a spring app, but we converted it to Ruby because I like Ruby. And what I'm hoping to show today is connecting your front end app to your back end app securely using some of the new features on the platform and then updating your dependencies in a zero downtime manner. So let's see if that all works. What you can see over here, I'm logged in here. We just have our Fortune Teller UI and our Fortune Teller server. You've got two instances of the server, three instances of the UI. And the UI has a route map to it. The server doesn't yet. And you can see our UI is over here. I'm going to click this Auto Refresh button. And you can start to see that hopefully it should cycle through the different instances. And it is not cycling through. All right, that's unfortunate. Let me try pushing that again and seeing what's going on there. So CF push, my Fortune Teller UI with the Ruby build pack over here. OK. Well, that's working now. We are now cycling through the different instances. We are not cycling through the different instances, I'm sorry. So I might have to just click on this several times just to, whoa, I guess the internet is not quite working for me. Smash left. This is over here. I pushed it. And it's waiting for the app to start over here. If this doesn't work out, I'm going to go to the video. But I'm going to try for one more minute because it's a really cool demo. All right, that's up. It really doesn't seem to want to be refreshing. Well, let's see how far we can get with it. And then I can skip to the video if needed. So you can see here, if I want to get the front end app connected to the back end app, I want to create an internal route for the back end app. We have with recently introduced Polyglot Service Discovery, there's this new internal only domain. It's not externally accessible, apps.internal here. And I can map that, create a route, and map it to my back end app using that internal only domain. And that's it. It's mapped. You can see it with CF apps. You can see that Fortune Teller server over here. And then, but we still need to teach our front end app where that back end app is. We can just, there's many ways of doing that, but we can use user-provided services, tell it where that back end app is on, apps.internal. And then we can bind the service here. And at this point, you usually have to restage or restart your app to pick up that new configuration. But actually, you can do a zero downtime restart. And because the app isn't refreshing very much on the side where it looks like it is, why is it doing this? Then we can actually do the zero downtime restart. And I wish the app would work properly for that. But it actually goes through and restarts instance without taking your app down. You won't have to do a blue-green deploy to achieve this configuration change, which is really cool. Moving on, the front end app still can't talk to the back end app, because we haven't actually given it the network policy, secure network policy, to allow the front end app to talk to the back end app. So we can just add that. And this is a feature of container networking. So we can add that network policy. You can see that policy defined over here, connecting the Fortune Teller server and the Fortune Teller UI. And if this was cooperating with me, which I don't know why, it's not there. It worked, trust me. It really did connect only on that network policy part. And you've got more fortunes. That's so awesome. It's only just now working. All right, on to the next Friday I wanted to demo, which was updating your dependencies. And I hope you all know that Ubuntu, they will be end, they're moving on. They support their things for five years. The trusty version, the thing that CFLinux FS2, the stack is based on, will no longer get security updates as of April 2019. So you have a limited amount of time to migrate your apps using that stack from CFLinux FS2 to CFLinux FS3. And this is what I'm about to show you is very experimental. The CLI with a hidden command just became available yesterday. But the build packs are available, and you can start trying them out. So here you can see, actually, we have a Ruby build pack that's a CFLinux FS2 stack and another one that's CFLinux FS3. And our apps over here, they're actually using 14.04, that's CFLinux FS2. And we can actually do a zero downtime update and update the stack at the same time. So let's do that. And hopefully, this will also, this too, shall work. So other things to note here, you don't. You'll probably want to make a plan, enable your clients to slowly opt in, then change the default, and then force them all over. And you can hopefully, by the time you need to force them all over, you can use this and do it very safely. And it's a great way to just update your dependencies, stay secure, stay up to date. And as you'll notice with the zero downtime update, your app is not going down. I didn't have to do a blue-green deploy. The staging, usually, when you push again, your app will go down. It'll stage. That might take anywhere from five to 10 minutes. And here, the app is just working fine, cycling through. At some point, you'll see as each one starts, the stack will be updated to Ubuntu 1804 by Bionic Beaver, which will be good for five years. And you'll hopefully start to see that soonish now that it's waiting for the app to start. And it'll go through one by one. Did it happen? All right. Well, it's going through. There's one. There's another one. And that's my demo. Thank you very much.