 Hello everyone, welcome to my talk. I'm excited to be here today at DevCon for CZ and I hope you are excited too. It's quite a lot in the day I hope I can keep you entertained with this interesting topic Topic which is close to to my heart as well Developing in Java, and we're gonna take a look at Quarkus today. So let's get started A couple of things about me I am a tech evangelist at Red Hat technical marketing in other words as well I've been a Java developer for many many years If some of you have heard about Java AWT Or worked with Java swing back in the days or if you've done Java 1.1 Then yes, we are talking about the same time. I worked a lot with CICD in the past continuous delivery Back in the days, it was called continuous integration and before that it was just called automation So I've done a lot of that with some of the systems like IRICS, etc. or UNIX and Ship software through that as well I've worked with interesting things like struts and Java E as well Walter Dunn open stack automation and Kubernetes automation as well. So Bringing all of that experience together. I want to share this Session some knowledge with you today Of course, I work with Vertex and Quarkus. So this talk is heavily Care towards that and then of course, I have some of those things that you could share You could look at for example GitHub Twitter, etc. Feel free to subscribe and follow So yeah, so what is development? I mean, we've been developing software for many many years Some of us for a couple some of us for more and the industry itself a long long time Now development as it says is is fun. I Love it. I hope you love it, too In development, of course, there's many different phases. There's planning You know analysis. Yeah, we can take our headphones off for that Development, you know the most fun part I would say and then of course some fun there with testing and integration I'm sure you've had your fun with quality assurance quality engineering Different things happen and different forest stories come out. So it's it's an interesting exciting time And of course deployment now in our talk, of course, what I want to focus on is development What does what do we have for for Java developers in store? What can Java developers as of today? Do in their development, how can they be a faster? How can it be made more simpler easier? What kind of those features that makes it more development productive? So let's let's take a look at that later today Of course, I mean When we talk about development, all of you must have had different experiences like I said, I was doing a duty back in the days I was doing, you know, automation with Unix and Linux systems, etc And of course doing Java development, which was going to cross platforms like deployed many many different platforms and operating system across the world So when that happens, I mean all of us come through and come from different backgrounds and are working on these different platforms You might be doing microservices. You might be doing a serverless applications on one of the cloud providers or on Kubernetes You also might be doing event-driven Applications and of course in some cases you might be doing applications in a traditional old way. So Java as of today runs almost anywhere, right and all of these different kind of environments and architecture patterns need Need us to create those different patterns and applications in a more easy and simplified manner. How does Java Help us with that today. Of course, there are many different tools out there to work with You know, you could look at Development kits which are provided by cloud providers, for example to integrate there But then again, what you're really looking at is how can I be productive? How can I have the same experience that I do on my local machine? Being able to connect to environments like Kubernetes and OpenShift as an example Do the same microservices serverless event-driven application development as well in a simplified experience so That's what's happening today. And of course all these Different architecture patterns needs different kinds of tools and libraries as well. So if you've been developing Java for for a long time, I Mean, there's no hidden truth about this Couple of years back. I think prior to Java 9 as well They were issues with for example containerizing Java applications. They won't stay, you know, stay up for a long time They use a lot of memory There's a lot of, you know, startup time Overload, you know overhead loading classes like, you know, that you that you might not actually need sometimes So not a lot of them and most of them basically we don't need so there's a lot of memory over here Incompilation doing it, you know at startup time, etc Made Java much much much slower To start up with, right? But then again, if you if you've been started you might have even heard prior to Java 9 that, you know Containers were crashing You know boundaries, etc. Those things of course have been Have long been fixed, but still I mean from a container perspective Java becomes used to become a memory hog. So that's that's that's a truth that was out there The heap would get bigger and bigger and of course That would create challenges. Now the challenges of course are there because a Java was created in a different context of time Where we were looking at big machines and deploying a lot of applications In there as well. So if I just kind of quickly go back what I was what I would say is like, you know With with a multi application server that would run We would expect applications to run on it and we don't expect it to To to giant anytime soon and it would run as the application life cycle would be for months Whereas in a microservices world in a serverless world, you're looking at, you know days and minutes and seconds of Application lifetime and that of course challenges job because job was created from from a different context when it was done Back in that time. So how does that change today? Gonna take a look at it. So our world, of course is full of, you know, different things. We have legacy applications, you know Traditional applications that run with Java. We want to go into microservices. And of course, we want to go into Writing functions as well. How do we do that? So Okay, so Java has problems with containers is Java dead Funny enough if I try to search something like that on Google It gives me like what is it 49 million hits or something? So So but it is it is not dead, right? There is there's a lot of things that Java can still offer So what is quarkus? What can quarkus do to solve this problem? I mean simple quark is an elementary particle us being the hardest thing in computer science But you know that elementary particle that small thing is what we are looking at that is exactly The kind of Java we want to work with because come on if we are going to do Serverless functions. We want them to run quickly for a couple of seconds We want them to die and then of course we also might want them to scale and we do not want to wait for that to scale We want it to be fast efficient, you know, whatever kind of library we use if we want it to be quick and does the work so Of course quarkus brings And this talk is about quarkus so with my bias, of course Quarkus will run And with your microservices, I mean there are platforms or frameworks that are out there already that do That could help you with microservices However, quarkus is built in a way that it runs with a very small memory footprint And it can and it can start up very quickly etc So it's it's a really good fit for microservices and you can scale it even further down and And you can write functions in Java as well You no longer need to just write go and change your language It's just because you wanted to write functions and Java was slow enough You can now do that in quarkus with quarkus. So we'll take a look at that today as well So let's take a bit more detail, right? I mean What does quarkus really do? Quarkus has you know Works with with growlvm Quarkus has a jvm mode. So there's a native mode, which is the growlvm mode There's a jvm mode, which is which we can run let's say with open JDK And then there's traditional cloud native stack applications as well right traditionally how you would write your microservices So this for example is a very very simple example of Rest application here you would see hey the traditional stack just to print a hello world endpoint Takes about 136 megabytes of your memory If you look at the quarkus in jvm, it's 73 megabytes I can trim that even further down with growl and native to 12 megabytes now Of course, these are different use cases when it comes to native and jvm But then with jvm even you see almost half of the time is improved So there's a lot of optimizations that quarkus is also doing Quarkus is you know supersonic it is extremely fast as well to submit the seconds if I was to look at a simple rest endpoint doing Quarkus with quarkus native is almost like point zero one six of second But then again, of course if I do jvm it goes up to one second only not four seconds or five seconds or ten seconds It is it is it is a much much more faster runtime. So imagine you want to bring up your Serverless function, which is really small Does a certain thing, you know goes out calls a specific API does some processing and finishes that up You know, you're looking at submitting second times here So it's it's not extremely It's not slow. It's extremely fast. You could write your microservices with quarkus Let's say for example in jvm, you can make them run for even longer sessions, right? So you don't have to Stop for example like in quarkus native, which is more geared towards serverless, you know, of course does not have all the awesome garbage collection algorithms that jvm would usually have but then you could choose jvm and even in jvm It's less than a second that it starts up for example and uses an extremely little time of little amount of memory Then of course, let's take a look at a rest plus crud application And in a rest plus crud so simple, you know create update delete kind of application using the database at the back end You're looking at quarkus native doing, you know Again somebody second startup times whereas quarkus jvm goes a little bit higher goes up to two seconds Of course, there's database connections, etc. All of that that comes into play But you know quarkus still has optimized runtime for that on the jvm and with a cloud native stack again That goes to its double amount as well, which goes up to almost like 10 seconds So you're looking at a runtime which is giving you extremely small size at the same time Giving you some extreme performance as well. And and that is what quarkus brings to To to the java world. So what is what is quarkus sup supersonic subatomic java? As we say it is a it's a kubernetes native java stack kubernetes native means that it literally is geared for For java to run on kubernetes for java to run as serverless functions for java to run as Serverless services and for java to perform In these environments just like any other language and even better in many cases and it's tailored for growl vm And open jdk hotspot as well. So it's not just about that it Uses native Growl vm functionality, but it also optimizes With open jdk as well. So you can still run like I said with With jvm mode and you can still get optimizations in there as well. And again, it's crafted with a lot of Awesome libraries as well Like for example, if you were working with integration code with camel you have quarkus camel as well that you can use To write all your routes and patterns that you're used to in your integration You can do that too. So quarkus has some awesome libraries there and we're going to take a look when we get to the demo part as well so This is how our world looks now. I mean It was a bit different a couple of slides ago and it should be different now. Now we have our java mascot everywhere It's it's in our microservices It's running some of our legacy code. And of course, it's also running The the functions now, of course legacy code or traditional application server style applications That's not what quark is is fit for but quark is definitely fit for microservices and so on so more on the right hand side Then on the left hand side here. So perfect. Awesome. Let's um, let's get into Our demo so we get a switch my screen here Give me a second Okay So my environment hopefully You're able to see this as well So what I'll do is that of course, I have a project already created which is d2 And you know, I'm using IntelliJ. You can choose any Any tool you like so typically you could just go in here say hey create me a new module And in your module you can say I want to create a quarkus module and select your extensions, etc Etc. So that's one way of doing it. It's it's part of the IntelliJ What? Plugins as well. So you can you can use that you could also go for example on to the browser And If you went to the browser Let's just do this If you went on the browser You could go on something like code Quarkus.io And on code at quarkus.io You could also select Whatever kind of extensions you want can search them For example, select them and then of course you can download that or or or push to GitHub as well So that's also kind of Kind of cool That you could do that. I am not going to do that today. I will be working more on Using something called the CLI. So quarkus has a CLI which I have installed of course And What it does is it has a couple of let me just It has a couple of parameters. You can create your application You know, you can build it. You can add extensions, etc So it's it's quite user-friendly in that sense And I'm quite used to since I run on a Linux machine here. I'm quite used to Running Quarkus through CLI as well. So I'll just say quarkus create Let's say d2 was working. Let's say d3, right? So I create demo 3 here And it's going to go And and create from code dot quarkus.io It's going to create an application now. Simply, of course, I'm using IntelliJ. So I'm just going to say hey, you know, just drag in this module For me We're going to do that three Okay Finish Here as well Yeah, I just oops. Yes. I'm doing sick. Let's do it again Let's create quarkus d3. So I just had to change my directory. So now I have my My demos just gonna do that again And import my module. I was wondering why there was an extra one there, but okay, never mind And maybe just in case I want to delete this one Delete perfect. So just to keep things clean Okay, so I have d3. So let's go in d3 And in d3 I have So I've created this application, you know through CLI now I could do quarkus Extension list and it's going to tell me which extensions like already exist. So it says quarkus rest easy always already exists I can say quarkus dev and it's going to start a local quarkus session For me, you start developing code. So usually if you were developing in java, you would be You would run something Then you would try to compile it then run it again What quarkus does is something called life coding. So you can see it says here Life coding is activated and my application is already listening on local host port 8080. So if I go on my My local host here, I can see I have my application already loaded I also have my hello endpoint, which is just like the generated code that has already been written And then of course, I also have something called Slash qslow step, which is basically Which we call the developer ui now This is pretty awesome because now here I can see all the different extensions that quarkus has that are loaded into my current runtime That it actually uses and also it shows me. Hey, these are the beans that are loaded in your environment You know, these are the interceptors. It's like tra and since it uses arc Here you can see that arc is loaded And and a lot of other stuff, right? And then of course the configurator as well It shows me the the configurations that I currently have now this will of course change If I actually also Added more extensions it should it should typically change So we'll we'll see how that works as well. So let's go back to our Local host 8080 and we can see our application is there. Perfect. And here you can access to it gives us a bit of group application You know, etc, etc Stuff like that. So hello rest easy is out there. So let's do a simple thing. Let's go back And change Um the IntelliJ In our IntelliJ. Let's go back and change our greeting resource. So it says hello rest easy And let's let's just say hello death Awesome And then we just go here Click and here it's life Reloaded everything. So you're actually Coding on the fly doing the stuff In in quark is um as you go along So we can just keep on playing with this And we can keep on doing this and this will work awesome. So you can see it goes like that But what about what about if I made a mistake sometimes you all make mistakes? How does that work? So it will throw an error right away and not just simply Um, the full stack trace of everything that's going on, but at the same time also Showing that hey, this is a reverse stack. So you can see that you have a problem here You expected a semicolon rather than going all the way down. You get a reverse stack. You can see that here And you can also see it on your And on your console. So so let's Let's quickly take a take a look at our browser as well So if I go on the browser, I do the same thing And you will see that yes, I have exactly The same problem. What about change it back in my intelligent? Like here and I pressed save I go back again Try again Fresh and there you go. Defcon is awesome. So now we have the changes. So it kind of like you keep on doing that and it keeps on It will keep on working exactly The same way Okay, perfect. So let's go back to our intelligent and we're gonna Open so so so this was the part where you say There is actually zero configurations at this time in my application props This is just the default application that I just created with a greeting resource Now what I can also do is I can also if you were if you wanted to do Testing like for example You like test urban development you could run your you could start running your tests as well. So here I just press r and here it says, hey, you have a greeting resource test and it expected hello Rest easy. But by the way your test is failing. So I can actually start to code on the fly And say hey, it wanted to be hello rest easy So let's just take that that's a bit of cheating. But you know, you can cheat a bit And here I save it and you can see now my test is passing So I can see I can actually work life Do my unit test change my unit test save them and they're doing that Imagine that if you were doing that Without this kind of a functionality you're here. Just can start creating new methods and functions for your application And and do the proper kind of test urban development if you wanted to do that So it's it's pretty awesome that you can you can do that so Great way to get started as well So now let's let's take a bit more look into some of the other things as well So here what I'll do now is so so we've seen life coding how life coding works We've seen how How we are doing test driven development. That's that's a great feature that you could do in your dev mode We are in quarkus dev mode What about if I wanted to add let's say Extension an extension quarkus extension Is used that for example camel is an extension You know database access will be an extension. So there's a bunch of extensions That you could basically use With quarkus. So when I do quarkus extension list it gives me The list of extensions That are currently out there and there is a bunch of them. So remember we saw them on code.quarkus.io as well So now Let's just say that I want to add Quarkus extension Which one was it? Let's add hibernate So I add hibernate or input panache I will add hibernate validator And then I want a JDBC Postgres SQL database. So one thing I just want to make sure that there is no Postgres SQL database in my system at the moment Stop that just to make sure of that and you'll be you're saying. Oh, why why is he stopping the postgres SQL database while he's adding it over here? So I'll tell you why so So I add this extension over here And of course I'm in the wrong directory on stuff Now I'm in the project and of course I added this here. So now if I go back to my To my browser And hit the local host And go on my dev UI Voila, I see data sources I see hibernate orm. There is no persistent units. No entities there. No named queries But hey, there's data sources and why does it have data source and it already has a default data source So what is that that default data source is? The test containers working by default in action in this in the system. Let's take a look at that. So When I go back to my local host here, you will see that it started to Initialize step services manage database And that is basically creating Um, the the container in the back end. So if I went in any big blocker. Yes I would see that there is Um, a test container that is running right now Uh in the back end Postgres SQL here For my application. So this is awesome. Like I don't really need to really need to worry about this Every time my application will start In dev mode, it will automatically Just just do that as well So So that's That's awesome. I can I can actually do that. Um, let's Take a look at application properties. There's nothing in the properties and you know my Um My database is is just running by default which you can see over here if I go back Now and try to create. Let's just try to create a new entity. I created to do Entity here And what I'll say is that it's an entity So similar to what you might be Familiar with Let's see Somehow seems like maybe hasn't picked up Let's see if that works Yeah, there you go Extends penash entity now there's penash entity and penash entity base penash entity base gives you So penash is a is a framework which is which is quite cool. Which gives you these uh possibilities to To work with these, um, you know, you could use your active Repository pattern if you wanted to you can statically call the methods, but it's an awesome tool for For running with your hybrid applications and kind of takes care of all this glue code that you will usually need to write So in in my case here, let's say I take my to-do application Um to do um pojo here that I just created and I'm gonna just maybe create some, you know, simple Let's just say in my to-do. I have string title I want to make sure that this title is not blank Since it's the main title and I also want to make sure that this column is Unique right so give it a Property Equals to true right so I have that then of course I want to add Maybe an order to this Now order is is a fun thing because order is also Something that is in the database. So the database We can we can choose a different name And you just say hey our column would be called ordering instead And then of course Boolean I choose completed Whether my task is completed or not And then maybe So here I will save this and what about if we actually add some helper functions add some static Helper functions as well That could be our to-dos and we say find Completed So get all the ones that are completed and here since it extends Panache entity it can actually Directly call some of these Methods so here we return the list of Completed items right so I'm just going to cheat a bit here And we say Right we can also do something like And here we do Delete again because We are extending the Panache entity we have these helper functions So this is a simple entity that we just created right just out of the box a simple pojo Now what happens let's let's go and see What's happening on our browser here? So I'll go back. I'll say hey hit my URL again And I should see Automatically that there is now entities. There is one entity called to do There is some persistent units of create and drop scripts are automatically created Um, and then you know no named queries But then again, I can also go into the database and here you can see that it's connected to my local You know container database with some default password name and users and some properties as well Another cool thing is that I can actually copy these you know Directly into my application or properties as test and production profiles as well, which we will Which we'll take a look. Hopefully later As well. So I got a multiple bunch of options here That I could use just because I added in your extension. So what about What about let's say that We go ahead and we add a simple rest endpoint And and see how how that's going to work as well. So let's do that. Let's just go back to IntelliJ and we're going to create a new A new Java class And we're going to say to do Resource And this of course in this case what we're doing with to do resource is We're making sure that it's our endpoint that is going to serve our rest and we're using rest easy and we're going to use Jaxrs as well. So that's going to help us to to Take our api out. So here we go Jaxrs And we're going to say api As api And then of course we can say add consumes And we're going to add tie Application JSON just making sure That all of this does that we could also do this on each Each of the Functions, but you know just making it easier over here. So what I'm going to do now is of course I'm going to cheat a bit I'm going to just copy some code Long code here in respect of time and go through that so So here you'll see that What I've done is I have added a couple of things And I've added a get all method Which is using the sort Coming out of panache And it's going to sort based on the order of the tasks It's going to have A function called get one We're doing a create so we do the valid to do item to get the actual To do item in JSON And all we do is item dot persist and it's going to save it back into the database So now if I go back to my endpoints here And I I say Let's go back to our endpoints And I say slash api Wow Something is missing. What did I miss? So I've missed a library Nice, which library have I missed? Okay, so Happens right so let's just add that library extension add And since it I know this error. It says your tool dot area list is So java did you do that error list with media to have vacation json? That was the error I'm going to add an extension called rest easy json b and that's the one that basically Will help me parse this json, so I do that And cork says that in here you can see that I got a lot of errors doing that But then again, I I will go back to my browser And I'm going to click api And whoa, I get another error. Do I let's see So it doesn't It doesn't like message body writer Okay, did I miss rest easy? Let's try this again So here we go. Here we have the slash api And we can see the endpoint that it returns nothing So what if what if I did something like created Let's go back And let's go back to our intelligent And if I created an import dot sql file Let's do that file And here I'm just gonna drag Some of the some of the things that I that I want in like by default in my testing I do that and I refresh my browser Let's do that and I can see whoa, I have all the different lists here That I added all the tasks are coming in json now So this is great. Now I have the different you can see how life going is working I can do all of this on the fly And and making all the changes as I go long One thing that we that we want to do now is also look at remote depth So you can do all of this, but then you can also do this Remotely in in kubernetes since it's a kubernetes native stack, right? What I've done. I've cheated a little bit here I've already deployed my quarkis. Sorry my postgres database And I have it's it's in here What I want to do now is deploy my quarkis application as well So I could deploy a native application by saying minus p native or I could also deploy You know a jvm application at this point from a developer productivity point of view it doesn't It doesn't really matter a lot, but what of course we we kind of need to do is we need to Give some properties to it, right? So we need to set up some properties and say hey This database service is called postgres slash database You need to hit that one With the right password and log in because this is no longer About the development environment. This is now Going into production. So let's let's go ahead and and do that too. So if I look at my Application dot props, which is kind of pre loaded. I'm doing a drop in create This is kind of like a staging environment. So we could do that We want to see the sql We want to see the rest in crime, etc And and all of those things We want to see as well. One thing I also want to do is basically drag some of the You know my ui As well. So let me extra files that I copied which is a java Script and some index to do html and all of that. So awesome. So there is There is my front end loaded as well. So we did to the api bots. Now we also do this. So so now let's close our depth session here and basically let's just kind of deploy and Deploy our application. So mvm I'm gonna Say deploy Kubernetes deploy true But before we do that and before I forget that What we want to do is we want to add the Open shift extension because we're going to use the open shift developer sandbox So i'm going to add the open shift extension here Unable to list extension unmatched Open shift Okay Yes Did I miss that before? Yes, I did. I actually missed the ad command. Perfect So so now I have the extension added and by doing this now opens Whatever my Open shift environment i'm logged into this will automatically Deploy into that environment and usually when you're working with Open shift You can you can kind of say You can see what's you know where you are So here's my link on the server and also my my project that i'm currently in So it's going to basically just go ahead and deploy my application in there So what i'm going to do now is i'm going to deploy my application Into Into open shift. So let's just go ahead and do that simple mvn clean package Uh Kubernetes deploy true means that deploy it to kubernetes open shift is a kubernetes distribution with a lot more other value added in iCVs Um, and then of course skip test. Well, we only have a hello world test. So we can skip it. Let's do that So now it's going to start basically Create a build in open shift. So let me just Yeah, so here it's it's creating if I go in my target directory here I will see that, you know, it has started creating some kubernetes manifest files You know From my build So you understand exactly what it wants to do. It knows what the you know, what kind of image you want to use All of those things it already knows and it's going to start deploying and creating a build which is an s2i build On top of the open shift environment. So let's go ahead and take a look at the open shift environment, right? to help me guys not this one So here's my open shift environment If I go in my builds, I can see that d3 for example Is being built and the build is running and you can see it's being running there as well But I can also see that, you know, it's receiving the standard input here It's copying all the stuff going around the environment. I haven't given any specific environment any specific metrics, etc You can observe Your application here as well and then of course we're in the topology view where we have our Postgres database as well. So quickly, let's go back To our intelligent environment and here you'll see that hey, it's copying a lot of stuff It's pushing the image to the registry push was successful It's deploying to the open shift server and then it says hey, I did it And because I have set the exposed route to true It is actually deploying that entire thing And then exposing the route to as well On this as well. So let's go back to our open shift environment and see how that's looking. So here we can see D3 is deployed if I go in my logs, I see hey, the application is deployed It was pretty fast. It started in less than three seconds, you know, creating container and everything And with all the different things in there And guess what it also has my application. So if I go here, I can see my My application if I go on the dev UI, it's not gonna work because dev UI it it treats it as a production environment right now It's not gonna it's not gonna work. I could also go and say to do dot html and here I will have my to-do application as well where I can see what's going on If I go to my api I will again see As well Which has no data at this time, for example So we can go back to do dot html and say learn Quartus That's my new task. So it'll just add the stem for example. So stuff like that. So it's awesome. It's my application is deployed It's working. It looks great. But what if what if I actually wanted to You know do some remote development, which means I want to make changes Remotely so in in respect of time, which I believe I don't have a lot left to being quick here I'm gonna let's go back and do some Some more settings here and of course I'm copying here just to just to make it even more enticing I've said that hey, I won't I don't want my dev services enabled But I do want you to say Do want you to launch quarkus in dev mode, which means that it's going to add all the Easiness for me to work remotely from this machine directly into my kubernetes environment, which is which is also pretty awesome And I'm also telling you that this is my This is my application, which actually is not so let's change that Oops copy easy copy, please And control so here I have my My route which is my applications route. So it knows that this is where it needs to listen to So I've done that I've made those configuration changes same thing. Now what I want to do is I want to say quarkus And I want to say Remote dev. So now it's not just quarkus dev mode locally. It's remote dev Which is the outer loop which is on kubernetes. So I do that To the remote server and if I make any changes like let's say if we were Going back Let's do this if we were Going to a browser again And I said open this app. I can see this page right now, right? So so this is the default page what if What if I went back And change this page what if I just Removed index.html You will see that as soon as I hit this It is going to try to Change that and Hit them. Okay. Anyways, so if I hit hello here It does that too. Okay. Perfect. I was going to try to hit that So index.html comes there, but what I'll do is I'm going to rename My to do.html to be the name The next page here awesome And now when I hit the index page It's going to basically Send that out To the application and here you can see that actually We're reload. Let's just do that That helps Here you'll see that it actually Reloads that entire page if I hit that again now my index page is actually on the to do.html Let's go back. Let's do something more interesting if I go on my resource And here I say Something like this thing Or perhaps what I do is that I remove this function completely And then if I go back To my browser Set up this Run again You will able to see that Over here it has sent a new quarkus runnable jar Into my container very quickly And in my browser my application is loaded. So if I try to say Learn something new It doesn't really do anything for me because Guess what? There is no create function anymore. So how about we recreate that create function? Save save it again. So here I have my create function again And I'm going to save it And I'm going to go back to my browser again And here if you go back And see an intelligent as well that it has actually Sent all those details there, which means that if I React to today That will go in and now I have something that is that is working I can say is You should start the quarkus project on github. That's done. Visit quarkus website Get all the active projects so you can see all of that is working So that's that's a little bit of uh, prelude into the different features with with quarkus with dev services, etc So let's just go back to our presentation Let's let's let's talk about that To finish it out. So what we've seen so far is that you can You can easily have the different configurations, you know simplified Something that I did not show though, but like in in respect of time, but happy to happy to talk about it later and Is where you can actually copy your configurations through the dev services console as well So to this the dev services ui in the dev mode gives you all the different possibilities and configurations that you can copy off as well If you did not know them for example to good productivity features there And the configuration as you saw is extremely minimal. You get the reverse stack trace to You get all the different extension views in your dev services ui Developer ui you you get your you know test containers integrated by default. So if I was to add any other database For example, mongo db or If I was working with Kafka streams All of these will also be easily used or if I was using something like the key cloak project That will also get loaded and easily doable through the dev services. So Awesome developer ui Continuous testing. We also saw that easily able to test applications You know, if you're going to going towards tdd does some great work remote dev with kubernetes Like we just saw it right now with some basic functions But you know, you can do like pure life coding with that as well And then of course you can deploy microservices or functions on to Onto kubernetes as well. So that was that that was a that was a small Demo for you to kind of get inspired and hopefully you will like it One of the other things that quark is also does it it has a reactive core and that's why it is so performant too So which means that you can basically write endpoints with reactive and non reactive code at the same time And and quarkis understands it. So you don't need to spin up different projects to do it in your same You know by domain, whatever, you know distributions you have in your application. You can easily choose to do reactive Possibly recommended that way But at the same time if you wanted to mix and match in one endpoint, you know, go ahead You can do that too because quarkis is reactive in its core Lots of frameworks 300 plus extensions today, whether you're using, you know, kubernetes extensions key cloak You know jager Camel all of those extensions are out there for you to use and if you wanted to write your own extension You can do that too with quark us as well. So to end the session How do you get started? I use the developer sandbox. So you have the link there You can sign up for a free open shift developer sandbox, which runs for about 14 days You can deploy applications to it and you know kind of play around with how that works You'll get more off this on quarkis.io I've also attached the source code for the demo app here And there's a bunch of other things that you know, you can also look at for example the idc validation report That talks about the quarkis performance that we the numbers we saw for example So in the end again Thank you very much for listening And hope you like the talk and if you did please give it a thumbs up and Looking forward to speaking to you again on the channels Cheers