Hello everyone. Welcome. Thanks for coming. My name is Jan and I will now in the next 50-55 minutes I will talk about Quarkus. First, let's talk a little bit about me. I'm a software engineer working at Red Hat. I kind of love Java and open source stuff. I used to work on Wildfly, which is for data virtualization. Right now, my main focus is Quarkus itself and micro-profile. So mostly the work I do is integrating micro-profile implementations into Quarkus. In particular, I focus on micro-profile metrics which you saw who was here on the previous presentation, you saw a little bit about micro-profile metrics. You will see it again in this presentation. Another thing that I do is Hokeyla metrics, which is an old monitoring solution in OpenShift 3. Other than that, it's just a little bit about me. I'm a traveler, father, whatever. Let's go on. So let's now talk about Quarkus. What is it? Quarkus is a platform for developing Java-based applications, mostly, but not limited to microservices. So what does it do? Why is it so awesome? How does it make a difference to all the older frameworks that implement Java EE and so on? Well, these are the main goals that I see as important for Quarkus, the main goals how Quarkus tries to make your development of your Java microservices awesome. It brings you developer joy. It kind of resolves some issues that people usually see in Java, in Java language as general. It puts all your favorite frameworks on the one platform. You can use micro-profile, you can use GYACARTA EE and use any other kind of framework if you write an extension for it, or maybe even without an extension. It's blazing fast. What it does, how does it achieve blazing fast startup is a thing called build time initialization. I'll talk about it in a bit. It integrates with Grau VM, so it allows you to be even faster by compiling your application into a native binary. It's cloud native, suitable for all cloud environments, including serverless. It unifies imperative and reactive programming, so you can use both in any project and combine them however you like. And it also, apart from Java, it supports more languages, JVM languages, for now it's Kotlin and Scala. Well, let's now dive into each of these goals a little bit further. So the first goal, and I would say one of probably the most important list for me, is developer joy. Well, one of the main issues people have with Java and especially enterprise Java is that the development is slow. Development is slow because you have to recompile everything, repackage, redeploy, and that just takes a lot of time. If you ever worked with Wildfly, so you must remember that if you want to redeploy your application, you have to run a main package. It produces a package that takes like 10 seconds, then you have to redeploy the application that's another five seconds or so. It just takes a lot of time. Well, with Quarkus, this is solved. We have the thing called live development or development mode, which allows you to reload the application in blink of an eye without hitting, without doing any compilation yourself. It basically compiles the application itself in the background. So it kind of feels like you're coding PHP except it's Java. It feels like a scripting language because everything just, any changes just apply themselves automatically and super fast. You will see in the demo. So what frameworks can you use when you decide to use Quarkus platform? Well, we support already a lot of the usual frameworks that people who use Java, they normally know these frameworks like Micro-Profile and Jakarta EE. Well, we support a reasonable subset of Jakarta EE, not everything. There's no EJBs and stuff, but there is, of course, CDI, there is JPA. From Micro-Profile, that's mostly about observability, fault tolerance and all that stuff. You can use REST easy and you can basically use any kind of framework. If there's an extension for it, then great. If there is no extension, perhaps you can use it even without that extension, but maybe you can even write your own extension for your framework because Quarkus is designed to be very extensible. Another goal that Quarkus achieves is imperative and reactive programming unified. So here you have two examples. One is classic imperative style programming and that's REST service. I think everybody understands what it does. It is a REST endpoint that kind of returns a message and it's written in an imperative way. If you want to do reactive programming, you can do something like this. You can turn that endpoint into an endpoint that produces server-send events and from your method, you just return basically a publisher, publisher of strings and you connect that publisher using Micro-Profile reactive messaging or something else to a source of messages and each message that arrives will be sent to the client. You can use both of these approaches and combine them however you like. If you're interested in more details about the reactive programming thing, we hear tomorrow, 2.30, there will be a presentation by Martin Stefanko specifically about reactive programming with Micro-Profile. Now let's have a look at the so-called build time initialization. It's also one of the cool features of Quarkus because it allows you to start your application really, really fast and we achieve that by moving part of the initialization into build time. How does that work? Well, normally what frameworks do at startup time? Traditional Java frameworks, when you start booting your application, they have to parse your configuration files, validate or injection points, scan the class path for annotations, build some meta models, whatever and that's a lot of work that takes usually a few seconds. Well, with Quarkus, we have a way to move most of this to not to run time but to build time. So it is performed at build and you will see a bit more about how it works in a bit and so the build will take a little bit more time than usual but after that, the application will start very, very fast as you will see also in the demo in the second half of the presentation. Another advantage to this is that you can catch even more errors at compile time than usual. Well, Java in general is a language where a lot of programmer errors can be caught at compile time. Well, with Quarkus you can catch even more errors because you don't catch only the, let's say Java language errors from the perspective of Java but you also catch errors from the perspective of the frameworks that you use because basically at build time you not only compile time but also compile your source code. It basically also kind of runs the application. So if the application fails to start, you will see it at build time and you will not have to wait to catch that error at run time. So if you, for example, have a CDI injection point which is not satisfied, then the application will not be able to build and you will not have to wait until run time to get the run time error. So most of these things like parsing the config files, scanning the annotations, everything that I listed here, that's done at build time. The result of this scanning and validation is basically serialized into your application as so-called recorded bytecode. And then when your application starts, just the recorded bytecode which is highly optimized will be executed. This has also another advantage, the bootstrap classes that do this, parsing the config files and everything, these classes which perform this task can be discarded after the build so we don't have to use them at all during run time, which again makes your application even lighter in terms of both the CPU usage and memory usage. What's the effect on the start to build up time? Well, here are some numbers, some wild numbers. How much does it take, how long does it take to start a regular microservice that contains the rest endpoint and some a bit of more stuff? Well, with traditional cloud native stacks like, I don't know, spring boot or something like this, it could take around four seconds, let's say. Well, with Quarkus, if you use Quarkus in the JVM mode, you get it down to less than one second, I think it can be even less than 0.9. And if you want to be even faster and you use the native mode with GralVM, your application will start absolutely blazing fast in really a matter of milliseconds or tens of milliseconds. So, I think that's pretty amazing. So, let's have a look at what the build bytecode recording is because build time initialization is based on this. So, at build, all the relevant configuration files, you can see that you are read, application is scanned for annotations, all the metamodel is constructed and validated. Well, and the necessary code to actually start your application is recorded. This is called bytecode recording. I will see, we will see right here, you can see that you can see that, yeah. This is an example. For example, I told you I will speak about metrics. So, for example, if you have a class that uses micro profile metrics, I have a class that contains two annotations about metrics, which means you, this means that each of these methods, one and method two, each one of them will have attached a counter and that means if the method is called, the counter will be incremented. So, you can then monitor how often your methods are called. Okay. So, bytecode recording. At build time, Quarkus platform scans, scans your class for these annotations, for these metric annotations and turns your class that looks like this into recorded bytecode, which looks like this. So, it scans, it finds the two annotations and produces some kind of bytecode. If it produces a class, it's regular Java class and it's compiled and if you decompile it, this is generated code, yeah. So, but if you decompile the code, the class that is generated, you might see something similar to this. You might see that there's something like a deploy method, which just does all the necessary things that are necessary to start your application to have your metrics registered. So, it kind of creates a metric registry, then it creates some necessary metadata objects for the metrics and registers the metrics in the registry. So, at start tap, all just this code is executed. So, you can see that there's something like this. So, it's kind of fast because you don't have to re-scan the annotations. They were scanned at build time. Now, at run time, you just run the recorded bytecode, which looks like this, so it will be very fast. Well, there's a difference between JVM mode and the native mode. In JVM mode, this will execute it as soon as you are starting your application, your jar. This is the contents of this class will just be executed as normally, it will be called and executed. If you use the native mode, if you package your application into a native binary, it gets even better because the result basically of executing this is serialized. During build time, it is serialized into the native binary itself. So, it kind of, when you execute this code at build time, it produces some tree of Java objects. With ground VM, when producing a native binary, you can basically serialize these ready-constructed initialized objects into the binary itself. So, when you start the binary, it just reads the state of these initialized objects straight into your memory. It doesn't have to re-initialize them again. So, that's why it's really, really fast. So, yeah, I basically already talked about this native compilation, or sometimes it's called ahead-of-time compilation. We use ground VM for that. It produces a native platform-dependent code. We of course support Linux and Windows, mostly. It, it, it, it, it, it, it, it, it, it, it, it, it, also just some very aggressive optimizations and code elimination, which brings itself some caveats for usage. I will talk about them soon. And the native compilation takes a few minutes. It's, it's a bit slower than the normal compilation, because it really produces very aggressive optimizations. But once, once you finish it and you produce that binary, you, as I said, it will start very fast. So, it will be, let's say, very suitable for, for serverless environments, especially, where there's a requirement that the, that the application needs to start very, very fast. Let's have a look at the, also memory, memory footprint. Well, this build time initialization and ground VM usage doesn't only speed up your startup. It also reduces the memory footprint. So, another set of numbers. Well, how much memory does, is being used when you run a, a regular application with, with the rest endpoint and some grad operations for, for an entity? Well, with a traditional stack, which would be again something like Spring Boot, Thorn Tail, Wildfly, let's say, somewhere more than 200 megabytes. Well, with Quarkus, in JVM mode, you get to 130. You can cut it about in half. And if you use native compilation, it's even, even much better. In, in this case, let's say 35 megabytes. Okay. Now, let's talk a bit more about the application boot. How it, how it works. The bytecode recording, there are two types of bytecode recorders. Static in it and runtime in it. The difference is how they behave in native mode and in JVM mode. Well, in native mode, the results of static in it recorders are, are as I already talked about it, are serialized straight into the native binary. That's where you produce objects. And these objects, object three is serialized in straight into the binary. So when you run your application, you just read these objects into, into the memory. There's, but there's a runtime in it phase, which is for, for the bytecode recorders that bytecode that cannot be serialized into the native binary for some reason. Of course, you cannot serialize stuff like opening, opening network sockets, for example. Or some IO, IO operations that, IO operations that are necessary while starting your application or running threads. All of this will be done in runtime in it phase, which is in native mode after your application is, when your application is starting. Well, when your, application is starting, you get the results of static in it. You get straight in, in from your binary. Just, just read into the memory. And then runtime in it operations are, are executed normally. So that starts application threads, binds and networking interfaces and stuff like that. In JVM mode, both static and runtime in it bytecode executes at, at boot time. Because there's no way how to serialize live objects into, into a JAR file. Java doesn't, Java doesn't support that. If you'd like to learn more about this, be sure to visit the workshop by Matjej Novotny and Martin Kouba on Sunday, half past 11. It will be about writing your first supersonic extension for Quarkus. So they will definitely talk about bytecode, bytecode recording, which is one of the main things that Quarkus extensions have to do. Okay. Now, a little bit about the, the limitations because this is all, all, awesome. Of course, if you package your application into a native binary that starts really freaking fast, there has to be some downsides to this. Well, yes, there are. There are some things that aren't just not supported in, in native mode because they are not supported by Grail VM by design. Well, one of the most important, one of them, one of these things is dynamic class loading. Well, because your classes or your bytecode is compiled into native, from bytecode into native, native code, it's impossible to, at runtime to dynamically load more classes because they're just, their bytecode is just not compiled in, in the binary is not present there, so you cannot execute dynamically loaded code. You can't use the security manager. Well, but that's probably not that much of an issue because the security, Java security manager is usually used for sandboxing untrusted code that you dynamically load into your runtime. Well, and you don't dynamically load anything into your runtime, so you probably don't need this Java security manager. Another thing that's not supported is GMX. You also can't use things like finalizers and, and playing Java serialization is not supported either. There are some things which are supported, but with some caveats like reflective operations, I have an example here. This will work, always. If you access a field named bar of a class named foo, and you access it in this way, it will work because during compilation, growVM will be able to, to see that you are accessing this exact field. So, it will be able to add the reflective metadata of the class into, add it into the, into the binary. If you do something like this, where the field that you access is not a constant, it's a variable that can change over time, then growVM doesn't know that which fields you will be using reflectively, so it might happen that this will not work. But you can solve this, you can explicitly tell growVM that all reflective metadata of this class has to be serialized, included in, in the, in your binary. So, you can tell growVM that foo class should fully support reflective operations. This can be controlled by growVM arguments. If you are writing an extension for Quarkus, the Quarkus, like, say, extension API has ways to control this. So, you can, your extension can declare that these classes will be used reflectively. Similar to reflective operations is dynamic proxies. For proxies to work, growVM kind of needs to know in advance during build time the complete list of interfaces that your proxies will implement. If growVM is unable to reason about this, then you will at run time get, get an error. But this case can also be controlled using, using growVM arguments. One thing that surprised me a few weeks ago when I was writing an extension was that all static initializers are executed eagerly. Well, obviously, if you, if you initialize your classes and serialize the result into, into a binary, of course it runs all static initializers. Well, that's, that has, that needs to be done. But if this causes problems for some reason in your application, you can control this, you can say that some specific classes should be initialized at run time, not at build time. One more thing which might get a little bit problematic is debugging. Well, of course, if your application is no longer running with regular, as a regular JVM process, you can use normal Java debuggers. You can use the general debuggers like JDB and whatever. There's one problem to it that if you want to include debugging symbols in your, in your binary, you need growVM enterprise edition. And now, enough slides. Let's get to the demo. Okay. So, I will now show you how to build a full-fledged application. That application will, what will it contain? It will contain a REST endpoint. It will have hibernate entities. It will have micro-profile metrics. And if there are entities, of course, that means accessing the database. So, we will also use a database. Let's get to it. So, first, I will, I will start the database. So, we have something to run against. I will run a Postgres database in, in a Docker container. I will use this here. So, we have a running Postgres database. And now let's start a brand new project. How to start a new Quarkus project? Well, there are several options. One option is that you can use this website, quote Quarkus IO, and then maintain by our team where you basically choose your Maven artifact coordinates for your application. You also choose whether it should be Maven or Gradle. We separate both. And then you can choose the list of Quarkus extensions that you are going to use.  There's a lot of things. And you just pick which ones you want.  And it will generate a zip file for you, which if you unzip that file, it contains a Pomex ML or build Gradle and with all the necessary scaffolding that you need to start with your application. Well, but I will not do this now. I will use a different approach. I will use our Maven plugin. We have a Maven plugin that allows you to create Quarkus projects. So I will run that plugin, the create goal. And now it asks me about some things like the Maven coordinates, of course. Let's leave everything at the default. We want to create a REST resource. In this case, I will say yes. And everything else I will leave as default. So with this call, it generated some scaffolding necessary to get a project up and running. Now I can open that in my IDE. I will open it in my IDE. It will also include a simple read me file to show you how to run your application in dev mode, in regular JVM mode and in native mode, all of it. You can see there's a Pomex ML that declares some basic things that you need to develop with Quarkus. Well, and now the application is basically ready to be started. So I can now show you the live reloading features of the development mode. If you run the goal Maven Quarkus dev, it will start your application in development mode, which means that any changes that you do in your sources will immediately trigger a reload of the application. So here it generated this REST resource for me. So I see that there is a REST resource on the path hello. That should just return hello. Let's give it a try using curl localhost 8080 slash hello. Yeah. And it says hello. Now let's just change something. Let's add some exclamation marks. And now I just try it again and everything is applied. The changes are applied and now I get hello with exclamation marks. What would happen if I introduced some sort of syntax error, something like this? Well, the application will run still, but when you do curl, you send a request, you will get an error. And it will say that, yeah, hey, man, you have a syntax error there. So let's fix that for now. And let's start with something more interesting now. Now I will use the Maven plugin to add some extensions that I will need to build my application. So I will add extensions. Extensions, I will add Hibernate ORM with Panache. You will see what Panache is in a bit. I will be accessing a Postgres database. So I will also include JDBC Postgres equal extension. REST easy JSON B is for serializing some objects to JSON. We will need that as well. So I run that. Oh, no, I'm in the wrong directory, sorry. What it did, basically, is that it just added some dependencies in my POM XML. You can, of course, do it the regular way that you manually add your dependencies to the POM. But it's also one of the ways to do this is to use the Maven plugin for this. I decided to use the Maven plugin in this case. But you can add your dependencies the normal way manually into your POM. Okay. By the way, it picked up a change in the POM. So it reloaded immediately. You don't even have to change source code of your application. It also reloads and when it detects changes in the POM XML. So it reloaded my application. And I see it started again. And there's a log during the startup which tells you what features you have installed. So now it includes all the things that I just added using the Maven plugin. This is not on Grail VM. This is with OpenJDK. I will show the Grail VM example later. Okay. Now, so let's access the database. To access the database, you need some configuration, of course. Well, Quarkus has this approach to configuration that there's just one property file that contains all configuration keys and values that your application will need. It's the application properties located in source main resources. So it also generated a blank application properties for me. Now I added some configuration that I will be needing for connecting to the database. So I will use the Postgres driver. There's the GDBC URL, username, password. And for Hibernate, I will tell that each time the application is reloaded, the schema in the database should be dropped and recreated, which is quite useful for development purposes. Of course, this is a nonsense in production, as you might imagine. Now, let's create an entity. I will create a class person. Let's have a class named person, and it will be an entity. It's JavaExpersistence entity just regular JPA API. But we will spice it up a little bit. We will use Panache. Panache is a special, let's say, extension to Hibernate that we support in Quarkus. It will allow you to do some interesting magic that you will see shortly. I do that by extending, extending the class Panache entity. That's an abstract class that you can extend. Now, my entity will need a name, just name in this case. You might see I'm doing maybe a little weird thing. I'm having a field that's public. Well, of course, you can use the, let's say, more usual approach where you would use a property and the field itself would be private. It will have a getter and setter. And this is just to show you that you can, if you want, also do it this way. It just makes the code shorter. And Quarkus will understand this. Now, so I have a entity for persons. Now, let's add a rest method that will add new persons into the database. So, I just copied this. Yes. So it's a post method that takes a name, create slash name. And the name is a path parameter. And what it does, it creates a person, sets its name, and then persist it into the database. You might see that it might be quite surprising that I'm not injecting any entity manager or something like that. Well, with Panache, I don't need to use an entity manager. It's embedded. It's handled for me. If I use Panache, by extending the Panache entity, I immediately get my, a lot of interesting and useful methods for my entity classes. So you can see there's a lot of static methods for, for example, finding, finding, finding instances of that entity, find all, find by ID, listing, streaming, and all that stuff. And for that, you just don't need to play with your entity manager. You just use your class itself. So let's give this a try. I will now create a person. Create a person named Joe. And yeah, it needs to be post. It now created a person named Joe. Okay. Let's create another REST method that gets, gets a person by name. You can see I, I'm using the static method find all that I received on the, on the person class by extending Panache entity. So I can say that I want to find a person and find the person where the field called name is equal to name. And the name is a parameter for, for my REST method. So let's try to retrieve Joe. Hello. Instead of create, I will call get, get Joe. And it will be a get request. What happened here? No entity. Yeah, of course. It reloaded in the meantime because I changed something in the code. And because I configured Hibernate to drop and create with each reload, my entity got lost. So I will have to create it again. So I will create again Joe. And now I can get Joe. And I, and now you see it really, I retrieved a person with ID one. That ID is a field that is just provided to me automatically. I didn't have to specify the ID. It's provided automatically. Of course, if you want, you can designate your field as the, as the primary key. But if you don't, you get an ID field generated automatically. Okay. Now another method that will retrieve all persons, resource. Now we will use another method that it's on the path all. And it calls the static method find all. It's again Panache. Our extension to JPA API. And this will return it as a list and send it to the client. So of course I will have to create Joe again and maybe Alice. And now I can get, get all the persons. I can see that it now returned to two persons. Okay. And we're kind of running out of time. So I'll try to get it up. Yeah. I wanted to show you metrics, but I think I don't quite have time for that. I will show you more important thing and that is the native, native mode. So I just stopped the Quarkus development mode by just stopping the, the, the Maven execution of Maven Quarkus Dev. Now I will, yeah, I have to remove the generative test because I think I broke it. It would not pass. Now if I want to generate a native, native package of my, of my application, I do Maven package with the native system property specified. So now what it, now it's basically calling Grail VM. You see it's executing Grail VM and it's native image utility. And you can see the, the application is really kind of starting, kind of, not fully starting at build, but it, it's needed to start the application and initialize it. And when most of the application started and initialized, then that initialized state will be serialized into, into the native binary. So this, for this simple application will take about a minute or something like that. So I think it should be ready quite soon, I hope. Let's wait a bit. It does some aggressive optimizations and dead code elimination and, and build every, all the necessary metadata and into the, into the application so that you will see how, how you can run your application very fast. It should be finished very soon. Come on, come on. This obviously takes a bit more time than, than the normal build, but once you build it, you will see how fast it, it gets. And it's done. It, so it took almost two minutes. In generated, in the target directory, we now have a, well, yeah, that's the, that's, that's the, that's what it produced. You can really see that it's an executable for, for Linux. And if you, if you run that, it says that the application started in 34 milliseconds and then it's listening on, on this particular port. And now I can just create Alice, create Joe and retrieve Alice and Joe. And it just works, works normally except it's really in a, in a native binary. It starts really fast. If you were interested you can see how big the binary is. Yeah, like 59 megabytes. Well, yeah. It took about two minutes to, to compile it. And, but once you started now, it really, it's, it's really, really, really fast. I wanted to show you metrics, but I suppose we're running out of time. I could show, I don't know. Let's, let's do questions. Are there any questions? Yes? Keep the database running. No, you'd, if I have to keep the database running. No, I think I don't have to keep it running. No. It will, it will scan the, the, the entities, the, the, the entities, build the necessary metamodel of the entities and stuff, but it will not execute any, any queries to the database. No. Well, it kind of runs, but not completely. It runs the, the stuff that are suitable for this, that, that can be serialized into the resulting binary, but not, not more. Yes? Let's show you what. LDD. LDD. The question is if I can use reactive drivers for databases, right? Yes. We support some of them. Let's, let's have a look at the code, code workers. I owe you. You see that in the, in the options that you can choose for your, for your application area. See reactive, my C quickly and client, PostgreSQL client, small right reactive messaging with connectors to AMQP, Kafka, MQTT. And that's it. Yeah. These, some of these things are in preview. They are not yet considered stable, but you can use them already. Yes? Well, the difference between the size of, of the jar and, and the native binary. Well, the difference is mostly because the, the, the native binary kind of contains all the necessary parts of, of, of, of JVM runtime, the necessary parts. Yes. Yes. Well, it, it will always be a bit bigger. Well, in this case, over 50 megabytes. Yeah. It, it all, it is bigger. That's, if the, if the jar that I have was not, this is the plain jar without dependencies, right? This is like six kilobytes. If, if my application was more than six kilobytes jar, of course this would not be 120 megabytes. Of course not. That there's a, there's a fixed, fixed cost that, that's added statically to it. Any more questions? Yes. If I, in Dev mode, if I update the configuration, it will also reload. Yes.  And this is, it can reload on, on more things, depending on the extensions that you use. An extension can declare that some particular file, that specific configuration file for that extension should be watched for, for updates as well, for example. Yes. Memory footprint of Dev mode. It's obviously a bit more than if you just run it in regular JVM mode because there's, there's the scaffolding in it. And each reload means it basically discards the class loader that loaded the current version of the application, creates a new class loader and loads it again. And so, yeah, it will, the memory footprint will be higher in the, in Dev mode. Yeah. But once you compile it into a, a jar or a native binary, you get rid of that. Yes. Performance differences. Of course, in, in native mode, it's of course faster because we're not in, in a JVM anymore. We're not using byte code. We're using heavily optimized Nate, Nate platform, platform, platform, platform, dependent code. So it, it usually should be faster in most cases, unless there's some kind of issue. If, if it's not faster, that's probably an issue that should be solved. Okay. I think we're out of time. So thank you, everyone.


