 Hey, everybody. My name is Lance Ball. I'm a software engineer at Red Hat for the last couple of years. I've been working on this project that is now known as Knative Functions. I want to show you today how quickly and easily you can get up and running with your first Knative applications using the power of functions as well as camel K for an event source. First of all, I want to talk a little bit about what Knative brings to the table besides what everyone already knows about, and that is scale to zero. It's also very much about developer happiness through the Knative Functions programming model and client tools. It's about ease of deployment using that same CLI as well as the Knative Client CLI. And then finally, we've got this common event format called cloud events that ties everything together. It's that common thread that goes through the Knative serving, eventing, functions, modules, the building blocks. I think that these three things all come together to make Knative something sort of greater than the sum of all these individual parts. So functions. For a lot of developers just coming to Kubernetes, it's a lot, right? There's a lot of mental overhead. There's a lot of things you have to learn. Knative functions is a programming model and a set of tooling that works to kind of reduce the friction when you're first coming to Kubernetes. It significantly reduces the time to productivity, I think. All right. So how are we going to do this? I have this demo that I wanted to do today, but for obvious reasons, I'm not actually going to do the demo. But for the record, I do have it down to under five minutes. This is a kind of bad diagram that shows what we're going to try and build. First of all, there's a camel K, KAMLIT. That's going to serve as our event source. It makes polling requests to the Twitter API, the Search API, converts those results into cloud events, sends those cloud events directly to the Knative event broker. That's the little hollow diamond that you see there in the middle. That event broker has a couple of triggers associated with it. One of them sends cloud events to a translate function, which uses the Google translate API to translate the tweet if it's not in English. It returns a new cloud event to the event broker with a new type. That new type triggers another function called a viewer function, which does nothing but print that tweet or the cloud event of the tweet to the screen so that we can see everything working. Okay. So let's take a look at the code then. Here's our translate function. It's pretty simple. You can see it's just a little bit of JavaScript. It receives a cloud event. As the data for that event, we have the tweet. This is coming directly from the camel K, KAMLIT. We check to see if the tweet text is in English. If it's not in English, then, well, if it is in English, then we just return a new cloud event with the body of the tweet text as our data. If it's not in English, we call the Google translate API and return the results of that as the data for our cloud event, as well as the original tweet text. The next function that we have in this little application is a viewer function. It's even simpler than the translate function. It's written in go, and all it does is receive a cloud event and print it to the screen because, like I said, we just want to make sure that everything works. In a real application, you're going to do something a little bit more interesting, I hope. Okay. And this is the Twitter search KAMLIT. It's really just a bunch of yaml as long as you have your access token, your API keys, and your secrets and some sort of search term that you want to search for. You're set. You deploy this thing. It starts polling the Twitter search API, converting those results into cloud events, and sending them directly to the default Knative event broker. So how do we put all these things together? It's just a handful of command line calls. First of all, to deploy the two functions, we used to use the func deploy command. So we deploy the viewer function and the translate function. Then to create an event broker, we can just use Kn broker create default to create a default N memory event broker. Then we use Kn trigger create to create the two triggers. We give them names. The dash S flag tells us where the events are going to go. So the first one is sending events to the translate function and filtering on type Twitter search source. The second one is sending events to the viewer function. That's the result that's coming back from the translate goes to the viewer function filtering on type Knative function translation. Then finally we use the common kubectl apply to apply that YAML that is our Twitter search camlet. If everything works as expected, we get scrolling tweets on our screen with the viewer function as we tail the logs. In this case, it's not actually happening in real life because this isn't a demo. This is a screen capture of the last time I did this before coming up here. That's it. Thank you very much. There's a QR code if you're interested in checking out this demo yourself. A couple of links there. Hope you have a fantastic KubeCon. This has been an honor. Thanks.