 Well, hello, and welcome to another Dev Nation. We have an exciting presentation for you guys today. We're going to talk about Visual Studio Code, and just so you guys know, that is my favorite editor. I use it all day every day. I normally have four or five instances of it up and running it in given moment, working on my Kubernetes YAMLs, working on my JavaScript, working on my Java code, and so you're going to hear a lot about that today. So we're very excited today to have Bob, and Bob is going to walk us through. Bob, by the way, is the product manager for this technology, and he's going to walk us through what's going on with Visual Studio Code. So we're going to turn it over to Bob right now. Thank you, Burr. Yeah, as he said, I'm the principal product manager in the Red Hat Developer Program. I am not responsible for VS Code necessarily, but I am responsible for our extensions that we do. So let me start sharing my screen here. Thank you. So just to reiterate, my name is Bob Davis. I'm a principal product manager. I run our efforts around desktop tooling, predominantly around IDEs. I also work with .NET Core. So I tend to do a lot of work here in our interaction with Microsoft and some of the technologies that we work on collaboratively. I think you're good at this at all. So the Red Hat Developer Program, we have some things that we're trying to do. One of the big things that we do is meet developers where they are. So we're not trying to shoehorn anybody into using specific tools, but they may or may not be comfortable or happy with. We want to focus on the tools that they enjoy, that you guys enjoy. So your favorite IDE, your favorite Git repo, your favorite CICD system. At the same time, we need to be cognizant of the fact that we're working predominantly with developers that are working in enterprise environments. So we focus on the tools that are being used in enterprises, including great Java tools, great Kubernetes tools, OpenShift, so that we're recognizing the needs of teams instead of an individual effort. We're recognizing software development life cycles, the things that enterprise care about. While we're doing all these things, we're also trying to work on flexible but opinionated tool chain. What that means is that lots of people use different tools. They need flexibility of tooling and deployment options. But having a free-for-all and say, hey, when somebody says, how do we make this work? And they say, well, however you want, that's not really helpful. So what we try to do is provide some guidance on HappyPath and let developers be creative in areas where it really makes a difference in where you're making your software as awesome as it can be and being creative in how you're doing that instead of being creative around things that are becoming increasingly commoditized. So the challenge here is meeting developers and their IDE of choice. We could do this in a couple different ways. We could ship several IDEs, but that's very expensive. And that's not a great way to do things because it means that we have to have all these huge teams shipping multiple IDEs. So a few years ago, a couple of protocols came out. One is called Language Server Protocol or LSP. And the other one is Debug Adapter Protocol. These are the best answer that we have. It's a single code base for an LSP-based adapter. It gives us the ability to write something that we command with very modest changes, get to work in multiple IDEs. It gives us the ability to build tools that can help the developers be superstars regardless of what they're using. So today, based on LSP and DAP and some other adapters that we have, we're shipping extensions for Eclipse, Eclipse Che, VS Code, and JetBrains IDEs. Language Server Protocol defines standard messages for completion, diagnostics, et cetera. The client and implementation are agnostic. It initially came out in, I want to say, 2016. Development is led by Microsoft, Red Hat, CodeNV and IBM. CodeNV, in case you didn't know, was acquired by Red Hat a couple of years ago. So that has really come into the fold. And we've adopted a lot of the excellent technologies and big brains that came along with that acquisition. Of course, Red Hat is working on it, so it's open source. And I've got the links there for where the repos are. How this all works is that you've got a tool, like an IDE and then a language server that it talks to. So when you open a document, that sends a message to the language server saying that something happened. So you open the document. The language server initializes the tool. And then as you make edits, it continues to talk to the language server and tell it that things are changing. And it gives you the ability to, the language server then calculates diagnostics, gives feedback. It tells you if here is the appropriate autocomplete or here is a mistake that you made a typo. You forgot a period or something like that. It pushes a diagnostic or it pushes the feedback back to the IDE where it's presented in the UI. And then any errors or suggestions, et cetera, would be displayed. That part in the middle is the JSON-RPC for the language server protocol. That's the standardized thing. So then you build the language server based on that. What we're doing here for Java is this is all based on the Eclipse JDTLS. Eclipse Java Development Tools Language Server. It implements most of the LSP features, adds some custom commands for Java. It's extensible, it's small, and it's been adopted by many clients. So you can see the basis of this Eclipse JDTLS in a lot of different tools. VS Code, of course. I'm sure if you're on this call, you're aware of what VS Code is. It's a hugely popular source code editor that's multi-platform. I'm running it today on a Mac. Other people run them on Windows or on Linux distros. It's open source. It's developed by Microsoft, but community-driven. The effort was led by Eric Gama, who also, I believe, yes, he did the Eclipse JDT. I forgot that I had written it in this slide. And one of the things that it does really well is that because it was designed around polyglot development, they decided to make a really smart decision to offload language smartness to these LSP-compliant plugins. So in a sense, what you're doing is instead of buying, instead of choosing an IDE that is big and bloated and supports everything, you're buying something that supports the things that you choose to import that you choose to add. So it gives you the option of building a race car where to add speed, to go faster, you add lightness. So this is what they've done. There's nothing on here that you don't need. What we've done in our developer program is we've developed a bunch of different language servers and other adapters for Visual Studio Code. Our Java plugin was the first one that we did. We shipped that initially in 2016. And we've had 18 million downloads. That is equivalent to that's over 3 million, I believe, individual installations. So every time we make an update, it refreshes and updates so that increments that install count by one or that download count by one. So every time we update, which is quite frequently, it's about every two weeks we ship, we see that. We have QBML, XML, our dependency analytics plugin, our OpenShift plugin, and our project initializer. These are ones that we've had in our portfolio for quite some time. And we've just added a few more. The ones that have the camel logos have been added just recently. And we're excited to see where those go. What I'll be showing today is the language support for Java. It's just a thin wrapper around the JDTLS that was initially shipped in December of 2016. And it releases about twice a month. You can get it from the VS Code Marketplace. And it's also been included in Microsoft's Java extension pack. So if you've downloaded that extension pack, which is quite excellent, it comes with the debugger and it comes with a bunch of other tools that you would probably want, you'll get this one. Remarkably enough, given the amount of existing IDEs that are out there for Java developers, the VS Code Java ecosystem is quite strong. You can see that there are lots of different things available, language support for Java, debugger for Java. These are two that are big, Maven. Debugger and Maven both come from Microsoft. Dependency analytics, language support for Java, OpenShift extension pack for Java. These are all from Red Hat. And there are a lot of other independent efforts that have come out from third parties. The OpenShift extension pack, if you're using Kubernetes and you're using OpenShift, this extension pack can really help you with managing all of the different things that go along with Java and OpenShift. It has the OpenShift connector, a server connector, a bunch of other tools that kind of bring together that continuity, so it makes it a lot easier for you. The other thing that we're going to take a quick peek at today is Code Ready Analytics. This is in the Analytics extension. It gives you application stack reporting of CVEs. It looks at your Palm.xml for a Maven project. Gives you security issues, licenses, and dependency details. So it can tell you if you've brought in a dependency that has any kind of problems. It can recommend a license based on what it sees. If it notices that there's a problem with a package, it uses some AI-backed recommendation engine to give you suggestions on what you might make a change to to improve your situation. And lastly, what I'm going to show today is a Quarkis app. So I'm not going to go into detail about what Quarkis is because just last month, Clement Escoffier gave an excellent talk about reactive Quarkis. It's called Subatomic Reactive Systems with Quarkis. So if you want to know more about Quarkis, I suggest that you check that prior, the recording of that prior DevNation live out. That'll give you everything you want to know. And I believe there are one or two others that hit specific issues around Quarkis. So let me switch to the demo. So I have this quick project. So let me move over to that and open VS Code here in just a second. One of the things that I like about VS Code is how simple it is to use. So I've navigated, you saw in the command line, I navigated to where my code, my source code is. I just typed code. And it brings it up right where I want it to be. So it makes it, it opened everything up, made it really easy to see what I'm doing. Recognizes this is a Java project. So it gives me a Java overview, giving me a sense of what kinds of things are available. So what I have here is a very simple Maven project. It shows me what my, it'll basically tell you what the temperature is. So this is running on my laptop. I can either start the, I can either start the server by going through the UI or in the terminal, I can start it manually. I can just type MVNW, that's the command for starting Maven, and then Quarkis Dev. And you see in the bottom where it says that it's starting the Java language server and importing the Maven project. If I wanted to start this with the UI, I would do it through here, Quarkis Dev. So while that's starting, we can look at the page and what it tells us. So this is my Java page that has the basics of what's going on here. You can look at, if you mouse over different parts of the code, it'll give you information about what they are. It tells you important things that you would wanna know. So like on this page, for instance, you get Java doc kinds of information, makes it very simple, very easy to find the information that you need so that you can be effective. See, are we started? Let's see. So on 8080, there we go. So if we enter a city, I live in San Antonio. Click on get weather, it says it's 51 degrees in San Antonio. Now the thing is, I live in San Antonio, Texas. 51 degrees, that sounds sort of like a winter temperature. So it probably means Santiago, Chile. So let's be more specific. And there we go, 82.83 degrees in San Antonio. Now, if we're internationalizing this, of course, only a handful of places use imperial system for that. So we can change this to metric. And I say it. And normally then what you would have to do is rebuild, but since this is a corkis app, don't have to do that. Click on get weather, 28.3 degrees in San Antonio. If we wanted to make this extra simple to help make sure that people know what the unit is, you can go here. This is the index HTML. We can make a change to degrees centigrade, just reload, say, San Antonio at your US. 28.24 degrees centigrade in San Antonio. Now you can also do some debugging through this. If we look here, we can add a breakpoint just like you would normally do in the gutter. You click on it, and then go to the debugger. Shows that I've added a breakpoint here. We'll attach it. So we get a full debug console. And if I run this again, I get some output. It tells me where the input is. This is the city that it pulled from the string and the value. And then it gives us some information about the different things. I can step through that and I get the return is w. So this is the value of the temperature that it's giving me. And then it moves on to follow the next thing. So that is a very simple demo. I skipped one. So if this is something that you're interested in, and it's something that you would like to get involved in, we have all of our developer program efforts are located in this GitHub repo. And so you can go there. VS Code is open source as well. Here's the link for Quarkus. If you have, if you want more information about the Red Hat Developer Program, just go to developers.redhat.com. If you have more interest in the VS Code Java extension, follow VS Code Java on Twitter. And that is all I have for the presentation. Now I've left some time for questions and answers. All right. Well, I'm back in the scene. We had a lot of issues with audio video throughout the session. That's not your fault, all Bob. I saw that. I saw that. I was trying to not get distracted by that. One question I do have is could you just kind of recap again what are the capabilities of that Java plugin within VS Code? I know you mentioned that we're using the Eclipse runtime underneath the covers, but one thing to be clear, it's not Eclipse the IDE, but it comes from the Eclipse Foundation, right? And it is the Java runtime language server in this case that gives us all kinds of the syntax highlighting, the ability to code complete, automatic imports, things like that. But yes, the JDTLS is really, really deeply functional. So I could read a list, but it's actually really boring just to have me read a bunch of stuff, but it supports code from Java 1.5 to Java 12. It does Maven, Palm, XML projects, basic Gradle Java project support. It'll do standalone Java files, of course, as you type reporting of parsing and compilation errors, Java doc covers, code outlining, code folding, code navigation, code lens. It provides a really very full featured Java development experience. So it's really rich. You can find out more information about the all of the different things that it does on the actual plugin page, which is if you go to the marketplace, oh, I didn't show how to load extensions. Yeah, I thought about that too. Yeah, if you would, can you go back and share again? Let's let them go back and share and show where the extensions are, because we'd like to see the XML one as well as the Java one and whatever other ones we can get to from there. I can, yeah. Here we go. Okay, that's the wrong thing. And that's the wrong thing. That's the right thing. So on the sidebar, you have a lot of different options. This is a OpenShift extension Kubernetes debug, but this one is where you find all of your extensions. So it's gonna bring up my list of installed extensions and you can see all the things that I have installed over time. If you search in the marketplace for Java, you'll see language support for Java comes up right away and it gives you all of this great information about what it does, including some animated GIF demos of the types of activities you can do. It gives you docs, how to set where the JDK is, available commands, settings, et cetera. There's, we're asked about XML. We've built the same kind of thing for XML and YAML as well. So XML, YAML, we build these language servers because they are the kinds of things that are important if you are doing Java, if you're doing any kind of Kubernetes work, these are the kinds of things that you have to work with every day. So we made sure that as much as possible, it's a very enjoyable kind of thing. I love that cork of slide that has the developer joy cartoon on it because I feel like that's exactly what we're aiming for on a daily basis. How do we make you enjoy the work that you're doing? How do we make your total superstar and make things easy and fast and fun? All that's fun as they can be if you're trying to work on a really bad problem. When you install different things, of course it gives you into the enabled and it always gives you recommended depending on what you're doing. Here's YAML. See 6,486,000 downloads. That's a lot of YAML. Well, I have my screen share up, but is there anything else I should show? So we should mention there's the Java debugging. Now there was a question. So there's a debugger for Java as well, right? And it's part of the overall extension pack. Yes, I have that installed right here. That comes with the extension pack. It's built by Microsoft. We have regular interactions with Microsoft. So the work that we do for Java really is very collaborative. And so they talk to us a lot about how to make VS Code a better Java editor. We talk to them a lot about how to make our plugins and our extensions work better for VS Code and for VS Code users. So it's the kind of thing where, as they say, the rising tide lifts all ships. And there's two other questions that have come in, that one is OSGI support. And I don't know about that one. Do you know about OSGI support? I do not know about OSGI support. Yeah, my suspicion is no only because the world has moved on from OSGI a few years ago. So I know that OSGI is a first class citizen Eclipse IDE, but I don't think all that magic was brought into VS Code. And then another question was related to Hibernate and Spring support like IntelliJ. That's from Rick here. And I think that's a very fair question because IntelliJ does have very rich capabilities that relate to Spring, the application that properties file, Hibernate, the Hibernate XMLs, and the Hibernate, you know, things like that. Have you, do you know anything about those things, Bob? Oh, I know that Spring works and they support it. Let me see, what's the... Yeah, definitely Spring and Hibernate are supported, but I do feel that IntelliJ probably has a few richer code completion capabilities than we have in VS Code right now. Well, yes, you know, one of the challenges of not having, I mean, IntelliJ is really sort of a bespoke Java IDE. So, you know, that going at something with that kind of singular focus does yield some additional benefits, which may or may not be important for everybody who is doing the development. But... Okay, I understand that. For those people who need it. And I was trying to answer the question for Alexander here. I don't know if an Eclipse project will import straight up. I've not tried that, but the actual Eclipse project hidden files, the .classpath, the .settings, those are all the same actually in VS Code Java, because you'll see them there. So it might be just copy and paste them over. I mean, this project that I was showing you, I just cloned it from my Git repo and brought it in. So the classpath was there, Java version, the .projects, everything is just there. So if it's in the repo, it'll bring it in. And if you have a link to, there is a link to the main VS Code for Java page. I just don't remember the URL. If you could find that and add it to the chat here for Stu. And then while you're doing that, there is one more question. I don't know if you can multitask here from Mark, that is very interesting to me. And would it be possible to sell the LSP server on a server as opposed to the that laptop? And then that way, everybody who was interacting with that server would actually start from the very same infrastructure, including, you know, that way everyone shares the same formatting, the same everything. Oh my, that is a provocative question. You're asking about a glitch chat, aren't you? Yeah, yeah. So we have Che for that experience on the server side. Che provides that experience in a very strong way. It gives you the whole, a shared environment. So your team is all working together. Eclipse Che is another open source project that we're in, and I keep moving out of the way of the camera here. There we go. Eclipse Che, we're involved in. We have another product if you're using OpenShift. It's called Code Ready Workspaces. And that is the exact thing there. So I'm trying to find the link. Who was asking for the link about what, and I just provided Bruno's blog, you know, because Bruno's done a good job documenting these things. But I thought you might have a different link. You can just drop it in their general chat. There was a, somebody was asking for the link for the, Oh, right, okay. Yes, there we go. All right, fantastic. So that link, the marketplace.visualstudio.com link, that technical support added in, that's our homepage for all of our extensions. So you can go there and you can look at all the different things that we have available. The- Okay, we are out of time. So if you have any closing comments, let's go ahead and just wrap this thing up because I know people have to get on their way for those people who can still hear and see. And then we're at the top of our 30 minute duration for this. Just thank you, everybody. I hope it was valuable for you. And I hope that you feel like you used half an hour very wisely today. All right, well, yes, thank you so much for that. Hopefully you guys got a little bit of information though and introduction for what VS code can provide. Again, as I mentioned right at the very beginning, it is my favorite tool at this point in time. I have switched over it entirely. I don't have any other IDs installed on my machine at all anymore. And therefore if I'm doing JavaScript, Python, XML, YAML, Kubernetes YAML is like crazy, VS code, Java, right, all that works really well for me. So I really enjoy it. Plus I'd like lighter weight tools as opposed to big old IDEs. It's just kind of my historical trend. But thank you so much for your time today. Thank you so much, Bob. We're gonna have to close this thing down. So have a great day and we'll see you guys at the next day of nation. Thanks, Per. Thanks, everybody.