Good morning and welcome to Warrior's Corner, our next presentation, Water Resilience for a Sustainable Army with presenters Honorable Rachel Jacobson, Mr. Michael Conner, Lieutenant General Omar Jones, and Dr. David Pittman. Good morning everybody, good morning and thank you very much for gathering to hear about a topic that you wouldn't think of when it comes to Army's mission and that topic is water. Water is critical as we all know and we all experience every single day, and our panel of experts who we've assembled here are going to tell you what we at Army are doing to protect water, to respond to water events, and proactively manage water. I'm pleased to be joined today by Michael Conner, Assistant Secretary of Army for Civil Works and my longtime colleague and friend. Dr. David Pittman, Director of Army Corps of Engineer Research and Development Center and Lieutenant Omar Jones, Commanding General of Army Installation Command. I'll start off with a sort of framing of the topics and then we'll get into it. Water security is under increasing threat worldwide, facing stressors that range from poor management to effects of climate change. Although these effects vary across regions, water security is becoming increasingly widespread. The United Nations Environment Programs International Resource Panel has estimated that almost half of the world's population will suffer severe water stress by 2030. That means within seven years, half of the world's population suffers severe water stress. It follows suit that therefore water security poses a national security threat. And DOD itself is not immune to the challenges associated with supply and demand on water resources. Managing water resources appropriately is vital to DOD's mission to provide the military forces needed to deter war and protect security of our country. Water shortages can significantly impact military readiness through reduced training and limited operational capacity. Installations and facilities with water shortages may not be able to supply basic residential and operational needs. We need to assess with as much accuracy as possible which installations are under threat of facing real water security challenge. Our installation strategy and our climate strategy have objectives to adapt to resilient systems including water systems and they're designed to make sure Army accomplishes its modernization strategy by also managing our resource. Obviously extreme weather events have tested the fortitude and resilience of infrastructure. We see it all the time recently from flooding in St. Louis to drought in the west to the collapse of Jackson, Mississippi's water infrastructure to the effects of Hurricane Fiona in Puerto Rico and Ian in Florida. Such domestic challenges tap Army's resources because of the need to deploy troops for disaster relief every time this happens.  Drought and floods also impact countries around the world. Pakistan received more than three times its normal August rainfall, culminating in catastrophic floods which affected over 33 million people destroyed 1.7 million homes and nearly killed 1,500 people and Army provided relief there as well. Army approaches climate resilience because that is what this is from a couple of ways both mitigation and adaptation. Mitigation helps us react against including innovations in water and energy so that we are reacting in a preventively, it's a preventative management and adaptation is about being prepared to withstand climate shocks and we obviously will tailor our water resilience measures and investments to the circumstance of each installation based on geography, natural and physical and other cyber threats. Drought, I want to talk about drought really quickly. Drought is already changing the landscape of the west. According to the U.S. Drought Monitor much of the western U.S. is in drought. Most of California is in extreme drought where cities and towns are under severe water restrictions and we've heard alarming reports about the allocation of water from the Colorado river. Climate change will worsen drought in the U.S. according to the U.S. Geological Survey. For Army installations across the country, water conservation, groundwater and stormwater management will be increasingly more important to help guard against the threat of drought. We will be a good steward of what local water supplies and we will work with local communities for investment in water conservation measures and recharge measures. Just by way of example, Fort Wachuka in Arizona along with a host of partners including local ranchers has purchased water conservation easements to create buffers near the base that will promote drought resiliency and protect groundwater supplies but will also prevent encroachment near the base thereby protecting training areas and I know General Jones is going to touch on that in a little bit. There are a whole bunch of other things we're doing and I know I'm running out of time or perhaps I've already run out of time but many of our bases are engaged in incredible programs to conserve water and reuse wastewater and all sorts and enter into utility partnerships to help conserve water and reduce water consumption and find leak detection in water pipe systems. So I'm really proud of everything we're doing across the board and too many things to mention today. We're also using engineering with nature wherever we can. Long ago advanced by the Army Corps of Engineers this helps nature-based solution for water infrastructure and projects making sure we use native plants and trees to prevent erosion and soil runoff which helps to promote water and soil conservation to design more green spaces on installations with permeable pavements to ensure water absorption and prevent flooding. In sum, the Army is adopting strategies to improve water installation resilience through conserving water, implementing alternative water projects and returning water back to the sources through stormwater and groundwater management. Now I'm going to turn this over to ASA Michael Connor, obviously who's the Assistant Secretary of Civil Works and their critical role in managing water resources to promote resilience. Mike? Good morning everybody. Six minutes to talk about water resilience so I'm going to talk fast. Rachel, great summary of not just the impacts but the actions being taken at military installations to address the issues associated with lack of water or too much water at some point in time. The Army Corps of Engineers obviously has responsibility for helping making that transition to water resilience at our military installation but it also has that responsibility for carrying that out across the nation in the many functions that the Army Corps of Engineers has which affect every sector of the economy and I'll just give you a brief example. Weekend before last I was discussing with Major General Graham the Army Corps' emergency response to hurricanes Fiona and Ian in Puerto Rico in South Florida. There he was giving me assessment of of course the Corps of Engineers carries out a lot of functions. It does the engineering assessments of damages. It carries out emergency power restoration for critical facilities. It has blue roof responsibilities to put roofs back on homes. It has debris removal responsibilities. But also we have all these coastal storm protection projects in Florida. 27 in place. 11 being studied. In Puerto Rico we have nine flood risk reduction projects that are in various stages of construction and we have three more being studied along with coastal protection projects down there. All told about eight to ten billion dollars with the damage to these ongoing facilities, ongoing projects. It's a huge effort to not only take care of the emergency response down there but then to take care of the projects that were responsible for. But at the end of that discussion General Graham said I've got one other thing to address with you. Mississippi River. We have a low flow situation in the Mississippi River based on drought which is causing saltwater intrusion from the Gulf of Mexico which affects the intakes for public water supplies along the coast as well as, you know, stymine barge traffic in that commerce that goes up and down the river. So we're engineering actions to address that emergency of too little water in the Mississippi River. And at the end of that conversation my response was just simply General Graham, too much water, too little water, everything in between. There is no one entity with the breadth of responsibilities of the Army Corps of Engineers. And it's all based on these challenges in the water sector. And that's a long lead to the bottom line which is we are in unprecedented times in water resource management. The extremes are now the rule that are no longer the exceptions. In addition to the power that we just witnessed with Hurricane Fiona and particularly Ian there's been at least, in the last three months, at least six one in 1,000 year precipitation events across the United States. And this is basically a 0.1% chance of precipitation happening at this level at any point in time in a year. In the West, as Rachel mentioned, we've got probably the worst drought in at least 1,200 years according to tree ring studies. But it's not just drought. Those people are looking at this as a ratification of our desert southwest. So obviously these same issues that we're looking at across the country are the same issues that are affecting our military installations in different locations. And the bottom line to all of this is that we have a water resource infrastructure network that was designed in the 20th century for a climate that no longer exists. That doesn't mean that infrastructure isn't highly valuable still but it needs to be reevaluated. And we also need to look at new infrastructure as addressing the challenges that we're seeing in water resource management. I'll give you a couple quick examples. Army Corps of Engineers has a climate action plan. As part of that effort we've screened over 2,500 of our projects depending on where they're located for sea level rise, for drought, for changes in hydrology in the river systems that are adjacent to those projects. And we're based on that vulnerability screening and we're now doing drought resilience strategies for those projects. In July I issued a drought resilience directive to the Corps identifying 10 areas where they could do additional drought strategies. Simple things. One example, forecast informed reservoir operations. We can operate our facilities differently. We can take in account new hydrology and we can perhaps address water supply issues in addition to flood risk reduction. And then lastly we need to develop multi-benefit projects in whatever type of project we're developing in the Army Civil Works program. We have to look at our flood control projects as also water supply projects. We have to engineer differently. We have to look at our dredging projects. Can they provide, take that dredge material, create habitat, create environmental benefits, but also those environmental benefits create opportunities to sequester carbon which we should all be responsible for. When you're in a hole you need to stop digging. These extreme weather events have happened with about 1.1 degrees celsius rise since pre-industrial times. We've got, the prospects are now that we're going to have an additional 2 degrees celsius rise by the end of this century. What's the climate going to look like at that point in time? So finally I will just mention to affect this transition and this integration of resilience into everything that we do we need better tools to assess risk, to improve our forecasting capability and to use nature not to fight against nature all the time. Rachel mentioned that. The better we can assess risk, the better we can assess vulnerabilities, the better we can engineer and design to address those challenges and that's what our goal is. From that standpoint, the Army Civil Works Program's priorities are the same as Secretary Warmouth has identified for the Army. We're going to commit to innovation in new ways of operating. We're going to embrace emerging technologies and we're going to be resilient in the face of climate change and that requires change on our part and I think that's a perfect segue now to Dr. David Pittman. Thank you. Thanks sir. Well good morning everybody. My name's Dave Pittman. I'm director of research and development for the Army Corps of Engineers. You heard a lot about the Army Corps of Engineers and also director of the Engineer Research and Development Center. That's the labs for the Army Corps of Engineers. That's headquartered in Vicksburg, Mississippi. Yes, I'm from Mississippi. That explains the accent right there. And I invite all of you to come see us at ERDIC if you've never been there before. I call it Disney World for Engineers and Scientists except at ERDIC, the magic is real. We do a lot of great stuff there. So Ms. Jacobson talked about the Corps of Engineers installation mission, so we've got R&D going on there. Mr. Connor talked about a Civil Works mission, we've got R&D going on there. We also have Operation and Warfighter mission, we've got a lot of R&D going on there and I'm going to focus on the water resiliency R&D since that's the focus of this warrior's corner. If you look behind me, we've got a new strategy. So we've only been around since 1775 and we never had an R&D strategy before right now. So General Spellman said, hey, we can't keep engineering solutions the same way but we've got to have new technology to deal with these huge challenges nationwide. So we came out with a brand new R&D strategy, just Google it, USACE R&D strategy, you can pull down a digital copy and it features these top 10 R&D priorities. If you look at them, mitigating that climate change, you know, Secretary Austin talks about that as the existential threat to the whole country. You know, if the country goes away, nothing else matters. But look at them, win future wars, look at smart resilient installations all the way down to protect and defend the Arctic. So with this plan, just like the mission of the Corps of Engineers, we have to do better R&D and better technologies to deal with these crisis that we're facing going forward from military to civil purposes. If you go to the next slide, let me give you just a few examples in each one of those lanes. So if you look at our military installations, a couple of projects we've got thousands of them by the way. Here's just two examples. What is we're developing a tool for installation managers? Hey, they got water supply issues. You saw Miss Jameson talk about, you know, 40% of the water supply on installations come from the private sector. You know, how secure is that, right? It gets on installations, we got water demand issues coming, you know, for whatever the people need and whatever the mission needs, and then you got to connect them with the distribution systems. All sorts of vulnerabilities, you know, what's the water security position for the installation going to be going forward? That's the tool we're developing. Slide that into the enterprise level. So NDAA just asked us last year in FY21 to come with a risk-based tool for the whole enterprise. Army, Navy, Air Force, Marines. So the Army's taking the approach to saying, hey, we got 26 different installations. We're going to look at the enterprise approach, use a risk-based framework to assess that over the long term, look at the impacts of climate changes we just spoke about. Developing both of those tools. Now we slide into Civil Works. If you notice, we have a lot of acronyms in the Army Corps of Engineers. We love acronyms. So Mr. Connor talked about FIRO, forecast-informed reservoir operations. It tells you exactly what it is. And normally the way we manage reservoirs is we got a book and it tells, hey, lower the gate here and let water out here when this happens with water on the ground. General Spellman says, we need to manage that water before the first drop ever hits the ground. And that's exactly what FIRO does. So it harnesses these atmospheric rivers that come in from the Pacific end of the West Coast. It dumps a tremendous amount of rain in a short period of time in very direct areas. How can we take advantage of that? Working with NOAA, we're not the weather forecasters, but we manage water on the ground. And by doing this on just one lake, by the way, we were able to save enough water for 22,000 more homes than we otherwise would have had on one lake. Imagine if we do this with all of our lakes in the West and across the country. That's what we're going to do. Mr. Connor and Ms. Jacobson also talked about engineering with nature. Another concept developed by Dr. Todd Bridges at Ernic. By the way, he's got international partners, national partners, industry, private sector, and really going like gangbusters. He's testified to Congress on this before. It's an amazing capability where we're engineering with nature versus engineering against nature sometimes with concrete and steel. We're going to use green-based solutions to help solve some of our water resilience problems. This particular example is the lost conscious wildfire at New Mexico 2011. At that time, the largest wildfire in New Mexico had ever seen. That was 10 years ago. Now it's the fourth largest wildfire in New Mexico has ever seen. But we worked with the locals in coming up with nature-based features to help protect against the debris flows that we see and the devastation to the vegetation and restoring that with thousands of different little nature-based features across the area. Then finally, I'll talk about the warfighter themselves. Soldiers have to have water, too, when they're on the battle space. It's absolutely necessary. So a couple of different projects. One is called Heat Dog, another acronym. It's actually taking advantage of heat given off by our generators. Wasted heat, by the way, about half the energy from our generators is wasted heat. We take that heat, we capture it, and we condense water from the air. It's not rocket science, but we've never done it before. So we can reduce our water footprint significantly in the theater and reduce the heat signatures at the same time. So it helps protect our soldiers, and it doesn't matter if it's a desert environment or a jungle environment, it works either way. We have that capability straight into another one called All-H2O, working on the logistic side of things. So now we're looking at gray water. So after you use the water, when it goes down the drain, from a shower, from cooking, or whatever, we're going to recycle that water, okay? And if you can just recycle that water, now, for non-potable reasons, we're not asking you to drink it, but we can significantly save about half the water demand that we're going to have in theater. So those are just a couple of them. We've got hundreds of these ideas. We need you to help execute this strategy. So whether you're a private sector, academia, other government agencies, international, we need you to help execute this for the warfighter in the nation. Now I'm going to turn the mic over real quick to General Jones who's going to talk to you about how we do this on installations. Thank you. So we have two assistant secretaries and an engineering PhD from Mississippi, and they turned it over to an infantry officer to talk about how we do it. That's a little dangerous, I think. Good morning, everybody. I appreciate you coming. I've heard about 10 times the amount of people I expected to hear a conversation about water and resilience, but I think it's actually a really good news story. So as you heard in the introduction, Lieutenant General Omar Jones, I command the Army's Installation Management Command. So I'm responsible for the 75 regular Army installations around the world. You heard the challenges that we're going to see, we're seeing today. We're going to see the next five, ten years, and deep in the future. But what I'm going to tell you is that from an Army perspective, from an Army installation perspective, where we are right now and where we are headed is actually very exciting. I'm going to tell you a couple of good news stories and tell you why. So as you can see behind me here, all the strategies and policies that have come out from the headquarters part of the Army over the past 18 months, with the capstone being the Army climate strategy and the implementation plan. And what that has given us is the strategic direction where the Army senior leaders want us to go. Execute that, which is what we do at Installation Management Command, a series of programs, whether it is using appropriated funds or working closely with community partners, working closely with industry partners to move forward to make our installations more resilient and achieve those goals across the board. So where we are now and the progress we've made in the past year and where we're going, it's exciting. And I will echo David's comment that for all the partners that are out there in this space, we look forward to working with you. We need your expertise and we look forward to making the Army more resilient, affordable and efficient as we go forward together. So you heard those three words and those really are the lines of effort, the avenues that we focus on. Resilience, affordability and efficiency when you look at all those strategies that are out there. Resilience, our installations have to be resilient to do what our nation needs us to do. We already talked yesterday about the Army's core mission is to fight and win our nation's wars. We cannot fight and win our nation's wars. We can't go where our nation needs us to go if our installations are not resilient. And that is energy resilience. That is water resilience and that is the hallmark of our energy and water programs across the command and across the Army. We've got to make sure that we are efficient. We look hard at our energy use intensity, our water use intensity and make sure we are getting the greatest effect out of all of the energy that we use out there, all the water so that we are able to contribute to the readiness of the Army for all the formations that train on our installations, all the formations that deploy off of our installations and then finally efficiency. We've got to make sure that every dollar the taxpayers trust us to use that we're being good stewards of that. And again we are using that money to the greatest possible effect to support our installations, support the quality of life of Army people and support the readiness of Army formations. So as I'm getting the time card and we're almost going to run out of Q&A time, let me talk a couple of good news stories for you here if we can go to the next slide. Okay, so up here we've got Fort Carson. If you've been to Fort Carson, beautiful locations, a little arid, we used to use potable water for all the athletic fields, the golf course, everything at Fort Carson. Over the past couple of years I've used a combination of appropriated funds, a combination of Department of Defense, not Army, funds, and then bringing in a third party partner to work with them. And now all of the irrigation that's done on Fort Carson that used to be potable water is now treated water and we have saved that potable water for the people that live and work on the installation. The next two pictures here, both of these are Aberdeen, up in Maryland. We've saved over 3 million gallons of potable water up in Aberdeen through these two projects, again by treating water here. I bring it in making sure that what we are doing here for the boiler supply and what we are doing here for all the chillers, for all the IT equipment up at Aberdeen, again, used to be potable water. Now it is treated water. And again, through that we used a combination of third party financing and also appropriated money to significantly reduce the amount of potable water that was going to these projects are critical of the missions that happened in Aberdeen. Down here, Redstone. So the infrastructure at Redstone is over 80 to 90 years old when you look at the water utility all the piping that is here. 4 million or 4 miles of piping across Redstone arsenal significant water leaks. Again, brought in a combination of DoD money, Army money, third party money there to upgrade all that infrastructure we were losing 1 million gallons a month just through leaks in that infrastructure. Saved all that by fixing the infrastructure again, making the base more resilient going forward. Hon. Jason already talked about what we are doing in Fort Wachuka with our local partners so the last one I will highlight here is Fort Irwin. Utility privatization. We privatized water treatment at Fort Irwin and we went from having to treat over 50% of the water that was remaining coming out of the treatment plant to down to 1% back to that efficiency goal that I talked about significantly improving what we are getting for our investment for all the water out there in the Mojave Desert at Fort Irwin. So again, I am excited, I am excited where we are when it comes to our water and energy portfolio across the Army but I am really excited about where we are going but for all the partners out there we need your help and we want to work with you to continue to make the Army more resilient so we can use all the resources we have more efficiently and make it more affordable as we continue to go forward. So I think the rest of the panel is going to join me up here on stage and we are going to moderate with Ms. Jacobson our question and answer period. Over to you ma'am, thank you. Thanks to everybody. Now your turn. Who's got questions? Come on. Of course, John. So I am John Cogger formerly OSD Installations and Environment. My question is on Quadjolin. So SIRT have funded a study a couple of years ago saying that the aquifer in Quadjolin was going to get because of sea level rise it was going to get salinated and there was not going to be potable water on Quadjolin after we had spent over a billion dollars in infrastructure there. Can you comment on what we are doing to address the problem? John everybody is looking at me so I guess I am going to answer that question. John when you look at all of the challenges the panel just talked about and you know this and only hard questions from you I realize that but all the challenges we talked about are amplified at Quadjolin as you can imagine. I don't have the answer for you right now today but what I will tell you is across the board this team and particularly Corps of Engineers as well as the team from Space and Missile Defense Command looking at how do we make sure the critical capabilities of Quadjolin supports we have that long into the future and is the infrastructure piece but it's also the water and energy etc. We've got some work to do there as an Army and we're not there today but I think the white folks are working on it. Hello Shout out to Dr. Pittman, Jason Kirkpatrick from the U.S. Army Corps of Engineers Props sir My question is how are you integrating remote systems, uncrewed systems into your resilience plan for installations? Yup yup that's for me So yeah we got a whole UAS program that you helped develop for the Corps of Engineers by the way and we're doing that across all of our spectrum from warfighter support to civil works we got to take, if you saw our strategy you know revolutionized decision making that's all about using artificial intelligence machine learning and robotic systems including UASs to help gather that information very quickly to understand what's going on out there so we can predict what we need to do with that and then shape solutions to address them. So thanks for that question. I'll just add a little bit more to that with respect to these remote systems specific application is one that recently happened post-wildfire in New Mexico. Based on the airborne assessments that were able to be done and the modeling that had already taken place that was then added to based on the most recent assessments of the situation post-wildfire the Army Corps came in very quickly with the resources it had from the bipartisan infrastructure law to design a whole bunch of structures to prevent a second disaster from happening after the first disaster which was the destruction of the water resources infrastructure based on the monsoon season coming in and so we helped engineer those protective systems in place something that we got to do a lot more of given the propensity for wildfire in the West now. Looks like we are out of time so that's a good place to stop to hear about some of the exciting innovations that are taking place for water resilience. Thank you all so much for your time and attention.


So YouTube team keep it clean. What's going on the same grave and hit with another video and happy Monday. Welcome to a new week. Welcome to a new start of the week. And I hope that everybody had a great weekend and that everybody is doing really, really, really, really good. I love y'all, I appreciate y'all. Thank you for supporting and more so than supporting. Thank you for your positivity. Whether that's via Twitter, via the comment section here on YouTube, Instagram, whatever it may be, man. Y'all keep that up. Keep being positive, man, because again, it's way too much negativity going on in the world as is. It's enough of that. So adding to it would be pointless. But anyway, reviewing the Ravens offseason thus far, they've made some moves like bringing back Eric Tomlinson, signing Dion Kane and Benjamin Victor to Future Deals, signing Sammy Watkins, of course, recently. And as much as we really, really, really want them to truly invest like big time into the offense, we still can't forget about the defense. We can't. Because while I would much rather their offense ascend to new heights and take off to new levels, the defense, they still got to play a role, too. And one area where the Ravens just have not gotten it right in a long time has been at the past rush position. And it's been a struggle for years, for years, man. And they just, they've been trying different combinations. They've been trying this and that, but it just, it hasn't worked out. So what should the Ravens do? Well, this offseason, they brought back Derek Wolf. They signed him toward a three-year, $12 million deal, I believe, so super, super cheap. They also restructured the Deals of Kalaeus Campbell and Brandon Williams, so both of those guys will be back. So the Monsters will be back. And then Tyus Bowser, he agreed to a deal, too, and I believe he's getting paid 5.5 million per year. So another bargain move for the Baltimore Ravens. But a lot of us feel like, man, that can't be it. It shouldn't be it. Now, of course, we got the draft coming up and the draft is exactly one month away from today. One month, that's it. And it'll be here before you know it. So of course, you want to look at the young stars and the draft at the defensive end position and pass rush outside linebacker. But you also want just a good mix of youth and also veterans with experience as well. So that leads us to the topic of today's conversation, Melvin Ingram. And he is a name that a lot of Ravens fans have talked about. A lot of Ravens fans really started talking about him last year. Melvin Ingram, the defensive end who played for the Chargers, but is now a free agent. Now, when I watch Melvin Ingram, he reminds me of a more seasoned Jihad Ward. The reason I say that is because he's somebody that the Chargers would move to the left side of the defensive line, to the right side of the defensive line. They would have him doing stunts in Russian on the interior of the defensive line. They would move him around at different places. So what does that do for him? And what would that do for the Baltimore Ravens? That would add to his value. And like I told you guys before, the way that I envision the Ravens really focusing on pass rush this year is getting guys that can do multiple things.  And Melvin Ingram, he would fit that role very, very well. Now, when we look at his numbers, is from last year, it's nothing eye-popping at all. He did not register, not one sec at all, not one. He did get an interception though, but again, he's not a cornerback. He's a defensive in. So last year, his numbers, they weren't anything pretty, but then when you look at his numbers over the years, you see a certain level of consistency. Let's take a look, shall we? 2019, he got 48 tackles, seven secs. 2018, he got 43 tackles, seven secs. 2017, he got 56 tackles, 10 and a half secs. 2016, he got 60 tackles, eight secs. 2015, he got 65 tackles, 10 and a half secs. So you see the, when he's healthy, cause again, he only played seven games last year, but when he's healthy, that guy, he gets after it. He makes it happen. And as you can tell by his recent numbers over the years, he is definitely a closer. Now, one more thing to think about when it comes to Melvin Ingram, his age, his price. What's that looking like? His market. Well, his age, he's 31 years old. And we did say he's a more seasoned G-hard ward. So he's 31 years old. So while he's older, he could still come in and do some work. And he wouldn't even necessarily need to be a starter, but he could be sort of a situational past rusher.  He gonna need somebody to spell him every now and then. Boom. Melvin Ingram. And then of course, Wink could design some things where possibly both of them are out there at the same time. You just never know. Now another thing that a lot of people will talk about his market, his market and his price, because they go hand in hand. What's his market looking like right now? Well, the market for him and just really for defensive ends, period, it's been very, very slow. It has slowed down tremendously. And it never really quite got heated up. Because Melvin Ingram, a lot of us, including myself, we saw, oh, Melvin Ingram, scheduled to visit the Chiefs. And I was thinking, oh, okay.  And he's gonna find a new home with them. Rich get richer. These guys have spent a lot of money giving out some big deals. And they still continue to look for more pieces to add. That's why I always say the cap is cap. But anyway, Melvin Ingram went to visit with the Chiefs. He got there and he left without becoming a Chief. And it was said that they could not come to an agreement on a contract. They couldn't come to an agreement. So then a lot of Ravens fans saw that and was like, wait, there's still a chance. And you know there's an even higher chance since Melvin Ingram is a defensive player. Now you know there's an even higher chance because Melvin Ingram is part of what Ravens lost. They lost a lot of pass rushes this year. They lost Matt Judon. They lost Yanikin Gakwe. And they lost Jihad Warder. So two of those guys are defensive ends. That's Melvin Ingram's position. So Ravens clearly have a lack there. They have a need there. So why not? And I mean the last Ingram that you had, yeah it certainly worked itself out because he was not only somebody that helped on the field but off the field as well. And I know for Melvin Ingram, whenever you hear somebody talk about him, we don't hear it too much. But whenever you do hear somebody talk about him as a teammate, it's always an A plus. And then we of course watched the hard knocks and Melvin Ingram was somebody. One of my favorite things about him from that hard knocks, not even just from hard knocks, but just because it happened. But they just so happened to be on hard knocks so they got to film it, was Melvin Ingram, he wanted a raise from the Chargers. He wanted a raise from the Chargers and he was having a contract dispute with them. So he was like, I'm not gonna put myself, my body on the field.  But guess what? He still showed up to practice and he was still helping out the young boys. So this dude, you know with football players cause he can get ugliest, especially with veterans too. When they wanna get paid more and they tell the team, like I'm not playing.  They usually stay away. They play the keep away game. But he said, no, I still want my money but I'm still gonna help these guys out cause they deserve it. So that lets you know a lot about his character. And that's very important when you're constructing a football team. Character is big because it can go a long way. But anyway, as far as his market, after him visiting and turning down and them not being able to come to an agreement with the Kansas City Chiefs, he's still out there. And these past rushes, they're not getting these large chunks of money. You see, Carlos Dunlap, he just agreed to a two year deal with the Seahawks. It wasn't for much. I think he only got like 8.6 million guarantee but they really liked Carlos Dunlap. And he was there before and he was very valuable to them. With Melvin Ingram, he's just floating out there. He's floating out there. I was like Melvin Ingram, Jadavian Clowney, no Gino Akins, he's out there now. The market is very, very slow. It's very, very slow. So that would be beneficial to the Baltimore Ravens if they were truly interested in one Melvin Ingram. Now another thing that plays in the Ravens' favor when it comes to Melvin Ingram is what we talked about is exactly one month from today. And that's the NFL draft. The closer and closer that the NFL gets to the draft, the more and more every single free agent that's out there, their price, their market, their value drops. It drops every single day it's dropping because the NFL draft is an influx of youth, an influx of talent, and an influx of cheap labor. And yeah, it does sound pretty harsh but that's exactly what it is. These NFL rookies, especially since they came up with the new pay scale, it's not new anymore, it's been around for a long time, but ever since they came up with that, it's helped these NFL teams out so much. Just in case a guy is a bust. Just in case a guy ends up getting hurt and his career ends prematurely. Just in case this guy just, it just really doesn't work out. The investment is a lot smaller than what it used to be because oh man, these guys, they used to get paid.  And I mean, they still get paid money before they see the field, but before the previous rookie wage scale, it was just wild, man. He's too slow, it's crazy, man. But that came to an end. So now with these rookies, they're getting paid less than what a lot of veterans would be getting paid. So that's why I say it's cheap labor. Cheap labor. And you know, NFL, NFL franchises, these teams, these GMs, they love doing some cheap labor. So this is why if, and I'm not saying that these free agents should just take anything that they're given, but that market is getting rougher by the day. So this is why the Ravens, they have a perfect opportunity to take advantage of this. And if they added Melvin Ingram, he'd be a good fit. He go to a good team. He would not be asked to be the guy. He would be a guy and he could be a significant contributor, but he wouldn't have to be the end-all be-all. But he could certainly help. Team Keep It Clean, I appreciate y'all. I love y'all. Thank you for always being willing to have a conversation on here to where we can just talk football and we can express whatever ideas we have freely without disrespect. Even if there's disagreement, there's no disrespect. And that goes a long way. Appreciate y'all. I love you. And I hope you have a really, really, really, really great day. We out.